Universidade do Vale do Rio dos Sinos - São Leopoldo -

Slides:



Advertisements
Apresentações semelhantes
Paulo Marques Hernâni Pedroso
Advertisements

Modificadores Marco Antonio. Introdução Em todas as linguagens de programação o acesso a classes/métodos deve seguir algumas regras.
PHPOO Erick Souza. Conceitos de Orientação a Objetos Objeto é um conceito ou item(concreto ou abstrato). Software orientado a objetos Uma classe é uma.
Herança, Polimorfismo e Classes Abstratas em Java
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
Diagrama de Classes.
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
Classes e objetos P. O. O. Prof. Grace.
Programação Orientada a Objetos com Java
Aula Prática If669 – Introdução à Programação
Linguagens de Programação
Programação orientada a objetos: Polimorfismo
Sobrecarga e Encapsulamento
Programação Orientada à Objetos
Programação I Aula 2 (Métodos)
Classes, Objetos, Atributos e Métodos JAVA
Aula prática 14 Orientação a Objetos – C++ Parte 2
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).
Polimorfismo.
POO II JEAN CARLO MENDES
1 Marcio de Carvalho Victorino JAVA. 2 Declaração de Atributos [ ] [transient] [volatile] [static] [final] ; controle de acesso –public, package (default),
Interfaces POO Avançado.
Classes Abstratas e Interface
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
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
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.
Atributos e Métodos Estáticos
Introdução a Orientação a Objetos
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.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Módulo II Capítulo 1: Orientação a Objetos
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 )
Prof.: Bruno Rafael de Oliveira Rodrigues. Herança Possibilita a uma classe usar campos ou métodos definidos em outra classe. Assim a classe pai possui.
Implementação Orientada a Objetos – Aula 03 Atributos e Encapsulamento Prof. Danielle Martin/ Marcia Bissaco Universidade de Mogi das Cruzes
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Implementação Orientada a Objetos – Aula 08 Herança, sobrescrita de métodos e polimorfismo Prof. Danielle Martin Universidade de Mogi das Cruzes
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco 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.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Jean Carlo mendes
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Laboratório I Mateus Raeder.
Transcrição da apresentação:

Universidade do Vale do Rio dos Sinos - São Leopoldo - 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 dado Operaçõ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

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

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

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

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

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

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

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 Programação II – Prof. Mateus Raeder

Programação II – Prof. Mateus Raeder Classe Universidade 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){ public void setQuantProfessores(int quantProfessores){ public void setQuantAlunos(int quantAlunos){ Programação II – Prof. Mateus Raeder

Programação II – Prof. Mateus Raeder Classe Universidade 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

Programação II – Prof. Mateus Raeder Herança 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) A Superclasse B Subclasse Programação II – Prof. Mateus Raeder

Programação II – Prof. Mateus Raeder Herança Funcionario 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 Gerente -nomeSecretario: String +Gerente(n:String, s:double, d:int) +exibeDados() +nomeiaSecretario(n:String) Programação II – Prof. Mateus Raeder

Sobrecarga x Sobreposição 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

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

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

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

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: Funcionario -nome: String -salario: double -dependentes: int +Funcionario(n:String, s:double, d:int) +Funcionario(n:String, s:double) +exibeDados() +getNome():String +getSalario():double public void exibeDados() { System.out.println(“Nome: ”+nome); //erro System.out.println(“Salário: ”+salario);//erro System.out.println(“Secretário: ”+nomeSecretario); } Gerente -nomeSecretario: String +Gerente(n:String, s:double, d:int) +exibeDados() +nomeiaSecretario(n:String) Outra opção é definir os atributos na superclasse como protected Programação II – Prof. Mateus Raeder

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

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 Programação II – Prof. Mateus Raeder

Programação II – Prof. Mateus Raeder Classe Publica 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){ public int getQuantConcursados(){ return quantConcursados; public void print(){ super.print(); System.out.println("Professores concursados: "+quantConcursados); Programação II – Prof. Mateus Raeder

Programação II – Prof. Mateus Raeder Classe Privada 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){ public double getMensalidade(){ return mensalidade; public void print(){ super.print(); System.out.println("Mensalidade: "+mensalidade); Programação II – Prof. Mateus Raeder

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” ClasseA +ClasseA( ) +metodo1( ) +metodo2( ) 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 ClasseB +ClasseB( ) +metodo1( ) +metodo3( ) Programação II – Prof. Mateus Raeder

Polimorfismo Agora a, uma referência de superclasse, está apontando para um objeto de subclasse. Logo: ClasseA +ClasseA( ) +metodo1( ) +metodo2( ) 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 ClasseB +ClasseB( ) +metodo1( ) +metodo3( ) 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

Programação II – Prof. Mateus Raeder Polimorfismo Como acessar o metodo3() então? A resposta está no downcasting Logo: ClasseA Regra 3: a atribuição de um objeto de superclasse a uma referência de subclasse, sem coerção, não é permitida. +ClasseA( ) +metodo1( ) +metodo2( ) 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(); ClasseB +ClasseB( ) +metodo1( ) +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

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

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){ public int getAno(){ return ano; public void imprimeInfo(){ super.imprimeInfo(); System.out.println("Ano de fabricação: "+ano); Programação II – Prof. Mateus Raeder

Programação II – Prof. Mateus Raeder Classe Onibus 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){ 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 Programação II – Prof. Mateus Raeder

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

Programação II – Prof. Mateus Raeder Classe TestaVeiculo 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); Programação II – Prof. Mateus Raeder

Programação II – Prof. Mateus Raeder Classe TestaVeiculo 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; 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 Programação II – Prof. Mateus Raeder

Classe TestaVeiculo (cont…) Veiculo v2; v2 = new Onibus(170, 57000, 42); v2.imprimeInfo(); //v2.setQuantPassageiros(40); Onibus o = (Onibus) v2; 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

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

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

Programação II – Prof. Mateus Raeder Classes Abstratas Exercícios    Compile a classe abstrata Figura disponível na página da disciplina. crie a classe Retangulo, que possui dois atributos: base e altura crie a classe Circulo, que possui um raio crie a classe Triangulo, que possui uma base e uma altura crie uma classe Principal, que possui o método main. Crie uma figura de cada tipo, e imprima a área e o perímetro de cada uma delas Programação II – Prof. Mateus Raeder

Programação II – Prof. Mateus Raeder Classes Abstratas Problema Criar um array de figuras diferentes Uma figura pode ser tanto um Circulo como um Retangulo Mas como guardar mais de um tipo em um array? Criar um array de Figura, onde cada posição pode ser ou um Circulo ou um Retangulo Como saber qual figura é? Utilizando instanceof Programação II – Prof. Mateus Raeder

Programação II – Prof. Mateus Raeder Classes Abstratas public static void imprimeArea(Figura f){ if(f instanceof Retangulo){ Retangulo r = (Retangulo) f; System.out.println("Área do retângulo é:"+r.calculaArea()); } else if(f instanceof Circulo){ Circulo c = (Circulo) f; System.out.println("Área do círculo é:"+c.calculaArea()); public static void main(String[] args){ Figura[] figuras = new Figura[3]; figuras[0] = new Circulo(); figuras[1] = new Retangulo(); figuras[2] = new Retangulo(); for(int i=0; i<figuras.length; i++) imprimeArea(figuras[i]); Programação II – Prof. Mateus Raeder

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

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

Programação II – Prof. Mateus Raeder Interfaces Definindo uma interface public interface MinhaInterface{ //constante double E = 2.718282; //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

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

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

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

Programação II – Prof. Mateus Raeder Interfaces Exemplo: 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 Programação II – Prof. Mateus Raeder