programação orientada a objetos* criando classes em java prof. isabel cafezeiro...
TRANSCRIPT
ProgramaçãoOrientada a Objetos*
Criando Classes em JavaProf. Isabel [email protected]://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/tutorialLinux, 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 JavaA 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)
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 * 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 VaziaVazia.java
Javadoc
Maiúscula?
Classes em Java
f:\AULAS\POO>c:\j2sdk1.4.2_03\bin\javac Vaziajavac: invalid flag: VaziaUsage: javac <options> <source files>where possible options include: -g Generate all debugging info
...f:\AULAS\POO>c:\j2sdk1.4.2_03\bin\javac Vazia.javaVazia.java:7: 'class' or 'interface' expectedClass Vazia // esta Ú a declaraþÒo da classe!^1 errorf:\AULAS\POO>c:\j2sdk1.4.2_03\bin\javac Vazia.javaf:\AULAS\POO>java VaziaException in thread "main" java.lang.NoSuchMethodError: mainf:\AULAS\POO>
Campos 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)
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;
umAno = 32767;
umAno = 32768;
Literal inteira 32767 convertida para tipo short.
Erro de compilação: valor fora do intervalo.C:\>javac testedata.javatestedata.java:6: possible loss of precisionfound : intrequired: 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);
n.inicializaData(umDia,umMês, (short) 32767);
Erro de compilação: Literal inteira 32767 onde é esperado tipo shortC:\>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
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/** 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
sem vírgula no final do método
tipo (classe) de retorno
lista de parâmetros
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) && (ano == outraDataSimples.ano)) return true; else return false; } // fim do método éIgual
DataSimples.java
método com retorno deve conter a palavra return no corpo
objeto passado como parâmetro
acesso aos campos do objeto
Escopo
Regras de Escopo: Determinam a visibilidade dos nomes
campos da classe são visíveis em toda classedesconsidera-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. */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 .
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
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
Modificadores de AcessoEncapsulamento: 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.*/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
Modificadores 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.