42
Apresentação 12 Paradigmas da programação Programação orientada por objectos Modularização em pacotes

12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 1: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

Apresentação 12

Paradigmas da programaçãoProgramação orientada por objectosModularização em pacotes

Page 2: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

Fundamentos de Programação 2

Da apresentação anterior...

Enumerações

Instrução de selecção switch

Gama limitada dos tipos inteiros

2013/2014

Page 3: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

Paradigmas de programação

2013/2014 Fundamentos de Programação 3

Page 4: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 5: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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.

Page 6: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programaçã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

Page 7: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 8: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 9: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

Programação orientada por objectos

2013/2014 Fundamentos de Programação 9

Page 10: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 11: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 12: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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().

Page 13: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 14: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 15: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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.

Page 16: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programaçã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

Page 17: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 18: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 19: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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.

Page 20: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 21: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 22: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 23: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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.

Page 24: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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…

Page 25: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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:

Page 26: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 27: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 28: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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.

Page 29: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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.

Page 30: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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.

Page 31: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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…

Page 32: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

Modularização em pacotes

2013/2014 Fundamentos de Programação 32

Page 33: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 34: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 35: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 36: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 37: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 38: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 39: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 40: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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)

Page 41: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

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

Page 42: 12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

Sumário

Paradigmas da programação

Programação orientada por objectos

Modularização em pacotes

2013/2014 Fundamentos de Programação 42