Buscar

POO 07 Classes e Objetos

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Marcelo Siqueira (C) 2003
*
Marcelo José Siqueira 
Coutinho de Almeida
marcelo@ifpb.edu.br
Objetos
Classes
e
Marcelo Siqueira (C) 2003
*
Conteúdo
Introdução
Objetos
Classes
Construtores
Projetando e Usando Classes
Encapsulamento
Variáveis
*
Marcelo Siqueira (C) 2003
*
Objetivos
Ao final desse módulo você deverá ser capaz de...
Compreender e descrever o que são classes e objetos
Utilizar classes existentes
Projetar suas próprias classes 
Desenvolver programas utilizando várias classes
Compreender e descrever o conceito de encapsulamento
Compreender os diferentes tipos de escopos de variáveis
*
Marcelo Siqueira (C) 2003
*
Introdução
O que é a Orientação a Objetos?
Paradigma de programação atualmente dominante
Tem substituído gradativamente a programação estruturada
Uma das grandes promessas é a reusabilidade
foco da solução está nas entidades (objetos - o que) e não nos processos (operações - como)
Identificar o que cada entidade faz e como elas estão ligadas no domínio de problema em questão
*
Marcelo Siqueira (C) 2003
*
Introdução
Exemplo
Agência bancária
Visão Estruturada : sacar, transferir, depositar, pagar, etc.
Visão OO : conta corrente, conta poupança, cliente, funcionário, agência, cheque, etc.
Partida de Futebol
Visão Estruturada : chutar, correr, parar, driblar, etc.
Visão OO : jogador, juíz, bandeirinha, torcedor, bola, etc.
Vídeo Locadora
Visão Estruturada : cadastrar, registrar locação, pesquisar filme, etc.
Visão OO : filme,cliente, ator, diretor,etc. 
*
Marcelo Siqueira (C) 2003
*
Introdução
Em Java quase tudo é objeto...
Botões, Janelas, Strings, etc.
A exceção está nos tipos primitivos:
integer, byte, boolean, long, float, etc.
não tem comportamento mas apenas identidade e estado
Falarei sobre as classes encapsuladoras (wrapper classes) depois...
*
Marcelo Siqueira (C) 2003
*
Objetos
Cada objeto é formado pelos seguintes elementos:
Atributos 
definido pelas variáveis da classe
Comportamento 
definido pelo conjunto dos métodos
Identidade 
definido pelo nome do objeto
*
Marcelo Siqueira (C) 2003
*
Objetos
Exemplos:
*
Atributos: tipo, tamanho,cor
Comportamento: escreve,apaga
Identidade: meulápis
Atributos: tipo, marca,cor
Comportamento: anda,pára
Identidade: minhabicleta
Atributos: tipo, marca,largura, altura
Comportamento: toca, pára, pausa, volta, adianta
Identidade: cdplayer1
Marcelo Siqueira (C) 2003
*
Classes
Especificam de forma genérica um conjunto de objetos com as mesmas características e comportamento:
*
Classe
espécie
habitat
som
Objetos
animal2
animal1
Animal
espécie: gato
habitat: cidade
som: "miau"
espécie:elefante
habitat:savana
som:"fueeeeen"
Marcelo Siqueira (C) 2003
*
Classes
Fornecem uma especificação para os objetos
definem o que é o objeto em termos estruturais e comportamentais
A fôrma ou gabarito dos objetos
Definem um novo tipo
		Animal animal1;
		Animal animal2; 
*
Marcelo Siqueira (C) 2003
*
Objetos e Classes…
*
OBJETOS SÃO, PORTANTO, INSTÂNCIAS OU VARIÁVEIS ESPECIAIS ASSOCIADAS AO TIPO DA CLASSE!
Marcelo Siqueira (C) 2003
*
*
Main
main()
class Animal {
	
