Title: Programa
1ProgramaçãoOrientada a Objetos
- Criando Classes em Java
- Prof. Isabel Cafezeiro
- isabel_at_dcc.ic.uff.br
- 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
2O 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)
3O 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 )
- ...
4O processo de compilação/execução
Javac
Java
A classe Java em arquivo com extensão .java
A classe pré-compilada (bytecode), em arquivo com
extensão .class
interpretação do bytecode pela máquina virtual
Java (JVM)
5Classes 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
6Classes em Java
- /
- A classe Vazia não possui campos nem métodos,
mas - mesmo assim pode ser usada para exemplificar
as regras - sintáticas básicas de Java, podendo até mesmo
ser - compilada.
- /
- 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
Javadoc
Maiúscula?
7Classes em Java
- f\AULAS\POOgtc\j2sdk1.4.2_03\bin\javac Vazia
- javac invalid flag Vazia
- Usage javac ltoptionsgt ltsource filesgt
- where possible options include
- -g Generate all
debugging info - ...
- f\AULAS\POOgtc\j2sdk1.4.2_03\bin\javac
Vazia.java - Vazia.java7 'class' or 'interface' expected
- Class Vazia // esta Ú a declaraþÒo da classe!
-
- 1 error
- f\AULAS\POOgtc\j2sdk1.4.2_03\bin\javac
Vazia.java - f\AULAS\POOgtjava Vazia
- Exception in thread "main" java.lang.NoSuchMethodE
rror main - f\AULAS\POOgt
8Campos de classes em Java
- Tipos Nativos
- Nome do tipo Valores do tipo
- boolean (true, false)
- byte -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)
9Campos 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 lt,gt,lt,gt,,!
- double
10Campos 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
- umAno 32767
- umAno 32768
Literal inteira 32767 convertida para tipo
short. Erro de compilação valor fora do
intervalo.
C\gtjavac testedata.java testedata.java6
possible loss of precision found
int required short umDia 22 umMês 13
umAno 32768
1 error
11Campos de classes em Java
- Literais ....
- .... quando passadas como argumentos devem ser
explicitamente convertidas (operação cast) - n.inicializaData(umDia,umMês,32767)
- n.inicializaData(umDia,umMês, (short) 32767)
Erro de compilação Literal inteira 32767 onde é
esperado tipo short
C\gtjavac testedata.java testedata.java7
inicializaData(byte,byte,short) in Data cannot be
applied to (byte,byte,int) n.inicializaData(umDia,
umMês,32767) 1 error
12Campos 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
13Campos 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
14Mé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 )
15Métodos em Java
- / 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) -
- 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
- DataSimples.java
lista de parâmetros
tipo (classe) de retorno
sem vírgula no final do método
16Mé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)
- (ano outraDataSimples.ano))
- return true
- else
- return false
- // fim do método éIgual
- DataSimples.java
objeto passado como parâmetro acesso aos campos
do objeto
método com retorno deve conter a palavra return
no corpo
17Escopo
- 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 -
18Escopo
- / A classe Triangulo representa os três lados
de um triângulo qualquer. - /
- class Triangulo
-
- float lado1
- boolean éEquilátero()
- ....
- float calculaPerímetro()
- ....
- float lado2,lado3
- // fim da classe Triangulo
- triangulo.java
lado2,lado3 são visíveis em toda classe,
inclusive no corpo de qualquer método com
declaração precedente à declaração de lado2,lado3
.
19Escopo
- 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
- triangulo.java
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
20Modificadores 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
21Modificadores de Acesso
- / A classe Data contém campos e métodos que
permitem a manipulação de datas. - /
- class Data
-
- 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
campos privados a classe deve implementar
métodos (públicos) para modificá-los
22Modificadores de Acesso
- ...
- public boolean éIgual(Data outraData)
-
- if ((dia outraData.dia) (mês
outraData.mês) - (ano outraData.ano))
- return true
- else
- return false
- // fim do método éIgual
- ....
- // fim da classe Data
- Data.java
Outra instância da mesma classe seus campos e
métodos (mesmo os privados) podem ser manipulados
diretamente.