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

Programação Orientada por Objectos - Aula 1

Embed Size (px)

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.

Citation preview

Page 1: 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

Page 2: Programação Orientada por Objectos - Aula 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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