Programação Orientada a Objetos

Documentos relacionados
Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Linguagem de Programação III

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Classe Abstrata e Interface

Programação Orientada a Objetos Flávio de Oliveira Silva 144

Linguagem de Programação II Herança

Programação Orientada a Objetos JAVA - NETBEANS

Java para Desktop. Programação Orientada à Objetos 2 JSE

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Java First-Tier: Aplicações. Sobrecarga. Orientação a Objetos em Java (II) Sobrecarga de Construtores: Exemplo de Declaração

Programação OO em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM

Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

Orientação a objetos. Programação. Orientada a Objetos. Orientação a objetos. Orientação a objetos. Abstração e encapsulamento

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Aula 9 Herança. Prof. Jefersson Alex dos Santos

9 Classes Abstractas e Interfaces

POO29004 Programação Orientada a Objetos

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Entender o princípio do Polimorfismo; Conhecer Polimorfismo de Sobreposição e de Inclusão;

Notas de Aula 04: Herança e polimorfismo.

Programação por Objectos. Java

Sobrecarga, Sobreposição e Polimorfismo

Programação I Curso: Sistemas de Informação. Prof.: José Ronaldo Leles Júnior .:

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

Interfaces e Classes Abstratas

Programação Java (nível intermediário) 4. Polimorfismo

LÓGICA DE PROGRAMAÇÃO (JAVA) HERANÇA. Professor Carlos Muniz

Linguagem de Programação. Diagrama de classes

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Introdução à Programação. Encapsulamento e Herança

