Prévia do material em texto
AULA 02
PROGRAMAÇÃO ORIENTADA A OBJETOS
Classes e Objetos Parte I
Karina Valdivia Delgado
Roteiro
Métodos acessadores (get) e modificadores (set)
Construtores e destruidores
Referências a objetos
Objetos como argumentos de métodos
Métodos e variáveis static
Construindo suas próprias classes
Criando pacotes
Encapsulamento
Para garantir o princípio de encapsulamento:
Um objeto não deve manipular diretamente os atributos de um outro objeto.
A manipulação deve ser feita via métodos.
Métodos Acessadores(get) e Modificadores (set)
Para garantir o princípio de encapsulamento é comum que os atributos das classes sejam definidos como privados ou protegidos.
Se algum objeto de outra classe deseja alterar ou consultar o valor dos atributos deverá usar os métodos acessadores ou modificadores fornecidos pela classe.
Modificadores de acesso (visibilidade)
Cada atributo e método possui um nível de visibilidade:
Público (+): todo mundo vê.
Privado (-): só os objetos da classe veem.
Protegido (#): só alguns objetos amigos veem.
Conta
- int nroConta
- String nomeDono
- double saldo
- Data dataApertura
+ void fazerDeposito(double monto)
+ boolean fazerSaque(double monto)
+ double consultarSaldo()
+ boolean fazerTransferencia(Conta dest, double monto)
Métodos Acessadores(get) e Modificadores (set)
Os métodos acessadores retornam o valor de um atributo e geralmente são nomeados por getNomeAtributo.
Os métodos modificadores modificam o valor de um atributo e geralmente são nomeados por setNomeAtributo.
Métodos Acessadores(get) e Modificadores (set)
Ex: atributo nroConta
public int getNroConta ( ) {
return nroConta;
}
Métodos Acessadores(get) e Modificadores (set)
public void setNroConta ( int nroConta ) {
this.nroConta = nroConta;
}
A palavra this faz referência ao objeto no qual esse método opera.
A palavra this é usada para resolver o problema de ambiguidade.
Métodos Acessadores (get) e Modificadores (set)
public Data getDataApertura ( ) {
return dataApertura;
}
Princípio de encapsulamento perdido!
Quando for necessário retornar um objeto que é um atributo de uma classe, retorne um clone desse atributo.
Métodos Acessadores(get) e Modificadores (set)
public Data getDataApertura ( ) {
return (Data) dataApertura.clone();
}
Métodos Acessadores (get) e Modificadores (set)
Os métodos set e get podem ser usados para validar os argumentos e impedir qualquer tentativa de modificar os atributos com valores não válidos.
Controlar o acesso aos dados pode reduzir os erros e aumentar a robustez dos programas.
Construtores
São métodos especiais que são chamados para inicializar objetos de uma classe.
Permitem definir o estado inicial do objeto.
O construtor tem o mesmo nome da classe.
Classes podem ter múltiplos construtores.
Se você declarar um construtor para uma classe, o compilador não criará um construtor padrão.
Construtores
O construtor sempre é chamado pelo comando new. Ex:
Pessoa p1 = new Pessoa();
Pessoa p2 = new Pessoa(“Ana”, 31);
Destruidores
São métodos especiais que são chamados pelo sistema ao destruir um objeto e podem ser utilizados para liberar memória por exemplo.
Java não utiliza, C++ sim..
Referências a objetos
Pessoa a1 = new Pessoa(“Ana”, 25);
A variável a1 não guarda o objeto.
Podemos dizer que a1 é uma variável que faz referência a um objeto do tipo Pessoa
Referências a objetos
Pessoa a1 = new Pessoa(“Ana”, 25);
Pessoa a2 = new Pessoa(“Ana”, 25);
if (a1 == a2){
System.out.println(“iguais”);
}
Objetos como argumentos de métodos
boolean fazerTransferencia(Conta dest, double monto)
Java trabalha apenas com passagem de parâmetros por valor, isto é, funciona como uma atribuição simples.
Assim, quando chamamos o método fazerTransferencia não há cópia de objetos e sim cópia de endereços.
Objetos como argumentos de métodos
public static void trocaDatas (Data d1, Data d2){
Data temp = d1;
d1 = d2;
d2 = temp;
}
Funciona?
Métodos static
Métodos que realizam uma tarefa que não depende de um objeto são chamados de métodos static ou métodos da classe.
Esses métodos só podem acessar variáveis estáticas da classe.
Para chamar um método static usar:
NomeDaClasse.nomeDoMétodo( argumentos)
Ex.:
Math.sqrt (100.00)
.
Variáveis static
Variáveis static pertencem à classe.
Todos os objetos da classe compartilham uma cópia das variáveis estáticas.
Ex.:
private static int t = 5;
.
Metodo main
O método main é estático pois isso permite que a JVM invoque o main sem criar uma instância de classe.
Todo programa Java começa sua execução neste método.
Java NomeDaClasse arg1 arg2 ...
.
Metodo main
public class Teste {
public static void main(String[] args) {
System.out.println(Math.sqrt (100.00));
System.out.println(Math.PI);
}
}
.
Construindo suas próprias classes
Havendo múltiplas classes em um mesmo arquivo, somente uma pode ser public, e deve ter o mesmo nome do arquivo fonte.
Pacotes
O ponto forte do Java:
contém muitas classes predefinidas
Essas classes são agrupadas em pacotes.
Por exemplo:
java.lang: classes fundamentais;
java.io: classes de E/S;
O conjunto de pacotes de Java é chamado de API do Java (Java Application Programming Interface).
.
Pacotes
Para usar um pacote existente usamos:
import pacote.*;
Ex: import java.lang.*;
Também podemos importar uma classe específica:
import pacote.Classe;
Ex: import java.io.BufferedReader;
Pacotes
O programador também pode agrupar suas próprias classes em pacotes.
Para que?
facilitar a localização de tipos;
facilitar a reutilização: programas podem
importar classes de outros pacotes;
evitar conflitos de nomes;
fazer controle de acesso.
.
Pacotes
Exemplo:
Considere um grupo de classes para representar uma coleção de objetos gráficos (Shape, Circle, Rectangle e Triangle)
.
Pacotes
Criando um pacote
Para criar um pacote, coloque tipos (classes, interfaces, etc) dentro dele;
A primeira linha de cada arquivo fonte deve conter o comando package seguido do nome do pacote.
.
Criando um pacote
A classe Circle é um membro público do pacote graphics
.
Criando um pacote
Se nenhum nome de pacote for utilizado, seus tipos serão membros de um pacote default, que é um pacote sem nome.
Esta prática só faz sentido em aplicações muito pequenas de caráter temporário.
.
Criando um pacote
Em um sistema de arquivos a estrutura de nomes reflete a estrutura de diretórios. Ex:
Nome da classe: graphics.Rectangle
Caminho ao arquivo: graphics\Rectangle.java
.
Arquivos de saída (.class)
Ao ser compilado, um arquivo fonte (.java) gera-se um arquivo de saída de mesmo nome para cada classe, interface etc, porém com a extensão .class.
Os arquivos .class também devem ficar em uma estrutura de diretórios refletindo seus nomes, mas não necessariamente junto dos arquivos fonte.
Arquivos de saída (.class)
Esta separação permite a disponibilização de programas aos usuários sem revelar o código fonte.
Gerenciamento de pacotes e Eclipse
O ambiente Eclipse apresenta um conjunto de facilidades para gerenciamento de pacotes de forma automática.
Ao criar uma nova classe é possível especificar o pacote a qual ela pertence.
O Eclipse se encarrega da criação de diretórios.
Exemplo
Escreva uma (ou mais) classe(s) em Java para calcular o saldo de uma conta corrente que pertence a um correntista. Considere:
1. Toda conta se abre com pelo menos 200 reais
2. O sistema deverá permitir fazer saques, depósitos e transferências.
3. O saldo nunca pode ser negativo.
4. A conta corrente deve incluir a data de abertura da conta.
AULA 02
PROGRAMAÇÃO ORIENTADA A OBJETOS
Classes e Objetos Parte I
Karina Valdivia Delgadoimage2.png
image3.png
image4.png
image5.png
image6.png