Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Conformidade de tipo e comportamento fechado
2
Classe X Tipo “Uma classe é uma implementação de um tipo, que é a visão abstrata ou externa de uma classe” “Um tipo pode ser implementado sob a forma de diversas classes. Tendo cada classe seu próprio desenho interno” Conformidade de tipo
3
ÁrvoreUtilizandoMatriz
Por exemplo: <<type>> Grupo {abstrato} <<class>> ÁrvoreUtilizandoID acrescentarElementos (novoElemento) {abstrato} <<implements>> <<class>> ÁrvoreUtilizandoMatriz <<type>> Árvore acrescentarElementos (novoElemento) {abstrato} <<implements>> Conformidade de tipo
4
[semanticamente não tem sentido]
Embora um tipo represente a visão externa de uma classe, o conceito de subtipo é distinto do conceito de subclasse! Por exemplo: Elefante herda de Retângulo {sintaticamente pode ser válido} [semanticamente não tem sentido] Conformidade de tipo
5
Princípio da Conformidade de Tipo:
“Se S é subtipo real de T, então S deve se conformar a T. Ou seja, um objeto de tipo S pode ser provido em qualquer contexto no qual um objeto de tipo T seja esperado, e a exatidão será preservada quando qualquer operação de acesso do objeto for executada.” Conformidade de tipo
6
Por exemplo: Círculo é um subtipo de Elipse!
Qualquer objeto que for um círculo será também uma elipse. “em um desenho OO sadio, o tipo de cada classe deve conformar-se ao tipo de sua superclasse.” [contrariando a definição!] Conformidade de tipo
7
Como assegurar a Conformidade de Tipo?
A invariante da subclasse deve ser, no mínimo, tão forte quanto a da superclasse. Ex: Retângulo >> w1=w2 and h1=h2 Quadrado >> w1=w2 and h1=h2 and w1=h2 Conformidade de tipo
8
e … deve satisfazer também:
Toda operação da superclasse deve ter uma correspondente na subclasse com mesmo nome e assinatura A pré-condição de qq operação não deve ser mais forte do que da superclasse (princípio da contravariação) A pós-condição de qq operação deve ser, no mínimo, tão forte quanto a operação da superclasse (princípio da covariação) Conformidade de tipo
9
Ex de conformidade de tipo:
Funcionário CalcularBônus (avaliaçãoDeDesempenho, out %DeBônus) Gerente CalcularBônus (avaliaçãoDeDesempenho, out %DeBônus) Conformidade de tipo
10
invariantes: Funcionário >> nivelDeFormação > 0
Gerente >> nivelDeFormação > 20! Operações correspondentes (ok) Pré-condição: avaliaçãoDeDesempenho: 0 a 5 para Gerente e Funcionário 0 a 8 maior (mais fraca) para Gerente! Pós-condição: %DeBônus: 0% a 10% para Gerente e Funcionário 0% a 6% menor (mais forte) para Gerente Conformidade de tipo
11
Resumo dos requisitos para conformidade de tipo:
Para S ser um subtipo verdadeiro de T: O espaço-estado de S deve ter as mesmas dimensões de T Nas dimensões que S e T compartilham, o espaço-estado de S deve ser igual a, ou residir dentro do espaço-estado de, T S.op deve ter o mesmo nome que T.op Conformidade de tipo
12
A pré-condição de S.op deve ser igual ou mais fraca do que de T.op
A lista de argumentos da assinatura formal de S.op deve corresponder à de T.op A pré-condição de S.op deve ser igual ou mais fraca do que de T.op A pós-condição de S.op deve ser igual ou mais fraca de T.op Conformidade de tipo
13
O princípio do Comportamento Fechado:
“em uma hierarquia de herança baseada em tipo/subtipo, a execução de qualquer operação em um objeto da classe C – incluindo as operações herdadas de suas superclasses – deverá obedecer à invariante de classe de C.” Conformidade de tipo
14
Mover (distância: comprimento)
Caso 1 (sem problemas!) mover tr1: Polígono Mover (distância: comprimento) Conformidade de tipo
15
Caso 2 (com problemas!) ? acrescentarVértice tr1: Polígono
(novoVértice: Ponto) Conformidade de tipo
16
Solução: Evitar a herança de acrescentarVértice
Suprimir acrescentarVértice de forma que ela não tenha qualquer efeito Estar preparado para reclassificar Triângulo como Quadrilátero (se for admissível pela aplicação) Conformidade de tipo
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.