Técnicas de Programação

Slides:



Advertisements
Apresentações semelhantes
Linguagens de Programação
Advertisements

PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
Modelagem Orientada a Objetos com UML Cursos para a CTI - IME/USP Dairton Bassi, Hugo Corbucci e Mariana Bravo Departamento de Ciência.
Modelagem Orientada a Objetos com UML Cursos para a CTI - IME/USP Dairton Bassi, Hugo Corbucci e Mariana Bravo Departamento de Ciência.
Modelagem Orientada a Objetos com UML Cursos para a CTI - IME/USP Dairton Bassi, Hugo Corbucci e Mariana Bravo Departamento de Ciência.
Programação em Java Threads Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Aplicativo “Wiki” de Conhecimento para os Programas de Pós-Graduação da FURB Anderson Felipe Weege Orientador: Oscar Dalfovo.
Diagrama de Implementação Professor Sandro Carvalho.
Ambiente Virtual de Avaliações Utilizando Certificados Digitais Fernando Gevard – Acadêmico Paulo Fernando da Silva - Orientador.
Estrutura de Dados (DPADF 0056) Aula 7 – Encadeamento de Memória Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior.
Classe Abstrata É uma classe que não pode ser instanciada; Freqüentemente aparece no topo de uma hierarquia de classes de programação orientada a objetos;
Gerência de Arquivos.
Polimorfismo e suas aplicações em C++.
Estruturas do Sistema Operacional
Projecto de bases de dados relacionais:
Criação: Caroline Brasileiro Atualização: Laura Matos
ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Introdução OO.
Análise e Projeto de Sistemas II
UML – Diagramas de Objectos
Introdução a CMS Prof.: Marcelo Torres Contatos:
Administração de Gerência de servidores
Introdução Java.
PROGRAMAÇÃO ORIENTADA A OBJETO - JAVA
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
Tema 4 - Modelagem ER: Técnicas e Ferramentas
Projeto de PLP (2006.1) Extensão da Linguagem OO1
Java: Interfaces Alcides Calsavara.
Diagrama de Atividade Prof. Thales Castro.
Singleton e Template Method
Criação e manipulação de objetos
Introdução à programação orientada por objetos
Orientação a Objetos - Programação em C++
Programação Orientada a Objetos
4 CONCEITOS BÁSICOS EM POO
Programação Orientada a Objetos
Técnicas de Programação
Modelagem de Banco de Dados através do ERwin

Revisão Requisitos e Casos de Uso
Desenvolvimento em Camadas
BANCO DE DADOS I.
Projeto Orientada a Objetos
UML Diagrama de Classes
Modelagem de Objetos de Domínio com Diagrama de Classes
Sistemas Operacionais Aula 3
MER – Modelo de Entidade Relacionamento
Rosemary Silveira Filgueiras Melo
Programação Orientada a Objetos*
DIAGRAMA DE CASOS DE USO
Rosemary Silveira Filgueiras Melo
Programação Orientada a Objetos
3.1.7 Variáveis de Classe e Instância
Programação Orientada a Objetos
Laboratório I Mateus Raeder.
Instalação e Manutenção de Computadores Técnico em Informática MAI1
Prof.: Bruno Rafael de Oliveira Rodrigues
Programa Objetivo Segurança Funcionalidades Acesso Notícias Manutenção
Computação Eletrônica Vetores e Matrizes
Técnicas de Programação
Estruturas de Dados em C
Alexandre Mota Análise do Sistema Alexandre Mota
Modelagem Entidade-Relacionamento (MER)
Apresentação da Disciplina Disciplina: Linguagens de Programação Prof. Antonio Oseas.
Paradigma de Orientação a Objetos
Compilação de Linguagens OO
CAPÍTULO 10 Segurança.
BANCO DE DADOS.
Programação de Computadores II
Sobre a linguagem Criado em 1995 por Brendan Eich da Netscape nomeada inicialmente de Mocha, posteriormente LiveScript e por fim JavaScript. É um linguagem.
Transcrição da apresentação:

Técnicas de Programação Herança Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.edu.br rangeldequeiroz@gmail.com Carga Horária: 60 horas

