10/03/06 edson scalabrin & alcides calsavara 1 fundamentos de engenharia de software edson e....

80
10/03/06 Edson Scalabrin & A lcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin [email protected] Telefone: 0xx-41-3271-1360 ORIENTAÇÃO A OBJEOTS

Upload: internet

Post on 16-Apr-2015

123 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara

1

Fundamentos de Engenharia de Software

Edson E. [email protected]

Telefone: 0xx-41-3271-1360

ORIENTAÇÃO A OBJEOTS

Page 2: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 2

Ementa

Diagrama de Classes; Padrões de Projeto Fundamentais: delegation, interface, marker interface.

Diagrama de Casos de Uso; Diagrama de Seqüência; Padrões de Projeto de Criação: factory method, abstract factory, prototype, singleton.

Diagrama de Estados; Diagrama de Atividades; Padrões de Projeto Estruturais: façade, composite, adapter.

Mapeamento de Objetos para Bases Relacionais; Padrões de Projeto Comportamentais: iterator, observer, comando.

Exercícios de Modelagem; Padrões de Concorrência: guarded suspension, producer-consumer.

Page 3: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 3

Conceitos fundamentais

Objeto Identidade Sistema Orientado a Objetos Encapsulamento Classificação/Instanciação Generalização/Especialização Herança Polimorfismo

Page 4: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 4

Identidade

Característica peculiar de um objeto que denota a existência em separado do objeto, mesmo que ele tenha os mesmos valores de atributos de outro objeto

Uma identificação única de cada objeto

Page 5: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 5

Sistema Orientado a Objetos

Um sistema orientado a objetos é uma coleção de objetos que interagem entre si.

Um objeto interage com outro através de uma mensagem que causa um estímulo.

Page 6: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 6

Interação entre Objetos

Page 7: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 7

Objeto

Um conceito, uma abstração, algo com limites e significados definidos para o problema em questão

Um objeto do mundo real Uma instância de uma classe

Um objeto possui um comportamento e um estado: o comportamento é forma como reage a estímulos o estado modifica-se de acordo com o comportamento

Page 8: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 8

Encapsulamento

Técnica de modelagem e implementação que separa os aspectos externos de um objeto dos detalhes internos de implementação do mesmo objeto

O estado de um objeto somente é acessível a partir da implementação de seu comportamento

Page 9: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 9

Comportamento e Estado

Page 10: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 10

Guarantia de Encapsulamento

Page 11: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 11

Comportamento

O comportamento de um objeto é definido por um conjunto de métodos

Um estímulo causa a execução de um método

Um estímulo pode ser uma invocação explícita de um método ou um evento relevante para o objeto

Page 12: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 12

Execução de Métodos

invocação evento

m ( ) e

m ( ) m ( )

Page 13: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 13

Estado

O estado de um objeto é composto por um conjunto de valores de atributos

Page 14: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 14

Classe

Uma classe descreve um conjunto de objetos: as instâncias da classe

Uma classe descreve o comportamento e a composição do estado de todos os seus objetos

Cada classe deve ter um nome distinto

Page 15: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 15

Classes e Objetos

Page 16: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 16

Tipos

Um tipo pode ser primitivo ou uma classe Uma classe é um tipo abstrato de dados

(ADT)

Page 17: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 17

Tipos Primitivos em Java

Os tipos primitivos incluem: números inteiros: byte, short, int, long números reais: float, double valores lógicos: boolean caracteres: char

Page 18: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 18

Classes de Bibliotecas

Exemplos: String Applet Button System

Page 19: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 19

Método

Cada método possui uma assinatura, um tipo de retorno (primitivo ou classe) e uma implementação

A assinatura de um método é composta por um nome e uma lista de parâmetros

Cada parâmetro tem um nome e um tipo (primitivo ou classe)

Page 20: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 20

Atributo

Cada atributo tem um nome e um tipo (primitivo ou classe)

Um objeto que possui um atributo cujo tipo é uma classe é um objeto composto, pois contém outro objeto

Page 21: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 21

Atributos em Classes e Objetos

b=truek=7

boolean bint k

int xString s

x =10

v=Pariss=

char[] v

A B

String

Page 22: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 22

Visibilidade e Encapsulamento

Um atributo deve preferencialmente ser qualificado como privado (private)

Um método pode ser tanto qualificado como privado como público (public)

O conjunto de métodos públicos de uma classe define a sua inteface

Page 23: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 23

Estrutura de uma Classe

