Aula 2 2

27
Programação Orientada a Objetos Professor Eng. Ms. Will Roger Pereira 1

Transcript of Aula 2 2

Programação Orientada a

Objetos

Professor Eng. Ms. Will Roger Pereira

1

Objetivos da Aula

Estruturas de dados;

Arrays (Vetores);

Listas (ArrayList e LinkedList).

2

Estruturas de dados

Até o presente momento, em Java, sabemos armazenar

somente uma unidade de informação por vez, em uma

variável;

Em Java, uma variável possui tipo estático, podendo ser

armazenada nela somente um dado de determinado tipo;

Esse tipo pode ser int, double, boolean, dentre outros, além

de objetos de qualquer classe existente no Java ou criada

pelo desenvolvedor.

3

Estruturas de dados

A variável não é nada além de uma referência para uma

posição na memória do computador:

4

e1 teste c1

objeto true objeto

objeto 2 3.1415

p1 x pi

Estruturas de dados

Variáveis permitirão o armazenamento somente de um dado;

Para armazenar mais dados, é necessário criar mais

variáveis, o que gera um problema de controle nas

referências;

Além disso, quando não se sabe exatamente a quantidade de

dados a ser armazenada, o problema é ainda maior, e fica

ainda mais inviável a utilização de variáveis.

5

Estruturas de dados

Neste caso, as estruturas de dados podem ajudar a

armazenar mais dados, com todos possuindo uma única

referência;

O que mudará de um dado para o outro será a sua posição

dentro da estrutura;

Em Java, uma estrutura pode armazenar somente dados de

um único tipo, pré-definido em sua criação;

Os tipos possíveis obedecem às mesmas regras dos tipos

das variáveis.

6

Vetores (Arrays)

Vetores servem para armazenar uma quantidade fixa de

valores de um determinado tipo;

Em Java, não é possível adicionar ou remover elementos de

um vetor. Pode-se apenas substituir seus elementos;

Sua estrutura dentro da memória se dá de maneira

sequencial;

Ex: Um vetor de números inteiros {1, 2, 3, 4, 5};

7

1 2

3 4 5

Começo

Criação de Vetores

Criação de um vetor não inicializado:

tipo[] refvetor = new tipo[tamanho];

*O vetor terá valores padrões dependendo do tipo.

Ex: int[] vetor = new int[5];

Criação de um vetor inicializado:

tipo[] refvetor = new tipo[]{ele1, ele2, ..., eleN};

*O vetor terá tamanho igual a quantidade de elementos

colocados;

*Todos os valores deverão ser do mesmo tipo do vetor;

Ex: int[] vetor = new int[]{1,2,3,4,5}.

8

Manipulação dos elementos de

um vetor

Obtendo o elemento armazenado em uma posição:

refvetor[pos];

*0 <= pos < tamanho do vetor;

Ex: vetor[3] 4.

Mudando o elemento armazenado em uma posição:

refvetor[pos] = valor;

*0 <= pos < tamanho do vetor;

*valor deve ser do mesmo tipo do vetor;

Ex: vetor[3] = 10 {1, 2, 3, 10, 5};

9

Mostrando um vetor na tela

Para mostrar um vetor na tela, proceda da seguinte maneira:

1. Importe a biblioteca java.util.Arrays;

2. Digite: System.out.println(Arrays.toString(REF. VETOR));

Se o elemento do vetor for um objeto, Arrays.toString

invocará o método toString do objeto. 10

Vetores de objetos de uma classe

Para criar objetos e utilizá-los na estrutura de um vetor, foi

criada uma classe chamada Cachorro e seu método

toString():

11

Vetores de objetos de uma classe

Quando um vetor de objetos for criado, de maneira não

inicializada, todas as posições vão conter o valor nulo;

12

Vetores de objetos de uma classe

Assim sendo, substitua as posições com os objetos

armazenados, sempre começando pelo índice 0. Basta

verificar qual posição é nula para adicionar;

Adicionando 4 objetos no array:

13

Vetores de objetos de uma classe

Para remover um objeto de uma posição, pegue todos os

objetos à direita dele e desloque uma posição para a

esquerda, partindo da posição removida.

A última posição a possuir um objeto deverá ser modificado

para nulo;

Porém, se o vetor estiver cheio, a condição acima não será

satisfeita. Assim sendo, veja se a repetição chegou ao final.

Se chegou, desloque o último objeto e coloque a última

posição como nulo.

