1 / 35

Programação I Aula 6 (Herança, Polimorfismo e Encapsulamento)

Programação I Aula 6 (Herança, Polimorfismo e Encapsulamento). Prof. Gilberto Irajá Müller. Última atualização 8/4/2009. Herança. A herança permite derivar uma nova classe mais especializada a partir de outra classe mais genérica existente A classe mais genérica é chamada de superclasse

erik
Download Presentation

Programação I Aula 6 (Herança, Polimorfismo e Encapsulamento)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programação IAula 6(Herança, Polimorfismo e Encapsulamento) Prof. Gilberto Irajá Müller Última atualização 8/4/2009

  2. Herança • A herança permite derivar uma nova classe mais especializada a partir de outra classe mais genérica existente • A classe mais genérica é chamada de superclasse • A classe derivada é chamada de subclasse • Herda os atributos (desde que não sejam privates) • Permite adicionar novos atributos (que será visível somente na subclasse) • Em relação aos métodos, a subclasse poderá utilizá-los/herdá-los (superclasse), bem como criar novos métodos e alterá-los • Métodos construtores não são herdados (porém podemos chamá-los dentro do construtor da subclasse)

  3. Classe A Classe B Herança • A representação de Herança (generalização/especialização) utilizando a notação da UML é: • Lembre-se: Cada objeto da classe B também é um objeto da classe A, podendo ter alguns membros diferentes da classe origem Superclasse ou classe-pai Subclasse ou classe filha

  4. Herança • Exemplo O que temos de diferente na subclasse Gerente?

  5. Herança Extends Funcionario? • Exemplo anterior em JAVA Super?

  6. Herança • Sintaxe de herança em JAVA modificadores class nomeSubClasse extends nomeSuperClasse { atributos; métodos; }

  7. Herança • A classe Object Quando criamos uma classe qualquer em JAVA, na verdade, estamos herdando implicitamente da classe Object Exemplo: public class Pessoa { ... } Na verdade, o JAVA traduz como: public class Pessoa extends Object { ... } Estamos herdando de forma indireta nossas classes!

  8. Herança • A classe Object A classe em questão, possui alguns métodos que todas as demais classes irão herdar, como por exemplo: String toString() boolean equals(Object outroObjeto) int hashCode() ... Contudo, para utilizá-los, é recomendável que seja sobrescrito, ou seja, OVERRIDING!

  9. Herança • Exercício 6.1 Lembram da classe Pessoa? Pois bem, faça o diagrama de classes utilizando herança para a classe PessoaJuridica com um novo atributo chamado CNPJ (string) e um método exibeDados() considerando o atributo CNPJ Como ficaria a classe PessoaJuridica em JAVA?

  10. Herança • Membros da subclasse (métodos) • Sobrescrever um método. Para sobrescrever um método na subclasse é necessário que o tipo de retorno, o nome e os parâmetros e seus tipos sejam exatamente iguais. Exemplo: PessoaJuridica.exibeDados(); • Herdar (utilizar) um método da superclasse. Todo método que não é sobrescrito na subclasse, ao ser chamado, será utilizado o método da superclasse. Exemplo: PessoaJuridica.getNome(); • Métodos criados apenas na subclasse, somente poderão ser utilizados na subclasse. Exemplo: funcionario.setNomeiaSecretario(“Pituca”);

  11. Herança • Membros da subclasse (atributos) • Atributos não podem ser sobrescritos, ou seja, não é permitido a alteração de um nome de método da superclasse a partir da subclasse! • Herdar (utilizar) os atributos da superclasse. Porém, não se pode fazer o acesso direto ao atributo, apenas utilizando o seu método de acesso (get ou set). Isso quando o atributo da superclasse é “private”. Exemplo: nome, salario e numeroDeDependentes • Pode-se criar novos atributos. Lembre-se: somente a subclasse poderá acessar o atributo diretamente, ou seja, sem utilização dos métodos de acesso. Usso quando o atributo é declarado como “private”. Exemplo: nomeSecretaria

  12. Herança • Chamada de métodos da subclasse • Quando um objeto chama um determinado método, temos as seguintes situações: • Se é um método da subclasse que sobrescreve um método da superclasse, o da subclasse é acionado (ele esconde o da superclasse) • Se o método chamado só existe na superclasse, ele será acionado (a subclasse herda métodos da superclasse que ela não sobrescreve) • Se o método é exclusivo da subclasse, ele será acionado • Se o método chamado não existe na subclasse, nem na superclasse, nem na superclasse da superclasse, e em nenhuma superclasse hierarquia acima, então acontece um erro.

  13. Herança • Exercício 6.2 Filha f1 = new Filha(); f1.m1(); ___________________ f1.m2(); ___________________ f1.m3(); ___________________ f1.m4(); ___________________

  14. Herança • Construtores da subclasse • Os construtores da superclasse não são herdados pela subclasse, portanto, esta deverá ter seus próprios construtores • Contudo, ao criar um construtor de uma subclasse, precisaremos inicializar os atributos herdados pela superclasse, então, utilizamos a chamada (palavra reservada) super(...) Exemplo: • Obs.: Se o construtor da subclasse não chama um construtor da superclasse, então, o construtor padrão da superclasse é chamado automaticamente. Se a superclasse não tem um construtor padrão, dá erro de compilação.

  15. Herança • Exercício 6.3 Qual o efeito do seguinte construtor na subclasse Gerente quando um objeto é instanciado? public Gerente(String nomeSecretaria) { this.nomeSecretaria = nomeSecretaria; }

  16. Herança • Exercício 6.4 Escreva um outro construtor para a subclasse Gerente que inicialize todos os seus atributos (inclusive o nome da sua secretária)

  17. Herança • Visibilidade • Uma subclasse não possui acesso aos atributos privados da superclasse, ou seja, o único acesso ao atributo se dá através dos métodos de acesso (get e set) • O atributo definido como private é acessível somente pela classe que o declarou • O exemplo a seguir da subclasse gerente ocorrerá erro porque e aonde? public void exibeDados(){ System.out.println(“Nome: “ + nome); System.out.println(“Salário: “ + salario); System.out.println(“Dependentes: “ + numeroDeDependentes); System.out.println("Secretária: " + nomeSecretaria); }

  18. Herança • Visibilidade • A alternativa seria: public void exibeDados(){ super.exibeDados(); System.out.println ("Secretária: " + nomeSecretaria); } • Ou: Declarar os atributos na superclasse (nome, salário e numeroDeDependentes) com a visibilidade protected A visibilidade protected (#), permite acessar diretamente um atributo na subclasse, ou seja, não há necessidade de acesso via método!

  19. Herança • Uso da palavra-chave super • É usada, quando necessária, na subclasse, para chamar construtor ou método da superclasse • Para chamar um método construtor: • A palavra super seguida imediatamente de parênteses chama o construtor da superclasse de mesma assinatura • Neste caso, deve ser a primeira instrução dentro de um construtor da subclasse • Para chamar um método NÃO construtor: • A palavra super seguida de ponto e nome de um método da superclasse, chama o método correspondente da superclasse • Este tipo de chamada pode aparecer em qualquer lugar de qualquer método ou construtor da subclasse

  20. Herança • Uso da palavra-chave super • Exemplo chamando um método construtor • Exemplo chamando um método NÃO construtor

  21. Herança • Exercício 6.5 O que é sobrecarga (OVERLOADING)? O que é sobrescrita (OVERRIDING)?

  22. Herança • Exercício 6.6 Indique o que cada método e construtor são: (i) sobrecarga ou (ii) sobrescrita

  23. Polimorfismo • É a realização de uma tarefa de formas diferentes (poli – muitas; morphos – formas). Uma utilização importante do polimorfismo em Java ocorre na herança, quando dois objetos, sendo um da superclasse e outro da subclasse, respondem diferentemente à mesma chamada de um método • Primeiramente, vamos entender a conversão de um tipo de objeto para outro (upcasting)

  24. Polimorfismo • Exemplo: Pai p; • Declara p como uma referência da superclasse Pai – isto define a vocação de p: referenciar qualquer objeto do tipo Pai. • Em Java, podemos atribuir um objeto da subclasse a uma referência de sua superclasse. (Esta operação é chamada upcasting, de up type casting) • A regra anterior é razoável, pois todo objeto da subclasse É UM objeto da sua superclasse. Então, podemos atribuir a p um objeto Filha: p = new Filha();

  25. Polimorfismo • Exemplo: Observe, a seguir, p acionando métodos: • p.m1(); ________________________ • p.m2(); ________________________ • p.m3(); ________________________ Uma referência de superclasse só reconhece membros disponíveis na superclasse, mesmo que esteja apontando para um objeto de subclasse.

  26. Polimorfismo • Resumindo, o upcastingé a conversão de um objeto de tipo mais específico para um tipo mais genérico, feita implicitamente através de atribuição, mas a partir da conversão só os membros do tipo mais genérico podem ser acessados sem artifícios.

  27. Polimorfismo • Para o nosso exemplo: como acessar o método m3? A resposta está no downcasting (down type casting) • Em Java, a atribuição de um objeto de superclasse a uma referência de subclasse, sem uma coerção explícita, não é permitida. Exemplo: Filha f = p; • O downcasting é realizado utilizando o operador de casting de classes. Exemplo: Filha f = (Filha) p; f.m3();

  28. Polimorfismo • Esta realidade, citada na frase anterior, é algo verificado por Java apenas em tempo de execução. Se o objeto for do tipo da subclasse, a coerção será válida, mas se não for, ocorrerá uma ClassCastException • Para proteger nosso código dessa incerteza, convém usar o operador especial instanceof com a seguinte sintaxe: VariávelObjeto instanceof NomeClasse Exemplo: if (p instanceof Filha){ Filha f = (Filha) p; f.m3(); }

  29. Polimorfismo • Exemplo de conversão e seus erros:

  30. Polimorfismo • Exemplo de Polimorfismo

  31. Polimorfismo • Exemplo de Polimorfismo

  32. HOT TOPIC • Classe: representa um conjunto de objetos com características afins. Uma classe define o comportamento dos objetos, através de métodos, e quais estados ele é capaz de manter, através de atributos. Exemplo de classe: Os seres humanos. • Objeto é uma instância de uma classe. Um objeto é capaz de armazenar estados através de seus atributos e reagir a mensagens enviadas a ele, assim como se relacionar e enviar mensagens a outros objetos. Exemplo de objetos da classe Humanos: João, José, Maria. • Atributos são características de um objeto. Basicamente a estrutura de dados que vai representar a classe. Exemplos: Funcionário: nome, endereço,telefone, CPF, ....; Carro: nome, marca, ano, cor, ...; Livro: autor, editora, ano. Por sua vez, os atributos possuem valores. Por exemplo, o atributo cor pode conter o valor azul. O conjunto de valores dos atributos de um determinado objeto é chamado de estado. • Métodosdefinem as habilidades dos objetos. Bidu é uma instância da classe Cachorro, portanto tem habilidade para latir, implementada através do método deUmLatido(). Um método em uma classe é apenas uma definição. A ação só ocorre quando o método é invocado através do objeto, no caso Bidu. Dentro do programa, a utilização de um método deve afetar apenas um objeto em particular; Todos os cachorros podem latir, mas você quer que apenas Bidu dê o latido. Normalmente, uma classe possui diversos métodos, que no caso da classe Cachorro poderiam ser sente(), coma() e morda().

  33. HOT TOPIC • Mensagem é uma chamada a um objeto para invocar um de seus métodos, ativando um comportamento descrito por sua classe. Também pode ser direcionada diretamente a uma classe (através de uma invocação a um método estático). • Sobrecarga (OVERLOADING) é a utilização do mesmo nome para símbolos ou métodos com operações ou funcionalidades distintas. Geralmente diferencia-se os métodos pela sua assinatura. Exemplo: Um método Carro que recebe como parâmetro dois atributos (cor, placa), e outro método Carro que recebe como parâmetro (cor, placa, modelo). • Sobrescrita (OVERRIDING) é o mecanismo que permite sobrescrever um método por completo em uma subclasse. Está relacionado com o conceito de polimorfismo. • Herança (ou generalização) é o mecanismo pelo qual uma classe (subclasse) pode estender outra classe (superclasse), aproveitando seus comportamentos (métodos) e variáveis possíveis (atributos). Há Herança Múltipla quando uma subclasse possui mais de uma superclasse. Essa relação é normalmente chamada de relação "é um". Um exemplo de herança: Mamífero é superclasse de Humano. Ou seja, um Humano é um mamífero. • Associação é o mecanismo pelo qual um objeto utiliza os recursos de outro. Pode tratar-se de uma associação simples "usa um" ou de um acoplamento "parte de". Por exemplo: Um humano usa um telefone. A tecla "1" é parte de um telefone.

  34. HOT TOPIC • Encapsulamento consiste na separação de aspectos internos e externos de um objeto. Este mecanismo é utilizado amplamente para impedir o acesso direto ao estado de um objeto (seus atributos), disponibilizando externamente apenas os métodos que alteram estes estados. Exemplo: você não precisa conhecer os detalhes dos circuitos de um telefone para utilizá-lo. A carcaça do telefone encapsula esses detalhes, provendo a você uma interface mais amigável (os botões, o monofone e os sinais de tom). • Abstração é a habilidade de concentrar nos aspectos essenciais de um contexto qualquer, ignorando características menos importantes ou acidentais. Em modelagem orientada a objetos, uma classe é uma abstração de entidades existentes no domínio do sistema de software. • Polimorfismo é o princípio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem invocar métodos que têm a mesma assinatura (lista de parâmetros e retorno) mas comportamentos distintos, especializados para cada classe derivada, usando para tanto uma referência a um objeto do tipo da superclasse. • Interface é um contrato entre a classe e o mundo externo. Quando uma classe implementa uma interface, ela está comprometida a fornecer o comportamento publicado pela interface.

  35. Métodos • Referências bibliográficas • http://inf.unisinos.br/~anibal • http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objetos

More Related