Fundamentos da Programação 12:
• Paradigmas da programação
• Programação orientada por objectos
• Modularização em pacotes
Apresentação 12 da unidade curricular de Fundamentos de Programação da Universidade Europeia. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI do ISCTE-IUL, incluindo Luís Nunes, Ricardo Ribeiro, André Santos e o próprio Manuel Menezes de Sequeira.
4. Programação esparguete
Programação estruturada
Programação procedimental
Programação baseada em objectos
Programação orientada por objectos
2013/2014 Fundamentos de Programação 4
Progresso
5. Forma
Instâncias de tipos escalares ou arrays
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»)
2013/2014 Fundamentos de Programação 5
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.
6. Forma
Instâncias de tipos escalares ou arrays
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 o mundo, modificando-o
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
2013/2014 Fundamentos de Programação 6
7. Forma
Instâncias de tipos escalares, de arrays ou deTAD
Instruções organizadas em estruturas de controlo
Instruções e estruturas de controlo organizadas em rotinas
Rotinas relacionadas organizadas emTAD
Modularização
TAD – Conjunto de dados e operações
Operações – Rotinas que operam sobre instâncias deTAD
Melhorias
Melhora encapsulamento (dados e operações relacionadas)
Possibilita ocultação da informação
Muda perspectiva sobre os problemas
2013/2014 Fundamentos de Programação 7
Ou programação centrada
nos dados.
Tipos
abstractos de
dados
8. Forma
Instâncias de classes (objectos), de tipos escalares, de arrays ou deTAD
Instruções organizadas em estruturas de controlo
Instruções e estruturas de controlo organizadas em rotinas
Rotinas relacionadas organizadas emTAD
Rotinas relacionadas organizadas em classes
Modularização
Classes – Modelos para objectos com um dado comportamento
TAD – Conjuntos de dados e operações
Operações – Rotinas que operam sobre instâncias deTAD ou sobre objectos
Métodos – Implementação das operações
Melhorias
Introduz noções de extensão e especialização
Muda drasticamente perspectiva sobre os problemas
2013/2014 Fundamentos de Programação 8
10. Assenta sobre
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
2013/2014 Fundamentos de Programação 10
11. Interface
Operações – Implementadas por um ou mais métodos
Propriedades – Podem ou não ser implementadas
usando atributos
Implementação
Métodos – Implementação de operações
Métodos auxiliares – Usados pelos outros métodos
Atributos – Dados que são parte da implementação
2013/2014 Fundamentos de Programação 11
12. Tudo (ou quase) são objectos
Objectos têm
responsabilidades,
comportamentos e
propriedades
Organização de programas reflecte realidade…
…mas os objectos são personificados
2013/2014 Fundamentos de Programação 12
Na linguagem usada pelos programadores é muito comum e útil a
prosopopeia. Por exemplo, «depois pede-se a rapidez ao carro»
corresponde a car.speed() ou car.getSpeed().
13. 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?
2013/2014 Fundamentos de Programação 13
14. Classes
São tipos
São modelo para objectos com características comuns
Declaram-se ou definem-se
Definem conjunto de possíveis objectos
São nomes comuns: humano, carro, …
Objectos
São instâncias de classes
Constroem-se
São nomes próprios: Manuel Silva, o carro do Manuel, …
2013/2014 Fundamentos de Programação 14
15. Classes
Favorecem abstracção
Permitem encapsulamento
Possibilitam reutilização
Objectos
Representam entidades
▪ reais (e.g., carro) ou
▪ virtuais (e.g., compra)
Têm identidade
Têm estado observável através da interface
2013/2014 Fundamentos de Programação 15
Consumidor só conhece
interface.
Implementação oculta.
Por especialização ou por
instanciação.
16. Tipos de referência
Classes de identidade ou referência
▪ Identidade é relevante
▪ Igualdade usualmente não é relevante
Classes de igualdade ou valor
▪ Identidade não é relevante
▪ Igualdade é relevante
Tipos de valor
Identidade não é relevante
Igualdade é relevante
2013/2014 Fundamentos de Programação 16
E.g., classes Java.
Tipos primitivos em
Java.
E.g., String,
Rational, Point
E.g., Person, Gang,
Car
17. Definem características
(propriedades e
operações) comuns a
todas as instâncias
2013/2014 Fundamentos de Programação 17
Car
- licenseNumber : String
- model : String
- yearBuilt : int
- lastInspectionDate : LocalDate
+ getLicenseNumber() : String
+ getModel() : String
+ getLastInspectionDate() : LocalDate
+ getYearAge() : int
+ getNextInspectionDate() : LocalDate
+ isInspected() : boolean
+ setInspectedToday()
Propriedades
Operação
implementaçãointerface
18. Instâncias de classe de
referência com
identidade e com
propriedades bem
definidas
2013/2014 Fundamentos de Programação 18
johnsCar : Car
licenseNumber = 00-AA-00
model =VW-GTI-TDI-SLK
yearBuilt = 2005
lastInspectionDate = 2014-11-20
19. Operações
Parte da interface da classe
São invocadas
Métodos
Parte da implementação da classe
São executados quando se invoca a sua operação
Uma única operação pode ser implementada por
vários métodos
2013/2014 Fundamentos de Programação 19
Como? Usando polimorfismo de
subtipos, que se verá mais tarde.
20. Inicializam instâncias/objectos em construção
Colocam instâncias/objectos em estado
inicial válido, i.e., cumprindo a condição
invariante de instância
2013/2014 Fundamentos de Programação 20
21. Modificadoras – Alteram estado do objecto
(procedimentos)
Não modificadoras – Não alteram estado do
objecto
Inspectoras – Devolvem propriedade do objecto e não
têm efeitos laterais (funções)
«Alter-modificadoras» –Alteram estado do programa
ou do seu ambiente (procedimentos) sem alterar
estado do objecto
2013/2014 Fundamentos de Programação 21
22. Cada operação deve ter um objectivo (ou uma
função) único e bem definido
Operações inspectoras – Nome reflecte o que
devolvem
Outras operações – Nome reflecte acção realizada
Uma operação não deve ser simultaneamente
inspectora e modificadora (função e
procedimento)
2013/2014 Fundamentos de Programação 22
23. Classes são «pseudo-objectos» fábrica das suas instâncias
«Pseudo-objectos» fábricas têm características de classe
Declaração de atributos e métodos de classe: com static
Boas práticas
Evitar características de classe, em geral
Usar para definir constantes
Exemplo
Math.PI
2013/2014 Fundamentos de Programação 23
Por oposição às
características de
instância.
24. final Car johnsCar = new Car("00-AA-00", …);
final Car janesCar = johnsCar;
final Car fredsCar = new Car("01-35-AP", …);
2013/2014 Fundamentos de Programação 24
johnsCar, janesCar : Car
licenseNumber = 00-AA-00
…
fredsCar : Car
licenseNumber = 01-35-AP
…
25. final Car johnsCar = new Car("00-AA-00", …);
final Car janesCar = johnsCar;
final Car fredsCar = new Car("01-35-AP", …);
2013/2014 Fundamentos de Programação 25
johnsCar : «ref» Car
: Car
licenseNumber = 00-aa-00
…
: Car
licenseNumber = 01-35-AP
…
janesCar : «ref» Car
fredsCar : «ref» Car
Referências: Objectos:
26. 2013/2014 Fundamentos de Programação 26
johnsCar : Car
licenseNumber = 00-aa-00
model =VW-GTI-TDI-SLK
yearBuilt = 2005
lastInspectionDate = 2013-11-20
Car
- licenseNumber : String
…
+ getLicenseNumber() : String
…
Nome da
classe
AtributosOperações
Acesso Nome do objecto
Atributos Valores dos atributos
27. Classe variável;
variável = null;
Classe outraVariável = null;
Classe aindaOutraVariável =
new Classe(…);
2013/2014 Fundamentos de Programação 27
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.
Construçãodareferê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:
int anInteger;
anInteger = 10;
int anotherInteger = 20;
Construção do novo objecto
Construçãodareferência
28. Usa-se operador . (ponto)
Objecto (característica de instância)
referênciaParaObjecto.característica
Classe (característica de classe)
Classe.característica
2013/2014 Fundamentos de Programação 28
Se a referência for nula
(null), é lançada a excepção
NullPointerException.
Ou membros.
29. Tudo o que pode ser privado deve ser privado!
Regras gerais
Todos os atributos devem ser privados
Os construtores são usualmente públicos
As operações devem ser públicas
Os métodos auxiliares devem ser privados
2013/2014 Fundamentos de Programação 29
As constantes, pelo contrário,
podem e muitas vezes devem ser
públicas.
30. Interface
Operações não privadas
Constantes não privadas
Implementação
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
2013/2014 Fundamentos de Programação 30
não privado ≠ público
etc.
31. 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
2013/2014 Fundamentos de Programação 31
Acessibilidadecrescente
Há promiscuidade entre objectos da
mesma classe! Cuidado!
Que é isto? Próximo diapositivo…
33. Pacote Pacote
2013/2014 Fundamentos de Programação 33
Classe
Rotina
Rotina
Rotina
Classe
Rotina Rotina
Rotina
Classe
Rotina
Rotina
Rotina
Rotina
Classe
Rotina
Rotina
Classe
Rotina
Rotina
Rotina
Rotina
34. 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
Prefixo é nome DNS invertido (e.g., pt.europeia)
Elementos após prefixo podem ser unidades
organizacionais (e.g., pt.europeia.fp)
2013/2014 Fundamentos de Programação 34
35. 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)
2013/2014 Fundamentos de Programação 35
36. java
lang
util
org
junit
omg
pt
europeia
▪ fp
▪ eda
Hierarquia aberta
Não têm declaração isolada
Cada ficheiro .java declara o pacote a que
pertence
2013/2014 Fundamentos de Programação 36
package pt.europeia.fp
public class Game {
…
}
Game.java
package pt.europeia.fp
public class Player {
…
}
Player.java
37. 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
2013/2014 Fundamentos de Programação 37
38. 2013/2014 Fundamentos de Programação 38
The type top.AtTop is not visibleThe type top.bottom.AtBottom is not visible
39. Uma só classe pública por ficheiro
Classe pública em ficheiro com mesmo nome
Número arbitrário de classes privadas de
pacote (package-private) por ficheiro, mas…
Boa prática: Uma só classe por ficheiro!
2013/2014 Fundamentos de Programação 39
40. Usualmente, à hierarquia de pacotes
corresponde uma hierarquia de directórios
com os ficheiros correspondentes
2013/2014 Fundamentos de Programação 40
Depende da
implementação do Java.
No Eclipse
(directórios/pastas)
No Eclipse
(pacotes)
41. Classes são modelos
Objectos são instâncias classes de referência
Em Java variáveis não são instâncias de classes,
mas sim referências para instâncias de classes
Tudo o que pode ser privado deve ser privado
Classes devem organizar-se em pacotes
2013/2014 Fundamentos de Programação 41
42. Paradigmas da programação
Programação orientada por objectos
Modularização em pacotes
2013/2014 Fundamentos de Programação 42
Notas do Editor
Prosopopeia - Figura em que o orador atribui o dom da palavra, o sentimento ou a acção a seres inanimados ou irracionais, aos mortos ou aos ausentes. "prosopopeia", in Dicionário Priberam da Língua Portuguesa [em linha], 2008-2013, http://www.priberam.pt/dlpo/prosopopeia [consultado em 09-03-2015].
As classes que não estão definidas dentro de outras classes (outer) só podem ser ou públicas ou privadas de pacote.