14

Vetores de objetos de uma classe

15

Vetores de objetos de uma classe

Resultado da remoção do elemento no índice 1:

É de responsabilidade do desenvolvedor o gerenciamento da

estrutura de arrays;

Com estas operações já é possível garantir a integridade da

estrutura.

16

Listas (LinkedList e ArrayList)

Diferente dos vetores, listas servem para armazenar uma

quantidade variável de valores de um tipo;

É possível adicionar ou remover elementos de uma lista, bem

como substituir o elemento de determinada posição;

Sua estrutura dentro da memória é gerenciada através de

ponteiros, não necessitando de ser sequencial;

Ex: Uma lista de números inteiros (1, 2, 3, 4, 5);

17

4 5 1

3 2

Começo

Listas (LinkedList e ArrayList)

Em Java, uma lista pode ser implementada via LinkedList ou

ArrayList;

Estas vias possuem suas particularidades quanto a custo de

memória, implementação e custo para as operações, porém

são criadas de maneira semelhante e manipuladas de

maneira idêntica;

Será demonstrada apenas a LinkedList, porém, caso queira

implementar uma ArrayList, basta somente substituir os

nomes das classes na criação. Os métodos mostrados aqui

são iguais para ambas implementações.

18

Importando classe LinkedList

Para utilizar LinkedList, a primeira coisa a fazer é importar a

classe no começo do arquivo Java:

Isto deve ser feito em qualquer arquivo que listas forem

manipuladas.

19

Criação de uma LinkedList

Sintaxe:

LinkedList<tipo> reflista = new LinkedList<tipo>();

*tipo definirá qual tipo de dado poderá ser armazenado na

LinkedList Tipos primitivos não podem ser usados;

*Os tipos devem ser iguais: Da referência e da LinkedList criada;

A primeira posição possui índice 0.

20

Tipos da LinkedList

Como uma LinkedList não pode conter tipos primitivos,

somente classes podem ser especificados como tipos;

Porém, os tipos primitivos também possuem classes

correspondentes:

int Integer;

double Double;

boolean Boolean.

21

Mostrando a LinkedList na tela

Para mostrar uma LinkedList na tela, proceda como se fosse

um objeto normal:

A LinkedList já possui sua implementação de toString;

Integer, Double e Boolean já possuem a implementação

correta do método toString;

Os objetos presentes na LinkedList terão seus métodos

toString invocados. Portanto, sempre contrua-o. 22

Adicionando elementos em uma

LinkedList

Para adicionar um elemento ao final da LinkedList:

reflista.add(elemento);

Ex: alunos.add(“João”); [“João”];

Ex: alunos.add(“Ana”); [“João”, “Ana”];

Ex: alunos.add(“João”); [“João”, “Ana”, “João”];

Para adicionar um elemento em uma posição específica:

reflista.add(pos, elemento);

*0 <= pos <= tamanho da lista.

Ex: alunos.add(1, “Juca”); [“João”, “Juca”, “Ana”, “João”];

O elemento será inserido e todos os elementos posteriores serão

deslocados para direita.

23

Obtendo o tamanho de uma

LinkedList

Para saber o tamanho de uma LinkedList:

reflista.size();

Ex: alunos.size(); 4;

Use o tamanho para controlar a LinkedList, e impedir que

posições inválidas sejam inseridas no sistema;

Muito importante para verificar se determinada posição

possui um elemento para ser recuperado ou removido, ou se

é possível adicionar um elemento lá.

24

Recuperando elementos de uma

LinkedList

Para recuperar um elemento de uma posição da LinkedList:

reflista.get(pos);

*0 <= pos < tamanho da lista.

Ex: alunos.get(1); “Juca”;

Ex: alunos.get(2); “Ana”;

25

Removendo elementos de uma

LinkedList

Para remover um elemento de uma LinkedList por posição:

reflista.remove(pos);

*0 <= pos < tamanho da lista.

Ex: alunos.remove(2); [“João”, “Juca”, “João”];

Para remover um elemento de uma LinkedList por elemento:

reflista.remove(elemento);

*Remove somente a primeira instância encontrada do elemento;

Ex: alunos.remove(“João”); [“Juca”, “João”];

*Retorna true ou false se removeu ou não o elemento

respectivamente Pode ser usado em verificações.

26

Estude e pratique este

conteúdo, uma vez que

estruturas de dados são peças

chave nos relacionamentos

interclasse.

27