Programação Orientada por Objectos - Aula 1
-
Upload
manuel-menezes-de-sequeira -
Category
Education
-
view
5.129 -
download
2
description
Transcript of Programação Orientada por Objectos - Aula 1
Introdução à programação orientada por objectosClasses, objectos e referências (revisão)Modularização em pacotesOrganização em ficheiros e directórios
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.
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
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
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
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
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
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().
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
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
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.
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
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
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.
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
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
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
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.
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…
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:
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
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
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.
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.
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.
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…
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
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
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
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
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
28-02-2010 Programação Orientada para Objectos 33
The type top.AtTop is not visibleThe type top.bottom.AtBottom is not visible
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
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)
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
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
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