Programação Orientada a Objetos* Criando Classes em Java Prof. Isabel Cafezeiro...

22
Programação 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 Introdução à Programação Orientada a Objetos usando JAVA – Rafael Santos –

Transcript of Programação Orientada a Objetos* Criando Classes em Java Prof. Isabel Cafezeiro...

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.