Você está na página 1de 14

Algoritmos e Programação 2

Baseado no material do Prof. Júlio Machado

Objetos e Classes em Java

 Revisão
– Classes: encapsulam dados (atributos) e
operações sobre os dados (métodos)
– Objetos: instâncias de classes, têm estado
(definido pelos atributos) e comportamento
(definido pelos métodos)

Classes

 Definições de classes incluem


(geralmente):
– modificador de acesso
– palavra-chave class
– nome da classe
– atributos de instância
– métodos de instância

1
 Modificadores de acesso
– Permitem definir o encapsulamento de
atributos e métodos
– Dois modificadores principais:
• private: visível apenas na classe atual
• public: visível para qualquer classe externa

 Recomendações
– A menos que hajam razões fortes, os atributos de
uma classe devem ser definidos como private
(encapsulamento) e os métodos que são
chamados de fora da classe devem ser public
(interface de acesso).
– Métodos que devem ser usados somente dentro
da própria classe, devem ser especificados como
private.

Encapsulamento

 Objetivo:
– Esconder como as coisas funcionam por
trás de uma interface de acesso.
 Implementado através dos
modificadores de acesso.

2
 Métodos get
– Retornam o valor dos atributos de um
objeto, uma vez que não é possível acessá-
los diretamente.
 Métodos set
– Permitem alterar o valor de um atributo.
– Estes métodos são chamados por alguns
autores de transformadores.

Exemplo: classe Professor


public class Professor
{
private String nome;
private int matricula;
private int cargaHoraria;
private double salarioHora;
...
}
 Atributos estão encapsulados!!!
 Apenas métodos da própria classe
Professor podem acessar os atributos.

 Métodos:
...
public void setNome(String n) {
nome = n;
}
public String getNome() {
return nome;
}
public void setMatricula(int m) {
matricula = n;
}
public int getMatricula() {
return matricula;
}
...

3
...
public void setCargaHoraria(int c) {
cargaHoraria = c;
}
public int getCargaHoraria() {
return cargaHoraria;
}
public void setSalarioHora(double s) {
salarioHora = s;
}
public double getSalarioHora() {
return salarioHora;
}
public double getSalario() {
return salarioHora * cargaHoraria;
}
}

Notação Gráfica

 Para melhor visualizar e entender as


classes.
– Representação das classes
– Relacionamento entre as classes
 Exemplos: Booch, OMT, UML (Unified
Modeling Language)
Padrão Atual
(mais moderna,
mais usada)

 Notação UML
– Classe: retângulo dividido em três
partes
• primeira parte: nome da classe
• segunda parte: atributos
• terceira parte: métodos
Professor
– Atributos e métodos - nome: String
• private: - - matricula: int
- cargaHoraria: int
• public: + - salarioHora: double
+ setNome (n: String)
+ getNome ( ): String
+ setMatricula (m: int)
+ getMatricula( ): int
+ setCargaHoraria (c: int)
+ getCargaHoraria( ): int
+ setSalarioHora(s: double)
+ getSalarioHora( ): double
+ getSalario( ): double

4
 Instanciação
– Um objeto depois de criado, conterá todos
os atributos e métodos descritos em sua
classe.
– Para instanciar um objeto em Java
utilizamos o operador new.
– Ex.:
Professor prof1;
prof1 = new Professor();
prof1:Professor

prof1 NULL prof1 nome=null


matricula=0
cargaHoraria=0
salarioHora=0.0

 Para “matar” um objeto em Java se


utiliza null
– Exemplo: Professor prof1;
prof1 = new Professor();
prof1 = null; // coletor de lixo

prof1 NULL prof1:Professor

nome=null
prof1 matricula=0
cargaHoraria=0
salarioHora=0.0

prof1 NULL

 Quando o operador new é usado é


“alocada” memória.
 Quando um objeto não é mais
necessário, devolve-se o(s) recurso(s)
para o sistema.
 Java realiza a coleta de lixo automática
da memória (garbage collector).
 Quando um objeto não é mais utilizado,
ele é marcado para coleta de lixo.

5
 Como executar um programa em Java?
