Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -

Slides:



Advertisements
Apresentações semelhantes
Modificadores Marco Antonio. Introdução Em todas as linguagens de programação o acesso a classes/métodos deve seguir algumas regras.
Advertisements

Herança, Polimorfismo e Classes Abstratas em Java
Herança, sobrecarga e ligação dinâmica zHerança zReferência super zSobrecarga de métodos zSobreposição zLigação dinâmica de métodos zfinal.
De 17 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes Aula.
Generalização, Especialização e Conceitos
Orientação a Objetos Introdução. Objetos: o que são? Olhando o mundo real pode-se ver vários objetos: mesa, cadeiras, alunos, professores etc. Esses objetos.
Iniciação ao Java – Márcio F. Campos
Polimorfismo e Acoplamento Dinâmico
Polimorfismo e Classes Abstratas Profa
Linguagem de Programação II
Capítulo 9 Herança 1.
UMA ABORDAGEM SOBRE ORIENTAÇÃO A OBJETOS!
Classes e objetos Arrays e Sobrecarga
Herança e Polimorfismo
Herança P. O. O. Prof. Ângela e Grace.
Classes e objetos P. O. O. Prof. Grace.
CRIANDO OBJETOS EM JAVA
JAVA: Conceitos Iniciais
Programação Orientada a Objetos com Java
Linguagens de Programação
JAVA Orientação a Objetos
Programação orientada a objetos: Polimorfismo
Sobrecarga e Encapsulamento
Interfaces.
Programação Orientada à Objetos
Programação I Aula 2 (Métodos)
Classes, Objetos, Atributos e Métodos JAVA
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Classes Abstratas e Interfaces.
Professora Lucélia Oliveira
Programação Orientada a Objetos: Reuso
Curso de Aprendizado Industrial Desenvolvedor WEB
Aula prática 14 Orientação a Objetos – C++ Parte 2
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação I Aula 6 (Herança, Polimorfismo e Encapsulamento)
Implementação Orientada a Objetos – Aula 03
Programação Orientada à Objetos
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Prof. Gilberto Irajá Müller
Orientação a Objetos usando Java
Java Kickstart, day 2 Semelhanças com linguagem C.
Classes Abstratas P. O. O. Prof. Ângela e Grace.
Aula Prática 4 Monitoria IP/CC (~if669).
Implementação Orientada a Objetos – Aula 05 Construtores e sobrecarga de métodos Prof. Danielle Martin Universidade de Mogi das Cruzes
Polimorfismo.
POO II JEAN CARLO MENDES
Interfaces POO Avançado.
Classes Abstratas e Interface
Aula Prática 1 Monitoria IP/CC (~if669). Roteiro 1.Polimorfismo 2.Superclasses Abstratas 3.Dúvidas 4.Exercício.
Herança e Arquitetura em camadas
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Herança Modelagem e Programação Orientada a Objetos
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Bruno Inojosa MCP .NET Framework
Linguagem II Classes Abstratas Interfaces. Davi Pires Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores.
Herança.
Classes abstratas São classes das quais não se pode instanciar objetos. São classes das quais não se pode instanciar objetos. Seu objetivo é ser herdada.
Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour ▐ Polimorfismo ▐ Exemplo ▐ Classes Abstratas.
Universidade do Vale do Rio dos Sinos - São Leopoldo -
UCSal – Bacharelado em Informática Tópicos Especiais em Informática II Profa. Semíramis Assis
UCSal – Bacharelado em Informática Tópicos Especiais em Informática II Profa. Semíramis Assis
Paradigmas da Programação – Semestre 1 – Aula 7 Professor: Eduardo Mantovani )
Implementação Orientada a Objetos – Aula 03 Atributos e Encapsulamento Prof. Danielle Martin/ Marcia Bissaco Universidade de Mogi das Cruzes
Implementação Orientada a Objetos – Aula 08 Herança, sobrescrita de métodos e polimorfismo Prof. Danielle Martin Universidade de Mogi das Cruzes
1. 2 Programação Orientada a Objetos Prof. Maurício Rodrigues de Morais
Classes Abstratas e Interface. 2 Classe Abstrata  Uma classe abstrata serve apenas como modelo para uma classe concreta (classe que comumente usamos);
1 Interface (o termo) » Interface (a palavra reservada): Java estendeu o conceito de interfaces à um nível ainda mais flexível que permite construir entidades.
Jean Carlo mendes
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Laboratório I Mateus Raeder.
Transcrição da apresentação:

Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -

Programação II – Prof. Mateus Raeder Sumário Tipos abstratos de dados Classes Objetos Herança Polimorfismo Classes abstratas Interfaces

Programação II – Prof. Mateus Raeder Tipos abstratos de dados Conjunto de dados e operações que são aplicadas sobre estes dados Conceito independente de linguagem de programação Dois papéis: –Descrever os dados para o resto do programa –Permitir que o programa altere estes dados

Programação II – Prof. Mateus Raeder Tipos abstratos de dados Vantagens –Ocultação de detalhes de implementação –Interfaces mais informativas –Permite lidar com entidades do mundo real –Reutilização de código

Programação II – Prof. Mateus Raeder Tipos abstratos de dados Tipo abstrato de dadoOperações Tanque de gasolina Encher o tanque Esvaziar o tanque Obter a capacidade do tanque Obter a quantidade de gasolina Elevador Subir um andar Descer um andar Exibir andar corrente Arquivo Abrir o arquivo Fechar o arquivo Escrever no arquivo Setar posição corrente Obter tamanho do arquivo Obter nome do arquivo

Programação II – Prof. Mateus Raeder Abstração Habilidade de se concentrar nos aspectos essenciais de um contexto qualquer, ignorando características menos importantes Uma classe é uma abstração de alguma entidade existente no domínio da aplicação sendo desenvolvida

Programação II – Prof. Mateus Raeder Classes Define características de um objeto –Estado do objeto Através dos atributos –Comportamento Através dos métodos Fábrica a partir da qual objetos serão criados