Uma classe contém um conjunto de atributos e um conjunto de métodos os atributos devem ter nomes distintos os métodos devem ter assinaturas distintas

Cada objeto possui um conjunto próprio de valores dos atributos e o conjunto de métodos da classe

Page 24: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 24

Classe e Encapsulamento

Os valores dos atributos de um objeto somente são acessíveis a partir dos seus métodos

Page 25: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 25

Exemplo

Um veículo possui um código, um hodômetro, um cronômetro e um relógio.

O hodômetro registra a kilometragem do veículo, e pode ser zerado a qualquer momento.

O hodômetro exibe a kilometragem atual e a média de kilômetros por segundo, desde o último instante em que foi zerado

A kilometragem registrada pelo hodômetro avança a medida que o veículo avança.

Page 26: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 26

Exemplo (cont.)

O cronômetro já fica ativo no momento da sua criação.

O cronômetro pode ser parado e reativado a qualquer instante.

O cronômetro exibe o número de milisegundos decorridos desde o instante da sua última ativação.

O relógio exibe a hora atual, com precisão de minutos.

Page 27: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

27Edson Scalabrin & Alcides Calsavara 10/03/06

:Veículo

codigo = 13hodometrocronometrorelogio

avance(distancia : int)exiba()comeceCronometro()pareCronometro()zereCronometro()zereHodometro()Veiculo(c : int)

:Instante

T

diferenca(i : Instante) : intdigaHoras() : intdigaMinutos() : int

:Date

:Instante

T

diferenca(i : Instante) : intdigaHoras() : intdigaMinutos() : int

:Date

:Instante

T

diferenca(i : Instante) : intdigaHoras() : intdigaMinutos() : int

:Date

:Hodometro

kilometragem = 283momentoZeragemrelogio

zere()kilometragemMedia() : doubleavance(distancia : int)exiba()Hodometro(r : Relogio)

:Cronometro

ativo = truemomentoIniciomomentoParadarelogio

comece()pare()exiba()Cronometro(r : Relogio)

:Relogio

exiba()digaInstante() : Instante

Representação de Objetos (usando UML)

“main”

Page 28: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 28

Exemplo de classe em UML

MOTO

Marca: Stringcor: Stringestado: boolean

ligaMotor(),mostraAtributos()

Nome da classe

Atributos + tipos

Métodos

Page 29: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 29

Exemplo de classe definida em Java

class MOTO{private String marca, cor; boolean estadoMotor;void ligaMotor() {

if (estadoMotor == true)System.out.println(“O motor já esta ligado”);

else {estadoMotor = true;System.out.println(“Agora o motor já esta

ligado”);}

} // fim do método ligaMotorvoid mostraAtributos() {

System.out.println(“Cor: “ + cor+ “ Marca: “ + marca + “Estado: “ + estadoMotor);

}

Page 30: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 30

Exemplo de classe definida em Java (continuação)

class MOTO{ . . .

public static void main ( String args[] ){

MOTO m = new MOTO();

m.marca = “Yamaha RZ350”;

m.cor = “amarela”;

m.mostraAtributos();

m.ligaMotor();

m.mostraAtributos();

m.ligaMotor();

} // fim do método main

} // fim da classe MOTO

Page 31: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 31

Generalização

Relacionamento entre uma classe e uma ou mais versões refinadas ou especializadas da classe

Especialização: relacionamento inverso Superclasse: versão mais abstrata de outra

classe, a subclasse Subclasse: versão mais refinada de outra classe,

a superclasse

Page 32: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 32

Herança

Mecanismo baseado em objetos que permite que as classes compartilhem atributos e operações baseados em um relacionamento, geralmente generalização

Uma subclasse herda atributos e métodos da superclasse

Page 33: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 33

Polimorfismo

Assume muitas formas A propriedade segundo a qual uma operação

(método) pode comportar-se diferentemente em classes diferentes

A subclasse redefine a implementação de um método herdado da superclasse

Onde se espera uma instância de um certa classe pode aparecer uma instância de qualquer subclasse daquela classe

Page 34: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 34

Exemplo de herança e polimorfismo

BOTÃO

Estado: booleancor: Coresx: inty: int

desenhe(), aperte(),desaperte(),pegaEstado(),mova(float x1, float x2)

BOTÃO REDONDO

raio : int

desenhe()

BOTÃO QUADRADO

diagonal : int

desenhe()

Page 35: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 35

Implantação da classe Botão

class Botao

