Slide 1 - MarkMail

Propaganda
Laboratório de
Computação
Aula 08 e 09 –
Implementação
de Classes
Prof. Fábio Dias
[email protected]
Métodos Acessores


Usados para ler valores de atributos de classe ou de objeto
Escritos como:
get<NomeDoAtributo>

Retorna o valor do atributo
Exemplos
public class Pessoa {
private String nome;
private int idade;
public String getNome() {
return nome;
}
public int getIdade() {
return idade;
}
}
Métodos Modificadores


Utilizados para modificar os valores dos atributos de classe
ou de objeto
Escritos como:
set<NomeDoAtributo>

Recebe o valor do atributo
Exemplos
public class Pessoa {
private String nome;
private int idade;
public void setNome(String nome) {
this.nome = nome;
}
public void setIdade(int idade) {
this.idade = idade;
}
}
Envio de Argumentos


Envio por valor – o método faz uma cópia do valor do
argumento passado para o método
Envio por referência – o método faz uma cópia da
referência do argumento passado
Envio por valor
public class TestePassagemPorValor {
public static void main(String args[]){
int i = 10;
System.out.println(i);
//Chama o método teste e passa como argumento
teste(i);
System.out.println(i);
}
public static void teste(int j){
j = 33;//Muda o valor do parametro j
}
}
Envio por Referência
public class TestePassagemPorReferencia {
public static void main(String[] args){
int idades[] = {10, 11, 12};
for(int i = 0; i < idades.length; i++){
System.out.println(idades[i]);
}
//Chama o método teste e passa idades como argumento
teste(idades);
for(int i = 0; i < idades.length; i++){
System.out.println(idades[i]);
}
}
public static void teste(int[] arr){
for(int i = 0; i < arr.length; i++){
arr[i] = i + 50;
}
}
Envio por Referência
Escopo de um Atributo





Determina onde o atributo é acessível na classe
Determina o tempo de vida de um atributo ou quanto tempo
o atributo pode existir na memória
É determinado pelo local onde o atributo é declarado na
classe
Para simplificar, pensemos no escopo como sendo algo
existente entre as chaves {...}. A chave à direita é chamada
de chave de saída do bloco e a chave à esquerda é
chamada chave de entrada do bloco.
Quando declarado dentro de um bloco, seu escopo inicia
com a sua declaração e vai até a chave de saída do bloco.
Exemplo 1
Exemplo 2
Escopo de um Atributo



O identificador deve ser único no escopo
Isto significa que a seguinte declaração:
{
int test = 10;
int test = 20;
}
O compilador irá gerar um erro pois você deverá ter um
nome único para o atributo dentro do bloco
Escopo de um Atributo

Pode-se ter atributo e variável definidos com o mesmo
nome, desde que não sejam declarados no mesmo bloco.
public class TesteBloco {
int valor = 10;
public void teste() {
System.out.print(valor);
int valor = 20;
System.out.print(valor);
}
public static void main(String[] args) {
TesteBloco testeBloco = new TesteBloco();
testeBloco.teste();
}
}
Casting de Tipos

Casting de Tipos

Casting de objetos
Casting de Tipos Primitivos

Casting permite a conversão de um tipo para outro

É usual entre os tipos numéricos

Tipos lógicos não aceitam casting

Casting pode ser implícito ou explícito
Casting Implícito
Armazenar um atributo de tipo menor em um de tipo
maior:
int numInt = 10;
double numDouble = numInt;//cast implícito

Pela execução de fórmulas:
byte numInt1 = 1;
short numInt2 = 2;
int numDouble = numInt1 + numInt2;//resulta em
int

Casting Explícito

Converter um atributo cujo tipo tem um comprimento maior
para um de comprimento menor, é necessário um cast
explícito
(tipoDado)valor
Exemplos de Casting
Explícito

Para realizar um casting de um valor do tipo int para char
char valChar = 'A';
System.out.print((int)valChar); //explícito
Exemplos de Casting
Explícito
double valDouble = 10.12;
//converte valDouble para o tipo int
int valInt = (int)valDouble;
double x = 10.2;
int y = 2;
//faz o cast do resultado da operação para int
int result = (int)(x/y);
Casting de Objetos


Em instâncias de classes a operação de casting também
pode ser usada para fazer a conversão para instâncias de
outras classes: A classe de origem e a classe de destino
devem ser da mesma família, relacionadas por
herança; uma classe deve ser subclasse da outra
Analogamente à conversão de valores primitivos para um
tipo maior, alguns objetos não podem ser convertidos
implicitamente
(NomeClasse)objeto
Exemplo de Casting de
Objetos
Funcionario funcionario = new Funcionario();
Gerente gerente = new Gerente();
funcionario = gerente;//cast não é necessário
de baixo para cima
gerente = (Gerente)funcionario;//necessita do
cast explícito
Convertendo Tipos Primitivos
para Objetos e vice-versa

Não se pode fazer, sob qualquer circunstância, casting de
um objeto para um tipo de dado primitivo ou vice-versa

Como alternativa, o pacote java.lang inclui classes que
fazem a correspondência para cada tipo primitivo: Float,
Boolean, Byte, dentre outros

Chamamos estas classes de Wrapper Class
Wrapper Class



Possuem o mesmo nome dos tipos primitivos, exceto pelo
fato que o nome dessas classe começam com letra
maiúscula (Short ao invés de short, Double ao invés de
double, etc)
Duas possuem nomes que diferem do correspondente tipo
de dados: Character é usado para variáveis char e
Integer para variáveis int
Usando as classes que correspondem a cada um dos tipos
primitivos, é possível criar objetos que armazenam o
mesmo tipo de valor
Convertendo Tipos Primitivos
para Objetos e vice-versa



Criar uma instância de uma classe Integer com o valor
7801 (primitivo para Objeto)
Integer dataCount = new Integer(7801);
Converter um objeto Integer para um tipo de dado primitivo
int. O resultado é o valor 7801
int newCount = dataCount.intValue();
Converter String para um tipo numérico, digamos int
(objeto para primitivo)
String numero = "65000";
int num = Integer.parseInt(numero);
Pacotes


É utilizado no Java para agrupar classes e interfaces
relacionadas em uma única unidade.
Oferece um mecanismo conveniente para o gerenciamento
de um grupo grande de classes e interfaces, e evita
conflitos de nomes.
Importando Pacotes




Para utilizar classes externas ao pacote atual
Por padrão, todos os programas Java importam o pacote
java.lang
A sintaxe para importar pacotes é:
import <nomeDoPacote>.<nomeDaClasse>;
Exemplo:
import java.awt.Color;
import java.awt.*;
Criando Pacotes

Para criar nossos pacotes, escrevemos:
package <nomePacote>;

Pacotes também podem ser aninhados. Neste caso, o
interpretador espera que a estrutura de diretórios contendo
as classes combinem com a hierarquia dos pacotes.
Modificadores de Acesso



Há quatro diferentes tipos de modificadores de acesso:
 public
 private
 Protected
 Default
public, protected e private são escritos
explicitamente na instrução para indicar o tipo de acesso.
default não deve ser escrito.
Acesso Padrão


Especifica que os elementos da classe são acessíveis
somente aos métodos internos da classe e às suas
subclasses e classes do mesmo pacote.
Não há palavra-chave para o modificador default; sendo
aplicado na ausência de um modificador de acesso.
Exemplo
public class Pessoa {
String sobreNome;
void imprimirSobreNomePessoa(){
System.out.println("Sobrenome: " + sobreNome);
}
}
Acesso Público

Especifica que os elementos da classe são acessíveis seja
internamente e externamente à classe

Qualquer objeto que interage com a classe pode ter acesso
aos elementos públicos da classe

Palavra-chave: public
Exemplo
public class Pessoa {
public String nome;
public void imprimirNomePessoa(){
System.out.println("Nome: " + nome);
}
}
Acesso Protegido

Especifica que somente classes no mesmo pacote podem
ter acesso aos atributos e métodos da classe.

Palavra-chave: protected
Exemplo
public class Pessoa {
protected String endereco;
protected void imprimiorEnderecoPessoa(){
System.out.println("Endereco: " + endereco);
}
}
Acesso Privado


Especifica que os elementos da classe são acessíveis
apenas pela classe que os definiram.
Palavra-chave: private
Exemplo
public class Pessoa {
private int idade;
private void imprimiorIdadePessoa(){
System.out.println("Idade: " + idade);
}
}
Exercícios 1 – Registro de
Agenda


Sua tarefa é criar uma classe que contenha um
Registro de Agenda. A tabela 1 descreve as
informações que um Registro de Agenda deve
conter:
Crie os seguintes métodos:
 Forneça todos os métodos assessores e
modificadores necessários para todos os
atributos.
 Construtores.
Exercícios 2 – Agenda
Para Entregar – 22/04/2008

Crie uma classe Agenda que possa conter entradas
de objetos tipo Registro de Agenda (utilize a classe
criada no primeiro exercício). Devem ser oferecidos
os seguintes métodos para a agenda:
 1. Adicionar registro
 2. Excluir registro
 3. Visualizar registros
 4. Modificar um registro
Download