Programação com Objectos Processamento de Dados I 2. Classes, Atributos e Métodos 1 2. Classes, Atributos e Métodos | Classes, Atributos e Métodos | Modificadores de acesso (visibilidade) | Sobrecarga de métodos (method overloading) | Variáveis e métodos de classe | Ciclo de vida de um objecto Programação com Objectos / Processamento de Dados I 2 2. Classes, Atributos e Métodos Classes, Atributos e Métodos | Uma classe é um objecto especial que serve de molde ou padrão para a criação de objectos similares designados por instâncias da classe. Estes objectos possuem a mesma estrutura interna (atributos) e a mesma interface (respondem às mesmas mensagens), pelo que possuem igual comportamento. | Uma classe é composta por: z Identificador que indica o nome da classe. z Atributos (ou variáveis de instância), ié, valores que cada objecto contém e cujos domínios podem ser de: • Tipos primitivos :inteiros, reais, caracteres,… • Referências a outros objectos (ou tipos classe) : identificando relações entre objectos. z | Métodos que são as operações que podem alterar os valores do objecto. Os atributos e os métodos são designados por membros da classe. Programação com Objectos / Processamento de Dados I 3 2. Classes, Atributos e Métodos Classes, Atributos e Métodos • Um método é uma sequência de acções, executada por um objecto, que pode alterar ou dar a conhecer o seu estado (valor dos atributos). • Enquanto que o valor dos atributos reside no objecto, o método reside na classe. • Assinatura dum método: • identificador do método; • identificador e tipo dos parâmetros; • valor de retorno. Programação com Objectos / Processamento de Dados I 4 2. Classes, Atributos e Métodos Classes, Atributos e Métodos z Os métodos são catalogados em: • Construtor: executado na criação do objecto. • Têm usualmente o mesmo identificador da classe. • Nunca devolvem tipos. • Não podem ser evocados. • Normalmente usados para inicializar os atributos. • Destrutor: executado na destruição do objecto. • Modificador: altera valor dos atributos. • Selector: dá a conhecer o valor dos atributos, sem os alterar. Programação com Objectos / Processamento de Dados I 5 2. Classes, Atributos e Métodos Classes, Atributos e Métodos Identificador da classe Atributos ( ou variáveis de instância) Métodos Construtores Modificadores Selectores Programação com Objectos / Processamento de Dados I 6 2. Classes, Atributos e Métodos Exemplo “Uma conta bancária contém sempre um saldo e pertence a uma pessoa. A pessoa tem um nome, telefone e um número de BI. Na conta pode ser depositado ou levantado dinheiro. Sempre que entender, o titular pode consultar o saldo da conta”. | Classes z Conta, que identifica uma conta bancária z Pessoa, | que identifica uma pessoa Atributos primitivos z Conta: saldo (float) z Pessoa: nome (string), numTelefone (long), numBI (long) Programação com Objectos / Processamento de Dados I 7 2. Classes, Atributos e Métodos Exemplo z Atributos referência • Conta: titular (instância de uma Pessoa) z Métodos • Conta: • Levantamento (parâmetro: quantia a levantar) • Deposito (parâmetro: quantia a depositar) • Saldo (retorna: saldo da conta) • Pessoa: • numTelefone (retorna: número de telefone) • numBI (retorna: número de BI) Programação com Objectos / Processamento de Dados I 8 2. Classes, Atributos e Métodos Implementação Java do exemplo Classe Pessoa public class Pessoa { /* atributos da classe */ private String nome; private long numTelefone; private long numBI; /* construtor por defeito */ /* inicializa: nome = null, numTelefone=0 e numBI=0 */ public Pessoa(){ } /* construtor com parâmetros */ /* inicializa os atributos da classe */ /* com os valores dos parâmetros */ public Pessoa(String nome, long numTelefone, long numBI) { this.nome = nome; this.numTelefone = numTelefone; this.numBI = numBI; } Programação com Objectos / Processamento de Dados I 9 2. Classes, Atributos e Métodos /* métodos modificadores actualizam os atributos */ /* da classe com os valores dos parâmetros */ public void setNome (String nome) { this.nome = nome; } public void setNumTelefone (long numTelefone) { this.numTelefone = numTelefone; } /* métodos selectores retornam os valores dos atributos */ public String getNome(){ return nome; } public long getNumTelefone () { return numTelefone; } public long getNumBI () { return numBI; } } Programação com Objectos / Processamento de Dados I 10 2. Classes, Atributos e Métodos public class Conta { Classe Conta /* atributos da classe */ private float saldo; private Pessoa titular; /* construtor por defeito public Conta(){ saldo = 0; titular = new Pessoa(); } */ /* construtor com parâmetros */ /* inicializa os atributos da classe */ /* com os valores dos parâmetros */ public Pessoa(float saldo, Pessoa titular) { this.saldo = saldo this.titular = titular; } Programação com Objectos / Processamento de Dados I 11 2. Classes, Atributos e Métodos /* métodos modificadores actualizam os atributos */ /* da classe com os valores dos parâmetros */ public void levantamento (float valor) { if (saldo >= valor) saldo = saldo – valor; else System.out.print("Saldo da sua conta é inferior"); } public void deposito (float valor) { saldo += valor; } public void setTitular (Pessoa pes) { titular = pes; } /* métodos selectores retornam os valores dos atributos */ public String getTitular(){ return titular.getNome(); } public float consultarSaldo () { return saldo; } } Programação com Objectos / Processamento de Dados I 12 2. Classes, Atributos e Métodos ; Classes, Atributos e Métodos | Modificadores de acesso (visibilidade) | Sobrecarga de métodos (method overloading) | Variáveis e métodos de classe | Ciclo de vida de um objecto Programação com Objectos / Processamento de Dados I 13 2. Classes, Atributos e Métodos Modificadores de acesso (visibilidade) O Java fornece mecanismos de controlo de acessibilidade (visibilidade) tanto para classes como para os respectivos membros. | Classes: z Quando nenhum modificador é usado na definição da visibilidade de uma classe então esta pode ser acedida apenas a partir do interior do package a que pertence. • Exemplo: class Exemplo z Uma classe declarada como public poderá ser acedida dentro e fora do package a que pertence. • Exemplo: public class Exemplo Programação com Objectos / Processamento de Dados I 14 2. Classes, Atributos e Métodos Modificadores de acesso (visibilidade) | Métodos: z public - o método pode ser evocado dentro da própria classe ou a partir de qualquer outra classe. public void exemplo() {...} z private - o método é acessível apenas dentro da classe a que pertence. private void exemplo() {...} z protected - o método é acessível dentro da própria classe ou de qualquer outra classe pertencente ao mesmo package. O método é ainda acessível a partir de eventuais subclasses da classe a que pertence. protected void exemplo() {...} z "friendly" - quando nada se indica o método é acessível a qualquer classe do mesmo package. void exemplo() {...} Programação com Objectos / Processamento de Dados I 15 2. Classes, Atributos e Métodos Modificadores de acesso (visibilidade) | Métodos: (continuação) z Uma classe comunica com outras classes através do conjunto dos seus métodos que não foram declarados como private, pois apenas esses são visíveis do exterior. O conjunto desses métodos constitui a interface (API) da classe. z Os métodos construtores da classe devem ser declarados como public pois só assim poderemos instanciar a classe a que pertencem a partir de qualquer programa Java. Programação com Objectos / Processamento de Dados I 16 2. Classes, Atributos e Métodos Modificadores de acesso (visibilidade) | Variáveis de instância (atributos): z Embora o Java permita declarar as variáveis de instância como public (e também por omissão) essa prática não é aconselhável. z Por razões de preservação do encapsulamento da estrutura interna da classe as variáveis de instância devem ser declaradas como private. z O acesso e modificação das variáveis de instância deve ser feito através de métodos com visibilidade public. Programação com Objectos / Processamento de Dados I 17 2. Classes, Atributos e Métodos ; Classes, Atributos e Métodos ; Modificadores de acesso (visibilidade) | Sobrecarga de métodos (method overloading) | Variáveis e métodos de classe | Ciclo de vida de um objecto Programação com Objectos / Processamento de Dados I 18 2. Classes, Atributos e Métodos Sobrecarga overloading) | de métodos (method Podemos ter métodos com o mesmo nome desde que tenham assinaturas diferentes. Quando isso acontece dizemos que temos sobrecarga de métodos (method overloading). tipo de args nome por: A assinatura de um método é constituída z nome do método public void exemplo (int a, double b, char c) z numero de argumentos z tipo de argumentos nº de args = 3 z ordem dos argumentos Exemplo: public void soma (int a, int b) Æ num.soma(2,5) public void soma (double a, double b) Æ num.soma(2.0,5d) | Programação com Objectos / Processamento de Dados I 19 2. Classes, Atributos e Métodos ; Classes, Atributos e Métodos ; Modificadores de acesso (visibilidade) ; Sobrecarga de métodos (method overloading) | Variáveis e métodos de classe | Ciclo de vida de um objecto Programação com Objectos / Processamento de Dados I 20 2. Classes, Atributos e Métodos Variáveis e métodos de classe z Por vezes existem atributos (variáveis) e métodos que não dizem respeito ao objecto (instância) em si, mas sim à própria classe. A estes atributos dá-se o nome de variáveis de classe. z Para aceder e modificar estas variáveis têm que ser definidos métodos próprios denominados de métodos de classe. Quer as variáveis, quer os métodos de classe diferenciam-se dos de instância pela inclusão do qualificador static. z private static int contador; //variável de classe private static void incrementa () { //método de classe ++contador; } Programação com Objectos / Processamento de Dados I 21 2. Classes, Atributos e Métodos Exemplo z Consideremos a classe Conta definida anteriormente. Pretende- se adicionar a esta a variável nContas que indica o n.º de contas já criadas, isto é, o n.º de objectos do tipo Conta. O seu valor é incrementado aquando da criação de uma conta e decrementado no acto de eliminação de uma conta.. z Assim, nContas não caracteriza nenhuma conta em particular, logo não é uma variável de instância, mas de classe. Que alterações seria necessário efectuar na classe Conta? Programação com Objectos / Processamento de Dados I 22 2. Classes, Atributos e Métodos ; Classes, Atributos e Métodos ; Modificadores de acesso (visibilidade) ; Sobrecarga de métodos (method overloading) ; Variáveis e métodos de classe | Ciclo de vida de um objecto Programação com Objectos / Processamento de Dados I 23 2. Classes, Atributos e Métodos Ciclo de vida de um objecto z A vida de um objecto compreende três fases distintas. São elas: • Criação • Utilização • Remoção Programação com Objectos / Processamento de Dados I 24 2. Classes, Atributos e Métodos Ciclo de vida de um objecto | Criação Esta fase envolve três partes: (1) Declaração de uma variável para referir um objecto tipo_de_dados nome_da_variável z Notifica o compilador que nome irá ser usado para referenciar um objecto do tipo indicado. z Uma declaração não cria novos objectos. z A referência irá se manter a null até que exista alguma atribuição. Exemplo: Pessoa p; Programação com Objectos / Processamento de Dados I p null 25 2. Classes, Atributos e Métodos Ciclo de vida de um objecto | Criação (continuação) (2) Instanciação de um objecto tipo_de_dados nome_da_variável = new tipo_de_dados() z O operador new reserva memória para o novo objecto e evoca o construtor. z O operador new retorna a referência para o novo objecto objecto p Exemplo: nome = null numTelefone = 0 numBI = 0 Pessoa p = new Pessoa() Programação com Objectos / Processamento de Dados I 26 2. Classes, Atributos e Métodos Ciclo de vida de um objecto | Criação (continuação) p1 p2 objecto nome = “Ana” numTelefone = 123456789 numBI = 135792468 (3) Inicialização de um objecto O operador new evoca o construtor de acordo com os parâmetros indicados. z Uma classe pode ter vários construtores, que diferem no número e tipo dos argumentos. z Os construtores possuem o mesmo nome da classe. z Uma declaração de uma variável não implica sempre uma instanciação de uma classe. Tudo depende do que pretendemos fazer Vários construtores Æ Várias formas de inicializar z Pessoa p1 = new Pessoa (“Ana”,123456789,135792468) Pessoa p2 = p1 Programação com Objectos / Processamento de Dados I 27 2. Classes, Atributos e Métodos Ciclo de vida de um objecto | Utilização Uma vez criado um objecto podemos utilizá-lo enviando e recebendo mensagens do mesmo. Para isso é necessário conhecer o seu interface (API) com o exterior. Programação com Objectos / Processamento de Dados I 28 2. Classes, Atributos e Métodos Ciclo de vida de um objecto | Remoção | | O Java Runtime Environment (JRE) possui um "garbage collector" que periodicamente liberta a memória usada pelos objectos que já não estão a ser referenciados. Podemos evocar o "garbage collector" explicitamente através do método gc da classe System System.gc(); | É útil em situações onde se prevê a necessidade de utilizar grandes quantidades de memória, ou em situações em que se utilizou grandes quantidades de memória. Programação com Objectos / Processamento de Dados I 29