Fundamentos de Engenharia de
Software
ORIENTAÇÃO A OBJEOTS
Edson E. Scalabrin
[email protected]
Telefone: 0xx-41-3271-1360
10/03/06
Edson Scalabrin & Alcides
Calsavara
1
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
2
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
3
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
4
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
5
Interação entre Objetos
10/03/06
Edson Scalabrin & Alcides Calsavara
6
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:


10/03/06
o comportamento é forma como reage a estímulos
o estado modifica-se de acordo com o comportamento
Edson Scalabrin & Alcides Calsavara
7
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
8
Comportamento e Estado
10/03/06
Edson Scalabrin & Alcides Calsavara
9
Guarantia de Encapsulamento
10/03/06
Edson Scalabrin & Alcides Calsavara
10
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
11
Execução de Métodos
invocação
evento
e
m()
m()
10/03/06
m()
Edson Scalabrin & Alcides Calsavara
12
Estado
 O estado de um objeto é composto por um
conjunto de valores de atributos
10/03/06
Edson Scalabrin & Alcides Calsavara
13
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
14
Classes e Objetos
10/03/06
Edson Scalabrin & Alcides Calsavara
15
Tipos
 Um tipo pode ser primitivo ou uma classe
 Uma classe é um tipo abstrato de dados
(ADT)
10/03/06
Edson Scalabrin & Alcides Calsavara
16
Tipos Primitivos em Java
 Os tipos primitivos incluem:




10/03/06
números inteiros: byte, short, int, long
números reais: float, double
valores lógicos: boolean
caracteres: char
Edson Scalabrin & Alcides Calsavara
17
Classes de Bibliotecas
 Exemplos:




10/03/06
String
Applet
Button
System
Edson Scalabrin & Alcides Calsavara
18
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
19
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
20
Atributos em
Classes e Objetos
A
boolean b
int k
B
int x
String s
x =10
b=true
k=7
10/03/06
s=
char[] v
v=Paris
Edson Scalabrin & Alcides Calsavara
String
21
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
22
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
23
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
24
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
25
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.
10/03/06
Edson Scalabrin & Alcides Calsavara
26
:Veículo
:Hodometro
codigo = 13
hodometro
cronometro
relogio
kilometragem = 283
momentoZeragem
relogio
avance(distancia : int)
exiba()
comeceCronometro()
pareCronometro()
zereCronometro()
zereHodometro()
Veiculo(c : int)
“main”
zere()
kilometragemMedia() : double
avance(distancia : int)
exiba()
Hodometro(r : Relogio)
:Instante
T
diferenca(i : Instante) : int
digaHoras() : int
digaMinutos() : int
:Cronometro
:Relogio
exiba()
digaInstante() : Instante
ativo = true
momentoInicio
momentoParada
relogio
comece()
pare()
exiba()
Cronometro(r : Relogio)
:Date
:Instante
:Date
T
diferenca(i : Instante) : int
digaHoras() : int
digaMinutos() : int
:Instante
:Date
T
diferenca(i : Instante) : int
digaHoras() : int
digaMinutos() : int
Representação de Objetos (usando UML)
10/03/06
Edson Scalabrin & Alcides Calsavara
27
Exemplo de classe em UML
Nome da
classe
Atributos +
tipos
Métodos
10/03/06
MOTO
Marca:
cor:
estado:
String
String
boolean
ligaMotor(),
mostraAtributos()
Edson Scalabrin & Alcides Calsavara
28
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 ligaMotor
void mostraAtributos() {
System.out.println(“Cor: “ + cor+ “ Marca: “ + marca +
“Estado: “ + estadoMotor);
}
10/03/06
Edson Scalabrin & Alcides Calsavara
29
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
30
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
31
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
32
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
33
Exemplo de
herança e polimorfismo
BOTÃO
Estado: boolean
cor:
Cores
x:
int
y:
int
desenhe(), aperte(),
desaperte(),
pegaEstado(),
mova(float x1, float x2)
BOTÃO QUADRADO
BOTÃO REDONDO
diagonal : int
raio : int
desenhe()
desenhe()
10/03/06
Edson Scalabrin & Alcides Calsavara
34
Implantação da classe Botão
class Botao
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; }
{
boolean estado;
int cor;
float x, y;
public Botao(int cor)
{
estado = true;
this.cor = cor;
x = y = 0;
}
10/03/06
}
Edson Scalabrin & Alcides Calsavara
35
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
36
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
37
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
38
Exercício
(Aparelho de troca de calor)
nome = E302
fabricante = Brown
peso = 5000 kg
preço = $20000
área da superfície diâmetro do tubo = 2 cm
comprimento do tubo = 6 m
pressão do tubo = 15 atm
pressão da concha = 1,7 atm
(Tanque de teto flutuante)
nome = T111
fabricante = Simplex
peso = 10000 kg
preço = $50000
volume = 400000 L
pressão = 1,1 atm
diâmetro = 8 m
(Bomba de diafragma)
altura = 9m
nome = P101
fabricante = Simplex
peso = 100 kg
preço = $5000
Escreva um diagrama de classes
pressão de sucção = 1,1 atm
para estas 3 (três) instâncias. Não é
presssão de descarga = 3,3 atm
necessário incluir métodos.
taxa de fluxo = 300 I/h
material do diafragma = Teflon
10/03/06
Edson Scalabrin & Alcides Calsavara
39
Notação:
Multiplicidade e Ordenação
UML
OMT
Classe A
Classe A
1
Classe A
Classe A
0..*
Classe A
Classe A
0..1
Classe A
1+
Classe A
1..*
Classe A
2-5,10
Classe A
2-5,10
Classe A
10/03/06
{ordenado}
Classe A
Edson Scalabrin & Alcides Calsavara
0..* {ordenado}
40
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
41
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
42
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
43
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
44
Classe Pessoa
Diagrama de instâncias
Cônjuge
(Pessoa) mãe
uma avó
filho
(Pessoa)
uma tia
Irmão
10/03/06
filho
(Pessoa)
seu pai
Cônjuge
pai
filho
mãe
filho
(Pessoa)
um primo
(Pessoa)
um avô
pai
Primo
(Pessoa)
sua mãe
mãe
(Pessoa) filho
você
Edson Scalabrin & Alcides Calsavara
45
Classe Pessoa (parcial)
10/03/06
Edson Scalabrin & Alcides Calsavara
46
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
47
Atributo de Ligação
Exemplo: Muitos para Muitos
Arquivo
String : nome
0..*
Acessível por
Usuário
0..* String : nome
Integer : permissão
/etc/termcap
/etc/termcap
/usr/doe/.login
10/03/06
( leitura )
( leitura-escrita )
( leitura-escrita )
Edson Scalabrin & Alcides Calsavara
John Doe
Mary Brown
John Doe
48
Atributo de Ligação
Exemplo: Um para Muitos
Pessoa
0..*
String : nome
String : telefone
0..1
chefe
trabalhador 0..*
Gerencia
Trabalha-para
Empresa
1 String : nome
String : endereço
Float : salário
String : cargo
Float : desempenho
10/03/06
Edson Scalabrin & Alcides Calsavara
49
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
50
Associação como uma Classe
Exemplo
Pessoa
String : nome 0..*
String : telefone
Estação Trabalho
0..* String : IP
Autorizado
Usuário
Integer : prioridade
Integer : privilégios
IniciarSessao() : void
0..*
Diretório
String : nome
Diretório
básico
10/03/06
Edson Scalabrin & Alcides Calsavara
51
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
52
Associação Ternária + Papel
Pessoa
String : nome comprador
String : telefone 1
Veículo
objeto String : marca
1. .*String : cor
vendedor 1
Concessionária
String : nome
String : endereço
10/03/06
Edson Scalabrin & Alcides Calsavara
Compra
Data : data
53
Associação Ternária + Papel
Pessoa
vendedor
String : nome
String : telefone 1
Veículo
objeto String : marca
1. .* String : cor
comprador 1
Concessionária
String : nome
String : endereço
10/03/06
Edson Scalabrin & Alcides Calsavara
Venda
Data : data
54
Exercício
Pessoa
nome : String
idade : Int
ID empregador 1 : ?
ID empregador 2 : ?
ID empregador 3 : ?
endereço : String
ID Pessoa : ?
Carro
ID proprietário : ?
ID carro : ?
tipo proprietário : ?
modelo : String
ano : Int
Empréstimo
ID proprietário : ?
ID cliente : ?
número de conta : Int
ID banco : ?
juro : Real
saldo atual : Real
tipo proprietário : ?
Empresa
nome : String
ID Empresa : ?
Banco
nome : String
ID 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
55
Exercício
Pessoa
nome : String
idade : Int
ID empregador 1 : ?
ID empregador 2 : ?
ID empregador 3 : ?
endereço : String
ID Pessoa : ?
Resposta
Carro
ID proprietário : ?
ID carro : ?
tipo proprietário : ?
modelo : String
ano : Int
String : nome
beneficiário
Banco
cedente
0..*
Banco
nome : String
ID banco : ?
Empresa
nome : String
ID Empresa : ?
0..*
Possui
Proprietário
Pessoa
Empresa
0..*
Integer : idade 0..*
String : endereço
Emprega
10/03/06
Empréstimo
ID proprietário : ?
ID cliente : ?
número de conta : Int
ID banco : ?
juro : Real
saldo atual : Real
tipo proprietário : ?
Veículo
String : modelo
Integer : ano
Empréstimo
penhor
Integer : conta
Float : juros
0..*
0..*
Float : saldo
Edson Scalabrin & Alcides Calsavara
56
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
57
Exercício
(Ponto)
-10
10
Tem
Tem
(Ponto)
10
10
(Polígono)
(Ponto)
-10
-10
Tem
Tem
(Ponto)
10
-10
• 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?
10/03/06
Edson Scalabrin & Alcides Calsavara
58
Exercício
(Ponto)
-10
10
Tem
Tem
(Ponto)
10
10
(Polígono)
(Ponto)
-10
-10
Tem
Tem
(Ponto)
10
-10
Resposta
Polígono
Ponto
3..*
{ordenado}
10/03/06
Edson Scalabrin & Alcides Calsavara
X : Real
Y : Real
59
Exercício
(Ponto)
-10
10
próximo
(Ponto)
-10
-10
(Ponto)
10
10
próximo
último
(Polígono)
primeiro
próximo
(Ponto)
10
-10
próximo
• 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?
10/03/06
Edson Scalabrin & Alcides Calsavara
60
Exercício
(Ponto)
-10
10
próximo
(Ponto)
-10
-10
próximo
(Ponto)
10
10
último
próximo
(Ponto)
10
-10
(Polígono)
primeiro
próximo
Resposta
10/03/06
Polígono
0..1
primeiro
0..1
último
Edson Scalabrin & Alcides Calsavara
Ponto
X : real
Y : real
próximo
61
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
62
Uso de Agregação
Exemplo
Pessoa
Possui
cópia
cópia
Documento
Parágrafo
Sentença
cópia() : void
cópia() : void
cópia() : void
Efeito: Propagação de operação
10/03/06
Edson Scalabrin & Alcides Calsavara
63
Uso de Agregação
Exemplo
Microcomputador
0..*
Monitor
0..1
Caixa do Sistema
Mouse
0..*
Chassis
10/03/06
C.P.U
R.A.M
Edson Scalabrin & Alcides Calsavara
Teclado
0..1
Ventoinha
64
Uso de Agregação
Exercí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
65
Uso de Agregação
Exercício
(Ponto)
dimensões = 0
cor = vermelho
posição = (5,4)
(Página)
N. página = 1
(Quadrado)
dimensões = 2
cor = amarelo
posição = (54,88)
orientação = 22 graus
largura = 10
altura = 10
10/03/06
(Linha)
dimensões = 1
cor = azul
posição = (12,9)
orientação = 36 graus
comprimento = 7
(Página)
N. página = 2
(Arco)
dimensões = 1
cor = verde
posição = (25,36)
orientação = 45 graus
diâmetro = 13
(Página)
N. página = 3
(Elipse)
dimensões = 2
cor = marrom
posição = (-300,49)
orientação = 0 graus
largura = 100
altura = 50
Edson Scalabrin & Alcides Calsavara
(Círculo)
dimensões = 2
cor = laranja
posição = (10,78)
largura = 5
altura = 5
(Página)
N. página = 4
(Retângulo)
dimensões = 2
cor = azul
posição = (102,158)
orientação = 30 graus
largura = 5
altura = 10
66
Uso de Agregação
Exercício
Resposta
Figura 0D
Ponto
10/03/06
Figura
cor
posição
0..*
Figura 1D
orientação
Linha
comprimento
Arco
diâmetro
angulo
Contem
Página
Figura 2D
largura
altura
orientação
Retângulo
Elipse
Quadrado
Circulo
Edson Scalabrin & Alcides Calsavara
67
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
68
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
69
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
70
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
71
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
72
Exercício
Automóvel
Cor
Número de passageiros
Velocidade máxima
Peso máximo
Número de portas
Entrar passageiro
Sair passageiro
Utilitário
Cor
Número de passageiros
Velocidade máxima
Peso máximo
Volume
Número de portas
Entrar passageiro
Sair passageiro
Carregar
Descarregar
Caminhão
Cor
Velocidade máxima
Peso máximo
Volume
Número de portas
Número de eixos
Carregar
Descarregar
Faça um diagrama de classes que represente estes veículos.
10/03/06
Edson Scalabrin & Alcides Calsavara
73
Exercício (resposta multi-herança)
10/03/06
Edson Scalabrin & Alcides Calsavara
74
Exercício (resposta sem multi-herança)
10/03/06
Edson Scalabrin & Alcides Calsavara
75
Exemplo Sistema Comercial
(Representação em blocos)
Sistema Comercial
Subsistema
Vendas
10/03/06
Subsistema
Compras
Edson Scalabrin & Alcides Calsavara
76
<<negócio>>
Cliente
<<negócio>>
Vendedor
pertence a
* subcategoria
<<negócio>>
CategoriaDeProdutos
SituacaoFinanceira
1
PercentualDeComissao
Nome
é realizada para
1..*
1
supercategoria
1
<<negócio>>
Venda
é realizada por
0..1
é composta de
1..*
1
* DataDaVenda
<<negócio>>
ItemDeVenda
QtdeVendida
*
pertence a
compreende
<<negócio>>
Prestacao
1..*
DataDeVencimento
ValorDaPrestacao
<<negócio>>
1 VendaAPrazo
corresponde
1
<<negócio>>
Produto
<<negócio>>
Fornecedor
*
1
fornece
1..*
QtdeEmEstoque *
1
corresponde
é atendida por
*
*
<<negócio>>
<<negócio>>
<<negócio>>
Duplicata
Compra
ItemDeCompra
1 é composta de 1..*
DataDeVencimento refere-se
DataDaCompra
QtdeSolicitada
1
ValorDevido
*
10/03/06
Edson Scalabrin & Alcides Calsavara
77
Produtos
pertence a
* subcategoria
<<negócio>>
CategoriaDeProdutos
Nome
0..1
supercategoria
1
pertence a
<<negócio>>
Produto
<<negócio>>
Fornecedor
*
1
1..*
QtdeEmEstoque *
1
é atendida por
10/03/06
fornece
corresponde
Edson Scalabrin & Alcides Calsavara
78
Vendas
<<negócio>>
Cliente
<<negócio>>
Vendedor
SituacaoFinanceira
1
PercentualDeComissao
é realizada para
1..*
1
<<negócio>>
Venda
é realizada por
é composta de
1
* DataDaVenda
1..*
<<negócio>>
ItemDeVenda
QtdeVendida
*
compreende
<<negócio>>
Prestacao
1..*
DataDeVencimento
ValorDaPrestacao
<<negócio>>
1 VendaAPrazo
corresponde
1
<<negócio>>
Produto
QtdeEmEstoque
10/03/06
Edson Scalabrin & Alcides Calsavara
79
Compras
<<negócio>>
Fornecedor
<<negócio>>
Produto
*
fornece
1..*
1
QtdeEmEstoque *
1
corresponde
é atendida por
*
<<negócio>>
Duplicata
DataDeVencimento
ValorDevido
*
10/03/06
*
<<negócio>>
Compra
refere-se
DataDaCompra
1
<<negócio>>
ItemDeCompra
1 é composta de
Edson Scalabrin & Alcides Calsavara
1..*
QtdeSolicitada
80
Download

Introducao Diagrama de Classes