 String especie;
 String habitat;
 String som;
 public void anda( ) { 
	System.out.println(“andando na(o) ” + habitat); 
 }
 public void emiteSom( ) {
	System.out.println(som);
 }
}
Atributos da classe
Cada objeto recebe uma cópia
Inicialização com valores default
Cada método executa uma única operação
Marcelo Siqueira (C) 2003
*
Classes
*
public class Main {
 public static void main (String[ ] args) { 
 Animal animal1 = new Animal(“gato”,“cidade”,“miau”);
 Animal animal2 = new Animal(“elefante”,“savana”,“fuen”);
 
 animal1.anda( );
 animal2.anda( );
 animal1.emiteSom();
 animal2.emiteSom();
 }
}
Criação de objetos
do tipo Animal
Uso dos objetos animal1 e animal2
Marcelo Siqueira (C) 2003
*
Classes X Objetos
Classes são criadas em tempo de edição e os objetos em tempo de execução
Objetos só existem enquanto o programa está executando ou enquanto são utilizados
Objetos assumem valores quando são criados e posteriormente podem altera-los
*
Marcelo Siqueira (C) 2003
*
Observações sobre Objetos
Todos os objetos que pertencem a uma mesma classe compartilham o mesmo comportamento
*
Animal animal1 = new Animal(...);
Animal animal2 = new Animal(...);
Animal animal3 = new Animal(...);
animal1.anda();
animal2.anda();
animal3.anda();
Marcelo Siqueira (C) 2003
*
Estado
Representa o conjunto de valores associado aos seus respectivos atributos em dado instante
*
t1
t2
idade = 1.0
temp = 38
qPulgas = 10
idade = 1.5
temp = 39
qPulgas = 40
t
Marcelo Siqueira (C) 2003
*
Estado
Objetos de uma mesma classe podem ter estados diferentes e estes variarem ao longo do tempo
*
animal1.setTemp(30);
animal2.setTemp(10);
animal3.setTemp(15);
animal1.setTemp(20);
Marcelo Siqueira (C) 2003
*
Estado
Mudanças de estado em um objeto não ocorrem espontaneamente
algum método deve ser acionado para que a mudança ocorra
	 	