Herança Tópicos 9.1 Introdução 9.2 Classes Base e Classes Derivadas 9.3 Relação entre Classes Base e Classes Derivadas 9.4 Estudo de Caso 9.5 Construtores e Destrutores em Classes Derivadas 9.6 Heranças public, protected e private 9.7 Engenharia de Software com Herança

9.1 Introdução Motivação: Manipulação de correio eletrônico Conceito de uma mensagem de correio Conceito de uma caixa postal Operações típicas Ler mensagens Remover mensagens Enviar mensagens

9.1 Introdução

9.1 Introdução

9.1 Introdução MensagemTexto e MensagemAudio apresentam vários aspectos não desejáveis em boas práticas de programação: Código repetido Dificuldade de criação de novos tipos de mensagens MensagemVideo

9.1 Introdução MensagemTexto e MensagemAudio apresentam vários aspectos não desejáveis em boas práticas de programação: Dificuldade de manutenção Pequena alteração pode implicar alterações em várias partes do código  Possibilidade de introdução de falhas

9.1 Introdução Que tal criar uma classe Mensagem? Mensagem MensagemTexto MensagemAudio

9.1 Introdução Refatoração de Código I Integração de todos os trechos em comum, observando-se atentamente as diferenças Uma MensagemTexto não contém um arquivo de áudio Uma MensagemAudio tampouco contém conteúdo de texto

9.1 Introdução Refatoração de Código II Comportamentos comuns entre MensagemTexto e MensagemAudio Remetente, assunto, data de envio Status Lida (ou não), excluída (ou não) Possibilidade de execução de várias ações Excluir, marcar como não excluída, marcar como não lida, exibir

9.1 Introdução Herança I Reusabilidade do código Criação de uma nova classe a partir de uma classe existente Um objeto herda os dados e comportamentos de uma classe existente Especialização

9.2 Herança Herança II Especialização Classe Base Classe Derivada Contém o comportamento que é compartilhado (Mensagem) Classe Derivada Contém as diferenças que caracterizam MensagemTexto e MensagemAudio

9.2 Herança Herança Classe Derivada herda da Classe-Base Grupos de objetos mais específicos Comportamentos herdados da Classe-Base Comportamentos adicionais

9.2 Herança Hierarquia de Classes I Classe Base Direta Explicitamente herdada (um nível acima na hierarquia) Classe Base Indireta Dois ou mais níveis acima na hierarquia

9.2 Herança Hierarquia de Classes II Herança Única Herança Múltipla Única classe-base Herança Múltipla Múltiplas classes-base

9.2 Classes-Base e Classes Derivadas Hierarquia de Herança Relacionamentos de Herança: hierarquia em árvore Classe-Base Fornecimento dos dados e comportamentos para as outras classes Classe Derivada Herança dos dados e comportamentos de outras classes

9.2 Classes-Base e Classes Derivadas Exemplo 01 – Hierarquia de Herança para MembrosDoCampus MembroDoCampus Herança Única Servidor Aluno ExAluno Herança Única Administrador Professor Herança Múltipla Professor_Administrador

9.2 Classes-Base e Classes Derivadas Exemplo 01 – Hierarquia de Herança para FormasGeometricas

9.2 Classes-Base e Classes Derivadas “é um” vs. “tem um” “tem um” Composição Objeto contém um ou mais objetos de outras classes como membros Exemplo Carro tem rodas, tem direção, tem motor

9.2 Classes-Base e Classes Derivadas “é um” vs. “tem um” “é um” Implica que tudo que um objeto da classe-base faz pode ser feito por um objeto da classe derivada Portanto, onde um objeto da classe base aparece, pode-se inserir um objeto de uma classe derivada

9.2 Classes-Base e Classes Derivadas MensagemTexto "é um tipo de" Mensagem MensagemAudio "é um tipo de" Mensagem MensagemMissaoImpossivel "é um tipo de" MensagemTexto m é uma MensagemTexto O que acontece ao se escrever m = new MensagemMissaoImpossivel(...)

9.2 Classes-Base e Classes Derivadas Um objeto de uma classe também é um objeto de outra classe Exemplo: Retangulo é um quadrilátero Classe Retangulo herda da classe Quadrilatero Quadrilatero: classe-base Retangulo: classe derivada

9.2 Classes-Base e Classes Derivadas A Classe-Base geralmente representa um grupo mais geral que a derivada Exemplo: Classe-Base: Veículo Carros, caminhões, botes, bicicletas, … Classe Derivada: Carro Subconjunto menor e mais específico de veículos

