Você está na página 1de 22

Programao Orientada a Objetos*

Criando Classes em Java


Prof. Isabel Cafezeiro isabel@dcc.ic.uff.br
http://www.dcc.ic.uff.br/~isabel
*Baseado no livro Introduo Programao Orientada a Objetos usando JAVA Rafael Santos Editora Campus Srie SBC

O ambiente de programao
JDK (Java Development Kit)
http://java.sun.com http://java.sun.com/docs/books/tutorial Linux, Windows e outros Edio, Compilao e Execuo de classes

Editor de textos, Javac e Java


(Jcreator: http://www.jcreator.com/, wordpad)

O ambiente de programao
JDK (Java Development Kit)
javac ( compilador ) java ( interpretador ) appletviewer ( visualizador de applets ) javadoc ( gerador de documentao ) jar ( programa de compactao ) javap ( disassembler ) ...

O processo de compilao/execuo

Javac
A classe Java em arquivo com extenso .java
A classe prcompilada (bytecode), em arquivo com extenso .class

Java
interpretao do bytecode pela mquina virtual Java (JVM)

Classes em Java
Nome de classes:
Acentos e cedilha so desaconselhados (o compilador usa o nome das classes pra nomear arquivos) Nmeros podem aparecer aps letra

$ e _ so considerados letra
Maisculas minsculas H palavras reservadas

Recomenda-se:
Iniciar nomes de classes com maisculas

Usar maisculas para separar palavras


ex: CadastroDeFuncionrio Uma classe por arquivo Usar o mesmo nome para o arquivo (com extenso .java) e para a classe

Classes em Java
/** * A classe Vazia no possui campos nem mtodos, mas * mesmo assim pode ser usada para exemplificar as regras Javadoc * sintticas bsicas de Java, podendo at mesmo ser * compilada. Maiscula? */ Class Vazia // esta a declarao da classe! {

/* se houvessem campos ou mtodos, 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 declarao 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 Valores do tipo (true, false)

byte
short (dois bytes) int (quatro bytes) long (oito bytes)

[-128,127]
[-32768,32767] [-2147483648,2147483647]

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 boolean byte short int long +,- (unrio e binrio), *,/, Operaes do tipo &&, ||, !

char
float double

% (resto ),
<,>,<=,>=,==,!=

Campos de classes em Java


Literais ....
.... quando atribudas para variveis dos tipos de tamanhos especficos so automaticamente convertidas, desde que estejam no intervalo esperado short umAno; umAno = 32767; umAno = 32768;

Literal inteira 32767 convertida para tipo short. Erro de compilao: valor fora do intervalo.
C:\>javac testedata.java testedata.java:6: possible loss of precision found : int required: short umDia = 22; umMs = 13; umAno = 32768; ^ 1 error

Campos de classes em Java


Literais ....
.... quando passadas como argumentos devem ser explicitamente convertidas (operao cast) n.inicializaData(umDia,umMs,32767);

C:\>javac testedata.java testedata.java:7: inicializaData(byte,byte,short) in Data cannot be applied to (byte,byte,int) n.inicializaData(umDia,umMs,32767); ^ 1 error

Erro de compilao: Literal inteira 32767 onde esperado tipo short

n.inicializaData(umDia,umMs, (short) 32767);

Campos de classes em Java


/** A classe DataSemMetodos contm somente alguns campos * que exemplificam as declaraes de campos e tipos de dados em * Java. */ class DataSemMetodos { byte dia,ms; short ano; // o ano completo (quatro dgitos) /* Se houvessem mtodos 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 restrio Nmeros podem aparecer aps letra

_ e $ so considerados letra
Maisculas minsculas H palavras reservadas possvel declarar vrios campos com o mesmo tipo (ou classe) separando seus nomes por vrgulas

Recomenda-se:
Iniciar nomes de campos de classes com minsculas Usar maisculas para separar palavras ex: nomeDoAluno

Mtodos em Java
Nomes de mtodos:
Mesmas regras que nomes de campos

Recomenda-se:
Iniciar nomes de mtodos com minsculas Usar maisculas para separar palavras ex: mostraCampos, acende, inicializa

Forma geral da declarao:


modificador-de acesso tipo-ou-classe-de retorno nome-de-mtodo ( lista-de-argumentos )

Mtodos em Java
/** Este mtodo chama o mtodo dataVlida para verificar se os * argumentos so correspondentes a uma data vlida: se forem, * inicializa os campos, caso contrrio zera todos os trs campos. */ void inicializaDataSimples(byte d,byte m,short a) lista de { parmetros if (dataVlida(d,m,a)) { dia = d; ms = m; ano = a; } else { dia = 0; ms = 0; ano = 0; } } // fim do mtodo inicializaDataSimples

tipo (classe) de retorno

sem vrgula no final do mtodo

DataSimples.java

Mtodos em Java
/** Este mtodo recebe uma instncia da prpria classe DataSimples como * argumento e verifica se a data representada pela classe e pela instncia * passada a mesma. A comparao feita campo a campo. */ boolean Igual(DataSimples outraDataSimples) { if ((dia == outraDataSimples.dia) && (ms == outraDataSimples.ms) && objeto passado como (ano == outraDataSimples.ano)) parmetro return true; else acesso aos campos do objeto return false; } // fim do mtodo Igual

mtodo com retorno deve conter a palavra return no corpo

DataSimples.java

Escopo
Regras de Escopo: Determinam a visibilidade dos nomes
campos da classe so visveis em toda classe desconsidera-se ordem e localizao variveis e instncias declaradas dentro de mtodos so visveis no prprio mtodo considera-se ordem e localizao argumentos de mtodos so visveis no prprio mtodo

Escopo
/** A classe Triangulo representa os trs lados de um tringulo qualquer. */ lado2,lado3 so class Triangulo visveis em toda { float lado1; classe, inclusive no boolean Equiltero() { .... } float calculaPermetro() { .... } float lado2,lado3; } // fim da classe Triangulo
triangulo.java

corpo de qualquer mtodo com declarao precedente declarao de lado2,lado3 .

Escopo
boolean Equiltero() { boolean igualdade12,resultado; igualdade12 = (lado1 == lado2); boolean igualdade23; igualdade23 = (lado2 == lado3); if (igualdade12 && igualdade23) resultado = true; else resultado = false; return resultado; } // fim do mtodo Equiltero

igualdade12, resultado e igualdade23 s so visveis neste mtodo

o uso de cada nome local ao mtodo s pode ocorrer aps a declarao do nome

triangulo.java

Modificadores de Acesso
recomenda-se que os usurios de uma classe no tenham acesso aos campos da classe ou aos mtodos que no implementam servios oferecidos pela classe

Encapsulamento: Para assegurar o uso correto,

modificador private: impede a manipulao pelo usurio da classe;


campos de classes, mtodos que no implementam servios

modificador public: permite a manipulao pelo usurio da classe;


mtodos que implementam servios Outros modificadores: protected, ausente

Modificadores de Acesso
/** A classe Data contm campos e mtodos que permitem a manipulao de datas. */ campos privados: a classe deve class Data implementar mtodos (pblicos) para { modific-los private byte dia,ms; private short ano;
public void inicializaData(byte d,byte m,short a) { ... } // fim do mtodo inicializaData public byte retornaDia() { return dia; } // fim do mtodo retornaDia ...
Data.java

Modificadores de Acesso
...
public boolean Igual(Data outraData) { if ((dia == outraData.dia) && (ms == outraData.ms) && (ano == outraData.ano)) return true; else Outra instncia da mesma classe: seus return false; campos e mtodos (mesmo os privados) } // fim do mtodo Igual podem ser manipulados diretamente. .... } // fim da classe Data
Data.java

Você também pode gostar