A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "HERANÇA Dilvan Moreira (baseado no livro Prog. Orientada a Objetos em Java)"— Transcrição da apresentação:

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?


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

Apresentações semelhantes


Anúncios Google