ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Documentos relacionados
Orientação a Objetos

DEFINIÇÃO DE MÉTODOS

Java 2 Standard Edition Como criar classes e objetos

Polimorfismo. Prof. Leonardo Barreto Campos 1

Computadores XXI: Busca e execução Final

Orientação a Objetos

Unidade IV: Ponteiros, Referências e Arrays

Implementando uma Classe e Criando Objetos a partir dela

9 Comandos condicionais

3 Classes e instanciação de objectos (em Java)

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Programação de Computadores I. Linguagem C Vetores

JSP - ORIENTADO A OBJETOS

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Programação Orientada a Objetos Classes Abstratas Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Programação Orientada a Objetos: Lista de exercícios #1. Bruno Góis Mateus

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

Introdução a Java. Hélder Nunes

Persistência de Dados

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Dadas a base e a altura de um triangulo, determinar sua área.

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

Estruturas (Registros)

Técnicas de Programação II

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

Computação II Orientação a Objetos

Lógica de Programação

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;

20 Caracteres - Tipo char

Árvores Binárias de Busca

Coleções. Page 1. Coleções. Prof. Anderson Augustinho Uniandrade

UML Aspectos de projetos em Diagramas de classes

Programação Orientada a Objetos (DPADF 0063)

Noções sobre Objetos e Classes

Java. Marcio de Carvalho Victorino

Conceitos Importantes:

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

Programação de Computadores II TCC

PROGRAMANDO EM C# ORIENTADO A OBJETOS

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

UNIVERSIDADE FEDERAL DO PARANÁ

Programação de Computadores - I. Profª Beatriz Profº Israel

Programação Orientada a Objeto

Unidade Acadêmica: Faculdade de Computação FACOM Disciplina: Programação Orientada a Objetos I Professor: Fabiano Azevedo Dorça Prática 01

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa

Estrutura de Dados Básica

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

Para criar uma animação precisamos de uma imagem e que ela contenha alguns frames. O número de frames é uma escolha sua.

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Tabelas (arrays) (vetores, matrizes, etc) Algoritmos de pesquisa Algoritmos de ordenação

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

JAVA NETBEANS PGOO Prof. Daniela Pires Conteúdo

Organização e Arquitetura de Computadores I

Sistemas de numeração

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos

Roteiro do Programa e Entrada/Saída

Programação Orientada a Objetos Herança Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Orientação a Objetos com Java

3.1 Definições Uma classe é a descrição de um tipo de objeto.

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Componentes da linguagem C++

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

EXEMPLO DE COMO FAZER UMA MALA DIRETA