Vejamos o seguinte exemplo public class Exemplo private int testada = 20; public void testapalavra(int testada) JOptionPane.showMessageDialog(null,"Pa

Linguagem de Programação I Apresentação da Disciplina

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas

Avançando em Java com

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

Computação II Orientação a Objetos

Linguagens de Programação Aula 12

Linguagem de programação Programação Orientada a objetos

Herança Sendo uma linguagem orientada a objetos Java oferece mecanismos para definir classes derivadas a partir de classes existentes; As classes deri

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Classes e Objetos. Sintaxe de classe em Java

Programação Orientada a Objetos JAVA - NETBEANS

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Programação Orientada a Objetos 2 Flávio de Oliveira Silva, M.Sc.

Aula 10 POO 1 Classes Abstratas. Profa. Elaine Faria UFU

COMPORTAMENTOS - Observações

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

Linguagem de Programação III

Instituto de Informática Estrutura de Dados II

Aula 9 POO 1 Polimorfismo. Profa. Elaine Faria UFU

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Herança e Polimorfismo

Engenharia de Software. Aula 10 Representação dos Conceitos de Orientação a Objetos. Prof. Me. Rogério Ferreira

Programação Orientada a Objetos com Java. Prof. Júlio Machado

Prof. A. G. Silva. 30 de outubro de Prof. A. G. Silva INE5603 Introdução à POO 30 de outubro de / 1

Herança (parte 2) Redefinição de métodos AULA 11

POLIMORFISMO. Entender o princípio do Polimorfismo; Saber quais são os tipos existentes de Polimorfismo; Conhecer Polimorfismo de Sobrecarga.

Orientação a Objetos AULA 06

Herança Tiago Eugenio de Melo

MODELAGEM COM A UML (UNIFIED MODELING LANGUAGE)

Introdução ao Java. Prof. Herbert Rausch Fernandes

Programação Orientada a Objetos SANTOS, Rafael

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

C com introdução a OO

Conceitos de Programação Orientada a Objetos

Reutilização de Classes Cap. 8 Introdução à Programação OO Rafael Santos

Herança. Fátima L. S. Nunes Luciano A. Digiampietri Norton T. Roman SISTEMAS DE INFORMAÇÃO 1

Interfaces e polimorfismo

Programação Java. - Herança e Polimorfismo - Marco Fagundes Marco Fagundes -

Programação Orienta a Objetos

PADRONIZAÇÃO 10. INTERFACES PADRONIZAÇÃO CONTRATOS

Orientação a objetos. Objetos ou Instâncias I

Programação Orientada a Objetos Aula I Declaração de classes, métodos construtores. Prof.: Bruno E. G. Gomes IFRN

POO29004 Programação Orientada a Objetos

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Como exemplo, vamos criar uma subclasse da classe Funcionario, vista nos capítulos anteriores.

POO Fundamentos Parte III. Professor Vicente Paulo de Camargo

Programação Orientada a Objeto (POO)

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Aula 7 POO 1 Herança. Profa. Elaine Faria UFU

Herança e Propriedades

Programação Orientada a Objetos

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

POO UML e Outros Conceitos. Prof. Vicente Paulo de Camargo

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Modelo do Mundo Real. Abstração. Interpretação

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Introdução à orientação a objetos. João Tito Almeida Vianna 18/05/2013

Laboratório de programação II

Computação II Orientação a Objetos

Introdução à Orientação a Objetos em Java

Transcrição:

Programação Orientada a Objetos Prof. André Gustavo Duarte de Almeida andre.almeida@ifrn.edu.br www3.ifrn.edu.br/~andrealmeida Aula VIII Herança e Interface

Roteiro Herança Classes Abstratas Interface Programação Orientada a Objetos

Conceito Permite a reutilização de software, onde poderemos criar uma nova classe com base em uma classe já existente, permitindo que novas funcionalidades seja acrescentadas, bem como as funcionalidades existentes melhoradas Permite uma melhor aproveitamento do código desenvolvido, uma vez que a reutilização permite isso

Superclasse(ou Classe Mãe) Representa a classe já existente que irá ceder seus membros a uma nova classe Subclasse(Ou classe Filha) Representa a classe que recebe as características da classe SuperClasse e que pode modificar e/ou acrescentar novos comportamentos.

Identificando herança Normalmente conseguimos identificar a utilização de herança quando analisando o texto de um determinado contexto, observamos a utilização da expressão é um, fazendo a ligação entre duas possíveis classes Exemplos O carro é um veículo O motorista é uma pessoa Aluno do Subsequente é um Aluno do IFRN

Hierarquia de Heranças Podemos ter múltiplas classes dentro de um hierarquia, onde classes do nível inferior herdam de uma e somente uma classe de um nível superior Uma SuperClasse pode ter infinitas classes filhas, porém uma classe filha. Porém a reciproca não é verdadeira. Uma subclasse tem apenas uma única SuperClasse

Exemplo Pessoa Empregado Aluno Técnico Administrativo Docente Subsequente Integrado

Exemplos Forma FormaBidimensional FormaTridimensional Círculo Quadrado Triângulo Cubo Isósceles Retângulo

Membros protected Ao analisarmos os tipos de modificadores de acesso, vimos o tipo private e public O modificador protected permite que um determinado membro(atributo ou método) seja acessado na própria classe ou na classe filha. Um método ou atributo private só podem ser acessados dentro da própria classe. Mesmo uma classe que herda os atributos não poderá acessalos diretamente, terá que acessar provavelmente através de um método

Construindo nossas classes Considere o seguinte contexto A comunidade acadêmica do campus Parnamirim é formada por pessoas. Essas pessoas podem ser alunos ou funcionário. Os funcionário são terceirizados ou estatutário Ainda dentre os servidores podemos diferenciar entre os Técnicos-Administrativos e os Professores

Construindo nossas Classes Pessoa Funcionários Aluno Terceirizado Estatutário TécnicoAdministrativo Docente

Construindo nossas classes Vamos primeiro criar a classe pessoa, que terá apenas nome e endereço como atributos. Criaremos o pacote br.edu.ifrn.academico Utilizaremos um construir para inicializar esses atributos, além dos métodos get/set package br.edu.ifrn.academico; public class Pessoa { private String nome; private String endereco; public Pessoa(String nome,string endereco){ this.nome=nome; this.endereco=endereco; } public Pessoa(){ } Se não definirmos o construtor vazio, a única forma de se criar um objeto

Construindo nossas classes Em Java, precisamos dizer na classe filha(subclasse) qual a classe que ela irá herdar todas as características A declaração é feita usando a palavra extends Vejamos como fica a declaração da classe Aluno public class Aluno extends Pessoa {... }

Construindo nossas Classes Dentro da classe Aluno vamos adicionar mais dois atributos, chamados matrícula do tipo String e curso também do tipo String Implementaremos também os métodos get/set. Além disso vamos implementar um método que retorna uma String contendo o nome do aluno concatenado com a matrícula Vejamos como fica a classe

Construindo nossas classes Dentro de uma classe filha, podemos nós referenciar diretamente as características/métodos definidos Para isso basta usar a palavra reserva super que faz referência direta aos membros da superclasse Dentro do construtor da classe filha, podemos inclusive invocar o construtor da superclasse Bastar usar a chamada super(<listadeparametros>); Onde lista de parâmetros devem ser do mesmo tipo de parâmetros definidos pelo construtor da superclasse

Construindo nossas classes Vejamos como fica a classe utilizando a palavra super, para fazer referência aos membros da Superclasse

Construindo nossas classes Conclua a implementação das classes usando como base as seguintes condições Funcionário Características: matrícula, salário Terceirizado Característica: empresacontrante, pis/pasep Estatutário Característica: datadeingresso Técnico Administrativo Característica: cargo, jornadadetrabalho(20, 30 ou 40 horas)

Construindo nossas classes Professor Características: CargaHorária, Disciplina de Ingresso

Classe Object Representa a classe base da linguagem Java Todas as classes herdam, implicitamente, as informações da classe Object Os métodos que são definidos pela classe Object que são mais utiliziados equals(object o): Compara dois objetos da mesma classe tostring(): Gera uma versão String do objeto

Polimorfismo Deriva da palavra polimorfo, que significa múltiplas formas O termo polimorfismo para orientação a objetos, vem da capacidade de objetos de diferentes classes, responderem a mesma mensagem(método) de diferentes maneiras Ou seja, várias formas, de responder a mesma mensagem

Polimorfismo Já vimos um exemplo de polimorfismo quando da definição da sobrecarga de métodos, onde diferenciamos os métodos com mesmo nome pelo número e/ou tipo dos parâmetro Existem três tipos de polimorfismo Sobrecarga Visto anteriormente Conversão Sobreposição

Polimorfismos Conversão Herança

Polimorfismo Veremos o polimorfismo de sobreposição que implementamos anteriormente A diferença agora é a definição e quais as possibilidades de uso que teremos Vamos considerar uma hierarquia de classes que representam veículos Veremos também o exemplo de um diagrama de classes, utilizando no processo de construção de softwares

Polimorfismo O retângulo representa uma classe. Na parte superior temos os atributos. Na parte inferior os métodos da classe. A seta com ponta vazia representa herança

Polimorfismo public class Veiculo { private double velocidade; public Veiculo(){ } public Veiculo(double velocidade){ this.velocidade=velocidade; } public void mover(){ System.out.println("Movendo"); } //Método get/set } Herança As classes Avião, Barco e Carro herdam todos esses comportamentos. O que iremos modificar será o método mover, que irá exibir no console as seguintes mensagens Avião = Voando Carro= Correndo Barco= Navegando Vamos implementar as classes?!

Polimorfismo Com as classes implementadas, qual a saída gerada abaixo 1. Veiculo v1,v2,v3; 2. v1=new Carro(); 3. v2=new Aviao(); 4. v3=new Barco(); 5. v1.mover(); 6. v2.mover(); 7. v2=new Barco(); 8. v3.mover(); 9. v2.mover(); Linha 5 6 8 9 Saída

Polimorfismo Consideramos agora que criaremos uma classe chamada Oficina que possui um método consertar que recebe como o parâmetro um Veículo(que podem ser um Carro, Avião ou Barco) Dependendo do tipo do veículo ele imprime as seguintes mensagens Avião = Consertando Avião Barco = Consertando Barco Carro = Consertando Carro Vejamos como fica nosso novo diagrama

Polimorfismo A seta pontilhada indica que a Classe Oficina depende da classe Veículo, pois usa um objeto da Classe como parâmetro do método conserta

Polimorfismo Como iremos diferenciar qual o tipo de veículo, uma vez que recebemos como parâmetro um Veículo, sem detalhar qual. Utilizaremos o operador instanceof, que permite verificar a qual classe se refere a instância de um determinado objeto Vejamos o método conserta e em seguida o teste de utilização

Polimorfismo public class Oficina { public void conserta(veiculo v){ if (v instanceof Carro){ System.out.println("Consertando Carro"); }else if(v instanceof Aviao){ System.out.println("Consertando Avião"); }else if(v instanceof Barco){ System.out.println("Consertando Barco"); } } }

Polimorfismo 1. Veiculo v1,v2,v3; 2. v1=new Carro(); 3. v2=new Aviao(); 4. v3=new Barco(); 5. v1.mover(); 6. v3.mover(); 7. Oficina of=new Oficina(); 8. Barco b1=new Barco(); 9. of.conserta(v2); 10.of.conserta(b1); O que será impresso nas linhas 9 e 10?!

Polimorfismo Como a linha 10 funcionou se o método esperava como parâmetro um Veículo e recebeu uma variável do tipo Barco O que aconteceu foi um downcasting, que consiste na conversão de um objeto da classe filha para um objeto da classe mãe Ou seja, como a classe filha tem tudo que a mãe possui, nesse momento passamos a ter somente os dados que foram definidos na classe mãe Porém a reciproca não é verdadeira. Vejamos o exemplo no próximo slide

Polimorfismo 1. Veiculo v1,v2,v3; 2. v1=new Carro(); 3. v2=new Aviao(); 4. v3=new Barco(); 5. v1.mover(); 6. v3.mover(); 7. v3=b1; 8. Aviao a1=new Aviao(); 9. a1=v2; A linha 7 funciona ok, pois nesse momento ocorre o downcasting. Porém a linha 9 gera erro de compilação, uma vez que a classe Aviao pode ter mais informações que o definido na classe Veículo, impossibilitando que a atribuição funcione

Classe Abstrata Lembrem-se que classes são moldes para a criação de objetos Porém existe um tipo de classe que não geram objetos Elas são chamadas classes Abstratas e são definidas através da utilização da palavra reservada abstract A classes abstratas existem para definir um design comum que classes filhas possam utilizar e concretizarem a classe abstrata

Classe Abstrata Vejamos nosso exemplo anterior A classe veículo é uma excelente candidata a ser abstrata Quando criamos um objeto da classe Veículo, não temos como saber que Veículo ele representa Apenas quando nos referimos ao Aviação, Barco o Carro A classe Veículo representa um conceito abstrato de veículo, que necessariamente se move. Vejamos como fica agora a classe

Classe Abstrata public abstract class Veiculo { private double velocidade; public Veiculo(){ } public Veiculo(double velocidade){ this.velocidade=velocidade; } public abstract void mover();... Métodos get/set } Um classe abstrata deve possuir pelo menos um método abstrato. Observe que mesmo não podendo gerar objetos, podemos definir construtores para classe. Esses construtores podem ser usados pelas classes Filhas

Classe Abstrata O método mover é um método abstrato Quando definimos um método abstrato, toda classe filha é obrigada a implementar esse método, salvo o caso que a filha também seja abstrata Da maneira como programamos anteriormente, tudo continua como está

Classe Final Em determinadas situações queremos informar que uma classe não pode gerar subclasses ou mesmo que um método não pode ser modificado por uma subclasse Para isso utilizamos a palavra reservada final, que impede as duas possibilidades de acontecer

Interface Conceito Consiste na especificação de um contrato, que determina métodos(comportamentos) que devem ser implementados por uma determinada classe Dessa maneira dizemos que a classe implementa uma interface, se comprometendo a implementar determinada operação A interface diz apenas o que deve ser feito enquanto que a classe determina o como deve ser feito

Interface Aprendendo Considere que você deseja especificar algumas regras para criação de brinquedos moveis que funcionam a base de pilhas Determinamos que um brinquedo deve poder se mover, ligar e desligar e ainda ter a opção de recarregar Primeiro devemos construir a interface, que consiste no nosso contrato, para só então passarmos para próxima etapa

Interface public interface IBrinquedo { public void mover(int x,int y); public void ligar(); public void desligar(); public void recarregar(double energia); } A interface apenas define quais métodos devem ser implementados, sendo portanto necessário declarar apenas o métodos, sem definir o compartamento

Interface Para informamos que uma classe implementa uma Interface, utilizamos a palavra chave implements Ao contrário de herança, uma classe pode implementar infinitas interfaces O conceito de Polimorfismo também se aplica a interface, onde poderemos utilizar apenas aquilo que é relativo da interface Vamos agora criar a classe chamada RoboMovel que irá implementar a interface IBrinquedo

public class RoboMovel implements IBrinquedo { private int x,y; private String marca; private double energia; public RoboMovel(){ energia=0;x=0;y=0; } public void mover(int x, int y) { this.x=x; this.y=y; } public void ligar() { System.out.println("Robô Ligado"); } public void desligar() { System.out.println("Robô Desligado"); } public void recarregar(double energia) { this.energia+=energia; } Interface

Interface IBrinquedo brinq; brinq=new RoboMovel(); brinq.ligar(); brinq.mover(10,20); brinq.recarregar(20); brinq.desligar(); Observem que na primeira parte a variável brinq é do tipo IBrinquendo, consequentemente só poderemos utilizar os métodos definidos pela Interface RoboMovel rb=new RoboMovel(); rb.setmarca("estrela"); rb.ligar(); rb.mover(20, 30); rb.recarregar(45.5); System.out.println(rb.getEnergia());