Baixe o app para aproveitar ainda mais
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.
Compartilhar