{boolean estado;int cor;float x, y;

public Botao(int cor){

estado = true;this.cor = cor;x = y = 0;

}

public void aperte(){estado = true; }

public void desaperte() {estado = false; }

public boolean pegaEstado() { return estado; }

public void desenhe() {}

public void mova( float x1, float y1)

{ x = x1; y = y1; }

}

Page 36: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 36

Implantação da classe Botão Quadrado

class BotaoQuadrado extends Botao{

float diagonal;public BotaoQuadrado(int cor, float dia){

super( cor );diagonal = dia;

}public void desenhe(){

System.out.println("Desenhe Botão Quadrado");

}}

Page 37: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 37

Implantação da classe Botão Redondo

class BotaoRedondo extends Botao{

float raio;public BotaoRedondo(int cor, float r){

super( cor );raio = r;

}public void desenhe(){

System.out.println("Desenhe Botão Redondo");

}}

Page 38: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 38

Implantação da classe Janela

class Janela {

public static void main( String args[] ){

BotaoQuadrado bq = new BotaoQuadrado(1, (float)4.5);

bq.desenhe();

BotaoRedondo br = new BotaoRedondo(1, (float)5.0);

br.desenhe();}

}

Page 39: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 39

Exercício

Escreva um diagrama de classes para estas 3 (três) instâncias. Não é necessário incluir métodos.

(Aparelho de troca de calor)nome = E302fabricante = Brownpeso = 5000 kgpreço = $20000área da superfície diâmetro do tubo = 2 cmcomprimento do tubo = 6 mpressão do tubo = 15 atmpressão da concha = 1,7 atm

(Tanque de teto flutuante)nome = T111fabricante = Simplexpeso = 10000 kgpreço = $50000volume = 400000 Lpressão = 1,1 atmdiâmetro = 8 maltura = 9m (Bomba de diafragma)

nome = P101fabricante = Simplexpeso = 100 kgpreço = $5000pressão de sucção = 1,1 atmpresssão de descarga = 3,3 atmtaxa de fluxo = 300 I/hmaterial do diafragma = Teflon

Page 40: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 40

Notação:Multiplicidade e Ordenação

Classe A

Classe A

Classe A

Classe A

Classe A

Classe A

Classe A

Classe A

Classe A

Classe A

Classe A

Classe A

0..*

1

0..1

1..*

2-5,10

0..* {ordenado}

1+

2-5,10

{ordenado}

OMT UML

Page 41: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 41

Ligação

Uma conexão física ou conceitual entre objetos Exemplo: O país Brasil tem como capital a cidade

de Brasília. Exemplo: O funcionário João trabalha na empresa

Transamérica S.A. Exemplo: O artigo “OO Solutions” foi publicado na

conferencia OOPSLA’99.

Page 42: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 42

Associação

Relacionamento entre instâncias de duas ou mais classes descrevendo um grupo de ligações com estrutura e semântica comuns.

Exemplo: Um país tem como capital uma cidade. Exemplo: Um funcionário trabalha numa empresa.

Page 43: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 43

Agregação

Forma especial de associação, entre o todo e suas partes, na qual o todo é composto pelas partes

Também chamada de herança horizontal Exemplo: Um artigo é publicado em uma

conferência, isto é, o artigo faz parte da conferência (ou dos anais da conferência).

Page 44: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 44

Multiplicidade e Papel

Multiplicidade: Número de instâncias de uma classe que podem se relacionar a uma única instância de um classe associada (ou agregada).

Papel: nome que identifica inequivocamente uma extremidade de uma associação.

Page 45: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 45

Classe PessoaDiagrama de instâncias

(Pessoa)uma avó

(Pessoa)um avô

(Pessoa)uma tia

(Pessoa)um primo

(Pessoa)você

(Pessoa)sua mãe

(Pessoa)seu pai

Cônjuge

Cônjuge

Primo

filho

filho

filho

Irmão

filho filho

mãe pai

pai mãemãe

Page 46: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 46

Classe Pessoa (parcial)

Page 47: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 47

Atributo de Ligação

Um valor de dados presente em cada ligação (nível de instâncias) de uma associação (nível de classes)

Uma propriedade da ligação entre objetos, e não dos objetos ligados, propriamente ditos

Exemplos: permissão de acesso que um usuário possui para a um arquivo; o salário de uma pessoa em um emprego em uma companhia

Page 48: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 48

Atributo de Ligação Exemplo: Muitos para Muitos

