Inteligência Artificial
Reinaldo Bianchi
FEI - Elétrica
2000
5a. Aula
Reutilização de programas em Java
Vimos na aula passada
Construção de interfaces gráficas em Java:– Componentes – Eventos– Ações– Entrada e Saída
Exercícios
Nesta aula veremos:
Como reutilizar programas existentes? Composição Herança em Java:
– Conceitos básicos– Sintaxe– Exemplos
Polimorfismo
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).
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.
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”);
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
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, ...
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.
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()
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?
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)
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.
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
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();
}
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.
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)
Chamada do construtor da super-classe
class BoardGame extends Game {
BoardGame(int i) {
i = i * 2;
super(i); // Chamada
...
}
Modificadores de classes
Lembram-se que classes podem ser modificadas com palavras reservadas:– public – abstract– final
Testem os modificadores abstract e final.
Exercícios
Defina (usando UML) a hierarquia de classe para os objetos:– Ponto– Círculo– Cilindro
Implemente estas classes. Teste sua implementação.
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”.
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
Polimorfismo: ExemploShape
draw()erase()
Circle
draw()
erase()
Square
draw()
erase()
Line
draw()
erase()
Ver exemplo Shapes.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.
Interfaces
Interface == Abstract class nao poden ter nada alem da definicao class nome implements ver HorrorShow.java