http://www.dm.ufscar.br/~waldeck/curso/java/

1.541 visualizações

Publicada em

http://www.dm.ufscar.br/~waldeck/curso/java/

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.541
No SlideShare
0
A partir de incorporações
0
Número de incorporações
37
Ações
Compartilhamentos
0
Downloads
21
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

http://www.dm.ufscar.br/~waldeck/curso/java/

  1. 1. Inteligência Artificial Reinaldo Bianchi FEI - Elétrica 2000
  2. 2. 5a. Aula Reutilização de programas em Java
  3. 3. Vimos na aula passada <ul><li>Construção de interfaces gráficas em Java: </li></ul><ul><ul><li>Componentes </li></ul></ul><ul><ul><li>Eventos </li></ul></ul><ul><ul><li>Ações </li></ul></ul><ul><ul><li>Entrada e Saída </li></ul></ul><ul><li>Exercícios </li></ul>
  4. 4. Nesta aula veremos: <ul><li>Como reutilizar programas existentes? </li></ul><ul><li>Composição </li></ul><ul><li>Herança em Java: </li></ul><ul><ul><li>Conceitos básicos </li></ul></ul><ul><ul><li>Sintaxe </li></ul></ul><ul><ul><li>Exemplos </li></ul></ul><ul><li>Polimorfismo </li></ul>
  5. 5. Reutilização (ou Reuso ) <ul><li>Reutilização de código é o “Santo Graal” da programação atualmente. </li></ul><ul><li>Diversas maneiras: </li></ul><ul><ul><li>Cópia direta do código (método porco). </li></ul></ul><ul><ul><li>Composição (bibliotecas de funções) </li></ul></ul><ul><ul><li>Herança (linguagens Orientadas a Objetos). </li></ul></ul>
  6. 6. Reutilização via Composição <ul><li>Permite a reutilização de programas, criando objetos dentro de novas classes. </li></ul><ul><li>Maneira mais simples de reutilização de programas: </li></ul><ul><ul><li>reutiliza o código. </li></ul></ul><ul><li>É a maneira pela qual já utilizamos os componentes gráficos (botões, labels, ...) definidos na linguagem Java. </li></ul>
  7. 7. Composição = “Tem um?” <ul><li>Quando utilizar a composição? </li></ul><ul><li>Regra: realizar a pergunta “Tem um?” </li></ul><ul><li>Exemplos: </li></ul><ul><ul><li>Gorgonzola tem Mofo? </li></ul></ul><ul><ul><li>Carro tem Volante? </li></ul></ul><ul><li>Para a composição utilizamos uma instância de uma classe. Sintaxe: </li></ul><ul><ul><li>String nome = new String (“Reinaldo”); </li></ul></ul>
  8. 8. Exemplo de Composição <ul><li>public class RoboticTeam { </li></ul><ul><li>Robot C3-PELE = new Robot(); </li></ul><ul><li>Robot R2D-DUNGA = new Robot(); </li></ul><ul><li>Robot ROBOMÁRIO = new Robot(); </li></ul><ul><li>void ataque() { </li></ul><ul><li>} </li></ul><ul><li>void defesa() { </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>Ver exemplo Bath.java </li></ul>Objetos
  9. 9. Herança <ul><li>Característica básica das linguagens orientadas a objetos. </li></ul><ul><li>Permite a reutilização de programas . </li></ul><ul><li>Permite a criação de novas classes (derivadas) com base em classes já existentes (debugadas e testadas). </li></ul><ul><li>Permite a generalização das idéias. </li></ul><ul><li>Quando usada na Análise do Projeto, cria sistemas mais organizados, ... </li></ul>
  10. 10. Herança (II) <ul><li>Cria uma nova classe como uma extensão de uma classe já existente. </li></ul><ul><li>A nova classe é um tipo da classe já existente. </li></ul><ul><li>Permite utilizar a forma da classe existente, adicionando código, sem destruir a classe existente. </li></ul><ul><li>A nova classe herda os atributos e os métodos da classe existente. </li></ul>
  11. 11. Exemplo de Herança Project Manager define o método: projects() e herda: dateAppointed() budgetControlled()
  12. 12. Herança = “É um?” <ul><li>Quando utilizar a herança? </li></ul><ul><li>Regra: realizar a pergunta “É um?” </li></ul><ul><li>Exemplos: </li></ul><ul><ul><li>Gorgonzola é um Queijo? </li></ul></ul><ul><ul><li>Carro é um Veículo? </li></ul></ul><ul><ul><li>Aluno é uma Pessoa? </li></ul></ul><ul><ul><li>Gerente é um Empregado? </li></ul></ul>
  13. 13. Sintaxe <ul><li>Para criar uma classe herdeira de outra: </li></ul><ul><li>class B extends A { </li></ul><ul><li>... </li></ul><ul><li>} </li></ul><ul><li>A classe B é uma sub-classe de A </li></ul><ul><li>A classe A é a super-classe de B (ou classe base) </li></ul>
  14. 14. Herança Permite <ul><li>Herdar os atributos e os métodos da super-classe. </li></ul><ul><li>Definir novos atributos e métodos. </li></ul><ul><li>Modificar um método definido na super-classe. </li></ul><ul><li>Que um método da sub-classe utilize um método da super-classe. </li></ul>
  15. 15. Exemplo <ul><li>class Cleanser { </li></ul><ul><li>String s = new String(”Cleanser&quot;); </li></ul><ul><li>public void dilute() {} </li></ul><ul><li>public void scrub() {} </li></ul><ul><li>} </li></ul><ul><li>public class Detergent extends Cleanser { </li></ul><ul><li>public void scrub() {} // Modifica </li></ul><ul><li>public void foam() {} // Adiciona </li></ul><ul><li>} </li></ul><ul><li>Ver Exemplo Detergente.java </li></ul>
  16. 16. Usando métodos das super-classes <ul><li>Para utilizarmos um método de uma super-classe utilizamos a palavra chave super : </li></ul><ul><li>public void esfregar() { </li></ul><ul><li>append(&quot; Detergent.scrub()&quot;); </li></ul><ul><li>// Chamando o método da super- classe </li></ul><ul><li>super.esfregar(); </li></ul><ul><li>} </li></ul>
  17. 17. Dicas: <ul><li>Em um grupo de classes relacionadas, coloque os atributos e métodos comuns na super-classe. </li></ul><ul><li>Use a herança para criar sub-classes sem ter que repetir código. </li></ul><ul><li>Herde somente da classe mais parecida com a que você precisa. Herdar classes maiores desperdiça memória e processamento. </li></ul>
  18. 18. Inicialização <ul><li>Devemos inicializar todas as classes utilizadas em uma hierarquia. </li></ul><ul><ul><li>Ex: ao usar o Detergente, precisamos inicializar também o MaterialDeLimpeza </li></ul></ul><ul><li>Para isso, fazemos uma “cascata” de construtores. </li></ul><ul><li>Ver exemplos: </li></ul><ul><ul><li>Cartoon.java </li></ul></ul><ul><ul><li>Chess.java (construtores com argumentos) </li></ul></ul>
  19. 19. Chamada do construtor da super-classe <ul><li>class BoardGame extends Game { </li></ul><ul><li>BoardGame(int i) { </li></ul><ul><li>i = i * 2; </li></ul><ul><li>super(i); // Chamada </li></ul><ul><li>... </li></ul><ul><li>} </li></ul>
  20. 20. Modificadores de classes <ul><li>Lembram-se que classes podem ser modificadas com palavras reservadas: </li></ul><ul><ul><li>public </li></ul></ul><ul><ul><li>abstract </li></ul></ul><ul><ul><li>final </li></ul></ul><ul><li>Testem os modificadores abstract e final. </li></ul>
  21. 21. Exercícios <ul><li>Defina (usando UML) a hierarquia de classe para os objetos: </li></ul><ul><ul><li>Ponto </li></ul></ul><ul><ul><li>Círculo </li></ul></ul><ul><ul><li>Cilindro </li></ul></ul><ul><li>Implemente estas classes. </li></ul><ul><li>Teste sua implementação. </li></ul>
  22. 22. Polimorfismo <ul><li>Terceira característica essencial da programação Orientada a Objetos (após encapsulamento e herança). </li></ul><ul><li>Separa o “o que” do “como”. </li></ul><ul><li>Melhora a organização do código. </li></ul><ul><li>Também chamado de “ligacão dinâmica” ou “ligação tardia”. </li></ul>
  23. 23. Polimorfismo: Idéia central <ul><li>Definimos métodos com os mesmos nomes em diversas classes. </li></ul><ul><li>Ao chamar um método, o programa decide automaticamente qual dos métodos existentes deve ser executado. </li></ul><ul><li>Overloading x Overriding </li></ul>
  24. 24. Polimorfismo: Exemplo <ul><li>Ver exemplo Shapes.java </li></ul>Shape draw() erase() Circle draw() erase() Square draw() erase() Line draw() erase()
  25. 25. Exercício <ul><li>Crie uma hierarquia para roedores: </li></ul><ul><ul><li>ratos </li></ul></ul><ul><ul><li>camundongos </li></ul></ul><ul><ul><li>hamsters... </li></ul></ul><ul><li>Na classe base crie os métodos comuns aos roedores </li></ul><ul><li>Use polimorfismo para definir comportamentos diferentes para estes métodos dependendo do tipo de roedor. </li></ul>
  26. 26. Interfaces <ul><li>Interface == Abstract class </li></ul><ul><li>nao poden ter nada alem da definicao </li></ul><ul><li>class nome implements </li></ul><ul><li>ver HorrorShow.java </li></ul>

×