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

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

Paradigmas da Programação – Semestre 1 – Aula 7 Professor: Eduardo Mantovani )

Apresentações semelhantes


Apresentação em tema: "Paradigmas da Programação – Semestre 1 – Aula 7 Professor: Eduardo Mantovani )"— Transcrição da apresentação:

1 Paradigmas da Programação – Semestre 1 – Aula 7 Professor: Eduardo Mantovani (eduardo.mantovani@aes.edu.br )

2 Reutilização de código Entre as características dos programadores e das linguagens do paradigma orientado a objetos está a busca pela reutilização de código Com a reutilização de código, o trabalho do programador fica otimizado e tem maior rendimento, além de melhorar a manutenção do código, que passa a ser utilizado mais vezes e ser, consequentemente, mais depurado As linguagens do paradigma OO devem oferecer alguns recursos básicos para permitir a reutilização eficiente de código: Herança Generalização Polimorfismo

3 Herança: Conceitos Recurso fundamental para a reutilização de código, a herança consiste no reaproveitamento de classes existentes para a criação de novas classes, de forma que as características (atributos e métodos) da primeira sejam aproveitados pela segunda e apenas os pontos onde há diferenças sejam aumentados ou melhorados na segunda A classe que reaproveita o código de outra já existente está extendendo ou herdando de tal classe existente e é chamada de subclasse, classe filha ou classe especializada Consequentemente, a classe extendida é chamada de superclasse, classe mãe ou classe generalizada, criando uma relação de hierarquia com a subclasse Todos os atributos e métodos definidos na superclasse ficam disponíveis para a subclasse sem a necessidade de serem codificados novamente Todos os atributos codificados na subclasse não aparecem, não estão disponíveis e nem influenciam de maneira alguma na superclasse

4 Herança: Visibilidade protegida A classe filha respeita a visibilidade dos atributos e métodos definidos na classe mãe de modo que não tem acesso direto aos membros definidos como privados na superclasse, mas tem acesso direto aos membros definidos como públicos ou protegidos A visibilidade protegida, aliás, é útil especialmente em casos de herança pois permite que atributos e métodos tenham acessibilidade direta a partir de classes filhas enquanto são privadas no ponto de vista do usuário

5 Herança: Utilização A utilização de herança se torna indicada nos casos de semelhança entre classes e de real funcionamento em disposição hierárquica Exemplo: Observe as classes abaixo e procure as semelhanças entre elas Pessoa -nome: String -rg: String +Pessoa() +obterNome():String +ajustarNome(nome:String):void +obterRg():String +ajustarRg(rg:String):void Funcionario -nome: String -rg: String -re: int -salario: double +Funcionario() +obterNome():String +ajustarNome(nome:String):void +obterRg():String +ajustarRg(rg:String):void +obterRe():int +ajustarRe(re:int):void +obterSalario():double +ajustarSalario(salario: double):void Professor -nome: String -rg: String -re: int -salario: double -disciplina: String +Professor() +obterNome():String +ajustarNome(nome:String):void +obterRg():String +ajustarRg(rg:String):void +obterRe():int +ajustarRe(re:int):void +obterSalario():double +ajustarSalario(salario: double):void +obterDisciplina():String +ajustarDisciplina(disciplina:String):void

6 Herança: Aplicação No caso apresentado, uma possibilidade bastante nítida de aplicação de herança seria: Pessoa -nome: String -rg: String +Pessoa() +obterNome():String +ajustarNome(nome:String):void +obterRg():String +ajustarRg(rg:String):void Funcionario -re: int -salario: double +Funcionario() +obterRe():int +ajustarRe(re:int):void +obterSalario():double +ajustarSalario(salario: double):void Professor -disciplina: String +Professor() +obterDisciplina():String +ajustarDisciplina(disciplina:String):void Observe que a seta com linha contínua e ponta cheia denota herança no diagrama de classe UML, partindo da subclasse em direção à superclasse

7 Herança: Codificação A implementação da classe fica simplificada. Seguindo o exemplo apresentado no slide anterior, a implementação da classe Professor fica reduzida a: public class Professor extends Funcionario { private String disciplina; public void ajustarDisciplina(String disciplina) { this.disciplina = disciplina; } public String obterDisciplina() { return disciplina; } } Todos os atributos e métodos das super-classes estão disponíveis para os objetos da classe Professor

8 Generalização: Conceito Generalização é a capacidade de manipular objetos de uma subclasse como se fossem objetos de uma superclasse de sua hierarquia No exemplo apresentado anteriormente, equivale a dizer que objetos da classe Professor podem ser tratados como se fossem objetos da classe Funcionario ou, até mesmo, como se fossem objetos da classe Pessoa Esse recurso é muito útil quando se deseja criar métodos genéricos, que sirvam para toda uma hierarquia de classes, também para manipular conjuntos compostos de diferentes tipos de objetos de maneira genérica A restrição é que, ao tratar um objeto da subclasse (especializada) como se fosse da superclasse (generalizada), todas as particularidades da subclasse não ficam disponíveis No exemplo, ao tratar um objeto da classe Professor como se fosse da classe Funcionario, os métodos obterDisciplina e ajustarDisciplina ficam indisponíveis

9 Generalização: exemplo public class ManipuladorPessoas { public void metodoQualquer() { Pessoa p; Funcionario f; Professor t; t = new Professor(); t.ajustarDisciplina(“POO”); String s = t.obterDisciplina(); t.ajustarNome(“Professor X”); // utilização de métodos da superclasse s = t.obterNome(); f = t; // aqui já acontece a generalização (f é do tipo Funcionario)! f.ajustarRe(123); // isso não seria necessário, é apenas uma demonstração p = f; // mais uma vez, generalizando (p é do tipo Pessoa) p.ajustarRg(“123.455”); } }

10 Polimorfismo: Conceito Vem de poli (múltiplas) + morfos (formas). É a capacidade que as diversas classes de uma hierarquia têm de responder diferentemente a uma mesma mensagem Pode ser por inclusão ou por sobrecarga Polimorfismo por inclusão é quando a subclasse reimplementa um método com a mesma assinatura da superclasse Na prática, o polimorfismo por inclusão funciona bem associado à generalização Polimorfismo por sobrecarga é quando a subclasse implementa um método com mesmo nome, porém com diferente conjunto de parâmetros de um método já existente na superclasse

11 Polimorfismo: Exemplo Observe os métodos imprimir apresentados no diagrama de classes abaixo: Pessoa -nome: String -rg: String +Pessoa() +obterNome():String +ajustarNome(nome:String):void +obterRg():String +ajustarRg(rg:String):void +imprimir():void Funcionario -re: int -salario: double +Funcionario() +obterRe():int +ajustarRe(re:int):void +obterSalario():double +ajustarSalario(salario: double):void +imprimir():void Professor -disciplina: String +Professor() +obterDisciplina():String +ajustarDisciplina(disciplina:String):void +imprimir():void +imprimir(titulo: String):void

12 Polimorfismo: Detalhamento do exemplo As três implementações do método imprimir com a assinatura imprimir():void trazem o conceito de polimorfismo por inclusão A implementação do método imprimir com assinatura imprimir(titulo:String):void é um exemplo de polimorfismo por sobrecarga Somente o polimorfismo por inclusão pode ser utilizado com a generalização, pois o polimorfismo por sobrecarga não está presente nas versões mais genéricas das classes (Pessoa e Funcionario)

13 Polimorfismo + Generalização: Exemplo public class ManipuladorPessoas { public void metodoQualquer() { Pessoa p; Funcionario f; Professor t; p = new Pessoa(); t = new Professor(); f = new Funcionario(); p.imprimir();// executará o imprimir da classe Pessoa p = t; p.imprimir();// vai executar o método imprimir da classe Professor p = f; p.imprimir();// vai executar o método imprimir da classe Funcionário } Por quê?

14 Exercícios Modele uma classe Aluno de modo que participe da hierarquia apresentada


Carregar ppt "Paradigmas da Programação – Semestre 1 – Aula 7 Professor: Eduardo Mantovani )"

Apresentações semelhantes


Anúncios Google