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
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.
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
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
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.
10/03/06 Edson Scalabrin & Alcides Calsavara 6
Interação entre Objetos
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
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
10/03/06 Edson Scalabrin & Alcides Calsavara 9
Comportamento e Estado
10/03/06 Edson Scalabrin & Alcides Calsavara 10
Guarantia de Encapsulamento
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
10/03/06 Edson Scalabrin & Alcides Calsavara 12
Execução de Métodos
invocação evento
m ( ) e
m ( ) m ( )
10/03/06 Edson Scalabrin & Alcides Calsavara 13
Estado
O estado de um objeto é composto por um conjunto de valores de atributos
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
10/03/06 Edson Scalabrin & Alcides Calsavara 15
Classes e Objetos
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)
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
10/03/06 Edson Scalabrin & Alcides Calsavara 18
Classes de Bibliotecas
Exemplos: String Applet Button System
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)
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
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
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
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
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
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.
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.
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”
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
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);
}
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
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
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
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
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()
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; }
}
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");
}}
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");
}}
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();}
}
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
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
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.
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.
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).
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.
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
10/03/06 Edson Scalabrin & Alcides Calsavara 46
Classe Pessoa (parcial)
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
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..*
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
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
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..*
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
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
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
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.
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..*
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
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
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}
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
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
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
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
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..*
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
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
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..*
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
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.
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.
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
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
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.
10/03/06 Edson Scalabrin & Alcides Calsavara 74
Exercício (resposta multi-herança)
10/03/06 Edson Scalabrin & Alcides Calsavara 75
Exercício (resposta sem multi-herança)
10/03/06 Edson Scalabrin & Alcides Calsavara 76
Exemplo Sistema Comercial (Representação em blocos)
Sistema Comercial
Subsistema
Compras
Subsistema
Vendas
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
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
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
*
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
Top Related