Programação Orientada a Objetos

Propaganda
Programação Orientada a Objetos
e Java - Introdução
Carlos Lopes
POO e Java
• Objetivo: proporcionar uma visão dos
conceitos de POO e do seu uso na
estruturação dos programas em Java.
– Classes e objetos em Java
– As duas principais partes de uma classe ou
objeto: comportamento e atributo.
– Herança de classes e a forma como ela afeta o
projeto de programas.
Pensando em Objetos
• Exemplo do mundo real
– Entrega de flores a um parente.
Objetos e Classes
• POO apresenta vários conceitos e aspectos
que facilitam o processo de criação e uso de
objetos.
• Quando você escreve um programa em uma
linguagem OO você define classes de
objetos.
• Uma classe em Java é uma “fábrica” de
objetos.
Objetos e Classes
• Exemplo: você pode ter uma classe Árvore que
descreve os aspectos de todas as árvores (tem
folhas e raízes, cresce, produz clorofila).
• A classe serve como um modelo abstrato de uma
árvore.
• Uma classe pode ser vista como uma
implementação de um TAD.
• Para cortar uma árvore você precisa ter uma
instância concreta daquela árvore.
Objetos e Classes
• Uma vez que você tenha uma classe Árvore
você pode criar várias instâncias diferentes
daquela árvore (baixa, alta,...)
comportando-se e sendo reconhecidas como
árvore.
• Mais uma vez: uma classe pode ser vista
como uma fábrica de objetos ou instâncias
concretas da classe.
Objetos e Classes
• Exemplo: A classe Botão para o elemento da
interface gráfica botão.
– A classe Botão define os aspectos de um botão e seu
comportamento
– Aspectos de um botão: rótulo, tamanho, aparência.
– Comportamento:
• Ativado com um simples ou duplo click?
• Altera sua cor quando selecionado?
• O que ele faz quando é ativado?
Objetos e Classes
• Exemplo: A classe Botão (cont.)
– Uma vez que você tenha a classe Botão você
pode criar vários objetos desta classe.
– Os objetos criados possuem os mesmos
aspectos existentes na classe Botão. Entretanto,
podem ter aparências e comportamentos
diferentes baseados naquilo que você quer que
um determinado botão faça.
Objetos e Classes
• Quando você escreve um programa Java você
projeta e constrói um conjunto de classes.
• Quando seu programa é executado os objetos
daquelas classes são criados e descartados quando
necessários.
• Sua tarefa como programador Java é criar um
conjunto de classes que possa proporcionar os
resultados desejados.
Objetos e Classes
• O ambiente Java apresenta uma biblioteca de classes que
implementam muito do comportamento básico que você
necessitará.
– Funções matemáticas, vetores, strings, gráficos, classes
para desenvolvimento de aplicações cliente/servidor
etc.
• Num programa muito simples você pode ter uma única
classe que usa as outras classes da biblioteca.
• Num programa mais sofisticado você provavelmente
necessitará criar mais de uma classe que apresente
interações entre elas.
Comportamentos e Atributos
• Geralmente toda classe em Java é
constituída por dois componentes: atributos
e comportamentos.
• Os atributos são propriedades que
diferenciam um objeto do outro e
determinam sua aparência, estado e outras
qualidades do objeto.
Comportamentos e Atributos
• Exemplo: vamos criar uma classe Motocicleta. Os
atributos desta classe podem ser:
– Cor: vermelho, preta, ...
– Fabricante: Honda, Yamaha, ...
– ...
• Os Atributos são definidos por variáveis
denominadas variáveis de instância.Cada objeto
pode ter valores diferentes para suas variáveis de
instância.
Atributos
• As variáveis de instância podem receber valores
quando o objeto é criado e permanecer com estes
valores durante o tempo de vida do objeto ou
podem mudar durante a execução do programa.
• Além das variáveis de instância existem as
variáveis de classe. Diferente das variáveis de
instância, os valores das variáveis de classe são
armazenados na classe. Veremos com mais
detalhes tais variáveis em aulas futuras.
Comportamento
• O comportamento da classe define o que os
objetos da classe devem fazer quando recebem
algum pedido (mensagem).
• Exemplo: Continuando com a classe Motocicleta,
alguns comportamentos associados a esta classe
incluem:
–
–
–
–
Liga o motor
Desliga o motor
Acelere
Mude a marcha
Comportamento
• Para definir o comportamento da classe você cria
métodos.
• Métodos são funções definidas dentro da classe.
• Métodos nem sempre afetam um único objeto.
• Assim como existem variáveis de instância e
variáveis de classe, também tem-se métodos de
instância e métodos de classe.
• Os Métodos de instância aplicam-se a objetos da
classe. Os métodos de classe aplicam-se a classes.
Criando uma Classe
Class Motocicleta {
String Fabricante;
String Cor;
Boolean estadoDoMotor;
public Motocicleta(nomeDoFabricante, nomeDaCor){
Fabricante = nomeDoFabricante;
Cor = nomeDaCor;
}
void funcionaMotor( ) {
if (estadoDoMotor == true)
System.out.println(“O motor já está funcionando.”)
else {
estadoDoMotor = true;
System.out.println(“O motor agora está funcionando.”)
}
}
}
Criando uma Classe
• Antes de compilar o código presente na transparência
anterior vamos acrescentar mais um método que mostra os
valores das variáveis de instância de um objeto
motocicleta.
void mostraAtributos( ){
System.out.println(“Esta motocicleta é uma” + fabricante + “ ” + cor);
if (estadoDoMotor == true)
System.out. println(“O motor está funcionando. ”);
else
System.out.println(“O motor está desligado.”)
}
Criando uma Classe
• Após compilar o código descrito
anteriormente tente executá-lo. Você obterá
a seguinte mensagem:
In class Motocicleta: void main(String argv[]) is not defined
Java assumiu que a classe é um aplicativo e procurou por um
Método main. Entretanto, a classe não possui um método main.
Para criar objetos da classe Motocicleta você necessitará criar
um aplicativo Java que use esta classe ou adicionar um
método main a ela.
Criando uma Classe
public static void main(String args[ ]){
Motocicleta m = new Motocicleta(“Yamaha
RZ135”, “Vermelha”);
m.mostraAtributos( );
m.funcionaMotor( );
m.mostraAtributos( );
m.funcionaMotor( );
}
Herança
• Herança é um conceito primordial em POO
• A herança é um mecanismo poderoso que
permite que você possa escrever uma classe
especificando apenas aqueles aspectos que a
diferem de alguma outra classe existente.
• Para usufruir da herança todas as classes
devem estar dispostas segundo uma
hierarquia.
Herança: Exemplo
Object
Veículo
VeiculoMotorizado
VeiculoNaoMotorizado
Herança
• Conceitos: Superclasse e Subclasse
• Exemplo: criando uma versão de Botão com rótulo
pré-definido.
– Tudo que se tem a fazer é definir uma classe que seja
subclasse de Botão.
– A subclasse herdará automaticamente todo o
comportamento definido na classe Botão.
– Tudo que você deve fazer é especificar na subclasse o
comportamento que a difere de Botão.
Criando uma Hierarquia de
Classes
• Um planejamento na organização das classes fazse necessário.
– Quando desenvolvendo suas classes numa hierarquia
você pode fatorar informação comum em superclasses.
Assim cada subclasse usa a informação da superclasse.
– Mudando ou inserindo uma classe numa hierarquia
superior faz com que as mudanças sejam
automaticamente sentidas nas classes inferiores.
Criando uma Hierarquia de
Classes
• Exemplo: Suponha que já temos implementado a
classe Motocicleta e queremos agora criar a classe
Carro.
– Carro e Motocicleta têm muitos aspectos em comum.
– Ao invés de abrir um arquivo Carro e copiar várias
informações definidas na classe Motocicleta, um plano
melhor seria fatorar as propriedades comuns numa
hierarquia de classes mais geral.
Criando uma Hierarquia de
Classes
VeiculoMotorizado
VeiculoMotorizadoDe2Rodas
Motocicleta
Scooter
VeiculoMotorizadoDe4Rodas
Carro
Criando uma Subclasse
• Provavelmente o exemplo mais típico de criação
de uma subclasse ocorre quando criamos um
applet.
• Todos os applets são subclasses da classe Applet
(pacote AWT) ou JApplet (pacote Swing).
• Quando você escreve um applet existem vários
métodos definidos na superclasse que você
comumente deverá redefinir. Um destes métodos é
o método paint() que mostra seu applet na tela.
Criando uma Subclasse: Exemplo
public class MeuPrimeiroApplet extends java.applet.Applet{
Font f = new Font(“TimesRoman”,Font.Bold,36);
public void paint(Graphics g){
g.setFont(f);
g.setColor(Color.red);
g.drawString(“Meu Primeiro Applet!”,5,50);
}
}
Criando uma Subclasse: Exemplo
• A compilação da classe descrita
anteriormente gerará erros.
• É necessário importar as classes Graphics,
Font e Color.
import java.awt.Graphics;
import java.awt.Font;
import java.awt.Color;
Ou
import java.awt.*;
Funcionamento da Herança
• Como é que objetos de uma classe podem
obter variáveis e métodos das classes
hierarquicamente superiores?
– Para variáveis de instância, quando você cria
um objeto de uma classe você tem um “slot”
para cada variável definida na classe corrente e
para cada variável definida em todas as suas
superclasses.
Funcionamento da Herança
• Como é que objetos de uma classe podem obter
variáveis e métodos das classes hierarquicamente
superiores?
– Para métodos: novos objetos têm acesso a todos os
nomes de métodos definidos na sua classe e em suas
superclasses. Quando um método é chamado Java
procura inicialmente pela definição do método na
classe do objeto. Se o método não se encontra , ele
procura pelo método na superclasse. Se ele não se
encontra na superclasse ele procura pelo método na
superclasse da superclasse e assim sucessivamente até
encontrar ou não.
Funcionamento da Herança
Associações entre Classes
●
Duas principais associações: agregação e composição.
●
Agregação: estabelece uma relação todo-parte entre classes, sendo
que a parte pode existir sem o todo.
●
●
Exemplo: Carro e Roda. Uma Roda é parte de um Carro,
porém pode a Roda existe por si só fora do Carro. Você
pode por exemplo remover a roda de um carro para colocar
em outro.
Composição: estabelece uma relação todo-parte entre classes, sendo
que a parte NÃO existe sem o todo.
●
Pedido e Itens de Pedido. Se você destruir o Pedido, os Itens
são destruidos junto, eles não tem sentido se não houver
um Pedido.
Download