– Um programa é composto de várias
classes e objetos.
– Como indicar por onde o programa
começa?
– Em Java temos um método especial que o
interpretador assume como o início do
programa: main.
• public static void main (String args[ ])

public static void main (String


args[]){
Professor prof1;
prof1 = new Professor();
prof1.setNome(“Júlio”);
prof1.setMatricula(1234);
prof1.setCargaHoraria(14);
System.out.println(prof1.getCa
rgaHoraria());
}

Escopo de Variáveis
 O escopo de uma variável informa onde
ela pode ser utilizada.
 Ex.:
1: public class VerificaEscopo{
2: private int escopoA;
3: public void metodo(int escopoB){
4: int escopoC;
5: }
6: }

6
– escopoA é atributo da classe e seu escopo
vale em qualquer lugar a partir da linha 1
– escopoB e escopoC são variáveis locais
cujo escopo é válido somente dentro do
método

Inicialização de Variáveis
 Atributos de uma classe são
inicializados com valores padrão:
– 0 -> byte, short, int, long
– 0.0 -> float, double
– false -> boolean
– \u0000 -> char
– null -> Object

 Variáveis locais declaradas dentro de


métodos devem obrigatoriamente
serem inicializadas.
– O compilador Java irá indicar se não
inicializarmos as variáveis.
 Ex.:
class Aluguel {
private int numero;
public void adicItem(){
float itemCusto;
int numDias;
System.out.println("Numero="+numero); //OK
System.out.println("ItemCusto="+itemCusto); //Erro
}
}

7
Referências
 Quando criamos um objeto em Java,
mantemos uma referência para o objeto
na memória.
 Ex.:
Professor prof1, prof2;
prof1 = new Professor();...
prof2 = new Professor();...
prof1:Professor prof2:Professor

prof1 nome="Júlio" prof2 nome="Isabel"


matricula=123 matricula=321
cargaHoraria=14 cargaHoraria=40
salarioHora=21.5 salarioHora=21.5

 Ao atribuir prof1 ou prof2 a uma terceira


variável, o que irá acontecer?
 Ex.:
Professor prof1, prof2, prof3;
prof1 = new Professor();...
prof2 = new Professor();...
prof3 = prof1;

prof1:Professor prof2:Professor

nome="Júlio" nome="Isabel"
prof1 matricula=123 prof2 matricula=321
cargaHoraria=14 cargaHoraria=40
salarioHora=21.5 salarioHora=21.5
prof3

 Se alteramos algum atributo do objeto


referenciado por prof3, estaremos
alterando também o referenciado por
prof1!
 Ex.:
Professor prof1, prof2, prof3;
prof1 = new Professor();...
prof2 = new Professor();...
prof3 = prof1;
prof3.setCargaHoraria(12); prof1:Professor

prof1 nome="Júlio"
matricula=123
cargaHoraria=12
prof3 salarioHora=21.5

8
Exercícios

1) Escreva um método para a classe


Professor que imprima todos os dados
de um determinado professor.
– Nome: Maria
Matrícula: 234
Carga Horária: 8
Salário/Hora: 20.00
Salário: 160.00

2) Escreva uma classe Contador, que


apresente métodos para informar o
valor inicial, incrementar, decrementar e
exibir o valor atual na tela.
3) Exemplifique a utilização desta classe
criando uma aplicação que crie vários
contadores e use os métodos definidos.
– Por exemplo, crie 3 contadores e chame
alguns métodos para
incrementar/decrementar o contador. No
final, exiba o valor de cada contador.

Inicialização de Objetos
 Objetos:
– Estado: definido pelos atributos declarados
na classe
– Comportamento: definido pelos métodos
declarados na classe
 Quais valores os atributos do objeto
possuem após a sua instanciação?
 Como definir o estado inicial do objeto?

9
 Exemplo: classe Circulo
public class Circulo {
private int centrox;
private int centroy;
private int raio;
public double area(){
return (3.14 * raio * raio);
}
public double circunferencia(){
return (2 * 3.14 * raio); Circulo
} -centrox:int
public int diametro(){ -centroy:int
return (2 * raio); -raio:int
} +area():double
} +circunferencia():double
+diametro():int

Circulo circ = new Circulo();

circ:Circulo circ:Circulo

centrox=??? centrox=0
centroy=??? centroy=0
raio=??? raio=0

 Inicialização padrão de atributos:


– byte, short, int, long: 0
– float, double: 0.0
– char: \u0000
– boolean: false
– Object: null

 Da forma como foi apresentada a


classe Circulo, todos os objetos criados
a partir dela terão seus atributos
inicializados com valores padrão iguais
a zero.
 Como permitir que instâncias da classe
Circulo possuam estados diferentes?

10
Construtores

 O construtor é um código especial


responsável pela inicialização dos
atributos de instância de um objeto de
uma determinada classe.

 Um construtor em Java:
– Possui o mesmo nome da classe
(respeitando maiúsculas e minúsculas);
– Pode possuir ou não parâmetros;
– Não possui um tipo de retorno, nem mesmo
void.

<modificador_de_acesso> <nome_classe>(<parâmetros>)
{
//corpo do construtor
}

 Exemplo: classe Circulo


public class Circulo {
private int centrox;
private int centroy;
private int raio;
public Circulo(int x, int y, int r){
if (x >= 0) centrox = x;
else centrox = 0;
if (y >= 0) centroy = y;
else centroy = 0;
Circulo
if (r > 0) raio = r;
else raio = 1; -centrox:int
-centroy:int
}
-raio:int
...
+Circulo(x:int, y:int, r:int)
} +area():double
+circunferencia():double
+diametro():int

11
Circulo circ = new Circulo(5,1,1);

circ:Circulo circ:Circulo

centrox=??? centrox=5
centroy=??? centroy=1
raio=??? raio=1

 Quando um objeto é instanciado:


– Operador new aloca a memória
necessária;
– Construtor é invocado automaticamente
para inicializar os atributos do objeto.

Construtor Default
 Se nenhum construtor é definido para
uma determinada classe, Java irá
definir um construtor padrão (chamado
construtor default)
– Não possui argumentos de entrada e não
faz nada.
– Foi o construtor utilizado até agora!
– Caso qualquer construtor seja definido na
classe, Java não irá disponibilizar o
construtor default.

 Exemplo: classe Circulo


Circulo
-centrox:int
-centroy:int
-raio:int
+Circulo(x:int, y:int, r:int)
+area():double
+circunferencia():double
+diametro():int

Circulo circ = new Circulo(); Inválido


Circulo circ = new Circulo(1,1,1); Válido

12
Exercícios
1) Adicione os seguintes comportamentos à
classe Circulo:
- mover um circulo para qualquer posição;
- aumentar o tamanho de um círculo em uma
unidade;
- diminuir o tamanho de um círculo em uma
unidade;
- informar uma representação textual do círculo,
contendo seu ponto central e raio;

2) Defina novos construtores para a


classe Circulo com as seguintes
características:
- receba como parâmetros o ponto X e Y
para o centro; para o raio utilizar o valor
padrão 1
- receba como parâmetro o raio; para o
ponto X e Y utilizar o valor padrão 0
- receba como parâmetro um outro
círculo, gerando uma cópia do mesmo

3) Reimplemente a classe Professor


desenvolvida anteriormente para incluir
a inicialização de objetos via
construtores.

13
4) Suponha que uma casa é formada por 3 peças: uma
cozinha circular, uma sala retangular e um banheiro
quadrado. Vamos implementar um programa que
permita definir as dimensões das peças da casa e
calcular sua área. Para tanto implemente as
seguintes classes:
- classe Cozinha: um método que calcula a área da
cozinha, e os atributos e demais métodos
necessários para isto;
- classe Sala: um método para cálculo da área, e os
atributos e demais métodos necessários para tanto;
- classe Banheiro: idem.
- classe Casa: que tenha 3 atributos (para as três
peças da casa), um método para calcular a área da
casa, e os atributos e demais métodos necessários.
- uma aplicação (uma classe com o método main() )
que instancie 3 casas, calcule e exiba suas áreas.

14

Você também pode gostar