9.2 Classes-Base e Classes Derivadas Exemplos Classe-Base: Aluno Classes Derivadas: Aluno_Graduacao, Aluno_Mestrado Classe-Base: Forma_Geometrica Classes Derivadas: Circulo, Triangulo, Quadrilatero

9.3 Estudo de Caso Classes Abstratas I Não produzem instâncias Agrupam características e comportamentos que serão herdados por outras classes Fornecem padrões de comportamento que serão implementados nas suas subclasses. Podem ter métodos com implementação definida.

9.3 Estudo de Caso Classes Abstratas II area calcularArea {abstrato} Atributos Operações Figura calcularArea {abstrato} informarArea area

9.3 Estudo de Caso Classes Abstratas III area calcularArea lado1*lado2 Atributos Operações Triangulo calcularArea lado1*lado2 base*altura/2 Forma calcularArea {abstrato} informarArea area Retangulo

9.3 Estudo de Caso Polimorfismo Possibilidade de se solicitar um serviço a um objeto, cuja execução é função do tipo de objeto instanciado O objeto solicitante não necessita conhecer especificamente o tipo do objeto receptor. Retangulo Triangulo Atributos Atributos Operações Operações calcularArea lado1*lado2 calcularArea base*altura/2

9.3 Estudo de Caso Relacionamentos Vínculos existentes entre classes de um dado contexto de POO Associação Agregação Composição Dependência

9.3 Estudo de Caso Relacionamentos - Associações e Ligações Mecanismos adotadosd para estabelecer relacionamentos entre objetos e classes. Associação Descrição de um conjunto de ligações potenciais. Aluno Turma Atributos 1 n Atributos Operações Operações n 1

9.3 Estudo de Caso Relacionamentos - Agregação I Relacionamento do tipo “é parte de”, a partir do qual objetos representantes de componentes são associados a objetos representantes de uma montagem. Forma transitiva de associação com alguma semântica adicional Se B é parte de A e C é parte de B, então C é parte de A A D B C B D B D

9.3 Estudo de Caso Relacionamentos - Agregação II Faz parte do Retângulo Desenho Faz parte do Atributos Atributos Operações Elipse Operações Faz parte do Atributos Operações

9.3 Estudo de Caso Herança em C++

9.4 Estudo de Caso Herança em C++ - Exemplo

9.4 Estudo de Caso

9.4 Estudo de Caso

9.4 Estudo de Caso

9.4 Estudo de Caso

9.4 Estudo de Caso

9.4 Estudo de Caso

9.4 Estudo de Caso

9.4 Estudo de Caso Funções virtuais são declaradas na classe-base e redefinidas nas classes derivadas Compilador  Garantia de que a função correta é invocada para o objeto usado

9.4 Estudo de Caso Polimorfismo Obtenção do comportamento correto das funções, independentemente do tipo exato de objeto (classe base ou derivada) que é usado

9.4 Estudo de Caso Uso de funções virtuais Manipulação de objetos via apontador

9.4 Estudo de Caso

9.5 Construtores e Destrutores em Classes Derivadas Instância de objetos de classes derivadas Chamada encadeada de construtores A classe derivada invoca o construtor da Classe-Base Implícita ou explicitamente Hierarquia da herança Último construtor chamado na cadeia Primeiro construtor a terminar a execução

9.5 Construtores e Destrutores em Classes Derivadas Instância de objetos de classes derivadas Chamada encadeada de construtores Hierarquia da herança Exemplo: Ponto3/Círculo4/Cilindro Construtor Ponto3 chamado por último Ponto3 termina primeiro a execução Inicialização de membros de dados O construtor de cada Classe-Base inicializa seus membros

9.5 Construtores e Destrutores em Classes Derivadas Destruição de objetos da classe derivada I Chamadas dos destrutores em cadeia Ordem reversa da chamada de construtores Destrutores das classes derivadas chamados primeiro

9.5 Construtores e Destrutores em Classes Derivadas Destruição de objetos da classe derivada II Chamadas dos destrutores em cadeia Destrutor da Classe-Base logo acima na hierarquia Continua subindo na hierarquia até a última Classe-Base Após a chamada do último destrutor o objeto é removido da memória

