Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouNathalie Tavares Benevides Alterado mais de 8 anos atrás
1
HERANÇA Dilvan Moreira (baseado no livro Prog. Orientada a Objetos em Java)
2
Leitura Capítulo 8 (Prog. Orient. a Obj. usando Java - 4th Edition)
3
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.
4
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.
5
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
6
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
7
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.
8
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.
9
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.
10
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
11
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
12
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
13
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
14
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
15
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
16
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() {... }... }
17
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!) [ ]
18
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
19
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
20
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
21
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
22
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
23
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
24
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. }
25
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. }
26
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
27
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
28
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.
29
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
30
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
31
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
32
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!
33
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
34
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);
35
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.)
36
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
37
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
38
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
39
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
40
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.
41
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!)
42
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.
43
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.
44
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)
45
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?
46
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...
47
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.
48
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
49
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).
50
Perguntas?
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.