Curso de PHP. FATEC - Jundiaí. A programação orientada a objetos (object-oriented oriented programming

Programação de Computadores - I. Profª Beatriz Profº Israel

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding

1. Fazer um programa em C que pergunta um valor em metros e imprime o correspondente em decímetros, centímetros e milímetros.

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

Programação por Objectos. Java

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org

[RÓTULO:] MNEMÔNICO [OPERANDOS] [;COMENTÁRIO]

AMBIENTE DE PROGRAMAÇÃO PYTHON

Programação Orientada a Objetos. Encapsulamento

2 Orientação a objetos na prática

Padrões de Projeto. Singleton

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2

VIII. VARIÁVEIS. Tabela I ARQUITETURA DA MEMÓRIA. 0x0000 0x34 0x0001 0xB0 0x0002 0x23. 0xFFFF 0x00

Capítulo 14. Herança a e Polimorfismo. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

Javascript 101. Parte 2

sobre rogério gonçalves gerente de projetos > digitale agência digital rogerio@digitale.com.br h7p:// h7p://leveme.

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis

Programação Básica em STEP 7 Operações Binárias. SITRAIN Training for Automation and Drives. Página 6-1

Apostila de Fundamentos de Programação I. Prof.: André Luiz Montevecchi

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA:

PROGRAMAÇÃO II 4. ÁRVORE

Aula 2 Modelo Simplificado de Computador

Algoritmos em Javascript

Universidade da Beira Interior. Sistemas Distribuídos

Trabalho 3: Agenda de Tarefas

Transcrição:

Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 8 ARRAYS Introdução Até agora, utilizamos variáveis individuais. Significa que uma variável objeto aponta para apenas UM objeto ou que uma variável de tipo primitivo contêm UM valor de tipo primitivo. Um array permite-nos armazenar e acessar uma coleção de valores primitivos ou apontar para uma coleção de objetos. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo. Sendo o array um objeto, sua criação tem três etapas: a declaração da variável, a criação do objeto e a atribuição da referência (endereço) deste objeto à variável é na segunda etapa que é definido o tamanho (quantidade de elementos) do array. As três etapas, como sabemos, podem ser reunidas numa única instrução. int[] v = new int[4]; //declara e cria um objeto array v que aponta para até //4 dados primitivos int Outra maneira de declarar e criar o array v: int[] v; //declara uma variável v do tipo array de inteiros v = new int[4]; //cria o objeto array inteiro de 4 números Podemos pensar em v como um conjunto de 4 variáveis com o mesmo nome v. Através de um índice inteiro podemos individualizar cada uma das variáveis do conjunto, com a seguinte: Sintaxe: nome do array[expressão inteira] Os índices em Java variam de 0 até tamanho do array 1. Assim, podemos imaginar o array v na memória pelo diagrama: v int[] 0 0 1 0 2 0 3 0 Repare que, no desenho, cuidamos de zerar cada elemento de v. Por quê? Porque Java sempre inicializa objetos instanciados. Podemos fazer qualquer operação com os elementos de um array que fazemos com outras variáveis que já utilizamos. v[2] = -5; //atribui -5 à posição 2 de v v[0] = v[2] + 10; int i = 3; v[i] = v[i 1] * 2; Programação I - Prof. Aníbal - Notas de aula 8 1

Exercício 8.1. Preencha o diagrama com o resultado das instruções acima. v int[] i 0 1 2 3 Inicialização de array de tipos primitivos Uma outra forma de criar um array de inteiros int[] v = {2, 5, 4, -1; //declara e cria o array v com os valores //dados int x = 4; Teclado t = new Teclado(); int[] w = {x, t.leint("digite um inteiro: "), x + 8, (int)(math.random()*x); O campo length Uma característica importante do tipo array é seu tamanho fixo, isto é, após instanciado, o objeto array não poderá ter alterado o seu número de elementos. Todo objeto array possui um atributo só de leitura (public final), de nome length, que guarda esse número de elementos do array que foi dimensionado por ocasião da sua criação. O length é muito útil na programação, como mostra o código abaixo: // Trecho que exibe o conteúdo de todo o array v for (int i = 0; i < v.length; i++) System.out.println(v[i]); Exercício 8.2. Complete: //a) grava em v os valores 10, 11, 12 e 13 //b) exibe os valores do array v, do índice mais alto para o mais baixo //c) preenche v com valores aleatórios Programação I - Prof. Aníbal - Notas de aula 8 2

Não ultrapasse os limites do array Ao acessar o array, o valor do índice deve ser maior ou igual a zero e menor do que length. O desrespeito a esses limites causa uma IndexOutOfBoundsException e encerra o programa. char[] vogal = {'a', 'e', 'i', 'o', 'u'; for (int i = 0; i <= vogal.length; i++) System.out.print(vogal[i]); //erro na última repetição Array de objetos Um array pode conter referências a um conjunto de objetos. O trecho abaixo, int tamanho = 3; Funcionario[] f = new Funcionario[tamanho]; //f será uma variável array que //apontará para 3 objetos Funcionario cria um novo objeto array de nome f, cujos elementos são variáveis objeto, ou seja, referências para objetos do tipo Funcionario. Sabemos, todavia, que Java inicializa uma variável objeto com null. Logo, nosso array f na memória pode ser imaginado como algo assim: f Funcionario[] 0 null 1 null 2 null 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. f[0] = new Funcionario( Sabrina, 4320.00, 1); f[1] = new Funcionario( Edgard, 5000.00, 2); f[2] = new Funcionario ("Anna", 1234.00, 0); f Funcionario[] Funcionario 0 nome Sabrina 1 salario 4320.0 2 numerodedependentes 1 Exercício 8.3. Complete o desenho. Programação I - Prof. Aníbal - Notas de aula 8 3

Todavia, se já tivéssemos algum objeto Funcionario anteriormente criado e apontado por uma outra variável objeto, poderíamos simplesmente copiar essa referência para uma das posições do array, como no trecho seguinte, que obteríamos o mesmo resultado que o trecho anterior: Funcionario f1 = new Funcionario ("Anna", 1234.00, 0); Funcionario f[] = new Funcionario[3]; f[0] = new Funcionario ( Sabrina, 4320.00, 1); f[1] = new Funcionario ( Edgard, 5000.00); f[2] = f1; Exercício 8.4. Continue o trecho de código Java acima, para realizar as operações indicadas pelos respectivos comentários (supondo, obviamente, que V. não conhece os valores atuais dos atributos de cada objeto): //a) Concede um aumento de 8,7% para o primeiro objeto do array f //b) Exibe a soma dos salários dos objetos do array f //c) Exibe o nome de cada funcionário do array f que não tem dependente Programação I - Prof. Aníbal - Notas de aula 8 4

Parâmetro do tipo array Se um método tem um parâmetro do tipo array, significa que, quando ele é chamado, recebe uma referência para o array através da qual o método terá acesso a todos os seus elementos. Ou seja, podese dizer que o método recebe todo o array. Por exemplo, o método abaixo recebe um array de números inteiros e devolve o maior valor contido nele. public int achamaior(int a[]){ int max = a[0]; for (int i = 1; i < a.length; i++) if (a[i] > max) max = a[i]; return max; O tamanho do array não precisa ser recebido como parâmetro porque todo array sabe qual é o seu comprimento (ele o tem gravado no atributo length). Para chamar o método acima, deve ser fornecido um argumento do mesmo tipo. int[] v = {-4, 6, 7, 2, 0, -1; int maiorvalor = achamaior(v); //atribui 7 a maiorvalor Observe que o argumento da chamada é apenas o nome do array: v. Obs. Não confundir a passagem de um array todo com a passagem de elementos individuais do array. Por exemplo, suponha o método abaixo, que devolve a soma de dois números inteiros: public int soma(int a, int b){ return a + b; A chamada seguinte atribui à variável s a soma do terceiro com o sexto elemento do array v. int s = soma(v[2], v[5]); Exercício 8.5. Complete o método abaixo que retorna o valor do maior salário do array f1. public double buscamaiorsalario(funcionario[] f1){ Programação I - Prof. Aníbal - Notas de aula 8 5

Pesquisa em array Exercício 8.6. Escreva um método que recebe um array int e um valor x, também int, e devolve true se o valor x existe no array, ou false em caso contrário. Usando array de objetos como atributo Suponhamos uma empresa tem uma equipe de funcionários. Veja como a classe Empresa representa essa realidade, usando um atributo array de objetos Funcionario. Observe como o construtor define o tamanho da equipe. public class Empresa{ private Funcionario[] equipe; public Empresa (int tamanhoequipe){ equipe = new Funcionario[tamanhoEquipe]; Exercício 8.7. Prossiga a programação da classe Empresa inserindo os dois métodos seguintes: /** Método que monta a equipe, instanciando um objeto para cada posição do array. Os dados de cada funcionário devem ser lidos de teclado */ /** Método que recebe um nome de pessoa e devolve o objeto da equipe de funcionários que possui tal nome ou null, caso o nome não seja encontrado na equipe. Supor que não há dois funcionários com mesmo nome na empresa */ Programação I - Prof. Aníbal - Notas de aula 8 6

Um método pode retornar um tipo array Um array é um objeto e sabemos que um método pode retornar um objeto. Logo, basta indicar, como tipo de retorno um tipo array. Por exemplo, public double[]... inicia a assinatura de um método que devolve um objeto array de tipos primitivos double. Para retornar um array de objetos, mudará apenas o tipo do array, como public Aluno[]... Exercício 8.8. Escreva um método para a classe Empresa que retorne um array de objetos Funcionario que contenha apenas os funcionários da equipe que ganham mais do que um certo valor passado como parâmetro. Se não houver nenhum funcionário nesta condição, retornar null. public Funcionario[] selecionaricos(double valor){ Entendendo a passagem de argumentos de Java A maioria das linguagens permite escolher se queremos passar um argumento por valor ou por referência. Java simplifica isto, usando somente a passagem por valor. Dependendo se o argumento é um tipo primitivo ou uma referência a um objeto, pode-se ter comportamentos diferentes no retorno. Observe o exemplo abaixo e a ilustração do que ocorre na memória: Programa Java... A(int x, int[] a) //método chamado { x = 5; a[1] = 6; a[3] = 1;... B() //método chamador { int y = 8; int[] v = {4,-2,7,0; A(y, v); System.out.println("y = " + y); for (int i=0; i<v.length; i++) System.out.print(v[i] + " "); x y 8 5 8 Memória a int[] 0 4 v 8 1-2 6 2 7 3 0 1 As setas tracejadas mostram o movimento de passagem dos valores dos argumentos para os respectivos parâmetros, quando o método B chama o A. Quando o método A termina sua execução, o controle retorna para o B, mas não há movimento de volta de valores dos parâmetros para os argumentos. A consequência disso é que a alteração feita em x não repercute em y, mas as alterações feitas nos conteúdos do array a acontecem também no array v. Por quê? A razão está na diferença entre variáveis de tipo primitivo e variáveis objeto. As primeiras armazenam diretamente valores (int, no caso); as outras, armazenam um endereço (referência) onde se encontra o objeto. Como o endereço que está em v é passado para a, ambas se referem ao mesmo objeto. Exercício 8.9. O que será impresso pelo método B? Programação I - Prof. Aníbal - Notas de aula 8 7

Ordenação de um array Exercício 8.10. Escreva um método que recebe um array de números e ordena seus elementos em ordem crescente. Exercício 8.11. Escreva um método que recebe um array de objetos Funcionario e ordena seus elementos em ordem decrescente de salário. Programação I - Prof. Aníbal - Notas de aula 8 8

Array de objetos e herança Ao estudarmos polimorfismo (notas de aula 7), vimos que, dada uma hierarquia de herança, uma referência de superclasse pode ser usada para apontar ora para um objeto da superclasse, ora para um da subclasse. Estendendo essa facilidade aos arrays, podemos criar um array de objetos como uma referência da superclasse e atribuir a cada posição do array o endereço de objetos de qualquer classe da hierarquia. A B C +m1( ) +m1( ) +m2( ) A[] a = new A[4]; a[0] = new B(); //upcasting a[1] = new C(); //upcasting a[2] = new A(); a[3] = new C(); //upcasting Exercício 8.12. Complete: a[i].m1(); acionará o método m1 de A para i = a[i].m1(); acionará o método m1 de B para i = a[i].m2(); causará um erro em tempo de para i = if(a[i] instanceof C){C c=(c)a[i]);c.m2(); acionará o m2 para i = Exercício 8.13. Rescreva a classe TestaAtleta da página 11 das notas de aula 7, substituindo a referência a por um array de objetos. Coleções de tamanho variável O tipo array, que acabamos de estudar, é uma coleção de tamanho fixo, isto é, após criado o objeto array seu tamanho não pode ser alterado. Percebe-se isso pelo fato de o atributo length ser apenas de leitura. Todavia, muitas vezes precisamos implementar uma coleção de tamanho variável, preenchendo o array desde seu início, mas sem obrigatoriamente ocupar todas as suas posições. A coleção vai sofrendo inserções que aumentam a parte utilizada do array e, conforme o caso, pode sofrer exclusões, que diminuem esta área. Tudo limitado por um tamanho máximo, que é o length do array. No final da lista de exercícios 8, incluímos um problema desta natureza com solução comentada e propomos ao aluno outros exercícios similares. Para este tipo de situação, Java oferece a classe ArrayList. que funciona como uma coleção de tamanho variável. Embora ela tenha sido implementada usando o tipo array, é um recurso bastante confortável para emprego em problemas com as características aqui descritas. ArrayList será vista em Programação II ou Laboratório II. Programação I - Prof. Aníbal - Notas de aula 8 9