ArquivoString : nome

UsuárioString : nome

Integer : permissão

Acessível por

/etc/termcap ( leitura ) John Doe/etc/termcap ( leitura-escrita ) Mary Brown/usr/doe/.login ( leitura-escrita ) John Doe

0..* 0..*

Page 49: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 49

Atributo de Ligação Exemplo: Um para Muitos

PessoaString : nomeString : telefone

EmpresaString : nomeString : endereço

Float : salárioString : cargo

Trabalha-para

Float : desempenho

chefetrabalhador

Gerencia

0..* 1

0..*

0..1

Page 50: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 50

Associação como uma Classe

Cada ligação de uma associação é uma instância de uma classe

Uma ligação é um objeto, com atributos e métodos Útil quando ligações podem participar em

associações com outros objetos Útil quando ligações sofrem operações Exemplo: autorização para usuários em estações de

trabalho

Page 51: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 51

Associação como uma Classe Exemplo

PessoaString : nomeString : telefone

Estação TrabalhoString : IP

UsuárioInteger : prioridadeInteger : privilégios

IniciarSessao() : void

Autorizado

DiretórioString : nome

Diretóriobásico

0..*0..*

0..*

Page 52: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 52

Associação Ternária

Representa ligações entre 3 objetos Não pode ser dividida em associações binárias

sem que haja perda de informações Associações de grau maior que 3 são raras e

devem ser evitadas devido a complexidade de entendimento e implementação

Exemplo: pessoas que são programadoras usam linguagens de programação em projetos

Page 53: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 53

Associação Ternária + Papel

PessoaString : nomeString : telefone

VeículoString : marcaString : cor

ConcessionáriaString : nomeString : endereço

objeto

vendedor

comprador1. .*

1

1

Compra

Data : data

Page 54: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 54

Associação Ternária + Papel

PessoaString : nomeString : telefone

VeículoString : marcaString : cor

ConcessionáriaString : nomeString : endereço

objetovendedor

comprador

1. .*

1

1

Venda

Data : data

Page 55: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 55

Exercício

Pessoa

nome : Stringidade : IntID empregador 1 : ?ID empregador 2 : ?ID empregador 3 : ?endereço : StringID Pessoa : ?

Carro

ID proprietário : ?ID carro : ?tipo proprietário : ?modelo : Stringano : Int

Empréstimo

ID proprietário : ?ID cliente : ?número de conta : IntID banco : ?juro : Realsaldo atual : Realtipo proprietário : ?

Empresa

nome : StringID Empresa : ?

Banco

nome : StringID banco : ?

Estas classes possuem atributos que são ponteiros para outras classes de objetos. Estes ponteiros podem ser substituídos por associações. Considerando que:

• cada pessoa pode ter até três empregos em empresas diferentes. • cada pessoa, carro, empresa e banco possui o seu próprio identificador (ID). • o proprietário de um carro pode ser: uma pessoa, uma empresa ou um banco. • em um empréstimo, o carro é o objeto penhorado (ou comprado).

Prepare um diagrama de classes, onde os ponteiros são substituídos por relações. Pode haver a necessidade de acrescentar uma ou mais classes. Elimine todos os ID. Certos atributos podem ser transformados em discriminantes *.* Um discriminante é um atributo do tipo enumeração que indica que uma propriedade de um objeto tornou-se abstrata através de uma relação de generalização.

Page 56: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 56

Exercício

Pessoa

nome : Stringidade : IntID empregador 1 : ?ID empregador 2 : ?ID empregador 3 : ?endereço : StringID Pessoa : ?

Carro

ID proprietário : ?ID carro : ?tipo proprietário : ?modelo : Stringano : Int

Empréstimo

ID proprietário : ?ID cliente : ?número de conta : IntID banco : ?juro : Realsaldo atual : Realtipo proprietário : ?

Empresa

nome : StringID Empresa : ?

Banco

nome : StringID banco : ?

Resposta Veículo

String : modeloInteger : ano

Proprietário

String : nome

Possui

PessoaInteger : idadeString : endereço

Empresa BancoEmpréstimoInteger : contaFloat : jurosFloat : saldo

cedente

penhor

Emprega

beneficiário

0..*

0..*0..*

0..*

0..* 0..*

Page 57: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 57

Ordenação em Associações

Em alguns casos o conjunto de objetos associados a um certo objeto apresenta uma ordem

A palavra "ordenado" deve aparecer junto à multiplicade "muitos" de uma associação para indicar que existe uma ordem entre os objetos ligados

Exemplos: as janelas visíveis em uma tela possuem uma ordem; os vértices de um polígono

Page 58: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 58

Exercício

• Prepare um diagrama de classes a partir do diagrama de instâncias em questão. Explique suas decisões de multiplicidade. Cada ponto tem uma coordenada x e uma coordenada y. Qual é o menor número de pontos necessários para a construção de um polígono? Faz alguma diferença se um ponta pode ou não ser compartilhado por diversos polígonos? Como você pode expressar o fato de que os pontos estão em seqüência?

(Ponto)-1010

(Ponto)-10-10

(Ponto)10-10

(Ponto)1010

(Polígono)

Tem

Tem Tem

Tem

Page 59: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 59

Resposta

Exercício

(Ponto)-1010

(Ponto)-10-10

(Ponto)10-10

(Ponto)1010

(Polígono)

Tem

Tem Tem

Tem

Ponto

X : RealY : Real

Polígono

3..*{ordenado}

Page 60: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 60

Exercício

• Prepare um diagrama de classes e implemente-o (numa linguagem de programação de computadores orienta a objetos) a partir do diagrama de instâncias da figura acima. Explique suas decisões de multiplicidade. Como o seu diagrama expressa o fato de que os pontos estão em seqüência?

(Ponto)-1010

(Ponto)-10-10

(Ponto)10-10

(Ponto)1010

(Polígono)

próximo

próximo

primeiroúltimo

próximo

próximo

Page 61: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 61

Exercício

(Ponto)-1010

(Ponto)-10-10

(Ponto)10-10

(Ponto)1010

(Polígono)

próximo

próximo

primeiroúltimo

próximo

próximo

Resposta PontoX : realY : real

Polígonoprimeiro

últimopróximo

0..1

0..1

Page 62: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 62

Uso de Agregação

Na dúvida, use associação! Herança não representa o relacionamento parte-todo Agregados recursivos são freqüentes Agregação normalmente implica em propagação de

operações

Page 63: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 63

Uso de AgregaçãoExemplo

Documento SentençaParágrafo

Pessoa

Possui

cópiacópia

cópia() : void cópia() : void cópia() : void

Efeito: Propagação de operação

Page 64: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 64

Uso de AgregaçãoExemplo

Microcomputador

Monitor Mouse Teclado

Chassis C . P . U R . A . M Ventoinha

Caixa do Sistema0..* 0..1

0..10..*

Page 65: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 65

Uso de AgregaçãoExercício

Prepare um diagrama de classes a partir do diagrama de instâncias de um documento geométrico mostrado na seqüência. Esse documento tem 4 páginas. A primeira página tem um ponto vermelho e um quadrado amarelo desenhados nela. A segunda página contém uma linha e uma elipse. Um arco, um círculo e um retângulo aparecem nas duas últimas páginas. Ao preparar seu diagrama, utilize exatamente um relacionamento de agregação e um ou mais relacionamentos de generalização

Page 66: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 66

Uso de AgregaçãoExercício

(Ponto)dimensões = 0cor = vermelhoposição = (5,4)

(Linha)dimensões = 1cor = azulposição = (12,9)orientação = 36 grauscomprimento = 7

(Arco)dimensões = 1cor = verdeposição = (25,36)orientação = 45 grausdiâmetro = 13

(Círculo)dimensões = 2cor = laranjaposição = (10,78)largura = 5altura = 5

(Quadrado)dimensões = 2cor = amareloposição = (54,88)orientação = 22 grauslargura = 10altura = 10

(Elipse)dimensões = 2cor = marromposição = (-300,49)orientação = 0 grauslargura = 100altura = 50

(Retângulo)dimensões = 2cor = azulposição = (102,158)orientação = 30 grauslargura = 5altura = 10

(Página)N. página = 1 (Página)

N. página = 2 (Página)N. página = 3

(Página)N. página = 4

Page 67: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 67

Uso de AgregaçãoExercício

Resposta PáginaFiguracor

posição

Contem

Ponto

Figura 0D

Linhacomprimento

Figura 1Dorientação

Retângulo

Figura 2Dlarguraalturaorientação

Elipse

Quadrado Circulo

Arcodiâmetroangulo

0..*

Page 68: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 68

Classes Abstratas e Concretas

Classe abstrata: classe que não pode ter instâncias diretas, mas cujos descendentes sim; organizam características comuns a diversas classes; mecanismo para reutilizar código; pode definir operações abstratas (sem um correspondente método)

