Buscar

Aula_POO2

Prévia do material em texto

Programação Orientada a Objetos
3º período
Professora: Michelle Hanne
Semântica de Referência
Semântica de Referência
• Em Java não há ponteiros. Java implementa semântica de referência.
• A declaração de um objeto de uma classe C cria uma referência para
um objeto da classe C.
C obj;
• Um objeto criado deve ser associado a uma referência.
obj = new C();
Semântica de Referência
• A atribuição de uma referência b a outra a, resulta em a e b
referenciando o mesmo objeto.
a = new C();
b = new C();
a = b;a
b
após executar a=b
a
b
Semântica de Referência
• O que ocorre com o objeto para o qual não há mais
referência?
• Java possui o Coletor de Lixo (Garbage Collector) que
elimina objetos pendentes na memória de tempos em
tempos.
Exercício
Analise o programa a seguir, escrito em Java e formado pelas
classes Principal e ClasseMaluca.
O que ele imprime?
Exercício
public class ClasseMaluca {
private int dado1;
private int dado2;
public ClasseMaluca(int d1, int d2) {
dado1 = d1;
dado2 = d2;
}
public int getDado1(){
return (dado1);
}
public int getDado2(){
return (dado2);
}
}
Exercício
public class Principal {
public static void main (String[] args) {
ClasseMaluca objA, objB;
objA = new ClasseMaluca(10,20);
objB = new ClasseMaluca(50,100);
System.out.println(objA.getDado1() + " " + objA.getDado2());
System.out.println(objB.getDado1() + " " + objB.getDado2());
objA = new ClasseMaluca(30,60);
System.out.println(objA.getDado1() + " " + objA.getDado2());
objB = objA;
System.out.println(objB.getDado1() + " " + objB.getDado2());
}
}
Construtor
● O construtor é um método onde todas as inicializações do objeto são 
declaradas e possui o mesmo nome da classe. 
● A seguir, temos as propriedades de um construtor:
1. Possuem o mesmo nome da classe
2. Construtor é um método, entretanto, somente as seguintes informações 
podem ser colocadas no cabeçalho do construtor:
– Escopo ou identificador de acessibilidade (como public)
– Nome do construtor
– Argumentos, caso necessário
Construtor
3. Não retornam valor
4. São executados automaticamente na utilização do operador new
durante a instanciação da classe
Para declarar um construtor, escrevemos:
[modificador] <nomeClasse> (<argumento>*) {
<instrução>*
}
Construtor Padrão (default)
● Toda classe tem o seu construtor padrão. O construtor padrão é um 
construtor público e sem argumentos.
● Se não for definido um construtor para a classe, então, 
implicitamente, é assumido um construtor padrão.
● Por exemplo, na nossa classe StudentRecord, o construtor padrão é 
definido do seguinte modo:
public StudentRecord() {
}
Overloading de Construtores
public StudentRecord() {
// qualquer código de inicialização aqui
}
public StudentRecord(String temp){
this.name = temp;
}
public StudentRecord(String name, String address) {
this.name = name;
this.address = address;
}
Overloading de Construtores
public StudentRecord(double mGrade, double eGrade, double 
sGrade) {
mathGrade = mGrade;
englishGrade = eGrade;
scienceGrade = sGrade;
Usando Construtores
public static void main(String[] args) {
// criar três objetos para o registro do estudante
StudentRecord annaRecord = new
StudentRecord("Anna");
StudentRecord beahRecord = new StudentRecord("Beah", "Philippines");
StudentRecord crisRecord = new StudentRecord(80,90,100);
// algum código aqui
}
Usando Construtores
● O atributo estático studentCount têm por objetivo contar o número de
objetos que são instanciados com a classe StudentRecord.
● Então, o que desejamos é incrementar o valor de studentCount toda
vez que um objeto da classe StudentRecord é instanciado. Um bom local
para modificar e incrementar o valor de studentCount é nos
construtores, pois são sempre chamados toda vez que um objeto é
instanciado.
Usando Construtores
public StudentRecord() {
studentCount++; // adicionar um estudante
}
public StudentRecord(String name) {
studentCount++; // adicionar um estudante
this.name = name;
}
Usando Construtores
public StudentRecord(String name, String address) {
studentCount++; // adicionar um estudante
this.name = name;
this.address = address;
}
public StudentRecord(double mGrade, double eGrade, double sGrade) {
studentCount++; // adicionar um estudante
mathGrade = mGrade;
englishGrade = eGrade;
scienceGrade = sGrade;
}
Utilizando o This
● Chamadas a construtores podem ser cruzadas, o que significa ser
possível chamar um construtor de dentro de outro construtor.
Usamos a chamada this() para isso.
● Como boa prática de programação, é ideal nunca construir métodos que 
repitam as instruções. Buscamos a utilização de overloading com o 
objetivo de evitarmos essa repetição.
Utilizando o This
public StudentRecord() {
studentCount++; // adicionar um estudante
}
public StudentRecord(String name) {
this();
this.name = name;
}
Utilizando o This
public StudentRecord(String name, String address) {
this(name);
this.address = address;
}
public StudentRecord(double mGrade, double eGrade, double sGrade) {
this();
mathGrade = mGrade;
englishGrade = eGrade;
scienceGrade = sGrade;
}
Métodos SET e GET
Variáveis de Instância, métodos set e get
Uma classe normalmente consiste em um ou mais métodos
que manipulam os atributos que pertencem a um objeto
particular da classe.
Os atributos são representados como variáveis em uma
declaração de classes.
São chamadas de campos e estão dentro da declaração da
classe.
Métodos SET e GET
● Para que outros objetos possam modificar os
nossos dados, disponibilizamos métodos que
possam gravar ou modificar os valores dos
atributos de objeto ou de classe. Chamamos a
estes métodos modificadores. Este método é
escrito como set<NomeDoAtributoDeObjeto>
● O método que retorna um valor é escrito como get<NomeDoAtributo>.
Métodos SET e GET
Esses métodos servem para pegarmos informações de
variáveis da classe que são definidas como 'private', porém
esses método são definidos como 'public'.
Daí surge uma pergunta natural: por que criar métodos para
acessar variáveis, se podemos acessar elas diretamente?
Simples: questão de segurança
Métodos SET e GET
● As variáveis 'private' só podem ser acessadas de dentro da Classe. É
como se elas fossem invisíveis foram do escopo da classe/objeto.
● Usamos get para obter informações. Esse tipo de método sempre
retorna um valor.
● Usamos set para definir valores. Esse tipo de método geralmente não
retorna valores.
Métodos Set e Get
● Como visto anteriormente, o encapsulamento "protege" os atributos
ou métodos dentro de uma classe, portanto devemos prover meios
para acessar tais membros quando eles são particulares, ou seja,
quando possuem o modificador private.
● Em programação orientada a objetos, esses métodos são chamados de
métodos assessores ou getters e setters, pois eles provêm acesso aos
atributos da classe, e geralmente, se iniciam com get ou set, daí a
origem de seu nome.
SET
Nomeamos um método como set
toda vez que este método for 
modificar algum campo ou atributo 
de uma classe.
Como o valor de um atributo da 
classe será modificado, não é 
necessário que este método retorne 
nenhum valor, por isso, os métodos 
setters são void. Porém, 
obrigatoriamente, eles tem que 
receber um argumento que será o 
novo valor do campo.
GET
Nomeamos um método 
como get toda vez que este 
método for verificar algum 
campo ou atributo de uma 
classe.
Como este método irá 
verificar um valor, ele 
sempre terá um retorno 
como String, int, float, etc. 
Mas não terá nenhum 
argumento.
IS
Nomeamos um método 
acessor com is toda vez que 
este método for verificar 
algum campo ou atributo de 
uma classe que tenha 
retorno do tipo boolean.
Exemplo 1 – Classe Carro
Exemplo 1 – Classe Carro
Exemplo 1 – Classe Carro
Bibliografia
• Barnes, David e Kölling, M. Programação Orientada a Objetos com Java. São Paulo: Pearson Prentice
Hall, 2004.
• Bigonha, R. S. e Bigonha, M. A. S. ProgramaçãoModular. Apostila. Belo Horizonte: DCC-UFMG, 2001.
• Deitel, H. M.; Deitel, P. J. Java - Como Programar. 6. ed. Prentice-Hall, 2005. Capítulo 4 e 5.
• Ferreira, Kecia A. M. Avaliação de Conectividade em Sistemas Orientados por Objetos. Dissertação de
Mestrado. Belo Horizonte: DCC-UFMG, 2006.
• MEYER, Bertrand. Object-oriented software construction. 2. Ed. Estados Unidos: Prentice Hall
International Series in Computer Science, 1997. 1254 p.
• MYERS, Glenford J. Reliable software through composite design. Nova York: Petrocelli/Charter, 1975.
159 p.
• PRESSMAN, Roger S. Engenharia de Software. Rio de Janeiro: MacGraw Hill, 2002.

Continue navegando