Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Programação Orientada por Objectos - Aula 1

5,707 views

Published on

Aula teórica 1 da unidade (disciplina) de Programação Orientada por Objectos dos cursos de LIGE, LEI e LETI no ISCTE-IUL no 2.º semestre do ano lectivo de 2009/2010.

Published in: Education, Technology
  • Be the first to comment

Programação Orientada por Objectos - Aula 1

  1. 1. Aula 1<br />Introdução à programação orientada por objectos<br />Classes, objectos e referências (revisão)<br />Modularização em pacotes<br />Organização em ficheiros e directórios<br />
  2. 2. Programação estruturada<br />Forma<br />Instâncias de tipos escalares ou matriciais<br />Instruções organizadas em estruturas de controlo<br />Sem modularização<br />Melhorias<br />Melhora estruturação do fluxo de controlo dos programas<br />Possibilita raciocínio formal acerca de programas<br />Aumenta legibilidade dos programas face ao passado (programação “esparguete”)<br />2008/2009<br />Programação Orientada por Objectos<br />2<br />Organização do código em módulos, i.e., “cápsulas” com objectivos bem definidos contendo uma implementação oculta e expondo ao exterior uma interface. A modularização favorece a abstracção.<br />
  3. 3. Programação procedimental<br />Forma<br />Instâncias de tipos escalares ou vectoriais<br />Instruções organizadas em estruturas de controlo<br />Instruções e estruturas de controlo organizadas em rotinas<br />Modularização em rotinas<br />Funções – Devolvem resultado de um cálculo<br />Procedimentos – Agem sobre dados, modificando-os<br />Melhorias<br />Possibilita encapsulamento<br />Facilita reutilização<br />Melhora localização de erros e facilita manutenção<br />Possibilita maximização da coesão e minimização das ligações<br />2010-03-30<br />Programação Orientada para Objectos<br />3<br />
  4. 4. Programação baseada em objectos ou centrada nos dados<br />Forma<br />Instâncias de tipos escalares ou vectoriais, ou de TAD (tipos abstractos de dados)<br />Instruções organizadas em estruturas de controlo<br />Instruções e estruturas de controlo organizadas em rotinas<br />Rotinas relacionadas organizadas em TAD<br />Modularização<br />TAD – Conjunto de dados e operações<br />Operações – Rotinas que operam sobre instâncias de TAD<br />Melhorias<br />Melhora encapsulamento (dados e operações relacionadas)<br />Possibilita ocultação dos dados<br />Muda perspectiva sobre os problemas<br />2008/2009<br />Programação Orientada por Objectos<br />4<br />
  5. 5. Programação orientada por objectos<br />Forma<br />Instâncias de classes (objectos), de tipos escalares ou vectoriais, ou de TAD (tipos abstractos de dados)<br />Instruções organizadas em estruturas de controlo<br />Instruções e estruturas de controlo organizadas em rotinas<br />Rotinas relacionadas organizadas em TAD<br />Operações relacionadas organizadas em classes<br />Modularização<br />Classes – Modelos para objectos com um dado comportamento<br />TAD – Conjunto de dados e operações<br />Operações – Rotinas que operam sobre instâncias de TAD<br />Métodos – Implementação das operações<br />Melhorias<br />Introduz noções de extensão e especialização<br />Muda drasticamente perspectiva sobre os problemas<br />2008/2009<br />Programação Orientada por Objectos<br />5<br />
  6. 6. Programação orientada por objectos: classes<br />Paradigmas usados<br />Programação estruturada – Controlo de fluxo<br />Programação procedimental – Rotinas<br />Programação centrada nos dados – TAD e operações<br />Vantagens<br />Melhor modularização<br />Melhor encapsulamento<br />Maior possibilidade de reutilização<br />Possibilidade de extensão e especialização<br />Maior expressividade<br />Maior flexibilidade<br />Maior robustez<br />2008/2009<br />Programação Orientada por Objectos<br />6<br />
  7. 7. Programação orientada por objectos: encapsulamento<br />Interface:<br />Operações – Implementadas em um ou mais métodos<br />Propriedades – Podem ou não ser implementadas usando atributos<br />Implementação<br />Métodos – Implementação de operações<br />Atributos – Dados que fazem parte da implementação da classe<br />2008/2009<br />Programação Orientada por Objectos<br />7<br />
  8. 8. Programação orientada por objectos: abordagem<br />Tudo (ou quase) são objectos<br />Objectos têm responsabilidades, comportamentos e propriedades<br />Organização de programas reflecte realidade…<br />…mas os objectos são personalizados<br />2008/2009<br />Programação Orientada por Objectos<br />8<br />Na linguagem usada pelos programadores é muito comum e útil a prosopopeia. Por exemplo, “depois pede-se o nome ao aluno” corresponde a student.name() ou student.getName().<br />
  9. 9. Programação orientada por objectos: análise e desenho<br />Análise do problema<br />Que objectos existem?<br />Que responsabilidades têm?<br />Como colaboram?<br />Como classificar os objectos?<br />Desenho da solução<br />Que classes definir?<br />Que objectos construir?<br />Que responsabilidades lhes atribuir?<br />De que forma os fazer colaborar?<br />2008/2009<br />Programação Orientada por Objectos<br />9<br />
  10. 10. Classes e objectos<br />Classes<br />São tipos<br />São modelo ou projecto para construção de objectos com características comuns<br />Declaram-se ou definem-se<br />Definem conjunto de possíveis objectos<br />Exemplos: humano, carro<br />Objectos<br />São instâncias de classes<br />Constroem-se<br />Exemplos: Manuel Silva, o carro do Manuel Silva<br />2008/2009<br />Programação Orientada por Objectos<br />10<br />
  11. 11. Classes e objectos<br />Classes<br />Representam objectos com características comuns<br />Favorecem abstracção (consumidor só conhece interface)<br />Permitem encapsulamento (implementação oculta)<br />Possibilitam reutilização (por especialização ou instanciação)<br />Objectos<br />Modelam ou representam entidades reais (carro) ou virtuais (compra)<br />Têm identidade própria<br />Têm estado total ou parcialmente observável através da interface<br />2008/2009<br />Programação Orientada por Objectos<br />11<br />
  12. 12. Tipos de referência e tipos de valor<br />Tipos de referência<br />Identidade é relevante<br />Igualdade usualmente não é relevante<br />Tipos de valor<br />Igualdade é relevante<br />Identidade não é relevante<br />2008/2009<br />Programação Orientada por Objectos<br />12<br />Classes Java.<br />Tipos primitivos em Java.<br />
  13. 13. Classes em Java<br />Definem conjunto de características (propriedades e operações) comuns a todas as suas instâncias.<br />2010-03-30<br />Programação Orientada para Objectos<br />13<br />Car<br />- licenseNumber : String<br />- model : String<br />- yearBuilt : int<br />- lastInspectionDate : Date<br />implementação<br />interface<br />+ getLicenseNumber() : String<br />+ getModel() : String<br />+ getLastInspectionDate() : Date<br />+ getYearAge() : int<br />+ getNextInspectionDate() : Date<br />+ isInspected() : boolean<br />+ setInspectedToday()<br />Propriedades<br />Operação<br />
  14. 14. Objectos em Java<br />Instâncias de uma classe com valores específicos nos seus atributos e, por isso, com propriedades bem definidas.<br />2010-03-30<br />Programação Orientada para Objectos<br />14<br />johnsCar : Car<br />licenseNumber = 00-aa-00<br />model = VW-GTI-TDI-SLK<br />yearBuilt = 2005<br />lastInspectionDate = 2009-11-20<br />
  15. 15. Operações e métodos em Java<br />Operações<br />Parte da interface da classe <br />Invocam-se<br />Métodos<br />Parte da implementação da classe<br />Executados quando se invoca a operação correspondente<br />Uma única operação pode ser implementada por vários métodos<br />2008/2009<br />Programação Orientada por Objectos<br />15<br />Como? Usando polimorfismo de subtipos, que se verá mais tarde.<br />
  16. 16. Construtores em Java<br />Inicializam objectos quando estes são construídos<br />Colocam objectos num estado inicial válido (cumprindo o a condição invariante de instância)<br />2008/2009<br />Programação Orientada por Objectos<br />16<br />
  17. 17. Operações em Java<br />Modificadoras – Alteram o estado do objecto e possivelmente do resto do programa ou seu ambiente (são procedimentos)<br />Não modificadoras – Não alteram o estado do objecto<br />Inspectoras – Devolvem uma qualquer propriedade do objecto e não têm efeitos laterais (são funções)<br />“Alter-modificadoras” – Alteram o estado do programa ou do seu ambiente sem alterar o objecto (são procedimentos)<br />2008/2009<br />Programação Orientada por Objectos<br />17<br />
  18. 18. Operações em Java: boas práticas<br />Cada operação deve ter um objectivo (uma função) único e bem definido<br />Operações inspectoras – Nome reflecte aquilo que devolvem<br />Outras operações – Nome reflecte a acção que realizam<br />Uma operação não deve tentar ser simultaneamente inspectora e modificadora (função e procedimento)<br />2008/2009<br />Programação Orientada por Objectos<br />18<br />
  19. 19. Características de classe<br />Classes são “pseudo-objectos” fábrica das suas instâncias<br />“Pseudo-objectos” fábricas têm características de classe<br />Em Java declaração de atributos e métodos de classe precede-se do qualificador static<br />Boas práticas<br />Evitar características de classe!<br />Usar apenas para definir constantes!<br />Exemplo<br />Math.PI<br />2008/2009<br />Programação Orientada por Objectos<br />19<br />Por oposição às características de instância.<br />
  20. 20. Referências e objectos<br />CarjohnsCar = newCar("00-aa-00", …);<br />CarjanesCar = johnsCar;<br />CarfredsCar = newCar(johnsCar);<br />2010-03-30<br />Programação Orientada para Objectos<br />20<br />Construtor por cópia!<br />johnsCar, janesCar : Car<br />fredsCar : Car<br />licenseNumber = 00-aa-00<br />…<br />licenseNumber = 00-aa-00<br />…<br />Hmmm…. Mesma matrícula??<br />
  21. 21. Referências e objectos<br />CarjohnsCar = newCar("00-aa-00", …);<br />CarjanesCar = johnsCar;<br />CarfredsCar = newCar(johnsCar);<br />2010-03-30<br />Programação Orientada para Objectos<br />21<br />Referências:<br />Objectos:<br />johnsCar : «ref» Car<br />: Car<br />: Car<br />janesCar : «ref» Car<br />fredsCar : «ref» Car<br />licenseNumber = 00-aa-00<br />…<br />licenseNumber = 00-aa-00<br />…<br />
  22. 22. UML = UnifiedModellingLanguage<br />2010-03-30<br />Programação Orientada para Objectos<br />22<br />Nome<br />Acesso<br />Nome do objecto<br />Atributos<br />Atributos<br />Operações<br />johnsCar : Car<br />Car<br />licenseNumber = 00-aa-00<br />model = VW-GTI-TDI-SLK<br />yearBuilt = 2005<br />lastInspectionDate = 2009-11-20<br />- licenseNumber : String<br />…<br />Valores dos atributos<br />+ getLicenseNumber() : String<br />…<br />
  23. 23. Referências e objectos: declaração e construção<br />Classevariável;<br />variável = null;<br />Classe outraVariável = null;<br />ClasseaindaOutraVariável =<br />newClasse(…);<br />2008/2009<br />Programação Orientada por Objectos<br />23<br />Declaração da referência variável, não inicializada, capaz de referenciar objectos da classe Classe.<br />Construção do novo objecto<br />Construção da referência<br />Construção da referência<br />Atenção! Os tipos primitivos do Java (int, float, char, etc.) são tipos de valor. Não há referências para eles. As variáveis declaradas são uma instância do tipo primitivo. Por exemplo:<br />intanInteger;<br />anInteger = 10;<br />intanotherInteger = 20;<br />Inicialização da referência com o valor especial null, que indica que referência não referencia qualquer objecto.<br />Construção de uma referência com valor inicial nulo.<br />Construção de um novo objecto e de uma referência que o referencia.<br />
  24. 24. Acesso a características (ou membros)<br />Usa-se operador . (ponto)<br />Objecto (característica de instância)<br />referênciaParaObjecto.característica<br />Classe (característica de classe)<br />Classe.característica<br />2008/2009<br />Programação Orientada por Objectos<br />24<br />Se a referência for nula (null), é lançada a excepção NullPointerException.<br />
  25. 25. Princípio do encapsulamento<br />Tudo o que pode ser privado, deve ser privado!<br />Regras gerais<br />Todos os atributos devem ser privados<br />Os construtores são usualmente públicos<br />2008/2009<br />Programação Orientada por Objectos<br />25<br />As constantes, pelo contrário, podem e muitas vezes devem ser públicas.<br />
  26. 26. Classe é um módulo<br />Interface<br />Operações e métodos não privados<br />Constantes não privadas<br />Implementação<br />Operações e métodos privados<br />Atributos privados<br />Corpos dos métodos<br />Contrato<br />Pré e pós-condições das operações e métodos<br />Manual de utilização<br />Comentários de documentação da classe<br />Comentários de documentação de cada característica pública<br />2008/2009<br />Programação Orientada por Objectos<br />26<br />não privado ≠ público<br />etc.<br />
  27. 27. Categorias de acesso<br />Características ou membros podem ser<br />private – acesso apenas por outros membros da mesma classe<br />package-private (sem qualificador) – adicionalmente, acesso por membros de classes do mesmo pacote<br />protected – adicionalmente, acesso por membros de classes derivadas (a ver nas próximas aulas) <br />public – acesso universal<br />2008/2009<br />Programação Orientada por Objectos<br />27<br />Acessibilidade crescente<br />Há promiscuidade entre objectos da mesma classe! Cuidado!<br />Que é isto? Próximo diapositivo…<br />
  28. 28. Pacote<br />Pacote<br />Unidades de modularização em Java<br />2010-03-30<br />Programação OrientadaparaObjectos<br />28<br />Classe<br />Classe<br />Rotina<br />Rotina<br />Rotina<br />Rotina<br />Classe<br />Rotina<br />Rotina<br />Classe<br />Rotina<br />Rotina<br />Rotina<br />Rotina<br />Classe<br />Rotina<br />Rotina<br />Rotina<br />Rotina<br />Rotina<br />Rotina<br />
  29. 29. Pacotes<br />Conjuntos de classes com relação lógica forte entre si<br />Exemplos<br />java.util<br />org.junit<br />Convenções de nomes<br />Só minúsculas<br />Sem separação entre palavras<br />Abreviaturas e siglas aceitáveis<br />Primeiros elementos são nome DNS invertido (e.g., pt.iscte)<br />Restantes elementos podem designar unidades organizacionais (e.g., pt.iscte.dcti.poo)<br />2008/2009<br />Programação Orientada por Objectos<br />29<br />
  30. 30. Pacotes como módulos<br />Interface<br />Classes públicas<br />Membros não privados de classes públicas<br />Implementação<br />Para além da implementação das classes…<br />… todas as classes privadas de pacote (package-private)<br />2008/2009<br />Programação Orientada por Objectos<br />30<br />
  31. 31. Pacotes: organização hierárquica<br />java<br />lang<br />util<br />org<br />junit<br />omg<br />pt<br />iscte<br />dcti<br />ip<br />games<br />poo<br />Hierarquia aberta<br />Não têm declaração isolada<br />Cada ficheiro .java declara o pacote a que pertence<br />2008/2009<br />Programação Orientada por Objectos<br />31<br />Game.java<br />Player.java<br />packagept.iscte.dcti.poo<br />class Game {<br /> …<br />}<br />packagept.iscte.dcti.poo<br />classPlayer {<br /> …<br />}<br />
  32. 32. Pacotes: organização hierárquica<br />Relevante quanto a nomes<br />Organização lógica (como directórios)<br />Menor colisão de nomes<br />Irrelevante quanto a categorias acesso<br />Pacote e subpacote são independentes<br />Membros do subpacote não o são do pacote<br />Membros do pacote não o são do subpacote<br />2008/2009<br />Programação Orientada por Objectos<br />32<br />
  33. 33. Pacotes: organização hierárquica<br />2010-03-30<br />Programação Orientada para Objectos<br />33<br />The type top.AtTop is not visible<br />The type top.bottom.AtBottom is not visible<br />
  34. 34. Ficheiros<br />Uma só classe pública por ficheiro<br />Classe pública e seu ficheiro têm de ter o mesmo nome<br />Número arbitrário de classes privadas de pacote (package-private) por ficheiro, mas…<br />Boa prática: Uma só classe por ficheiro!<br />2008/2009<br />Programação Orientada por Objectos<br />34<br />
  35. 35. Directórios<br />Usualmente, à hierarquia de pacotes corresponde uma hierarquia de directórios com os ficheiros correspondentes<br />2008/2009<br />Programação Orientada por Objectos<br />35<br />Depende da implementação do Java.<br />No Explorer do Windows<br />(directórios)<br />No Eclipse<br />(pacotes)<br />
  36. 36. A reter<br />Uma classe é um modelo<br />Um objecto é uma instância de uma classe<br />Em Java não é possível declarar variáveis cujo tipo é uma classe: variáveis declaradas dessa forma são referências para objectos da classe<br />Tudo o que pode ser privado, deve ser privado<br />As classes devem ser organizadas em pacotes<br />2010-03-30<br />Programação Orientada para Objectos<br />36<br />
  37. 37. A ler para as próximas aulas ...<br />Capítulo 8 do livro:<br />Y. Daniel Liang, Introduction to Java Programming, 7.ª edição, Prentice-Hall, 2008.ISBN: 978-0-13-605966-0<br />2010-03-30<br />Programação Orientada para Objectos<br />37<br />
  38. 38. Sumário<br />Introdução à programação orientada por objectos<br />Classes, objectos e referências (revisão)<br />Modularização em pacotes<br />Organização em ficheiros e directórios<br />2010-03-30<br />Programação Orientada para Objectos<br />38<br />

×