Classe concreta: classe que pode ter instâncias diretas; não pode definir operações abstratas

Page 69: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 69

Cancelamento para extensão

A nova operação é igual à operação herdada, exceto pelo fato de acrescentar alguns detalhes de comportamento, normalmente afetando novos atributos da subclasse.

Page 70: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 70

Cancelamento para restrição

A nova operação restringe o protocolo (assinatura da operação), podendo reduzir os tipos de argumentos.

A operação herdada fica fechada (restrita) dentro de cada subclasse específica.

Page 71: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 71

Cancelamento para otimização

O novo método tem o mesmo protocolo externo e apresenta o mesmos resultados

A implementação do novo método (algoritmo utilizado) pode ser completamente diferente

Page 72: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 72

Herança Múltipla

Uma classe possui mais de uma subclasse e herda características de todos os seus ancestrais

Maior capacidade de especificação de classes Maior oportunidade de reutilização Perda em simplicidade conceitual e de

implementação Surgem classes de junção

Page 73: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 73

Exercício

AutomóvelCorNúmero de passageirosVelocidade máximaPeso máximoNúmero de portasEntrar passageiroSair passageiro

UtilitárioCorNúmero de passageirosVelocidade máximaPeso máximoVolumeNúmero de portasEntrar passageiroSair passageiroCarregarDescarregar

CaminhãoCorVelocidade máximaPeso máximoVolumeNúmero de portasNúmero de eixosCarregarDescarregar

Faça um diagrama de classes que represente estes veículos.

Page 74: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 74

Exercício (resposta multi-herança)

Page 75: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 75

Exercício (resposta sem multi-herança)

Page 76: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 76

Exemplo Sistema Comercial (Representação em blocos)

Sistema Comercial

Subsistema

Compras

Subsistema

Vendas

Page 77: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 77

* 1..*fornece

*

0..1

pertence asubcategoria

supercategoria

*

1

pertence a

* 1

refere-se

*

1

é atendida por

*

1corresponde

1..*é composta de

11..*

1..*

1

*

1

é realizada por

1

corresponde

1 1..*

é composta de

<<negócio>>Cliente

SituacaoFinanceira<<negócio>>Vendedor

PercentualDeComissao

<<negócio>>Venda

DataDaVenda

<<negócio>>VendaAPrazo

<<negócio>>Prestacao

DataDeVencimentoValorDaPrestacao

<<negócio>>Fornecedor

<<negócio>>Duplicata

DataDeVencimentoValorDevido

<<negócio>>Compra

DataDaCompra

<<negócio>>ItemDeCompra

QtdeSolicitada

<<negócio>>Produto

QtdeEmEstoque

<<negócio>>CategoriaDeProdutos

Nome

<<negócio>>ItemDeVenda

QtdeVendida

é realizada para

compreende

*

1

Page 78: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 78

Produtos

* 1..*fornece

*

0..1

pertence a

subcategoria

supercategoria

*

1

pertence a

1

é atendida por

1corresponde

<<negócio>>Fornecedor

<<negócio>>Produto

QtdeEmEstoque

<<negócio>>CategoriaDeProdutos

Nome

Page 79: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 79

Vendas

11..*

1..*

1

*

1

é realizada por

1

corresponde

1 1..*

é composta de

<<negócio>>Cliente

SituacaoFinanceira<<negócio>>Vendedor

PercentualDeComissao

<<negócio>>Venda

DataDaVenda

<<negócio>>VendaAPrazo

<<negócio>>Prestacao

DataDeVencimentoValorDaPrestacao

<<negócio>>Produto

QtdeEmEstoque

<<negócio>>ItemDeVenda

QtdeVendida

é realizada para

compreende

*

Page 80: 10/03/06 Edson Scalabrin & Alcides Calsavara 1 Fundamentos de Engenharia de Software Edson E. Scalabrin edson.scalabrin@pucpr.br Telefone: 0xx-41-3271-1360

10/03/06 Edson Scalabrin & Alcides Calsavara 80

Compras

* 1..*fornece*

* 1

refere-se

*

1

é atendida por

*

1

corresponde

1..*é composta de

<<negócio>>Fornecedor

<<negócio>>Duplicata

DataDeVencimentoValorDevido

<<negócio>>Compra

DataDaCompra

<<negócio>>ItemDeCompra

QtdeSolicitada

<<negócio>>Produto

QtdeEmEstoque

1