Upload
manuel-menezes-de-sequeira
View
362
Download
5
Embed Size (px)
DESCRIPTION
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.
Citation preview
Apresentação 12
Paradigmas da programaçãoProgramação orientada por objectosModularização em pacotes
Fundamentos de Programação 2
Da apresentação anterior...
Enumerações
Instrução de selecção switch
Gama limitada dos tipos inteiros
2013/2014
Paradigmas de programação
2013/2014 Fundamentos de Programação 3
Paradigmas de programação
Programação esparguete
Programação estruturada
Programação procedimental
Programação baseada em objectos
Programação orientada por objectos2013/2014 Fundamentos de Programação 4
Pro
gre
sso
Fundamentos de Programação 5
Programação estruturada 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
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.
Programação procedimental 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
Fundamentos de Programação 7
Programação baseada em objectos
Forma Instâncias de tipos escalares, de arrays ou de TAD 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 da informação Muda perspectiva sobre os problemas
2013/2014
Ou programação centrada nos dados.
Tipos abstractos de dados
Fundamentos de Programação 8
Programação orientada por objectos
Forma Instâncias de classes (objectos), de tipos escalares, de arrays ou de TAD Instruções organizadas em estruturas de controlo Instruções e estruturas de controlo organizadas em rotinas Rotinas relacionadas organizadas em TAD 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 de TAD 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
Programação orientada por objectos
2013/2014 Fundamentos de Programação 9
Fundamentos de Programação 10
Programação orientada por objectos
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 11
Encapsulamento
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 12
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 personificados2013/2014
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().
Fundamentos de Programação 13
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?
2013/2014
Fundamentos de Programação 14
Classes e objectos
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 15
Classes e objectos
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
Consumidor só conhece interface.
Implementação oculta.
Por especialização ou por instanciação.
Fundamentos de Programação 16
Tipos de referência e de valor vs. classes de referência e de valor
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
E.g., classes Java.
Tipos primitivos em Java.
E.g., String, Rational, Point
E.g., Person, Gang, Car
Classes (de referência) em Java
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
imple
menta
ção
inte
rface
Objectos em Java
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-00model = VW-GTI-TDI-SLKyearBuilt = 2005lastInspectionDate = 2014-11-20
Fundamentos de Programação 19
Operações e métodos em Java 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
Como? Usando polimorfismo de subtipos, que se verá mais tarde.
Fundamentos de Programação 20
Construtores em Java
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 21
Operações em Java
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 22
Operações em Java: boas práticas
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 23
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
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
Por oposição às características de instância.
Referências e objectos
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 : CarlicenseNumber = 00-AA-00…
fredsCar : CarlicenseNumber = 01-35-AP…
Referências e objectos
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
: CarlicenseNumber = 00-aa-00…
: CarlicenseNumber = 01-35-AP…
janesCar : «ref» Car
fredsCar : «ref» Car
Referências:
Objectos:
UML = Unified Modelling Language
2013/2014 Fundamentos de Programação 26
johnsCar : Car
licenseNumber = 00-aa-00model = VW-GTI-TDI-SLKyearBuilt = 2005lastInspectionDate = 2013-11-20
Car
- licenseNumber : String…
+ getLicenseNumber() : String…
Nome da classe
Atr
ibuto
sO
pera
ções
Acesso
Nome do objecto
Atr
ibuto
sValores dos atributos
Fundamentos de Programação 27
Referências e objectos: declaração e construção
Classe variável;
variável = null;
Classe outraVariável = null;
Classe aindaOutraVariável = new Classe(…);
2013/2014
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.
Const
ruçã
o d
a
refe
rê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 objectoC
onst
ruçã
o d
a
refe
rênci
a
Fundamentos de Programação 28
Acesso a características
Usa-se operador . (ponto)
Objecto (característica de instância)
referênciaParaObjecto.característica
Classe (característica de classe)
Classe.característica
2013/2014
Se a referência for nula (null), é lançada a excepção NullPointerException.
Ou membros.
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 As operações devem ser públicas Os métodos auxiliares devem ser
privados2013/2014 Fundamentos de Programação 29
As constantes, pelo contrário, podem e muitas vezes devem ser públicas.
Fundamentos de Programação 30
Classes são módulos
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
não privado ≠ público
etc.
Fundamentos de Programação 31
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 universal2013/2014
Ace
ssib
ilidad
e c
resc
ente Há promiscuidade entre
objectos da mesma classe! Cuidado!
Que é isto? Próximo diapositivo…
Modularização em pacotes
2013/2014 Fundamentos de Programação 32
Pacote Pacote
Unidades de modularização Java
2013/2014 Fundamentos de Programação 33
Classe
Rotina
RotinaRotina
Classe
Rotina Rotina
Rotina
Classe
RotinaRotina
RotinaRotina
Classe
Rotina
Rotina
Classe
RotinaRotina
Rotina
Rotina
Fundamentos de Programação 34
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 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 35
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)2013/2014
Fundamentos de Programação 36
Pacotes: organização hierárquica 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 pertence2013/2014
package pt.europeia.fp
public class Game { …}
Game.java
package pt.europeia.fp
public class Player { …}
Player.java
Fundamentos de Programação 37
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
2013/2014
Pacotes: organização hierárquica
2013/2014 Fundamentos de Programação 38
The type top.AtTop is not visible
The type top.bottom.AtBottom is not visible
Fundamentos de Programação 39
Ficheiros
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 40
Directórios
Usualmente, à hierarquia de pacotes corresponde uma hierarquia de directórios com os ficheiros correspondentes
2013/2014
Depende da implementação do Java.
No Eclipse(directórios/pastas)
No Eclipse(pacotes)
A reter
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
Sumário
Paradigmas da programação
Programação orientada por objectos
Modularização em pacotes
2013/2014 Fundamentos de Programação 42