campos da classe

Propaganda
Programação
Orientada a Objetos*
Criando Classes em Java
Prof. Isabel Cafezeiro
[email protected]
http://www.dcc.ic.uff.br/~isabel
*Baseado no livro Introdução à Programação Orientada a Objetos
usando JAVA – Rafael Santos – Editora Campus – Série SBC
O ambiente de programação
JDK (Java Development Kit)
http://java.sun.com
http://java.sun.com/docs/books/tutorial
Linux, Windows e outros
Edição, Compilação e Execução de classes
Editor de textos, Javac e Java
(Jcreator: http://www.jcreator.com/, wordpad)
O ambiente de programação
JDK (Java Development Kit)
javac ( compilador )
java ( interpretador )
appletviewer ( visualizador de applets )
javadoc ( gerador de documentação )
jar ( programa de compactação )
javap ( disassembler )
 ...
O processo de compilação/execução
Javac
A classe
Java em
arquivo
com
extensão
.java
Java
A classe
précompilada
(bytecode),
em arquivo
com
extensão
.class
interpretação
do bytecode
pela máquina
virtual Java
(JVM)
Classes em Java
Nome de classes:
Acentos e cedilha são desaconselhados
(o compilador usa o nome das classes pra nomear arquivos)
Números podem aparecer após letra
$ e _ são considerados letra
Maiúsculas  minúsculas
Há palavras reservadas
Recomenda-se:
Iniciar nomes de classes com maiúsculas
Usar maiúsculas para separar palavras
ex: CadastroDeFuncionário
Uma classe por arquivo
Usar o mesmo nome para o arquivo (com extensão .java)
e para a classe
Classes em Java
/**
* A classe Vazia não possui campos nem métodos, mas
* mesmo assim pode ser usada para exemplificar as regras
Javadoc
* sintáticas básicas de Java, podendo até mesmo ser
* compilada.
Maiúscula? */
Class Vazia // esta é a declaração da classe!
{
/* se houvessem campos ou métodos, eles deveriam ser
declarados aqui. */
} // fim da classe Vazia
Vazia.java
Classes em Java
f:\AULAS\POO>c:\j2sdk1.4.2_03\bin\javac Vazia
javac: invalid flag: Vazia
Usage: javac <options> <source files>
where possible options include:
-g
Generate all debugging info
...
f:\AULAS\POO>c:\j2sdk1.4.2_03\bin\javac Vazia.java
Vazia.java:7: 'class' or 'interface' expected
Class Vazia // esta Ú a declaraþÒo da classe!
^
1 error
f:\AULAS\POO>c:\j2sdk1.4.2_03\bin\javac Vazia.java
f:\AULAS\POO>java Vazia
Exception in thread "main" java.lang.NoSuchMethodError: main
f:\AULAS\POO>
Campos de classes em Java
Tipos Nativos:
Nome do tipo
boolean
byte
Valores do tipo
(true, false)
[-128,127]
short (dois bytes)
[-32768,32767]
int (quatro bytes)
[-2147483648,2147483647]
long (oito bytes)
char (dois bytes, Unicode [0,65535],operados como inteiros)
'a','b',...
float (ponto flutuante, 4bytes)
double (ponto flutuante, 8bytes)
Campos de classes em Java
Tipos Nativos:
Nome do tipo
Operações do tipo
boolean
&&, ||, !
byte
short
int
+,- (unário e binário),
long
*,/,
char
% (resto ),
float
<,>,<=,>=,==,!=
double
Campos de classes em Java
Literais ....
.... quando atribuídas para variáveis dos tipos de
tamanhos específicos são automaticamente convertidas,
desde que estejam no intervalo esperado
short umAno;
Literal inteira 32767 convertida para tipo short.
umAno = 32767;
Erro de compilação: valor fora do intervalo.
umAno = 32768;
C:\>javac testedata.java
testedata.java:6: possible loss of precision
found : int
required: short
umDia = 22; umMês = 13; umAno = 32768;
^
1 error
Campos de classes em Java
Literais ....
.... quando passadas como argumentos devem ser
explicitamente convertidas (operação cast)
n.inicializaData(umDia,umMês,32767);
Erro de compilação:
Literal inteira 32767
onde é esperado tipo
short
C:\>javac testedata.java
testedata.java:7: inicializaData(byte,byte,short) in Data cannot be applied to (byte,byte,int)
n.inicializaData(umDia,umMês,32767);
^
1 error
n.inicializaData(umDia,umMês, (short) 32767);
Campos de classes em Java
/** A classe DataSemMetodos contém somente alguns campos
* que exemplificam as declarações de campos e tipos de dados em
* Java.
*/
class DataSemMetodos
{
byte dia,mês;
short ano; // o ano completo (quatro dígitos)
/* Se houvessem métodos para esta classe, eles seriam declarados
aqui dentro. */
} // fim da classe DataSemMetodos
dataSemMetodos.java
Campos de classes em Java
Nomes de campos de classes:
Acentos e cedilha podem ser usados sem restrição
Números podem aparecer após letra
_ e $ são considerados letra
Maiúsculas  minúsculas
Há palavras reservadas
É possível declarar vários campos com o mesmo tipo (ou
classe) separando seus nomes por vírgulas
Recomenda-se:
Iniciar nomes de campos de classes com minúsculas
Usar maiúsculas para separar palavras
ex: nomeDoAluno
Métodos em Java
Nomes de métodos:
Mesmas regras que nomes de campos
Recomenda-se:
Iniciar nomes de métodos com minúsculas
Usar maiúsculas para separar palavras
ex: mostraCampos, acende, inicializa
Forma geral da declaração:
modificador-de acesso tipo-ou-classe-de retorno nome-de-método (
lista-de-argumentos )
Métodos em Java
tipo
(classe)
de
retorno
/** Este método chama o método dataÉVálida para verificar se os
* argumentos são correspondentes a uma data válida: se forem,
* inicializa os campos, caso contrário zera todos os três campos.
*/
void inicializaDataSimples(byte d,byte m,short a)
lista de
{
parâmetros
if (dataÉVálida(d,m,a))
{
dia = d; mês = m; ano = a;
}
else
{
dia = 0; mês = 0; ano = 0;
}
} // fim do método inicializaDataSimples
sem vírgula no
final do método
DataSimples.java
Métodos em Java
/** Este método recebe uma instância da própria classe DataSimples como
* argumento e verifica se a data representada pela classe e pela instância
* passada é a mesma. A comparação é feita campo a campo.
*/
boolean éIgual(DataSimples outraDataSimples)
{
if ((dia == outraDataSimples.dia) &&
(mês == outraDataSimples.mês) &&
objeto passado como
(ano == outraDataSimples.ano))
parâmetro
return true;
else
acesso aos campos do objeto
return false;
} // fim do método éIgual
método com retorno deve conter a palavra
return no corpo
DataSimples.java
Escopo
Regras de Escopo: Determinam a visibilidade
dos nomes
campos da classe são visíveis em toda classe
desconsidera-se ordem e localização
variáveis e instâncias declaradas dentro de métodos
são visíveis no próprio método
considera-se ordem e localização
argumentos de métodos são visíveis no próprio método
Escopo
/** A classe Triangulo representa os três lados de um triângulo
qualquer.
*/
lado2,lado3 são
class Triangulo
visíveis em toda
{
float lado1;
classe, inclusive no
boolean éEquilátero()
{ .... }
float calculaPerímetro()
{ .... }
corpo de qualquer
método com
declaração
precedente à
declaração de
lado2,lado3 .
float lado2,lado3;
} // fim da classe Triangulo
triangulo.java
Escopo
boolean éEquilátero()
{
boolean igualdade12,resultado;
igualdade12 = (lado1 == lado2);
boolean igualdade23;
igualdade23 = (lado2 == lado3);
if (igualdade12 && igualdade23)
resultado = true;
else
resultado = false;
return resultado;
} // fim do método éEquilátero
igualdade12, resultado
e igualdade23 só são
visíveis neste método
o uso de cada nome
local ao método só
pode ocorrer após a
declaração do nome
triangulo.java
Modificadores de Acesso
Encapsulamento: Para assegurar o uso correto,
recomenda-se que os usuários de uma classe não tenham
acesso aos campos da classe ou aos métodos que não
implementam serviços oferecidos pela classe
modificador private:
impede a manipulação pelo usuário da classe;
campos de classes, métodos que não implementam serviços
modificador public:
permite a manipulação pelo usuário da classe;
métodos que implementam serviços
Outros modificadores: protected, ausente
Modificadores de Acesso
/** A classe Data contém campos e métodos que permitem a manipulação de
datas.
*/
campos privados: a classe deve
class Data
implementar métodos (públicos) para
{
modificá-los
private byte dia,mês;
private short ano;
public void inicializaData(byte d,byte m,short a)
{ ... } // fim do método inicializaData
public byte retornaDia()
{
return dia;
} // fim do método retornaDia
...
Data.java
Modificadores de Acesso
...
public boolean éIgual(Data outraData)
{
if ((dia == outraData.dia) && (mês == outraData.mês) &&
(ano == outraData.ano))
return true;
else
Outra instância da mesma classe: seus
return false;
campos e métodos (mesmo os privados)
} // fim do método éIgual
podem ser manipulados diretamente.
....
} // fim da classe Data
Data.java
Download