A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Fundamentos de Engenharia de Software

Apresentações semelhantes


Apresentação em tema: "Fundamentos de Engenharia de Software"— Transcrição da apresentação:

1 Fundamentos de Engenharia de Software
ORIENTAÇÃO A OBJEOTS Edson E. Scalabrin Telefone: 0xx 10/03/06 Edson Scalabrin & Alcides Calsavara

2 Edson Scalabrin & Alcides Calsavara
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 Edson Scalabrin & Alcides Calsavara
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 Edson Scalabrin & Alcides Calsavara
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 Edson Scalabrin & Alcides Calsavara
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
Insira aqui ... 10/03/06 Edson Scalabrin & Alcides Calsavara

11 Edson Scalabrin & Alcides Calsavara
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 Edson Scalabrin & Alcides Calsavara
Execução de Métodos invocação evento e m ( ) m ( ) m ( ) 10/03/06 Edson Scalabrin & Alcides Calsavara

13 Edson Scalabrin & Alcides Calsavara
Estado O estado de um objeto é composto por um conjunto de valores de atributos 10/03/06 Edson Scalabrin & Alcides Calsavara

14 Edson Scalabrin & Alcides Calsavara
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 Edson Scalabrin & Alcides Calsavara
Classes e Objetos 10/03/06 Edson Scalabrin & Alcides Calsavara

16 Edson Scalabrin & Alcides Calsavara
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 Edson Scalabrin & Alcides Calsavara
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 Edson Scalabrin & Alcides Calsavara
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
boolean b int k int x String s A B x =10 char[] v b=true k=7 s= v=Paris 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 Edson Scalabrin & Alcides Calsavara
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 Edson Scalabrin & Alcides Calsavara
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

27 Edson Scalabrin & Alcides Calsavara
:Veículo :Hodometro codigo = 13 hodometro cronometro relogio kilometragem = 283 momentoZeragem relogio :Instante :Date T zere() kilometragemMedia() : double avance(distancia : int) exiba() Hodometro(r : Relogio) diferenca(i : Instante) : int digaHoras() : int digaMinutos() : int avance(distancia : int) exiba() comeceCronometro() pareCronometro() zereCronometro() zereHodometro() Veiculo(c : int) “main” :Cronometro :Instante :Date ativo = true momentoInicio momentoParada relogio T diferenca(i : Instante) : int digaHoras() : int digaMinutos() : int :Relogio comece() pare() exiba() Cronometro(r : Relogio) exiba() digaInstante() : Instante :Instante :Date T diferenca(i : Instante) : int digaHoras() : int digaMinutos() : int Representação de Objetos (usando UML) 10/03/06 Edson Scalabrin & Alcides Calsavara

28 Exemplo de classe em UML
Nome da classe MOTO Marca: String cor: String estado: boolean Atributos + tipos ligaMotor(), mostraAtributos() 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 ligaMotor void 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(); } // fim do método main } // fim da classe MOTO 10/03/06 Edson Scalabrin & Alcides Calsavara

31 Edson Scalabrin & Alcides Calsavara
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 Edson Scalabrin & Alcides Calsavara
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 Edson Scalabrin & Alcides Calsavara
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: 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

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 Edson Scalabrin & Alcides Calsavara
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 = kg preço = $50000 volume = L pressão = 1,1 atm diâmetro = 8 m altura = 9m (Bomba de diafragma) nome = P101 fabricante = Simplex peso = 100 kg preço = $5000 pressão de sucção = 1,1 atm presssão de descarga = 3,3 atm taxa de fluxo = 300 I/h material do diafragma = Teflon Escreva um diagrama de classes para estas 3 (três) instâncias. Não é necessário incluir métodos. 10/03/06 Edson Scalabrin & Alcides Calsavara

40 Notação: Multiplicidade e Ordenação
OMT UML 1 Classe A Classe A 0..* Classe A Classe A 0..1 Classe A Classe A 1+ Classe A Classe A 1..* 2-5,10 2-5,10 Classe A Classe A {ordenado} 0..* {ordenado} Classe A Classe A 10/03/06 Edson Scalabrin & Alcides Calsavara

