waldeck/curso/java

26
Inteligência Artificial Reinaldo Bianchi FEI - Elétrica 2000

description

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

Transcript of waldeck/curso/java

Page 1: waldeck/curso/java

Inteligência Artificial

Reinaldo Bianchi

FEI - Elétrica

2000

Page 2: waldeck/curso/java

5a. Aula

Reutilização de programas em Java

Page 3: waldeck/curso/java

Vimos na aula passada

Construção de interfaces gráficas em Java:– Componentes – Eventos– Ações– Entrada e Saída

Exercícios

Page 4: waldeck/curso/java

Nesta aula veremos:

Como reutilizar programas existentes? Composição Herança em Java:

– Conceitos básicos– Sintaxe– Exemplos

Polimorfismo

Page 5: waldeck/curso/java

Reutilização (ou Reuso)

Reutilização de código é o “Santo Graal” da programação atualmente.

Diversas maneiras:– Cópia direta do código (método porco).– Composição (bibliotecas de funções)– Herança (linguagens Orientadas a

Objetos).

Page 6: waldeck/curso/java

Reutilização via Composição

Permite a reutilização de programas, criando objetos dentro de novas classes.

Maneira mais simples de reutilização de programas:– reutiliza o código.

É a maneira pela qual já utilizamos os componentes gráficos (botões, labels, ...) definidos na linguagem Java.

Page 7: waldeck/curso/java

Composição = “Tem um?”

Quando utilizar a composição? Regra: realizar a pergunta “Tem um?” Exemplos:

– Gorgonzola tem Mofo?– Carro tem Volante?

Para a composição utilizamos uma instância de uma classe. Sintaxe:– String nome = new String (“Reinaldo”);

Page 8: waldeck/curso/java

Exemplo de Composição

public class RoboticTeam {Robot C3-PELE = new Robot();

Robot R2D-DUNGA = new Robot(); Robot ROBOMÁRIO = new Robot();

void ataque() {

}

void defesa() {

}}

Ver exemplo Bath.java

Objetos

Page 9: waldeck/curso/java

Herança

Característica básica das linguagens orientadas a objetos.

Permite a reutilização de programas. Permite a criação de novas classes

(derivadas) com base em classes já existentes (debugadas e testadas).

Permite a generalização das idéias. Quando usada na Análise do Projeto, cria

sistemas mais organizados, ...

Page 10: waldeck/curso/java

Herança (II)

Cria uma nova classe como uma extensão de uma classe já existente.

A nova classe é um tipo da classe já existente.

Permite utilizar a forma da classe existente, adicionando código, sem destruir a classe existente.

A nova classe herda os atributos e os métodos da classe existente.

Page 11: waldeck/curso/java

Exemplo de HerançaEmployee

Programmer

projectprogLanguage

Manager

ProjectManager

budgetsControlled

dateAppointed

projects

Dept.Manager

StrategicManager

dept responsibilities

Project Manager define o método:projects()e herda:dateAppointed()budgetControlled()

Page 12: waldeck/curso/java

Herança = “É um?”

Quando utilizar a herança? Regra: realizar a pergunta “É um?” Exemplos:

– Gorgonzola é um Queijo?– Carro é um Veículo?– Aluno é uma Pessoa? – Gerente é um Empregado?

Page 13: waldeck/curso/java

Sintaxe

Para criar uma classe herdeira de outra:

class B extends A {

...

} A classe B é uma sub-classe de A A classe A é a super-classe de B (ou

classe base)

Page 14: waldeck/curso/java

Herança Permite

Herdar os atributos e os métodos da super-classe.

Definir novos atributos e métodos. Modificar um método definido na super-

classe. Que um método da sub-classe utilize

um método da super-classe.

Page 15: waldeck/curso/java

Exemplo

class Cleanser {

String s = new String(”Cleanser");

public void dilute() {}

public void scrub() {}

}

public class Detergent extends Cleanser {

public void scrub() {} // Modifica

public void foam() {} // Adiciona

}

Ver Exemplo Detergente.java

Page 16: waldeck/curso/java

Usando métodos das super-classes Para utilizarmos um método de uma

super-classe utilizamos a palavra chave super:

public void esfregar() {

append(" Detergent.scrub()");

// Chamando o método da super- classe

super.esfregar();

}

Page 17: waldeck/curso/java

Dicas:

Em um grupo de classes relacionadas, coloque os atributos e métodos comuns na super-classe.

Use a herança para criar sub-classes sem ter que repetir código.

Herde somente da classe mais parecida com a que você precisa. Herdar classes maiores desperdiça memória e processamento.

Page 18: waldeck/curso/java

Inicialização

Devemos inicializar todas as classes utilizadas em uma hierarquia. – Ex: ao usar o Detergente, precisamos inicializar

também o MaterialDeLimpeza Para isso, fazemos uma “cascata” de

construtores. Ver exemplos:

– Cartoon.java – Chess.java (construtores com argumentos)

Page 19: waldeck/curso/java

Chamada do construtor da super-classe

class BoardGame extends Game {

BoardGame(int i) {

i = i * 2;

super(i); // Chamada

...

}

Page 20: waldeck/curso/java

Modificadores de classes

Lembram-se que classes podem ser modificadas com palavras reservadas:– public – abstract– final

Testem os modificadores abstract e final.

Page 21: waldeck/curso/java

Exercícios

Defina (usando UML) a hierarquia de classe para os objetos:– Ponto– Círculo– Cilindro

Implemente estas classes. Teste sua implementação.

Page 22: waldeck/curso/java

Polimorfismo

Terceira característica essencial da programação Orientada a Objetos (após encapsulamento e herança).

Separa o “o que” do “como”. Melhora a organização do código. Também chamado de “ligacão

dinâmica” ou “ligação tardia”.

Page 23: waldeck/curso/java

Polimorfismo: Idéia central

Definimos métodos com os mesmos nomes em diversas classes.

Ao chamar um método, o programa decide automaticamente qual dos métodos existentes deve ser executado.

Overloading x Overriding

Page 24: waldeck/curso/java

Polimorfismo: ExemploShape

draw()erase()

Circle

draw()

erase()

Square

draw()

erase()

Line

draw()

erase()

Ver exemplo Shapes.java

Page 25: waldeck/curso/java

Exercício

Crie uma hierarquia para roedores:– ratos– camundongos– hamsters...

Na classe base crie os métodos comuns aos roedores

Use polimorfismo para definir comportamentos diferentes para estes métodos dependendo do tipo de roedor.

Page 26: waldeck/curso/java

Interfaces

Interface == Abstract class nao poden ter nada alem da definicao class nome implements ver HorrorShow.java