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