A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.

Apresentações semelhantes


Apresentação em tema: "Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de."— Transcrição da apresentação:

1

2 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de parâmetros, Arrays e Listas

3 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis estáticas versus atributos Enquanto cada instância da classe (objeto) tem seus próprios atributos, variáveis estáticas (ou de classe) são compartilhadas por todas as instâncias da classe

4 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Exemplo: classe Contas com um gerador de números de conta prox_num = 132

5 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Em Java... class ContaComGerador { private int numero; private double saldo; private static int prox_num = 1; void credito... ContaComGerador () { numero = prox_num; saldo = 0; prox_num = prox_num + 1; } }

6 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Métodos estáticos e mensagens Da mesma forma que há variáveis estáticas (de classe) e variáveis de instância (atributos), há métodos estáticos (de classe) e métodos de instância (mensagens) Um exemplo de mensagem é o método que retorna o atributo saldo na classe Conta Mesmo que presente na mesma classe dos atributos, um método estático não tem acesso a estes Um método estático pode ser acrescentado à classe ContaComGerador para retornar o valor corrente de prox_num

7 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Os métodos de um “programa” são sempre estáticos class Maior { private static int maior (int x, int y) { if (x > y) return x; else return y; } public static void main (String [] args) { int m, x, y; x = Util.readInt(); y = Util.readInt(); m = maior (x,y); System.out.println(m); }

8 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Passagem de parâmetro Em Java, a passagem é por valor, ou seja, o valor (e não o endereço) da variável é passado. Conseqüências: - Modificações no parâmetro formal não são refletidas no parâmetro real. - Uma expressão pode ser usada como argumento - Ineficiência em alguns casos (cópia)

9 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Exemplo class PassagemPorValor { private static void incrementa (int x) { x = x + 1; System.out.println (“x = ” + x); } public static void main (String [] args) { int y = 1; System.out.println(“y = ” + y); incrementa (y); System.out.println(“y = ” + y); }

10 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. O resultado desejado pode ser obtido assim... class PassagemPorValor { private static int incrementa (int x) { x = x + 1; System.out.println (“x = ” + x); return x; } public static void main (String [] args) { int y = 1; System.out.println(“y = ” + y); y = incrementa (y); System.out.println(“y = ” + y); }

11 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Aliasing Aliasing ocorre quando mais de um identificador está associado a um mesmo endereço de memória Apesar da passagem de parâmetros em Java ser por valor, pode-se ter aliasing quando um objeto é passado como parâmetro É sempre a referência ao objeto que é passada (por valor) e não o objeto em si

12 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Exemplo de aliasing em Java class Aliasing { private static void credita (Conta a, Conta b) { a.credito(100); b.credito(100); } public static void main (String [] args) { Conta c = new Conta(“205.789-6”); credita (c, c); System.out.println(c.saldo()); }

13 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Aliasing também pode ocorrer em Java como conseqüência de uma atribuição... Atribuição de um identificador de objeto a um outro de mesmo tipo é permitido, mas o endereço (e não o valor) é atribuído. Exemplo... Conta a = new Conta(“123-4”); Conta b; b = a; \\ a e b passam a referenciar a mesma conta b.credito (100); System.out.println (a.saldo());...

14 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Mas a referência é passada por valor... class Referencia { private static void redefine(Conta a) { Conta b = new Conta(“567-8”); a.credito(100); a = b; a.credito(100); } public static void main (String [] args) { Conta c = new Conta(“123-4”); redefine (c); System.out.println(c.numero() + c.saldo()); }

15 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Arrays Estrutura de dados que permite agrupar variáveis de um mesmo tipo Declaração [] exemplo: int [] a; Criação = new [ ]; exemplo: a = new int [12]; (Indexado de 0 a 11) Combinando declaração e criação [] = new [ ]; exemplo: int [] a = new int [12];

16 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Inicialização de arrays Arrays podem ser inicializados no momento de sua declaração: [] = {e 1,..., e n }; Exemplo: a declaração String [] cores = { “verde”, “azul”, “preto” }; equivale a String [] cores = new String [3]; cores [0] = “verde”; cores [1] = “azul”; cores [2] = “preto”;

17 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Tamanho de um array Se a é um identificador de array, a.length dá o tamanho de a Exemplo: o método a seguir imprime um array de inteiros de tamanho arbitrário static void imprime (int [] a) { for (int i = 0; i < a.length; i = i + 1) System.out.println (a[i]); }

18 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Classe de Bancos: Operações cadastro de uma nova conta crédito débito saldo transferência entre contas

19 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Classe de Bancos: Descrição class Banco { private Conta[] contas; private int indice = 0; void cadastro(Conta c) { contas[indice] = c; indice = indice + 1; }

20 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. private Conta procura(String n) { int i = 0; boolean achou = false; while ((! achou) && (i < indice)) { if (contas[i].numero().equals(n)) achou = true; else i = i + 1; } if (achou) return contas[i]; else return null; }

21 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. void debito(String num, double val) { Conta c; c = this.procura(num); if (c != null) c.debito(val); else System.out.println("Conta inexistente!"); } A operação credito é similar

22 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Exercício Completar a implementação da classe Banco com o construtor e os métodos transfere e saldo. Acrescente um novo método para remover uma conta

23 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Exercício Desenvolva um sistema simples de eleição, usando a classe já implementada para modelar um candidato. Definir uma outra classe para agrupar candidatos (usando arrays). Elabore um programa que lê um número arbitrário de nomes de candidatos e efetua a contagem; no final, indique o vencedor e o total de votos.

24 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Exercício Desenvolva um sistema simples para controle de estoque, contendo pelo menos as classes Produto e Estoque, e as seguintes operações: alterar as propriedades dos produtos (nome, preço, quantidade em estoque), retirar um produto do estoque, e verificar que produtos precisam ser repostos.

25 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Leitura Livro texto (Programming in Java) Capítulos 2 (2.9) e 5 (5.8-5.9)

26 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Listas e Banco Usando Listas

27 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Lista Encadeada de Contas null

28 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Listas de Contas: Operações inserir retirar procura

29 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Listas de Contas: Descrição class Lista { private Conta conta; private Lista prox; void inserir (Conta c) { if (this.conta == null) { this.conta = c; prox = new Lista(); } else prox.inserir(c); }

30 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. void retirar (Conta c) { if (conta != null) { if (conta == c) { this.conta = prox.conta; this.prox = prox.prox; } else prox.retirar(c); } else System.out.println(“Conta Inexistente”); }

31 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Conta procura (String num) { if (conta == null) return null; else { if (conta.numero().equals == num) return conta; else return prox.procura(num) }

32 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Banco: Descrição Modular class BancoModular { private Lista contas = new Lista(); void cadastro(Conta c) {contas.inserir(c);} void debito(String num, double val) { Conta c; c = contas.procura(num); if (c != null) c.debito(val); else System.out.println("Conta inexistente!"); }

33 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Exercícios Completar a implementação da classe BancoModular com os métodos transfere e saldo. Compare as duas implementações de bancos: Banco e BancoModular. Um usuário perceberia alguma diferença entre elas? Quais as vantagens e desvantagens de cada abordagem?

34 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Exercício Suponha que, por questões de eficiência, temos que modificar a maneira como as contas são armazenadas no banco. Qual implementação de bancos seria mais facilmente modificada: Banco ou BancoModular?

35 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Exercício Modifique o sistema de eleição para agrupar candidatos em uma lista (ao invés de em um array). Modifique o sistema de estoque de forma análoga

36 Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Leitura Livro texto (Programming in Java) Capítulos 2 (2.9) e 5 (5.8-5.9)


Carregar ppt "Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de."

Apresentações semelhantes


Anúncios Google