*
AlgumaClasse
setTemp(-10)
animal4.setTemp(0);
animal4.setTemp(-10);
Animal:animal4
setTemp( )
Marcelo Siqueira (C) 2003
*
Identidade
*
Objetos têm identidades únicas mesmo que pertençam a uma mesma classe e tenham o mesmo estado no mesmo instante.
animal1,animal2 e animal3 pertencem à classe Animal, mas são automóveis distintos e cada um tem sua própria identidade
≠
≠
animal1
animal2
animal3
Marcelo Siqueira (C) 2003
*
Construtores
Para criarmos um objeto devemos acionar o método new( )
Esse método aciona o construtor da classe para que seja criada uma instância da mesma
Quando um objeto é criado seu estado inicial é definido pelo conjunto de valores passado como argumento em new( )
*
Marcelo Siqueira (C) 2003
*
Construtores
*
Computador comp = new Computador(“Desktop”);
Computador comp = new Computador(“Portátil”);
Marcelo Siqueira (C) 2003
*
Construtores
*
public class Funcionario {
 String nome;
 double salario;
 String depto;
 public Funcionario(String n,double s,String d){
 nome = n;
 salario = s;
 depto = d;
 }
 ...
}
Marcelo Siqueira (C) 2003
*
Construtores
*
public class Funcionario {
 String nome;
 double salario;
 String depto;
 public Funcionario(String n,double s,String d){
 n = n;
 s = s;
 d = d;
 }
 ...
}
Marcelo Siqueira (C) 2003
*
Construtores
*
public class Funcionario {
 String n;
 double s;
 String d;
 public Funcionario(String n,double s,String d){
 this.n = n;
 this.s = s;
 this.d = d;
 }
 ...
}
Marcelo Siqueira (C) 2003
*
Construtores
Toda classe tem, pelo menos, um construtor (explicita ou implicitamente)
Não têm um tipo de retorno
Têm o mesmo nome da classe
São chamados uma única vez (para um mesmo objeto)
Podem inicializar valores e acionar outros métodos
Podem ter zero ou mais argumentos
*
Marcelo Siqueira (C) 2003
*
Sobrecarga de Métodos
Ocorre quando a classe dispõe de mais de um método com a mesma assinatura, porém com parâmetros diferentes
*
public void escreveMensagem( ) {
 System.out.println(“Mensagem Vazia”);
}
public void escreveMensagem(String s) {
 System.out.println(“Mensagem Atual:” + s);
}
Marcelo Siqueira (C) 2003
*
Sobrecarga de Métodos
Sobrecarga de Construtor 
É comum haver mais de uma forma de se construir instâncias de uma determinada classe
*
public Circulo( ) {
 this.raio = 1.0;
}
public Circulo(double raio, String cor) {
 this.raio = raio;
 this.cor = cor;
}
public Circulo(double raio) {
 this.raio = raio;
}
Marcelo Siqueira (C) 2003
*
this
A palavra reservada this é usada para definir que uma propriedade (membro da classe) pertence ao objeto corrente (“este”)
Bastante útil quando queremos impedir determinadas ambigüidades
Usado junto a objetos (não em contextos estáticos)
*
Marcelo Siqueira (C) 2003
*
this
*
public Funcionario(String mat,String nome, float sal){
 this.mat = mat;
 this.nome = nome;
 this.sal = sal;
}
public class Funcionario {
 private String mat;
 private String nome;
 private float sal;
100
Manoel
500
}
Funcionario func1 = new Funcionario(“100”,“Manoel”,500);
Marcelo Siqueira (C) 2003
*
this
Usado quando um construtor necessita chamar um outro construtor específico 
Deve haver sobrecarga de método em relação ao construtor
*
public Funcionario(String matricula,String 			 nome, float salario){
 this.matricula = matricula;
 this.nome = nome;
 this.salario = salario;
}
public Funcionario() {
 this(null,null,0.0);
} 
Marcelo Siqueira (C) 2003
*
Comunicação entre Objetos
Durante a execução de um programa, objetos se comunicam entre si através da troca de mensagens:
*
getNome()
getMatricula()
daAula()
tiraDuvida()
orientaProjeto()
Professor
getNome()
getMatricula()
prestaAtencao()
fazerProva()
fazerProjeto()
Aluno
getNome()
tiraDuvida()
fazerProjeto()
orientaEstagio()
Marcelo Siqueira (C) 2003
*
Comunicação entre Objetos
*
classe : Pessoa
atributos: nome, idade, cpf, peso, altura
operações: estuda, trabalha, dorme, assiste
classe : Tv
atributos: marca, sistema, origem, preço...
operações: liga, desliga, sintoniza,ajustacor... 
minhaTV
liga( )
sintoniza( )
desliga( )
pessoa
Marcelo Siqueira (C) 2003
*
Encapsulamento
O conjunto das assinaturas dos métodos (públicos) de uma classe forma uma interface entre o seu núcleo e o mundo externo
*
canal
brilho
cor
contraste
ligar()
desligar()
sintonizar()
ajustar()
X
Marcelo Siqueira (C) 2003
*
Encapsulamento
Vantagens
Não é preciso conhecer a implementação interna do objeto para utiliza-lo
data hiding
complexity hiding
Diminui as dependências
se um determinado objeto for alterado os outros não precisam ser alterados.
Maximiza reusabilidade
Minimiza tempo de debbuging
é mais fácil identificar as origens dos problemas
*
Marcelo Siqueira (C) 2003
*
Encapsulamento
Métodos Acessadores
retorna o estado corrente de um determinado campo
útil quando um objeto deseja conhecer o estado de um outro objeto
*
class Professor {
 public void calcula(Aluno a){
 double media = a.getMedia( );
 if (media >= 7.0)
 ++quant
 }
 ...
}
class Professor {
 public void calcula(Aluno a){
 double media = a.media;
 if (media >= 7.0)
 ++quant
 }
 ...
}	
Ok!
Não!
Marcelo Siqueira (C) 2003
*
Encapsulamento
Métodos Acessadores
São métodos públicos que permitem o acesso a atributos privados
Por convençaõ, usa-se como nome getAtributo 
Sua implementação é bastante simples
*
class Aluno {
 private double media;
 public double getMedia( ){
 return media;
 }
}
Marcelo Siqueira (C) 2003
*
Encapsulamento
Métodos Modificadores
São métodos públicos que modificam o estado corrente de um determinado campo
Significa que apenas a própria classe é que pode modificar seu estado
Por convenção, usa-se como nome setAtributo
*
Marcelo Siqueira (C) 2003
*
Encapsulamento
*
class Aluno {
 private String nome;
 private String matricula;
 private double media;
 public void setNome(String novoNome){
	nome = novoNome;
 }
 public void setMatricula(String novaMat){
	matricula = novaMat;
 }
 public void setMedia(double novaMedia ){
 media = novaMedia;
 }
}
Marcelo Siqueira (C) 2003
*
Variáveis
Variáveis em Java podem ser de um dos três tipos:
Variáveis Locais ou Automáticas
Variáveis de Instância
Variáveis de Classe
*
Marcelo Siqueira (C) 2003
*
Variáveis
Variáveis Locais ou Automáticas
são declaradas dentro de métodos
têm escopo de método
“variáveis locais”
têm tempo de vida muito curto
não são inicializadas por default 
*
Marcelo Siqueira (C) 2003
*
public float getMedia(){
 double soma = 0.0;
 for(int i=0; i < notas.length; i++){
 soma += notas[i];
 }
 return soma / notas.length;
}
Variáveis
Variáveis Locais ou Automáticas
*
0.0
soma
i
0
i
X
Marcelo Siqueira (C) 2003
*
Variáveis
Variáveis de Instância
são declaradas fora dos métodos
Seriam como “variáveis globais” para a classe
têm escopo de objeto (acessível por todos os métodos do próprio objeto)
cada objeto tem uma cópia de cada uma delas
são inicializadas com os valores default
*
Marcelo Siqueira (C) 2003
*
Variáveis
*
class Aluno {
 private String nome;
 public Aluno(String nome){
 this.nome = nome;
 }
}
aluno1
aluno2
aluno3
Aluno aluno1 = new Aluno(“João”);
Aluno aluno2 = new Aluno(“Maria”);
Aluno aluno3 = new Aluno(“José”);
nome=“João”
nome=“Maria”
nome=“José”
Aluno
new
new
new
Marcelo Siqueira (C) 2003
*
Variáveis
Variáveis de Classe
são declaradas fora dos métodos
“variáveis globais”
têm escopo de classe (acessível por todos os métodos de todos os objetos criados da classe)
existe apenas uma cópia dela
deve-se utilizar a palavra static na declaração
*
Marcelo Siqueira (C) 2003
*
Variáveis
*
class Aluno {
 private static int quant = 0;
 public Aluno(){
 quant++; 
 }
}
aluno1
aluno2
aluno3
nome=“João”
nome=“Maria”
nome=“José”
quant=0
Aluno
quant=1
quant=2
quant=3
Aluno aluno1 = new Aluno(“João”);
Aluno aluno2 = new Aluno(“Maria”);
Aluno aluno3 = new Aluno(“José”);
Marcelo Siqueira (C) 2003
*
Granularidade de Métodos
Como definir o tamanho de um método?
*
main()
main()
fazB()
fazA()
Responsabilidade é um critério fundamental
Marcelo Siqueira (C) 2003
*
Escopo de Métodos
A idéia é semelhante ao escopo de variáveis
Métodos Não estáticos
Operam sobre um objeto específico (o método é do objeto!)
É preciso criar um objeto e acioná-lo
Comportamento padrão
Métodos Estáticos
Operam sobre a classe (O método é da classe!)
Deve-se usar a palavra reservada static na assinatura do método
Métodos chamados diretamente de um contexto estático devem ser estáticos
*
Marcelo Siqueira (C) 2003
*
Escopo de Métodos
*
class Aluno {
 private String nome;
 public Aluno(String nome){
 this.nome = nome;
 }
 public String getNome(){
 return nome;
 }
}
class TesteAluno {
 public static void main(String[] args){
 Aluno aluno1 = new Aluno(“Dom Pedro I”);
 Aluno aluno2 = new Aluno(“Tiradentes”);
 System.out.println(aluno1.getNome());
 System.out.println(aluno2.getNome());
 }
} 
Marcelo Siqueira (C) 2003
*
Escopo de Métodos
*
class Aluno {
 private String nome;
 private static int cont = 0;
 public Aluno(String nome){
 this.nome = nome;
 cont++;
 }
 public static int getQuant(){ 
	return cont; }
}
class TesteAluno {
 public static void main(String[] args){
 Aluno aluno1 = new Aluno(“Dom Pedro I”);
 Aluno aluno2 = new Aluno(“Tiradentes”);
 System.out.println(Aluno.getQuant());
 }
} 
Marcelo Siqueira (C) 2003
*
Escopo de Métodos
*
class TesteAluno {
 public static void main(String[] args){
 int[] conj = new int[5];
 conj = leDados();
 System.out.println(maior(conj));
 }
 private static int[] leDados(){ 
	// corpo do método 
 }
 private static int maior(int[] c){ 
	// corpo do método 
 }
} 
Marcelo Siqueira (C) 2003
*
Escopo de Métodos
*
class TesteAluno {
 public static void main(String[] args){
 TesteAluno ta = new TesteAluno();
 int[] conj = new int[5];
 conj = ta.leDados();
 System.out.println(ta.maior(conj));
 }
 private int[] leDados(){ 
 //corpo do método 
 }
 private int maior(int[] c){ 
 //corpo do método 
 }
} 
Marcelo Siqueira (C) 2003
*
Escopo de Métodos
Na
API Java existem várias classes que disponibilizam métodos estáticos:
java.lang.Math
java.lang.Integer
java.lang.Double
java.lang.Boolean
*
Marcelo Siqueira (C) 2003
*
Escopo de Métodos
*
import javax.swing.JOptionPane;
public static void main(String[] args) {
 String r;
 int area; 
 r = JOptionPane.showInputDialog(“Raio");
 a = Integer.parseInt(r);
 area = Math.PI*a*a;
 JOptionPane.showMessageDialog(null,area,“”, 
	JOptionPane.PLAINMESSAGE);
}
Marcelo Siqueira (C) 2003
*
Contatos
 marcelo@ifpb.edu.br
marcelojose.siqueira@gmail.com
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando