HERANÇA Dilvan Moreira (baseado no livro Prog. Orientada a Objetos em Java)

Slides:



Advertisements
Apresentações semelhantes
Paulo Marques Hernâni Pedroso
Advertisements

Java Básico Orientação a Objeto Marco Antonio Software Architect Fev/2008.
Herança, Polimorfismo e Classes Abstratas em Java
Prof. Thiago Pereira Rique
Java: Pacotes e Modificadores de Visibilidade
Persistência de objetos em arquivo texto usando Java
Java: Pacotes e Modificadores de Visibilidade
De 17 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes Aula.
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.
Iniciação ao Java – Márcio F. Campos
Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones.
Polimorfismo e Acoplamento Dinâmico
Introdução ao paradigma de programação: Orientado a Objetos
Integração entre objetos
Programação orientada a objetos com Java
Herança e Polimorfismo
Classes e objetos P. O. O. Prof. Grace.
Curso de extensão em Desenvolvimento Web
Classes, Objetos e Encapsulamento
Programação Orientada a Objetos com Java
PLC – Introdução a POO Java
Sobrecarga e Encapsulamento
Rodrigo Cristiano Silva
Programação I Aula 2 (Métodos)
Entendendo as definições de classe
OPERADORESOPERADORES SCJP – Otimize-TI. Operadores Java Resultado: Maioria das operações é um booleano ou numérico. Não podem ser sobrecarregados (Existem.
Herança em Java.
Classes, Objetos, Atributos e Métodos JAVA
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Classes Abstratas e Interfaces.
Professora Lucélia Oliveira
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
Acoplamento e Coesão Modelagem e Programação Orientada a Objetos
Aula prática 14 Orientação a Objetos – C++ Parte 2
Programação I Aula 6 (Herança, Polimorfismo e Encapsulamento)
Implementação Orientada a Objetos – Aula 03
Análise Orientado aos Objetos Prof. Wolley W. Silva
Programação Orientada à Objetos
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Aula Prática 4 Monitoria IP/CC (~if669).
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
1 Marcio de Carvalho Victorino JAVA. 2 Declaração de Atributos [ ] [transient] [volatile] [static] [final] ; controle de acesso –public, package (default),
Herança e Polimorfismos
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Herança Modelagem e Programação Orientada a Objetos
Bruno Inojosa MCP .NET Framework
Factory.
CONEXÕES DE SABERES Amirton Chagas – Paola Accioly –
OO com Java Luiz Carlos d´Oleron Roteiro de aula.
Introdução a Orientação a Objetos
Herança.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Módulo II Capítulo 1: Orientação a Objetos
Paradigmas da Programação – Semestre 1 – Aula 7 Professor: Eduardo Mantovani )
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.
Implementação Orientada a Objetos – Aula 08 Herança, sobrescrita de métodos e polimorfismo Prof. Danielle Martin Universidade de Mogi das Cruzes
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Raniere ferreira do prado
Java Como Programar, 8/E Deitel/Deitel, 8e. Java – Como programar Copyright © 2010 Pearson Education Slide 1.
Felipe Nunes Flores – Programa de Educação Tutorial.
1. 2 Programação Orientada a Objetos II Prof. Maurício Rodrigues de Morais
INTERAÇÃO ENTRE OBJETOS Dilvan Moreira (baseado no livro Prog. Orientada a Objetos em Java)
QUALIDADE DE CÓDIGO Dilvan Moreira (baseado no livro Prog. Orientada a Objetos em Java)
Herança em Java Curso: Informática Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
MÉTODOS Dilvan Moreira (baseado no livro Big Java)
AULA Mais Herança Curso: Informática (Subseqüente) Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Herança e Polimorfismo Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
POLIMORFISMO E INTERFACES Dilvan Moreira (baseado no livro Prog. Orientada a Objetos em Java)
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
CLASSES EM JAVA Dilvan Moreira (baseado no livro Big Java)
Transcrição da apresentação:

HERANÇA Dilvan Moreira (baseado no livro Prog. Orientada a Objetos em Java)

Leitura  Capítulo 8 (Prog. Orient. a Obj. usando Java - 4th Edition)

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 3 Lembrando: Acoplamento  O acoplamento se refere às ligações entre distintas unidades de um programa.  Se duas classes dependem rigorosamente de muitos detalhes uma da outra, dizemos que são fortemente acopladas.  Nosso objetivo é o acoplamento fraco.

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 4 Lembrando: Coesão  A coesão refere-se ao número e à diversidade de tarefas pelas quais uma única unidade de uma aplicação é responsável.  Se cada unidade é responsável por uma única tarefa lógica, dizemos que ela tem alta coesão.  A coesão se aplica a classes e métodos.  Buscamos a alta coesão.

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 5 Lembrando: Acoplamento fraco  Se duas classes dependem rigorosamente de muitos detalhes uma da outra, dizemos que são fortemente acopladas  O acoplamento fraco possibilita:  entender uma classe sem ler outras  mudar uma classe sem afetar outras  assim: melhora a capacidade de manutenção

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 6 Lembrando: Alta coesão  Se cada unidade é responsável por uma única tarefa lógica, dizemos que ela tem alta coesão.  A alta coesão possibilita:  entender o que uma classe ou método faz  usar nomes descritivos  reusar classes ou métodos

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 7 Lembrando: Coesão  Métodos: Um método deve ser responsável por apenas uma tarefa bem definida.  Classes: As classes devem representar uma entidade única, bem definida.

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 8 Lembrando: Design baseado na responsabilidade  Questão: onde adicionar um novo método (que classe)?  Cada classe deve ser responsável por manipular seus próprios dados.  A classe que deter os dados deve ser responsável por processá-los.  RDD resulta em acoplamento fraco.

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 9 Lembrando:  Duplicação de código  Sinal de baixa coesão de métodos  Encapsulamento  Reduz acoplamento  Design baseado na responsabilidade  Reduz acoplamento  Acoplamanto implícito  Gera bugs difíceis de encontrar  Código mal estruturado  grande quantidade de trabalho para alteraração.

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 10 Principais conceitos a serem abrangidos  Herança  Subtipagem  Substituição  Variáveis polimórficas

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 11 O exemplo do DoME "Banco de dados de entretenimento multimídia"  armazena detalhes sobre CDs e DVDs  CD: título, artista, número de faixas, tempo de reprodução, flag go-it, comentário  DVD: título, artista, número de faixas, tempo de reprodução, flag go-it, comentário  permite (posteriormente) pesquisar informações ou imprimir listas

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 12 Objetos DoME

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 13 Classes DoME metade superior mostra os campos metade inferior mostra os métodos

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 14 Modelo de objeto DoME

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 15 Diagrama de classes

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 16 Código-fonte do CD incompleto (comentários!) [] public class CD { private String title; private String artist; private String comment; public CD(String theTitle, String theArtist) { title = theTitle; artist = theArtist; comment = " "; } public void setComment(String newComment) {... } public String getComment() {... } public void print() {... }... }

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 17 Código-fonte do DVD public class DVD{ private String title; private String director; private String comment; public DVD(String theTitle, String theDirector) { title = theTitle;director = theDirector;comment = " "; } public void setComment(String newComment) {... } public String getComment() {... } public void print() {... }...} incompleto (comentários!) [ ]

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 18 class Database { private ArrayList cds; private ArrayList dvds;... public void list() { for(CD cd : cds) { cd.print(); System.out.println(); // linha em branco entre itens } for(DVD dvd : dvds) { dvd.print(); System.out.println(); // linha em branco entre itens } Código-fonte de Database

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 19 Crítica de DoME  duplicação de código  classes CD e DVD muito semelhantes (grande parte é idêntica)  torna manutenção difícil/mais trabalho  introduz risco de bugs por meio da manutenção incorreta  duplicação de código também na classe Database

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 20 Utilizando herança

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 21 Utilizando herança  define uma superclasse : item  define subclasses para Video e CD  a superclasse define atributos comuns  as subclasses herdam os atributos de superclasse  as subclasses adicionam atributos próprios

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 22 Hierarquias de herança

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 23 Herança em Java public class Item {... } public class CD extends Item {... } public class DVD extends Item {... } nenhuma alteração aqui alteração aqui

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 24 Superclasse public class Item { private String title; private int playingTime; private boolean gotIt; private String comment; // construtores e métodos omitidos. }

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 25 Subclasses public class CD extends Item { private String artist; private int numberOfTracks; // construtores e métodos omitidos. } public class DVD extends Item { private String director; // construtores e métodos omitidos. }

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 26 public class Item { private String title; private int playingTime; private boolean gotIt; private String comment; /** * Inicializa os campos do item. */ public Item(String theTitle, int time) { title = theTitle; playingTime = time; gotIt = false; comment = ""; } // métodos omitidos } Herança e construtores

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 27 public class CD extends Item { private String artist; private int numberOfTracks; /** * Constructor for objects of class CD */ public CD(String theTitle, String theArtist, int tracks, int time) { super(theTitle, time); artist = theArtist; numberOfTracks = tracks; } // métodos omitidos } Herança e construtores

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 28 Chamada de construtor de superclasse  Os construtores de superclasse devem sempre conter uma chamada 'super'.  Se nenhuma for escrita, o compilador insere uma (sem parâmetros):  funciona somente se a superclasse tiver um construtor sem parâmetros.  Deve ser a primeira instrução no construtor de subclasse.

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 29 Adicionando mais tipos de item

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 30 Hierarquias mais profundas

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 31 Revisão (até esse ponto) A herança (até esse ponto) ajuda:  A evitar a duplicação de código  A reutilizar código  A facilitar a manutenção  Extensibilidade

Novo código-fonte de Database Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearso Education slide 32 public class Database{ private ArrayList items; /** * Cria uma classe Database vazia. */ public Database() { items = new ArrayList (); } /** * Adiciona um item ao banco de dados. */ public void addItem(Item theItem) { items.add(theItem); }...} evita duplicação de código no cliente!

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 33 /** * Imprime uma lista de todos os CDs armazenados * atualmente e DVDs ao terminal de texto. */public void list(){ for(Item item : items) { item.print(); // Imprime uma linha em branco entre itens System.out.println(); } Novo código-fonte de Database

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 34 Subtipagem Primeiro, tínhamos: public void addCD(CD theCD) public void addVideo(DVD theDVD)Agora, temos: public void addItem(Item theItem) Chamamos esse método com: DVD myDVD = new DVD(...); database.addItem(myDVD);

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 35 Subclasses e subtipos  Classes definem tipos.  Subclasses definem subtipos.  Objetos de subclasses podem ser usados onde os objetos de supertipos são necessários. (Isso é chamado de substituição.)

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 36 Subtipagem e atribuição Vehicle v1 = new Vehicle();Vehicle v2 = new Car();Vehicle v3 = new Bicycle(); os objetos de subclasse podem ser atribuídos a variáveis de superclasse

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 37 Subtipagem e transmissão de parâmetro public class Database { public void addItem(Item theItem) {... } DVD dvd = new DVD(...); CD cd = new CD(...); database.addItem(dvd); database.addItem(cd); os objetos de subclasse podem ser atribuídos a variáveis de superclasse

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 38 Diagrama de objetos

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 39 Diagrama de classes

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 40 Variáveis polimórficas  As variáveis de objeto em Java são polimórficas. (Podem armazenar objetos de mais de um tipo.)  Podem armazenar objetos do tipo declarado ou subtipos do tipo declarado.

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 41 Coerção  É possível atribuir o subtipo ao supertipo.  Não é possível atribuir o subtipo ao supertipo! Vehicle v; Car c = new Car(); v = c; // correto; c = v; erro de tempo de compilação!  A coerção corrige isso : c = (Car) v; (ok apenas se o veículo for de fato um carro!)

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 42 Coerção  Um tipo de objeto entre parênteses.  Usado para superar 'perda do tipo'.  O objeto não é alterado de modo algum.  Uma verificação em tempo de runtime é feita para garantir que o objeto realmente é desse tipo:  ClassCastException se não for!  Utilize-a com moderação.

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 43 A classe Object Todas as classes herdam de Object.

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 44 Coleções polimórficas  Todas as coleções são polimórficas.  Elementos são do tipo Object. public void add(Object element) public Object get(int index)

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 45 Coleções e tipos primitivos  Todos os objetos podem ser inseridos em coleções... ... porque coleções aceitam elementos do tipo Object... ... e todas as classes são subtipos de Object.  Excelente! Mas o que dizer dos tipos simples?

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 46 Classes wrappers  Tipos primitivos (int, char, etc) não são objetos. Eles devem ser empacotados em um objeto!  Existem classes empacotadoras para todos os tipos simples: tipo simplesclasse empacotadora intInteger floatFloat charCharacter...

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 47 Classes wrappers int i = 18; Integer iwrap = new Integer(i); … int value = iwrap.intValue(); empacota o valor desempacota-o Na prática, autoboxing e unboxing significam que não precisamos fazer isso com freqüência.

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 48 Autoboxing e unboxing private ArrayList markList; … public void storeMark(int mark) { markList.add(mark); } int firstMark = markList.remove(0); autoboxing unboxing

Programãção orientada com objetos JAVA – Uma introdução prática utilizando o BlueJ Barnes|Kölling © 2008 by Pearson Education slide 49 Revisão  A herança permite a definição de classes como extensões de outras classes.  Herança:  evita a duplicação de código  permite reuso de código  simplifica o código  simplifica a manutenção e extensão  Variáveis podem armazenar objetos de subtipo.  Subtipos podem ser usados sempre que se esperar objetos de supertipo (substituição).

Perguntas?