230 likes | 405 Views
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 – Editora Campus – Série SBC. O ambiente de programação.
E N D
ProgramaçãoOrientada 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 – 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 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)
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 aclasse
Classes em Java Javadoc Maiúscula? /** * 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
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 tipoValores 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 tipoOperações do tipo boolean &&, ||, ! byte short int +,- (unário e binário), long *,/, char % (resto ), float <,>,<=,>=,==,!= double
Campos de classes em Java Literal inteira 32767 convertida para tipo short. Erro de compilação: valor fora do intervalo. 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; 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 Erro de compilação: Literal inteira 32767 onde é esperado tipo short 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); 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
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 lista de parâmetros 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) { 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
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 objeto passado como parâmetro acesso aos campos do objeto método com retorno deve conter a palavra return no corpo
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 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 . /** 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
Escopo igualdade12, resultado e igualdade23 só são visíveis neste método 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 o uso de cada nome local ao método só pode ocorrer após a declaração do nome
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 campos privados: a classe deve implementar métodos (públicos) para modificá-los /** 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
Modificadores de Acesso Outra instância da mesma classe: seus campos e métodos (mesmo os privados) podem ser manipulados diretamente. ... 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