41 Edson Scalabrin & Alcides Calsavara
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 Edson Scalabrin & Alcides Calsavara
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 Edson Scalabrin & Alcides Calsavara
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 Pessoa Diagrama de instâncias
Cônjuge (Pessoa) uma avó (Pessoa) um avô mãe pai filho filho (Pessoa) uma tia (Pessoa) seu pai (Pessoa) sua mãe Irmão Cônjuge mãe pai mãe filho filho (Pessoa) um primo (Pessoa) você Primo filho 10/03/06 Edson Scalabrin & Alcides Calsavara

46 Classe Pessoa (parcial)
10/03/06 Edson Scalabrin & Alcides Calsavara

47 Edson Scalabrin & Alcides Calsavara
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
Arquivo Usuário 0..* Acessível por 0..* String : nome String : nome Integer : permissão /etc/termcap ( leitura ) John Doe /etc/termcap ( leitura-escrita ) Mary Brown /usr/doe/.login ( leitura-escrita ) John Doe 10/03/06 Edson Scalabrin & Alcides Calsavara

49 Atributo de Ligação Exemplo: Um para Muitos
Pessoa Empresa 0..* String : nome String : telefone Trabalha-para 1 String : nome String : endereço 0..1 chefe 0..* Float : salário String : cargo trabalhador Gerencia Float : desempenho 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
Pessoa Estação Trabalho String : nome String : telefone 0..* Autorizado 0..* String : IP Usuário Integer : prioridade Integer : privilégios IniciarSessao() : void Diretório 0..* String : nome Diretório básico 10/03/06 Edson Scalabrin & Alcides Calsavara

52 Edson Scalabrin & Alcides Calsavara
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
Pessoa Veículo String : nome String : telefone comprador objeto String : marca String : cor 1 1. .* vendedor 1 Concessionária Compra String : nome String : endereço Data : data 10/03/06 Edson Scalabrin & Alcides Calsavara

54 Associação Ternária + Papel
Pessoa Veículo String : nome String : telefone vendedor objeto String : marca String : cor 1 1. .* comprador 1 Concessionária Venda String : nome String : endereço Data : data 10/03/06 Edson Scalabrin & Alcides Calsavara

55 Edson Scalabrin & Alcides Calsavara
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 cliente : ? número de conta : Int ID banco : ? juro : Real saldo atual : Real Empresa ID Empresa : ? 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 Edson Scalabrin & Alcides Calsavara
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 cliente : ? número de conta : Int ID banco : ? juro : Real saldo atual : Real Empresa ID Empresa : ? Banco Resposta Possui 0..* Proprietário Veículo beneficiário String : nome String : modelo Integer : ano penhor Empréstimo Pessoa Empresa Banco 0..* Integer : conta Float : juros Float : saldo 0..* cedente Integer : idade String : endereço 0..* 0..* 0..* Emprega 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 Edson Scalabrin & Alcides Calsavara
Exercício (Ponto) -10 10 (Ponto) 10 Tem Tem (Polígono) (Ponto) -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

59 Edson Scalabrin & Alcides Calsavara
Exercício (Ponto) -10 10 (Ponto) 10 Tem Tem (Polígono) (Ponto) -10 Tem Tem (Ponto) 10 -10 Resposta Polígono Ponto X : Real Y : Real 3..* {ordenado} 10/03/06 Edson Scalabrin & Alcides Calsavara

60 Edson Scalabrin & Alcides Calsavara
Exercício (Ponto) -10 10 (Ponto) 10 próximo próximo próximo (Ponto) -10 (Ponto) 10 -10 último (Polígono) primeiro 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

61 Edson Scalabrin & Alcides Calsavara
Exercício (Ponto) -10 10 (Ponto) 10 próximo próximo próximo (Ponto) -10 (Ponto) 10 -10 último (Polígono) primeiro próximo Resposta primeiro 0..1 Polígono Ponto último 0..1 X : real Y : real próximo 10/03/06 Edson Scalabrin & Alcides Calsavara

62 Edson Scalabrin & Alcides Calsavara
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çã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

64 Uso de Agregação Exemplo
Microcomputador 0..* 0..1 Monitor Caixa do Sistema Mouse Teclado 0..1 0..* Chassis C . P . U R . A . M Ventoinha 10/03/06 Edson Scalabrin & Alcides Calsavara

65 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

66 Uso de Agregação Exercício
(Ponto) dimensões = 0 cor = vermelho posição = (5,4) (Linha) dimensões = 1 cor = azul posição = (12,9) orientação = 36 graus comprimento = 7 (Arco) dimensões = 1 cor = verde posição = (25,36) orientação = 45 graus diâmetro = 13 (Círculo) dimensões = 2 cor = laranja posição = (10,78) largura = 5 altura = 5 (Página) N. página = 1 (Página) N. página = 2 (Página) N. página = 4 (Página) N. página = 3 (Quadrado) dimensões = 2 cor = amarelo posição = (54,88) orientação = 22 graus largura = 10 altura = 10 (Elipse) dimensões = 2 cor = marrom posição = (-300,49) orientação = 0 graus largura = 100 altura = 50 (Retângulo) dimensões = 2 cor = azul posição = (102,158) orientação = 30 graus largura = 5 altura = 10 10/03/06 Edson Scalabrin & Alcides Calsavara

67 Uso de Agregação Exercício
Resposta 0..* Figura Página Contem cor posição Figura 0D Figura 1D Figura 2D orientação largura altura orientação Ponto Linha Arco comprimento diâmetro angulo Retângulo Elipse Quadrado Circulo 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 Edson Scalabrin & Alcides Calsavara
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 Edson Scalabrin & Alcides Calsavara
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

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)
Subsistema Subsistema Vendas Compras 10/03/06 Edson Scalabrin & Alcides Calsavara

77 <<negócio>> Cliente
SituacaoFinanceira pertence a * subcategoria <<negócio>> Vendedor PercentualDeComissao <<negócio>> CategoriaDeProdutos Nome 0..1 1 é realizada para supercategoria 1..* 1 1 <<negócio>> Venda DataDaVenda é composta de <<negócio>> ItemDeVenda QtdeVendida 1 1..* * é realizada por * pertence a compreende <<negócio>> Prestacao DataDeVencimento ValorDaPrestacao <<negócio>> VendaAPrazo corresponde 1..* 1 1 <<negócio>> Fornecedor <<negócio>> Produto QtdeEmEstoque fornece 1..* * * 1 1 é atendida por corresponde * * <<negócio>> Duplicata DataDeVencimento ValorDevido <<negócio>> Compra DataDaCompra <<negócio>> ItemDeCompra QtdeSolicitada refere-se 1 é composta de 1..* 10/03/06 Edson Scalabrin & Alcides Calsavara * 1

78 Produtos <<negócio>> CategoriaDeProdutos Nome
pertence a * subcategoria <<negócio>> CategoriaDeProdutos Nome 0..1 supercategoria 1 pertence a <<negócio>> Fornecedor <<negócio>> Produto QtdeEmEstoque fornece 1..* * * 1 1 é atendida por corresponde 10/03/06 Edson Scalabrin & Alcides Calsavara

79 Vendas <<negócio>> Cliente SituacaoFinanceira
<<negócio>> Vendedor PercentualDeComissao 1 é realizada para 1..* 1 <<negócio>> Venda DataDaVenda é composta de <<negócio>> ItemDeVenda QtdeVendida 1 1..* * é realizada por * compreende <<negócio>> Prestacao DataDeVencimento ValorDaPrestacao <<negócio>> VendaAPrazo corresponde 1..* 1 1 <<negócio>> Produto QtdeEmEstoque 10/03/06 Edson Scalabrin & Alcides Calsavara

80 Compras <<negócio>> Fornecedor
<<negócio>> Produto QtdeEmEstoque fornece 1..* * * 1 1 é atendida por corresponde * * <<negócio>> Duplicata DataDeVencimento ValorDevido <<negócio>> Compra DataDaCompra <<negócio>> ItemDeCompra QtdeSolicitada refere-se 1 é composta de 1..* * 1 10/03/06 Edson Scalabrin & Alcides Calsavara


Carregar ppt "Fundamentos de Engenharia de Software"

Apresentações semelhantes


Anúncios Google