9.5 Construtores e Destrutores em Classes Derivadas Construtores, destrutores e operadores de atribuição da Classe- Base Não herdados pela classe derivada Construtores e operadores de atribuição da classe derivada podem chamar Construtores Operadores de Atribuição

9.5 Construtores e Destrutores em Classes Derivadas

9.6 Tipos de Herança Tipos de Herança public private protected

9.7 Herança public public Membros public da classe-pai são public na classe derivada. Podem ser acessados diretamente Membros protected da classe-pai são protected na classe derivada. Podem ser acessados via funções-membros e friends da Classe-Base ou da classe derivada

9.7 Herança public public Membros private da classe-pai são invisíveis à classe derivada. Podem ser acessados somente via funções-membros da Classe-Base.

9.8 Herança protected protected I Membros public da classe-pai são protected na classe derivada. Podem ser acessados via funções-membros e friends da Classe-Base ou da classe derivada

9.8 Herança protected protected II Membros protected da classe-pai são protected na classe derivada. Podem ser acessados via funções-membros e friends da Classe-Base ou da classe derivada

9.8 Herança protected protected III Membros private da classe-pai são invisíveis à classe derivada. Podem ser acessados somente via funções-membros da Classe-Base.

9.8 Herança private private I Membros public da classe-pai são private na classe derivada. Podem ser acessados via funções-membros e friends da Classe-Base ou da classe derivada Membros protected da classe-pai são private na classe derivada. Podem ser acessados via funções-membros e friends da Classe-Base ou da classe derivada

9.9 Herança private private II Membros private da classe-pai são invisíveis à classe derivada. Podem ser acessados somente via funções-membros da Classe-Base.

9.10 Síntese Tipos de Herança I public Cada objeto da classe derivada é objeto da classe-base Objeto da classe-base não é necessariamente objeto da classe derivada Todo carro é um veículo, mas nem todo veículo é um carro

9.10 Síntese Tipos de Herança II public Possibilidade de acesso a membros não-privados da Classe-Base Classes-base podem de fato modificar atributos privados de classes-base Via funções não-privadas

9.10 Síntese Tipos de Herança III private protected Alternativa à composição protected Raramente utilizada

9.10 Síntese Herança public Especificação class FormaBiDimensional:public Forma_Geometrica FormaBiDimensional herda de FormaGeometrica Membros private da Classe-Base Herdados mas não acessíveis diretamente Acessíveis por membros herdados da Classe-Base

9.10 Síntese Herança public Membros public e protected da Classe-Base Herdados com acesso aos membros originais Funções friend Não herdadas

9.10 Síntese Acesso a membros protected Nível intermediário de segurança entre private e public Membros protected são acessíveis a: Membros de classes-base friends de classes-base Membros de classes derivadas friends de classes-derivadas

9.10 Síntese Acesso a membros protected Membros de classes derivadas Referem-se aos membros protected e public herdados através dos nomes originais

9.11 Engenharia de Software e Herança Personalização de software existente Herança de classes existentes Inclusão de membros adicionais Redefinição de classes base Não é possível acessar o código da Classe-Base diretamente Link para o código-objeto

9.11 Engenharia de Software e Herança Personalização de software existente Vendedores independentes de software (ISV) Desenvolvimento de código proprietário para venda/licenciamento Disponível no formato código-objeto Usuários derivam novas classes Sem acessar o código proprietário do ISV

Considerações Revisivas I Classe  Representação lógica de algo do mundo real. Especificação da natureza e funcionalidade de um objeto do mundo real Exemplo: Pessoa Objeto  Representação física de uma classe. Exemplo: Eustáquio

Considerações Revisivas II Atributos  Características do objeto representado na classe Exemplo: Telefone de Eustáquio Métodos (Funções-membros)  Representam os comportamentos e funcionalidades da classe

Considerações Revisivas III Herança Capacidade de uma classe de herdar os dados e comportamentos de uma classe existente. Exemplo: Professor é uma Pessoa Professor herda as características de Pessoa

rangel@dsc.ufcg.edu.br, rangeldequeiroz@gmail.com José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.edu.br, rangeldequeiroz@gmail.com UNIVERSIDADE FEDERAL DE CAMPINA GRANDE CENTRO DE CIÊNCIAS E TECNOLOGIA DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO