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

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

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

Apresentações semelhantes


Apresentação em tema: "Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -"— Transcrição da apresentação:

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

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

3 Programação II – Prof. Mateus Raeder Introdução Orientação à Objetos –Década de 60 –Recursos de software e hardware estavam tornando-se cada vez mais complexos –Proposta para solucionar problemas comuns ao desenvolvimento de software através da reutilização de unidades lógicas de programação

4 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

5 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

6 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

7 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

8 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

9 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

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

11 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); }

12 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; }

13 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

14 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)

15 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

16 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

17 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 {. }

18 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

19 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

20 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”; }

21 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

22 Programação II – Prof. Mateus Raeder Herança - Exercício Implemente a classe Universidade –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

23 Programação II – Prof. Mateus Raeder Herança - Exercício Implemente a classe Pública 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

24 Programação II – Prof. Mateus Raeder Herança - Exercício 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

25 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

26 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

27 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();

28 Programação II – Prof. Mateus Raeder Polimorfismo - Exercício Crie a classe Veiculo –Atributos: Velocidade máxima Preço –Métodos: gets para os atributos Um método para imprimir as informações do veículo

29 Programação II – Prof. Mateus Raeder Polimorfismo - Exercício Crie a classe Carro –Atributos O ano de fabricação –Métodos get e set para o ano Método para imprimir as informações do Carro

30 Programação II – Prof. Mateus Raeder Polimorfismo - Exercício Crie a classe Onibus –Atributos: A capacidade de passageiros do ônibus –Métodos: get e set para a capacidade Método para imprimir as informações do Onibus

31 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

32 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

33 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

34 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

35 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); }

36 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; }

37 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

38 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

39 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); }

40 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; }

41 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... }

42 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... }

43 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


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

Apresentações semelhantes


Anúncios Google