PROGRAMAÇÃ ÇÃO COM OBJECTOS TUDO É UM OBJECTO Programação com Objectos ÍNDICE Introdução aos objectos Polimorfismo TUDO É UM OBJECTO Interface e classes internas Instruções de controlo Guardar os objectos Nuno Mamede Iniciação e limpeza Esconder a realização Reutilização de classes Tratamento de erros Entradas saídas Padrões de desenho Licenciatura em Engenharia Informática e de Computadores Departamento de Engenharia Informática Instituto Superior Técnico - 2 - OBJECTIVOS OPERACIONAIS Conseguir explicar o alcance e longevidade dos constituintes de um programa Java Definir classes com membros Usar a palavra reservada static Escrever, compilar e executar um pequeno programa Programação com Objectos Definição de Objectos Alcance e longevidade Definição de Classes Definição de Métodos TUDO É UM OBJECTO Definição de Programas Regras de codificação - 3 - - 4 -
tipos primitivos Tudo é um objecto - 5 - l Objectos são criados usando new Os identificadores são referências para um objecto l Exemplo: televisão (objecto) e telecomando (referência) Um exemplo com cadeias de carateres String s; String s = "asdf"; String s = new String("asdf"); Os tipos primitivos são um caso especial l São criados sem new - 6 - l São guardados na pilha l Dimensão está definida na linguagem l As versões Wrapper são guardadas no monte l Primitive type Size Minimum Maximum Wrapper type boolean Boolean char 16-bit Unicode 0 Unicode 2 16-1 Character byte 8-bit -128 +127 Byte short 16-bit -2 15 +2 15 1 Short int 32-bit -2 31 +2 31 1 Integer long 64-bit -2 63 +2 63 1 Long float 32-bit IEEE754 IEEE754 Float double 64-bit IEEE754 IEEE754 Double void Void tipos primitivos (cont.) Exemplo de utilização de um tipo "wrapper" char c = 'x'; Character C = new Character(c); ou Character C = new Character('x'); Java inclui duas classes para cálculos ariteméticos de grande precisão: l BigInteger e BigDecimal l Pertencem à categoria wrapper l Não existe versão tipo primitivo ALCANCE E LONGEVIDADE variáveis veis Alcance e longevidade definidos por chavetas int x = 12; * só o "x" disponível * int q = 96; * ambos "x" & "q" disponíveis * * só o "x" disponível * Não é permitido redefinir variáveis int x = 12; int x = 96; * ilegal * - 7 - - 8 -
ALCANCE E LONGEVIDADE objectos Alcance: todo o programa Longevidade: até serem eliminados pelo colector de lixo Usando a palavra reservada: class class NomeDoTipo * definição do tipo aqui * NomeDoTipo a = new NomeDoTipo(); Exemplo do alcance de variáveis e objectos String s = new String("Cadeia de caracteres"); fim do alcance da variável s Objecto ainda disponível no Monte (mas não há nenhuma referência para o objecto) Uma classe pode conter: l Membros dados (campos) Referência para um objecto Objecto primitivo l Membros funções (métodos) Cada objecto reserva memória para os seus membros Os membros não são partilhados pelos objectos de uma classe - 9 - - 10 - acesso aos membros iniciaçã ção o de membros class SoDados int i; float f; boolean b; SoDados d = new SoDados(); d.i = 47; d.f = 1.1f; d.b = false; Tipo Primitivo Valor por omissão boolean false char \u0000 (null) byte (byte)0 short (short)0 int 0 long 0L float 0.0f double 0.0d meuaviao.depositoesquerdo.capacidade = 100; Só se aplica a membros de uma classe No interior de uma função, a iniciação é da responsabilidade do programador l Em caso de esquecimento o compilador avisa com um erro! - 11 - - 12 -
ÇÃO O DE MÉTODOSM ÇÃO O DE MÉTODOS M TODOS (cont.) Os métodos definem as mensagens que um objecto pode receber Método = Função tipodevolução NomeMétodo( * lista argumentos * ) * Corpo do método * O tipo de devolução deve estar de acordo com o expectável enviar a mensagem "f(batata, 4, true)" ao objecto "a" int x = a.f(batata, 4, true); A lista de argumentos contém a informação que acompanha a mensagem: l Lista de objectos (com os seus tipos) int CalculaBytes(String s) return s.length() * 2; A palavra reservada void indica que um método não devolve objectos void Nada() return; void Nada2() - 13 - - 14 - visibilidade de nomes static Em cada ficheiro os nomes devem ser únicos A referências aos ficheiros faz-se invertendo os nomes dos endereços internet l Por exemplo: ficheiro foibles na directoria utility do utilizador BruceEkel.com l Com.BruceEkel.utility.foibles Para especificar que classes referir, usa-se import Uma classe import java.util.arraylist Um conjunto de classes import java.util.* Usa-se quando se pretende l Que um método não esteja associado a qualquer objecto, ou seja, possa ser chamado, mesmo sem que exista um objecto l Partilhar um único campo por todos os objectos Os métodos static não podem referir membros não static sem referir nomes de objectos class StaticTest static int _i = 47; StaticTest._i++; StaticTest st1 = new StaticTest(); StaticTest st2 = new StaticTest(); st1._i++; - 15 - - 16 -
static (cont.) class StaticFun static void incr() StaticTest.i++; StaticFun sf = new StaticFun(); sf.incr(); StaticFun.incr(); Ficheiro OlaData.java OlaData.java import java.util.*; programa Java public class OlaData public static void main(string[] args) System.out.println("Olá, a data de hoje é: "); System.out.println(new Date()); Compilação > javac OlaData.java Execução > java OlaData - 17 - - 18 -