Orientação a Objetos com Java Julio Cesar Nardi [email protected] 2011/2 Aula 05: Relacionamentos e Herança Objetivos: Compreender como Classes e Objetos podem se relacionar através de: Associação, Composição e Herança; Utilizar os conceitos de OO aprendidos em aplicações Java; Agenda Conceitos OO Objeto, Classe, Atributo, Método, Associação, Composição, Herança Abstração, Encapsulamento, Modularidade, Hierarquia, Reuso Sobrecarga, Polimorfismo, Ligação Dinâmica OO em Java Classes, Atributos, Métodos, Construtores, Objetos Extensão, Associações, Classes Abstratas OO e Java OO: Estruturação de Classes Classes e Objetos podem estar estruturados de diferentes formas: Associações e Ligações Composição Herança OO e Java Associações e Ligações Objetos relacionam-se com outros objetos Ligação é uma conexão entre objetos Associação é uma conexão entre classes Uma associação descreve um conjunto de potenciais ligações Associação é uma conexão do tipo “tem-um” ou “tem-vários” Disciplina 0..* 1 Professor OO e Java Composição Relacionamento do tipo “todo-parte” ou “uma-parte-de”; É utilizada na manipulação de objetos complexos, compostos por outros objetos; Tipo forte de associação. Membro * 1 Pessoa OO e Java Herança Herança é um mecanismo para modelar similaridades entre classes Possibilita reutilização, captura de características comuns e definição incremental de classes Facilita a modificação de modelos Alguns objetos não se enquadram adequadamente em uma classe porque possuem propriedades a mais ou diferentes, que precisam ser acrescentadas ou redefinidas OO e Java Herança (2) Subclasses herdam de superclasses, compartilhando suas propriedades e comportamentos Relacionamento do tipo “é-um” Automóvel Mamífero Carro Macaco OO e Java OO: Estruturação de Classes Associação: “tem-um” Composição: “todo-parte”, “uma-parte-de” Farol é uma parte de um veículo Herança: “é-um” Disciplina tem um Professor Carro é um Automóvel Estruturação O Motor é uma Peça, que é uma parte de um Carro, que tem várias Válvulas. OO e Java Java: Estruturação de Classes Associações Em Java, associações podem ser implementadas através de atributos ou métodos, ou ambos. Conta numero saldo Cliente 0..* Conta numero : int saldo : double cliente : Client e 1 nome cpf Cliente nome : String cpf : long obterCliente() atribuirCliente() OO e Java Java: Estruturação de Classes Composição Composições são como associações com maior dependência São implementadas da mesma forma OO e Java Java: Estruturação de Classes Herança Uma classe indica de herda (ou estende) de uma outra através da palavra-chave extends. Dessa forma, a subclasse (ou classe filha) recebe todos os atributos e métodos da superclasse (ou classe mãe) A subclasse pode ainda acrescentar outros atributos e métodos, ou modificar os métodos existentes. Exemplo: public class Carro extends Automóvel {...} OO e Java Java: Estruturação de Classes Herança Métodos podem ser redefinidos, ou “sobreescritos” na subclasse; Métodos abstratos podem/devem ser implementados; A Herança pode ser feita em quantos níveis forem necessários; Todas as classes de Java, implicitamente, herdam de Object. OO e Java Polimorfismo Polimorfismo é a possibilidade de um objeto assumir várias formas em tempo de execução. Aumenta ainda mais a capacidade de abstração para construção de softwares mais modulares e reutilizáveis. Característica OO na qual se admite tratamento idêntico para objetos ‘diferentes’ baseado em relações de semelhança; Ou seja, onde um objeto de uma classe base é esperado, pode-se aceitar um objeto de qualquer uma de suas subclasses. É utilizado o tempo todo por Coleções OO e Java Conceitos OO Abstração Encapsulamento Modularidade Hierarquia Reuso OO e Java Exercícios (1) Implemente as classes para o contexto: Um aluno (nome, endereço) matricula-se em uma Turma (nome, número de vagas) que tem um professor (nome, endereço) alocado a ela. Implemente os relacionamentos entre as classes; Crie os métodos de encapsulamento de atributos (get e set) em cada uma das classes; Crie uma aplicação que crie 3 alunos, 2 turmas e 2 professores e estabeleça os relacionamentos entre eles. Lembre-se que ainda não vimos como utilizar coleções em Java. OO e Java Exercícios (2) Implemente as classes para o contexto: Numa empresa tem-se três tipos de funcionários: (1) Secretario (nome, salario), (2) Engenheiro (nome, CREA, salario) e (3) Motorista (nome, tipo de habilitação, salario). Crie um método para os funcionários que tem o objetivo de atualizar o salário de cada funcionário, a saber: secretário (10%), engenheiro (20%), motorista (10%). Crie uma aplicação que crie 2 objetos secretários, 2 engenheiros e 2 motoristas e exiba alguns dados destes objetos e atualize seus salários ao chamar o método do item anterior. OO e Java Exercícios (3) Tente utilizar Funcionário como classe abstrata; Tente criar um objeto da classe Funcionário; E se os atributos da classe Funcionário fossem protected, o que mudaria? Isso é uma boa prática? Como o polimorfismo poderia ser aplicado neste exemplo? OO e Java Aula 05: Relacionamentos e Herança Objetivos: Compreender como Classes e Objetos podem se relacionar através de: Associação, Composição e Herança; Utilizar os conceitos de OO aprendidos em aplicações Java;