Programação II – Prof. Mateus Raeder Classes Exemplo public class Time{ public String nome; public int quantCampeonatos; public Time(String nome, int quantCampeonatos){ this.nome = nome; this.quantCampeonatos = quantCampeonatos; } public void ganhaCampeonato(){ quantCampeonatos++; } public int getQuantCampeonatos(){ return quantCampeonatos; } atributos métodos

Programação II – Prof. Mateus Raeder Objetos Instância de uma classe Capaz de: –Armazenar estado –Enviar e reagir a mensagens

Programação II – Prof. Mateus Raeder Objetos public class TestaTime{ public static void main(String args){ Time t = new Time(“Grêmio”, 1000); t.ganhaCampeonato(); System.out.println(t.getQuantCampeonatos() + “campeonatos”); Estadio e = new Estadio(“Olímpico”); e.setTime(t); }

Programação II – Prof. Mateus Raeder Classes x Objetos Classe –Entidade estática que pode ser visualizada através do código do programa Objeto –Entidade específica existente em tempo de execução public class Time{ public String nome; public int quantCampeonatos; public Time(String nome, int quantCampeonatos){ this.nome = nome; this.quantCampeonatos = quantCampeonatos; } public void ganhaCampeonato(){ quantCampeonatos++; } public int getQuantCampeonatos(){ return quantCampeonatos; }

Programação II – Prof. Mateus Raeder Classes - Exercício Crie a classe Universidade –Atributos: String nome int quantidadeAlunos int quantProfessores –Métodos: Métodos de acesso get e set dos atributos Método print que imprime todas as informações da Universidade

Classe Universidade Programação II – Prof. Mateus Raeder public class Universidade{ private String nome; private int quantProfessores; private int quantAlunos; public Universidade(String nome, int quantProfessores, int quantAlunos){ this.nome = nome; this.quantProfessores = quantProfessores; this.quantAlunos = quantAlunos; } public void setNome(String nome){ this.nome = nome; } public void setQuantProfessores(int quantProfessores){ this.quantProfessores = quantProfessores; } public void setQuantAlunos(int quantAlunos){ this.quantAlunos = quantAlunos; }

Classe Universidade Programação II – Prof. Mateus Raeder public String getNome(){ return nome; } public int getQuantProfessores(){ return quantProfessores; } public int getQuantAlunos(){ return quantAlunos; } public void print(){ System.out.println("Universidade: "+nome+"\n"+ "Quantidade de alunos: "+quantAlunos+"\n"+ "Quantidade de professores: "+quantProfessores); }

Programação II – Prof. Mateus Raeder Herança Idéia: derivar uma nova classe a partir de outra já existente Por que o nome HERANÇA ? –Porque a subclasse HERDA atributos e métodos da superclasse + especializada + genérica Classe original: SUPERCLASSE Classe derivada: SUBCLASSE

Programação II – Prof. Mateus Raeder Herança A B Superclasse Subclasse IMPORTANTE: –todo objeto da subclasse B também É UM objeto da superclasse A –a subclasse B apresenta características ADICIONAIS e EXCLUSIVAS em relação àquelas da superclasse (por isso é mais especializada)

Programação II – Prof. Mateus Raeder Herança Gerente é um tipo especial de Funcionário, com características adicionais e exclusivas Repare que o método exibeDados() é SOBRESCRITO, ou seja, REDEFINIDO O método nomeiaSecretario é EXCLUSIVO de Gerente -nome: String -salario: double -dependentes: int +Funcionario(n:String, s:double, d:int) +Funcionario(n:String, s:double) +exibeDados() +getNome():String +getSalario():double Funcionario -nomeSecretario: String +Gerente(n:String, s:double, d:int) +exibeDados() +nomeiaSecretario(n:String) Gerente

Programação II – Prof. Mateus Raeder Sobrecarga x Sobreposição Sobrecarga –Métodos com mesmo nome, mas assinaturas diferentes –Não necessita herança Sobreposição (sobrescrita) –Métodos com mesmo nome e assinatura –Necessita de herança

Programação II – Prof. Mateus Raeder Herança Mas como dizer que uma classe herda outra? –Com a utilização da palavra reservada extends Exemplo: public class Gerente extends Funcionario {. }

Programação II – Prof. Mateus Raeder Herança Quando um objeto da subclasse chama um método, algumas situações podem ocorrer: –se o método foi sobrescrito pela subclasse, o da subclasse é acionado –se o método só existe na superclasse, o da superclasse será acionado –se o método é exclusivo da subclasse, este será acionado –se o método não existe nem na superclasse e nem na subclasse, ocorre um erro

Programação II – Prof. Mateus Raeder Herança - Exercício O que vai ocorrer nas situações abaixo? +ClasseB( ) +metodo1( ) +metodo3( ) ClasseB +ClasseA( ) +metodo1( ) +metodo2( ) ClasseA ClasseB b = new ClasseB(); b.metodo1(); b.metodo2(); b.metodo3(); b.metodo4(); Chama método1() da Classe B Chama método2() da Classe A Chama método3() da Classe B Erro de compilação

Programação II – Prof. Mateus Raeder Herança Construtores da subclasse –os construtores da superclasse não são herdados, logo, a subclasse deverá possuir seus próprios construtores para inicializar os seus atributos –devemos, todavia, inicializar os atributos da classe que está sendo herdada, chamando algum construtor da superclasse com a utilização da chamada super(...) public Gerente(String n, double s, int d) { super(n, s, d); //chama o construtor da superclasse nomeSecretario = “Alfredo”; }

Programação II – Prof. Mateus Raeder Herança Quais atributos de sua superclasse uma subclasse pode acessar? –os atributos do tipo private são acessíveis diretamente apenas para a classe que o possuir. Qualquer outra classe somente tem acesso a estes atributos utilizando os métodos de acesso públicos (GET, por exemplo). Logo: public void exibeDados() { System.out.println(“Nome: ”+nome); //erro System.out.println(“Salário: ”+salario);//erro System.out.println(“Secretário: ”+nomeSecretario); } -nome: String -salario: double -dependentes: int +Funcionario(n:String, s:double, d:int) +Funcionario(n:String, s:double) +exibeDados() +getNome():String +getSalario():double Funcionario -nomeSecretario: String +Gerente(n:String, s:double, d:int) +exibeDados() +nomeiaSecretario(n:String) Gerente Outra opção é definir os atributos na superclasse como protected

Programação II – Prof. Mateus Raeder Herança - Exercício Seja a classe Universidade criada –Atributos: String nome String endereco int quantidadeAlunos int quantProfessores –Métodos: Métodos de acesso get e set dos atributos Método print que imprime todas as informações da Universidade

Programação II – Prof. Mateus Raeder Herança - Exercício Implemente a classe Publica que herda Universidade –Esta classe possui um atributo chamado quantConcursados, que indica a quantidade de professores concursados –Possui os métodos: get e set para a quantidade de concursados Um método que aumenta quantConcursados em 1 Um método print que imprime todas as informações da Universidade Implemente a classe Privada que herda Universidade –Esta classe possui um atributo mensalidade, que indica o preço médio do valor a ser pago –Possui os métodos: get e set para o valor da mensalidade Um método que adiciona um preço X (recebido por parâmetro) na mensalidade Um método print que imprime todas as informações da Universidade

Classe Publica Programação II – Prof. Mateus Raeder public class Publica extends Universidade{ private int quantConcursados; public Publica(String nome,int quantProfessores,int quantAlunos,int quantConcursados){ super(nome, quantProfessores, quantAlunos); this.quantConcursados = quantConcursados; } public void setQuantConcursados(int quantConcursados){ this.quantConcursados = quantConcursados; } public int getQuantConcursados(){ return quantConcursados; } public void print(){ super.print(); System.out.println("Professores concursados: "+quantConcursados); }

Classe Privada Programação II – Prof. Mateus Raeder public class Privada extends Universidade{ private double mensalidade; public Privada(String nome, int quantProfessores, int quantAlunos, double mensalidade){ super(nome, quantProfessores, quantAlunos); this.mensalidade = mensalidade; } public void setMensalidade(double mensalidade){ this.mensalidade = mensalidade; } public double getMensalidade(){ return mensalidade; } public void print(){ super.print(); System.out.println("Mensalidade: "+mensalidade); }

Programação II – Prof. Mateus Raeder Polimorfismo Idéia: realizar uma tarefa de formas diferentes (poli = muitas; morphos = formas) O objeto “assume a forma de outro” +ClasseB( ) +metodo1( ) +metodo3( ) ClasseB +ClasseA( ) +metodo1( ) +metodo2( ) ClasseA A instrução: ClasseA a; declara a como uma referência da superclasse ClasseA. Regra 1: podemos atribuir um objeto da subclasse a uma referência da superclasse ( upcasting ) a = new ClasseB(); //razoável, pois ClasseB É UM ClasseA

Programação II – Prof. Mateus Raeder Polimorfismo +ClasseB( ) +metodo1( ) +metodo3( ) ClasseB +ClasseA( ) +metodo1( ) +metodo2( ) ClasseA Agora a, uma referência de superclasse, está apontando para um objeto de subclasse. Logo: a.metodo1(); //chama metodo1() de ClasseB, pois este foi sobrescrito a.metodo2(); //chama metodo2() de ClasseA a.metodo3(); //ERRO tentativa de acessar através de uma referência de uma superclasse um método exclusivo da subclasse Regra 2: uma referência de superclasse só reconhece membros da superclasse, mesmo que aponte para um objeto da subclasse

Programação II – Prof. Mateus Raeder Polimorfismo +ClasseB( ) +metodo1( ) +metodo3( ) ClasseB +ClasseA( ) +metodo1( ) +metodo2( ) ClasseA Como acessar o metodo3() então? A resposta está no downcasting Logo: Regra 3: a atribuição de um objeto de superclasse a uma referência de subclasse, sem coerção, não é permitida. ClasseB b = a; //erro de compilação, pois A não é um B //devemos fazer a coerção (casting) ClasseB b = (ClasseB) a; b.metodo3();

Programação II – Prof. Mateus Raeder Polimorfismo - Exercício Crie a classe Veiculo –Atributos: velocidade máxima e Preço –Métodos: gets e imprimeInfo Crie a classe Carro (que herda Veiculo) –Atributos: ano de fabricação –Métodos: get e set para o ano e imprimeInfo Crie a classe Onibus (que herda Veiculo) –Atributos: capacidade de passageiros –Métodos: get e set para a capacidade e imprimeInfo

Programação II – Prof. Mateus Raeder Classe Veiculo public class Veiculo{ private double velocidadeMaxima; private double preco; public Veiculo(double velocidadeMaxima, double preco){ this.velocidadeMaxima = velocidadeMaxima; this.preco = preco; } public double getPreco(){ return preco; } public double getVelocidadeMaxima(){ return velocidadeMaxima; } public void imprimeInfo(){ System.out.println("Velocidade Máxima: "+velocidadeMaxima+"\n"+ "Preço: "+preco); } }

Programação II – Prof. Mateus Raeder Classe Carro public class Carro extends Veiculo{ private int ano; public Carro(double velocidadeMaxima, double preco, int ano){ super(velocidadeMaxima, preco); this.ano = ano; } public void setAno(int ano){ this.ano = ano; } public int getAno(){ return ano; } public void imprimeInfo(){ super.imprimeInfo(); System.out.println("Ano de fabricação: "+ano); } }

Classe Onibus Programação II – Prof. Mateus Raeder public class Onibus extends Veiculo{ private int quantPassageiros; public Onibus(double velocidadeMaxima, double preco, int quantPassageiros){ super(velocidadeMaxima, preco); this.quantPassageiros = quantPassageiros; } public void setQuantPassageiros(int quantPassageiros){ this.quantPassageiros = quantPassageiros; } public int getQuantPassageiros(){ return quantPassageiros; } public void imprimeInfo(){ super.imprimeInfo(); System.out.println("Capacidade: "+quantPassageiros); } }

Programação II – Prof. Mateus Raeder Polimorfismo - Exercício Crie a classe TestaVeiculo Crie o método main e nele faça o que segue (nesta ordem): –Crie um Veículo v –Diga que este veículo é um Carro –Imprima as informações do Carro –Altere o ano para 2000 –Imprima somente o ano do carro

Classe TestaVeiculo Programação II – Prof. Mateus Raeder public class TestaVeiculo{ public static void main(String args[]){ Veiculo v; v = new Carro(200, 30000, 2010); v.imprimeInfo(); v.setAno(2000);

Classe TestaVeiculo Programação II – Prof. Mateus Raeder public class TestaVeiculo{ public static void main(String args[]){ Veiculo v; v = new Carro(200, 30000, 2010); v.imprimeInfo(); //v.setAno(2000); Carro c = (Carro) v; v.setAno(2000);

Classe TestaVeiculo Programação II – Prof. Mateus Raeder public class TestaVeiculo{ public static void main(String args[]){ Veiculo v; v = new Carro(200, 30000, 2010); v.imprimeInfo(); //v.setAno(2000); Carro c = (Carro) v; //v.setAno(2000); c.setAno(2000); //System.out.println(“Novo ano do carro: "+v.getAno()); System.out.println("Novo ano do carro: "+c.getAno());

Programação II – Prof. Mateus Raeder Polimorfismo - Exercício Ainda no main e faça o que segue (nesta ordem): –Crie um Veiculo v2 –Diga que este veículo é um Onibus –Imprima as informações do ônibus –Altere a capacidade do ônibus para 40 lugares –Imprima somente a capacidade do ônibus que foi alterada

Classe TestaVeiculo (cont…) Programação II – Prof. Mateus Raeder Veiculo v2; v2 = new Onibus(170, 57000, 42); v2.imprimeInfo(); //v2.setQuantPassageiros(40); Onibus o = (Onibus) v2; //v2.setQuantPassageiros(40); o.setQuantPassageiros(40); //System.out.println("Nova capacidade: "+v2.getQuantPassageiros()); System.out.println("Nova capacidade: "+o.getQuantPassageiros()); } }

Programação II – Prof. Mateus Raeder Classes abstratas Método abstrato: um método que não tem implementação –Como informar ao método que ele é abstrato? public abstract void teste(); Classes abstratas: são classes que possuem pelo menos 1 método abstrato –Como informar que uma classe é abstrata? public abstract class Pessoa

Programação II – Prof. Mateus Raeder Classes abstratas Uma classe abstrata é uma classe que não pode ser instanciada. Deve ser obrigatoriamente herdada. Serve como um molde para as subclasses. Os métodos abstratos possuem apenas as assinaturas, sem a implementação. A implementação deve ser realizada OBRIGATORIAMENTE Nas subclasses que herdam a superclasse abstrata

Programação II – Prof. Mateus Raeder Classes abstratas Exemplo: –Progressão Aritmética Geométrica Fibonacci –Polígonos Triângulo Retângulo Quadrado Trapézio public abstract class Progressao{ //valor inicial protected int first; //valor corrente da progressão protected int cur; public Progressao(){ first = 0; cur = 0; } //método abstrato para próximo valor protected abstract int nextValue(); //imprime valor da posição corrente public void imprimeCur(){ System.out.println(“Valor: ”+cur); }

Programação II – Prof. Mateus Raeder Classes abstratas Exemplo: –Progressão Aritmética Geométrica Fibonacci –Polígonos Triângulo Retângulo Quadrado Trapézio public class Aritmetica extends Progressao{ //incremento da progressão public int inc; //construtor que recebe o incremento public Aritimetica(int inc){ this.inc = inc; } //calcula próximo valor protected int nextValue(){ cur = cur + inc; return cur; }

Programação II – Prof. Mateus Raeder Interfaces Não contêm nenhuma implementação Todos os métodos são abstratos Todos os métodos são públicos Todos os atributos são constantes Pode ser vista como um “contrato” que as classes que implementam devem seguir

Programação II – Prof. Mateus Raeder Interfaces As classes que implementam uma (ou mais) interfaces devem implementar todos os métodos definidos Uma interface não pode ser instanciada Uma classe pode implementar diversas interfaces

Programação II – Prof. Mateus Raeder Interfaces Definindo uma interface public interface MinhaInterface{ //constante double E = ; //double E; -> erro de compilação //métodos abstratos double soma(double x, double y); double subtrai(double x, double y); double multiplica(double x, double y); double divide(double x, double y); }

Programação II – Prof. Mateus Raeder Interfaces Implementando uma interface –Utiliza-se a palavra reservada implements public class Calculadora implements MinhaInterface{ //método para somar public double soma(double x, double y){ return x + y; } //método para subtrair public double subtrai(double x, double y){ return x - y; } //método para multiplicar public double multiplica(double x, double y){ return x * y; } //método para dividir public double divide(double x, double y){ return x / y; }

Programação II – Prof. Mateus Raeder Interfaces Implementando mais de uma interface –Todos os métodos de todas as interfaces devem ser implementados public class Calculadora implements MinhaInterface, MinhaInterface2, Banana{ //implementar todos os métodos de todas as interfaces... }

Programação II – Prof. Mateus Raeder Interfaces Exemplo: public class Calculadora extends Padrao implements MinhaInterface, MinhaInterface2, Banana{ //implementar todos os métodos de todas as interfaces... }

Programação II – Prof. Mateus Raeder Interfaces x Classes abstratas Qual a diferença entre interfaces e classes abstratas? –Classes abstratas Pode existir implementação de métodos Declaração de variáveis Uma classe só pode herdar UMA única classe –Interfaces: Não existe implementação Atributos são sempre constantes Uma classe pode implementar diversas interfaces “Herança” múltipla