Conformidade de tipo e comportamento fechado

Slides:



Advertisements
Apresentações semelhantes
Sistemas Operacionais
Advertisements

Transformação ODMG  Relacional
Princípios da Orientação a Objetos e a Linguagem UML
Desenvolvimento de Sistemas Baseado na Transformação de Modelos
Modelo Entidade-Relacionamento
UML – MODELAÇÃO DA ESTRUTURA Professor Sandro Carvalho.
Modelagem Orientada a Objetos
1 Orientação a Objetos: Herança Alcides Calsavara.
Orientação a Objetos Introdução. Objetos: o que são? Olhando o mundo real pode-se ver vários objetos: mesa, cadeiras, alunos, professores etc. Esses objetos.
Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones.
Análise Orientada a Objetos
Atribuição de Responsabilidades em Projeto OO
1 Introdução aos padrões de projeto (GoF) Conceitos preliminares –Mecanismos de herança –Princípio de Substituição de Liskov –Acoplamento concreto x Acoplamento.
Template Method Intenção: definir o esqueleto de um algoritmo em uma operação, postergando (delegando) a definição de alguns passos desse algoritmo para.
Modelagem de Sistemas de Informação
Introdução ao paradigma de programação: Orientado a Objetos
Introdução a diagrama de classes e UML
Alexandre Parra Site: Os Pilares da OO em Java Alexandre Parra Site:
Linguagem de Programação II
Linguagem de Programação
Métodos Programação II 1 Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Classes Abstractas.
Contratos Modelagem Funcional.
Herança e Polimorfismo
Linguagem técnica de programação I Java i
Polimorfismo em C#.
Transformação ODMG Relacional. Implementação Relacional de BDs OO Transformação Esquema Objeto Esquema Relacional Transformação Esquema Objeto Esquema.
Banco de Dados Aplicado ao Desenvolvimento de Software - BDD
Espaço-estado e Comportamento
Programação Orientada à Objetos
Aula 3 CoL, atividade Polimorfismo (late binding) Modificador final Modificador abstract Interfaces Herança múltipla Atribuição, Construtores, Destrutores,
Estudo dos Conceitos e Paradigmas de Programação
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Classes Abstratas e Interfaces.
DI UFPE Sistema de Tipos de Eiffel A Proposal for Making Eiffel Type-safe W. R. Cook ECOOP’87 Proceedings Cambridge University Press, 1989.
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
Princípios de Análise e Projeto Orientados a Objetos com UML
Herança em POO Importante:
© Ricardo Pereira e Silva
Aula prática 14 Orientação a Objetos – C++ Parte 2
Estruturas de Dados Aula 8: Tipos Abstratos de Dados 30/04/2014.
Projeto Orientado aos Objetos Prof. Wolley W. Silva
Análise Orientado aos Objetos Prof. Wolley W. Silva
Modelagem de Entidade/Objetos de Domínio com Diagrama de Classes
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Elementos de um Sistema de Agentes Móveis Agentes e Places Comportamento de Agentes Comunicação Padronização OMG/MASIF.
Orientação a Objetos usando Java
Polimorfismo.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Generalização e herança Agregação e composição
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
Paradigmas da Programação – Semestre 2 – Aula 1 Professores: Fábio de Paula Santos Eduardo Mantovani
A Linguagem Formal de Especificação VDM-SL
Paradigmas de Programação –Aula 7 Lab 2 Professores: Eduardo Mantovani Fábio Paula Santos.
Orientação a Objetos com UML
Bruno Inojosa MCP .NET Framework
Atributos e Métodos Estáticos
Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel.
Classes abstratas São classes das quais não se pode instanciar objetos. São classes das quais não se pode instanciar objetos. Seu objetivo é ser herdada.
Orientação a Objetos com UML. Copyright © 2006 Qualiti. Todos os direitos reservados. Qualiti Software Processes Análise e Projeto OO com UML e Padrões|
2 – Revisão de Programação Orientada a Objetos
Visão Geral de Orientação a Objetos com UML Copyright © 2006 Qualiti. Todos os direitos reservados. Qualiti Software Processes OO e UML | 2 Objetivos.
Visão Geral e Conceitos. Copyright © 2006 Qualiti. Todos os direitos reservados. Qualiti Software Processes Análise e Projeto OO com UML e Padrões| 2.
Herança. É o compartilhamento de características entre classes com base em um relacionamento hierárquico. – Possibilita a derivação de tipos mais específicos.
Prof.: Bruno Rafael de Oliveira Rodrigues. Herança Possibilita a uma classe usar campos ou métodos definidos em outra classe. Assim a classe pai possui.
Aula 5 – Padrão Decorator
Transformação ODMG  Relacional. Implementação Relacional de BDs OO Transformação Esquema Objeto  Esquema Relacional.
Visão Geral de Orientação a Objetos com UML Copyright © 2002 Qualiti. Todos os direitos reservados. Qualiti Software Processes OO e UML | 2 Objetivos.
Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos.
1. 2 Programação Orientada a Objetos Prof. Maurício Rodrigues de Morais
Análise e Projeto de Sistemas Análise & modelagem conceitual Prof. Edjandir Corrêa Costa
Padrões de Projeto Aula 5 – Padrão Decorator 1. QuickReview: Observer Definição: Quando usar? Tipo de padrão? Como? 2.
Transcrição da apresentação:

Conformidade de tipo e comportamento fechado

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

ÁrvoreUtilizandoMatriz Por exemplo: <<type>> Grupo {abstrato} <<class>> ÁrvoreUtilizandoID acrescentarElementos (novoElemento) {abstrato} <<implements>> <<class>> ÁrvoreUtilizandoMatriz <<type>> Árvore acrescentarElementos (novoElemento) {abstrato} <<implements>> Conformidade de tipo

[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

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

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

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

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

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

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

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

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

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

Mover (distância: comprimento) Caso 1 (sem problemas!) mover tr1: Polígono Mover (distância: comprimento) Conformidade de tipo

Caso 2 (com problemas!) ? acrescentarVértice tr1: Polígono (novoVértice: Ponto) Conformidade de tipo

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