Programação I Aula 11 (Arrays de Objetos) Prof. Gilberto Irajá Müller Última atualização 27/5/2009 Arrays de Objetos • Um array pode conter referências a um conjunto de objetos. Ex.: Funcionario f[] = new Funcionario[3]; • Será criado um novo objeto array de nome f, cujos elementos são variáveis objeto, ou seja, referências para objetos do tipo Funcionario Arrays de Objetos • Para termos realmente algum funcionário apontado por algum elemento do array, teremos de criar um objeto funcionário e vinculá-lo a uma das variáveis objeto do array. Ex: f[0] = new Funcionario(“Ruy Cabeção”, 4320.00, 1); f[1] = new Funcionario(“Tcheco”, 5000.00, 2); f[2] = new Funcionario (“Jonas", 1234.00, 0); Arrays de Objetos • O que teremos em memória? Funcionario nome: Ruy Cabeção salario: 4320.0 numeroDeDependentes: 1 Funcionario Funcionario nome: Jonas salario: 1234.0 numeroDeDependentes: 0 nome: Tcheco salario: 5000.0 numeroDeDependentes: 2 Arrays de Objetos • Array de objetos e herança – aplicação do polimorfismo Podemos utilizar arrays para armazenar objetos, tanto da superclasse como da subclasse Arrays de Objetos • Array de objetos e herança – aplicação do polimorfismo A a[] = new A[3]; a[0] = new A(); a[1] = new B(); a[2] = new C(); a[0].m1(); ____________________________________ a[1].m1(); ____________________________________ a[2].m2(); ____________________________________ if(a[2] instanceof C){C c=(C) a[2]); c.m2();} ______________________ Arrays de Objetos • Exercício 11.1. Utilizando o exercício de cálculo do volume do Cilindro e do Cubo, crie uma classe teste que guarde 10 objetos em um array. Para cada objeto, sorteie um número e verifique se este é par ou ímpar. Caso o número seja par, instancie um objeto do tipo Cubo, caso contrário, instancie um objeto do tipo Cilindro. Ao final, exiba o volume dos 10 objetos colocando qual foi o objeto instanciado: Cubo ou um Cilindro. • VolumeCilindro • public int getVolume(); • Cubo • public Cubo(int a); • Cilindro • public Cilindro(int r, int h); a Cubo a h Cilindro r a Cálculo do volume: a3 Cálculo do volume: .r2.h Hot Topic • Tamanho Físico e Tamanho Lógico de um Array Um objeto array tem um tamanho físico que é atribuído no momento da sua criação. Pode ser obtido através da variável length. Ex.: int[] a = new int[3]; System.out.println(a.length); // retornará 3 Contudo, ao não utilizarmos todos os índices do array, precisaremos saber quais quantos “espaços” temos ocupado. Para isso, utilizamos uma variável do tipo inteiro que é incrementada a cada inclusão de um elemento no array! Hot Topic Ex.: public class Aluno{ private double nota[]; //atributo do tipo array, de nome nota private int quantidadeDeNotas; //este é o tamanho lógico public Aluno (int maxNotas){ nota = new double[maxNotas]; quantidadeDeNotas = 0; } public void insereNota(double n){ if (quantidadeDeNotas < nota.length) nota[quantidadeDeNotas++] = n; } public void exibeNotas(){ for (int i = 0; i < quantidadeDeNotas; i++) System.out.println(nota[i]); } } Métodos • Referências bibliográficas • http://inf.unisinos.br/~anibal