programação orientada por objectos - aula 1
DESCRIPTION
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.TRANSCRIPT
![Page 1: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/1.jpg)
Introdução à programação orientada por objectosClasses, objectos e referências (revisão)Modularização em pacotesOrganização em ficheiros e directórios
![Page 2: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/2.jpg)
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.
![Page 3: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/3.jpg)
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
28-02-2010 Programação Orientada para Objectos 3
![Page 4: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/4.jpg)
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
![Page 5: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/5.jpg)
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
![Page 6: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/6.jpg)
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
![Page 7: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/7.jpg)
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
![Page 8: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/8.jpg)
Tudo (ou quase) são objectos
Objectos têm responsabilidades, comportamentos e propriedades
Organização de programas reflecte realidade…
…mas os objectos são personalizados2008/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().
![Page 9: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/9.jpg)
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
![Page 10: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/10.jpg)
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
![Page 11: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/11.jpg)
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.
![Page 12: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/12.jpg)
Definem conjunto de características (propriedades e operações) comuns a todas as suas instâncias.
28-02-2010 Programação Orientada para Objectos 13
Car
- licenseNumber : String- model : String- yearBuilt : int- lastInspectionDate : Date
+ getLicenseNumber() : String+ getModel() : String+ getLastInspectionDate() : Date+ getYearAge() : int+ getNextInspectionDate() : Date+ isInspected() : boolean+ setInspectedToday()
Propriedades
Operação
imp
lem
en
taçã
oin
terf
ace
![Page 13: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/13.jpg)
Instâncias de uma classe com valores específicos nos seus atributos e, por isso, com propriedades bem definidas.
28-02-2010 Programação Orientada para Objectos 14
johnsCar : Car
licenseNumber = 00-aa-00model = VW-GTI-TDI-SLKyearBuilt = 2005lastInspectionDate = 2009-11-20
![Page 14: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/14.jpg)
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.
![Page 15: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/15.jpg)
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
![Page 16: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/16.jpg)
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
![Page 17: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/17.jpg)
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
![Page 18: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/18.jpg)
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.
![Page 19: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/19.jpg)
Car johnsCar = new Car("00-aa-00", …);Car janesCar = johnsCar;Car fredsCar = new Car(johnsCar);
28-02-2010 Programação Orientada para Objectos 20
Construtor por cópia!
Hmmm…. Mesma matrícula??
johnsCar, janesCar : Car
licenseNumber = 00-aa-00…
fredsCar : Car
licenseNumber = 00-aa-00…
![Page 20: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/20.jpg)
Car johnsCar = new Car("00-aa-00", …);Car janesCar = johnsCar;Car fredsCar = new Car(johnsCar);
28-02-2010 Programação Orientada para Objectos 21
johnsCar : «ref» Car
: Car
licenseNumber = 00-aa-00…
: Car
licenseNumber = 00-aa-00…
janesCar : «ref» Car
fredsCar : «ref» Car
Referências: Objectos:
![Page 21: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/21.jpg)
28-02-2010 Programação Orientada para Objectos 22
johnsCar : Car
licenseNumber = 00-aa-00model = VW-GTI-TDI-SLKyearBuilt = 2005lastInspectionDate = 2009-11-20
Car
- licenseNumber : String…
+ getLicenseNumber() : String…
Nome
Atr
ibu
tos
Op
eraç
ões
Acesso Nome do objecto
Atr
ibu
tos
Valores dos atributos
![Page 22: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/22.jpg)
Classe variável;
variável = null;
Classe outraVariável = null;
Classe aindaOutraVariável =new Classe(…);
2008/2009 Programação Orientada por Objectos 23
Inicialização da referência com o valor especial null, que indica que referência não referencia qualquer objecto.
Declaração da referência variável, não inicializada, capaz de referenciar objectos da classe Classe.
Construção de um novo objecto e de uma referência que o referencia.
Construção de uma referência com valor inicial nulo.
Co
nst
ruçã
o d
a re
ferê
nci
a
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:
int anInteger;
anInteger = 10;
int anotherInteger = 20;
Construção do novo objecto
Co
nst
ruçã
o d
a re
ferê
nci
a
![Page 23: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/23.jpg)
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.
![Page 24: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/24.jpg)
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.
![Page 25: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/25.jpg)
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.
![Page 26: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/26.jpg)
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
Ace
ssib
ilid
ade
cres
cen
te Há promiscuidade entre objectos da mesma classe! Cuidado!
Que é isto? Próximo diapositivo…
![Page 27: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/27.jpg)
Pacote Pacote
28-02-2010 Programação Orientada para Objectos 28
Classe
Rotina
RotinaRotina
Classe
Rotina Rotina
Rotina
Classe
RotinaRotina
RotinaRotina
Classe
Rotina
Rotina
Classe
Rotina
Rotina
Rotina
Rotina
![Page 28: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/28.jpg)
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
![Page 29: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/29.jpg)
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
![Page 30: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/30.jpg)
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
package pt.iscte.dcti.poo
class Game {…
}
Game.java
package pt.iscte.dcti.poo
class Player {…
}
Player.java
![Page 31: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/31.jpg)
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
![Page 32: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/32.jpg)
28-02-2010 Programação Orientada para Objectos 33
The type top.AtTop is not visibleThe type top.bottom.AtBottom is not visible
![Page 33: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/33.jpg)
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
![Page 34: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/34.jpg)
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)
![Page 35: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/35.jpg)
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
28-02-2010 Programação Orientada para Objectos 36
![Page 36: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/36.jpg)
Capítulo 8 do livro:
Y. Daniel Liang, Introduction to Java Programming, 7.ª edição, Prentice-Hall, 2008.ISBN: 978-0-13-605966-0
28-02-2010 Programação Orientada para Objectos 37
![Page 37: Programação Orientada por Objectos - Aula 1](https://reader035.vdocuments.pub/reader035/viewer/2022062514/559704681a28ab674f8b47b8/html5/thumbnails/37.jpg)
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
28-02-2010 Programação Orientada para Objectos 38