AT02 IntroOOD (30 113)

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 84

Programação Orientada Pelos Objectos

Noção de Interface
31 Que operações criar?
- Vamos listar as principais operações

Referência: DI FCT UNL


Main
32

void main(String[] args)


o Programa principal, chama interpretador de comandos

FriendsBook Referência: DI FCT UNL


FriendsBook
33

void reset()
o Limpa a lista de amigos, para usar quando queremos uma nova
lista

boolean existeAmigo(String nome)


o Devolve true se o amigo de nome nome existe, ou false caso
contrário

FriendsBook
Referência: DI FCT UNL
FriendsBook
34

void adAmigo(String nome)


o Adiciona o amigo de nome nome
o Pre:!existeAmigo(nome)– Não existe nenhum amigo com
esse nome

void removAmigo(String nome)


o Remove o amigo de nome nome
o Pre: existeAmigo(nome)– Existe um amigo com esse nome

FriendsBook Referência: DI FCT UNL


FriendsBook
35

boolean existeAcao(String nome,String descricao)


o Devolve true caso exista uma acção com descrição descricao
feita por um amigo de nome nome, ou false caso contrário

void adAcao(String nome, String descricao)


o Acrescenta a acção descricao ao amigo de nome nome
o Pre: existeAmigo(nome) && !existeAcao(nome, descricao)

void vota(String nome, String descricao,


boolean bomParaPessoa, boolean bomParaOutros)
o Vota na acção descricao feita pelo amigo de nome nome
o Pre: existeAcao(nome, descricao)

FriendsBook Referência: DI FCT UNL


FriendsBook
36

int numDeAmigos()
o Devolve o número de amigos na rede social

String amigoMaisAborrecido()
o Devolve o nome da pessoa mais aborrecida
o Pre: numDeAmigos()>0 – a rede social não está vazia

FriendsBook Referência: DI FCT UNL


FriendsBook
37

Precisamos também de métodos que permitam iterar o conteúdo do


FriendsBook

void inicializar(int tipo)


o Inicializa o iterador de amigos para a personalidade tipo
o Pre: (tipo == INTELIGENTE)||(tipo == ESTUPIDO)||(tipo ==
BANDIDO)||(tipo == ANJINHO)

boolean temProximo()
o Devolve true se houver mais pessoas com personalidade tipo a iterar,
ou false caso contrário

String proximo()
o Devolve o nome da próxima pessoa com personalidade tipo a iterar,
avançando com o iterador
o Pre: temProximo()

FriendsBook Referência: DI FCT UNL


Pessoa
38

boolean existeAcao(String descricao)


o Devolve true se a pessoa tem a acção descricao

void adAcao(String descricao)


o Acrescenta a acção descricao à pessoa
o Pre:!existeAcao(descricao)

void vota(String descricao, boolean bomParaPessoa,


boolean bomParaOutros)
o Vota na acção descricao, incrementando os votos positivos nos
benefícios para a própria pessoa, se bomParaPessoa for true, ou
decrementando-os, se for false, e fazendo o mesmo com os votos nos
benefícios ou prejuízos causados a outros, neste caso com base em
bomParaOutros.
o Pre: existeAcao(descricao)

FriendsBook Referência: DI FCT UNL


Pessoa
39

String getNome()
o Devolve o nome da pessoa

int getPersonalidade()
o Devolve um inteiro representando o traço de personalidade
dominante, com os valores INTELIGENTE, ESTUPIDO,
BANDIDO, ou ANJINHO

double getAborrecimento()
o Devolve o valor da “distância” dos votos acumulados à origem
usando o teorema de Pitágoras, sendo a “distância” a “hipotenusa” e
os valores acumulados de benefícios próprios e alheios os “catetos”

FriendsBook Referência: DI FCT UNL


Acao
40

void vota(boolean bomParaPessoa, boolean bomParaOutros)


o Vota na acção, incrementando os votos nos benefícios próprios se
bomParaPessoa for true, ou decrementando-os, caso contrário, e
fazendo o mesmo em relação aos benefícios alheios, com o
argumento bomParaOutros

String getDescricao()
o Devolve a descrição da acção

FriendsBook Referência: DI FCT UNL


Acao
41

int getBeneficioProprio()
o Devolve o total acumulado de votos nos benefícios próprios

int getBeneficioOutros()
o Devolve o total acumulado de votos nos benefícios causados a
outros

FriendsBook Referência: DI FCT UNL


42 Como representar as entidades?
-Em IP usaríamos classes
-Em POO, usaremos interfaces
-Para isso, temos de definir o conceito de interface
- Comecemos pelos conceitos de assinatura e protocolo

Referência:
DI FCT UNL
Assinatura de um método
43

o A assinatura de um método é constituída por:


o Nome do método
o Número, tipo e ordem dos parâmetros

o Em Java, os métodos são identificados pelas


suas assinaturas
o Podem existir vários métodos com o mesmo
nome, desde que com assinaturas diferentes
oExº: vários construtores com listas de argumentos
distintas

Referência: DI FCT UNL


Protocolo
44

O Protocolo de um objecto é o conjunto das


assinaturas dos seus métodos públicos
o Determina as mensagens que esse método
entende

O Um objecto suporta um determinado


protocolo se definir todos os métodos
públicos previstos nesse protocolo (pode
definir outros, além desses)

Referência: DI FCT UNL


Interface
45

o Uma interface representa todos os objectos


que suportam um dado protocolo

o Ao contrário do que acontece com as classes,


as interfaces não fornecem uma
implementação

Referência: DI FCT UNL


Definição de uma interface em Java:
Sintaxe
46

public interface InterfaceNome {


// constantes
// assinaturas de métodos
}

Referência: DI FCT UNL


As assinaturas dos métodos de uma
interface são sempre abstractas e públicas
47

public interface ConjDeInteiros {


public abstract int tamanho();
public abstract int recebe(int i);
public abstract int adciona(int n);
public abstract boolean pertence(int n);
public abstract ConjDeInteiros uniao(ConjDeInteiros uniao);
}

Referência: DI FCT UNL


Podemos omitir os modificadores de acesso
abstract e public
48

public interface ConjDeInteiros {


public abstract int tamanho();
public abstract int recebe(int i);
public abstract int adciona(int n);
public abstract boolean pertence(int n);
public abstract ConjDeInteiros uniao(ConjDeInteiros uniao);
}

// é exactamente o mesmo que:


public interface ConjDeInteiros {
int tamanho();
int recebe(int i);
int adciona(int n);
boolean pertence(int n);
ConjDeInteiros uniao(ConjDeInteiros uniao);
}
Referência: DI FCT UNL
Interface vs. Classe
49

o Todos os métodos de uma interface são


abstractos
o Têm nome, parâmetros, tipo de retorno, mas não
têm uma implementação
o Todos os métodos de uma interface são
públicos
o Uma interface não tem variáveis de instância
o Ao contrário do que acontece com as classes,
não se pode instanciar uma interface

Referência: DI FCT UNL


Declaração de uma classe que implementa
uma interface em Java: sintaxe
50

public class ClassName implements InterfaceNome {


// atributos e constantes
// métodos
}

Referência: DI FCT UNL


Declaração de uma classe que implementa
uma interface em Java: exemplo
51

public class ClassName implements InterfaceNome {


// atributos e constantes
// métodos
}

public class ConjDeInteirosClass implements ConjDeInteiros {


// atributos and constantes
public int tamanho() { ... }
public int recebe(int i) { ... }
public int adciona(int n) { ... }
public boolean belongs(int n) {...}
public ConjDeInteiros uniao(ConjDeInteiros uniao) {...}
}

Referência: DI FCT UNL


A classe implementa todos os métodos da
interface
52

public interface ConjDeInteiros {


int tamanho();
int recebe(int i);
int adciona(int n);
boolean pertence(int n);
ConjDeInteiros uniao(ConjDeInteiros uniao);
}

public class ConjDeInteirosClass implements ConjDeInteiros {


// atributos e constantes
public int tamanho() { ... }
public int recebe(int i) { ... }
public int adciona(int n) { ... }
public boolean belongs(int n) {...}
public ConjDeInteiros uniao(ConjDeInteiros uniao) {...}
}
Referência: DI FCT UNL
Opção metodológica em POO
53

o Interfaces são tipos e as classes são


implementações desses tipos
o Vantagens:
o Código não assume compromissos escusados
o Variáveis, parâmetros e resultados de métodos
são declarados com nomes de interfaces
oO código torna-se compatível com todas as classes
que implementem essas interfaces (classes existentes
ou a criar futuramente)

Referência: DI FCT UNL


Utilização de classes e interfaces
54

1. Escrever a interface que captura o protocolo


pretendido para os objectos

2. Escrever a classe que implementa a interface


definida no ponto anterior

3. Usar o nome da interface como tipo, para


declarar variáveis, parâmetros e resultados, e o
nome da classe apenas para a instanciação (ao
criar objectos com o operador new)

Referência: DI FCT UNL


Erros típicos com interfaces
55

o Esquecermo-nos de declarar métodos na classe que


implementa a interface com visibilidade public
public interface ConjDeInteiros {
int tamanho();
int recebe(int i);
int adciona(int n);
boolean pertence(int n);
ConjDeInteiros uniao(ConjDeInteiros uniao);
}

public class ConjDeInteirosClass implements ConjDeInteiros {


int tamanho() {...} //ERRADO: a visibilidade, por omissão
... //é package. Devia ser public!
}

Referência: DI FCT UNL


Erros típicos com interfaces
56

o Esquecermo-nos de declarar métodos na classe que


implementa a interface com visibilidade public
public interface ConjDeInteiros {
int tamanho();
int recebe(int i);
int adciona(int n);
boolean pertence(int n);
ConjDeInteiros uniao(ConjDeInteiros uniao);
}

public class ConjDeInteirosClass implements ConjDeInteiros {


public int tamanho() {...} //Assim já está bem: public
}

Referência:
DI FCT UNL
Erros típicos com interfaces
57

o Tentar instanciar uma interface:


public interface ConjDeInteiros {
...
}

public class ConjDeInteirosClass implements ConjDeInteiros {


...
}

ConjDeInteiros s = new ConjDeInteiros(); //ERRO de Compilação!


ConjDeInteiros s = new ConjDeInteirosClass() ; //Ok

Referência:
DI FCT UNL
58 Curta introdução aos packages

Referência:
DI FCT UNL
O que é um package?
59

o É um espaço de nomes que organiza um conjunto de


classes e interfaces relacionadas
o Semelhante às pastas nos computadores
o Forma de organizar classes e interfaces
o Uma aplicação pode ser composta por milhares de classes
o aplicações grandes podem ter dezenas de packages
o A plataforma do Java tem uma vasta biblioteca com
milhares de classes
o https://docs.oracle.com/javase/9/docs/api/overview-
summary.html

Referência:
DI FCT UNL
packages: declaração
60

o Se quisermos organizar as classes num package poo,


declaramos essa localização usando a palavra reservada
package, que é sempre a primeira instrução dum
ficheiro Java contido dentro de um package.
package poo;

public class PessoaClass {


// etc
}

o Se a classe PessoaClass não estiver contida numa


pasta poo, o compilador assinala um erro.
Referência:
DI FCT UNL
Visibilidade package
61

o Um package determina a visibilidade dos membros das


classes que não têm um classificador de visibilidade
explícito.
package poo;

public class PessoaClass {


private int valor; //Ninguém me vê fora da classe
int restrito; //Ninguém me vê fora do package
public int partilhadoPorTodos ; //Todos me podem ver
// etc
}
o A visibilidade package é a mais restritiva a seguir a
private. Os elementos com essa visiblidade apenas
são vistos (e usados) dentro do mesmo package.
Referência:
DI FCT UNL
62 De volta ao FriendsBook
-Como tirar partido das interfaces na
resolução deste problema?

Referência:
DI FCT UNL
Esqueleto da classe Main
63

public class Main {


// Comandos do utilizador
private static final String SAIR= "Sair";
// ...

// Feedback dado pelo programa


private static final String ADEUS= ”Adeus";
// ...

public static void main(String[] args) {


Main.comandos();
}

// ...

FriendsBook Referência:
DI FCT UNL
Declaramos variáveis com o tipo definido
pela interface, mas instanciamos essas
variáveis com uma classe que a implementa
64

private static void comandos() {


FriendsBook fb = new FriendsBookClass(); Scanner in
= new Scanner(System.in);
String comando = in.nextLine().toUpperCase();
while (!comando.equals(Main.SAIR)) {
// ... Interpretar comandos aqui...
comando = in.nextLine().toUpperCase();
}
System.out.println(Main.ADEUS);
}
...
}

FriendsBook Referência:
DI FCT UNL
Interface FriendsBook
65

public interface FriendsBook {


// Constantes de perfis de personalidade
int INTELLIGENTE =0,ANJINHO =1,BANDIDO =2,ESTUPIDO =3;

void reset();
boolean existeAmigo(String nome);
void adAmigo(String nome);
void removAmigo(String nome);
boolean existeAcao(String nome, String descricao);
void adAcao(String nome, String descricao);
void vota(String nome, String descricao,
boolean bomParaPessoa, boolean bomParaOutros);
// continua...
}

FriendsBook Referência:
DI FCT UNL
Interface FriendsBook
66

public interface FriendsBook {


// Constantes de perfis de personalidade
int INTELLIGENTE =0,ANJINHO =1,BANDIDO =2,ESTUPIDO =3;

Atenção! Quando estamos a definir interfaces devemos ter em conta que nas constantes
temos, por omissão, os seguintes modificadores:
public static final

Por exemplo, na interface FriendsBook:


int INTELLIGENTE =0,ANJINHO =1,BANDIDO =2,ESTUPIDO =3;

é equivalente a:
public static final int INTELLIGENTE =0,ANJINHO =1,BANDIDO =2,ESTUPIDO =3;

FriendsBook Referência:
DI FCT UNL
Interface FriendsBook
67

public interface FriendsBook {


// Constantes de perfis de personalidade
int INTELLIGENTE =0,ANJINHO =1,BANDIDO =2,ESTUPIDO =3;

void reset();
boolean existeAmigo(String nome);
void adAmigo(String nome);
void removAmigo(String nome);
boolean existeAcao(String nome, String descricao);
void adAcao(String nome, String descricao);
void vota(String nome, String descricao,
boolean bomParaPessoa, boolean bomParaOutros);
// continua...
}

FriendsBook Referência:
DI FCT UNL
Interface FriendsBook
68

public interface FriendsBook {


// Continuação
int numDeAmigos();
String amigoMaisAborrecido();
void inicializar(int tipo);
boolean temProximo();
Pessoa proximo();
}
Atenção! Quando estamos a definir interfaces devemos ter em conta que nos métodos temos,
por omissão, os seguintes modificadores:
public abstract

Por exemplo, na interface FriendsBook: void


inicializar(int tipo);

é equivalente a:
public abstract void inicializar(int tipo);
FriendsBook Referência:
DI FCT UNL
Esqueleto da classe
FriendsBookClass
69

public class FriendsBookClass implements FriendsBook{


private static final int DEFAULT = 10;
private Pessoa[] amigo;
private int contador;
private int actual;

public FriendsBookClass(){...}
public void reset() {...}
public boolean existeAmigo(String nome) {...}
public void adAmigo(String nome) {...}
public void removAmigo(String nome) {...}
public boolean existeAcao(String nome, String descricao){..}
// continua...

FriendsBook Referência: DI FCT UNL


Esqueleto da classe
FriendsBookClass
70

// Continuação da implementação
public void adAcao(String nome, String descricao){...}
public void vota(String nome, String descricao,
boolean bomParaPessoa, boolean bomParaOutros){...}
public int numDeAmigos() {...}
public String amigoMaisAborrecido() {...}

// Métodos para a iteração


public void inicializar(int tipo) {...}
public boolean temProximo() {...}
public Pessoa proximo() {...}

// Métodos auxiliares
private int indice(String nome) {...}
private void redimensionar() {...}
}
FriendsBook Referência:
DI FCT UNL
Documento de partida

Fase 1

Interface Pessoa
Modelação
Fase 2
Construção e Validação

Entregáveis

71

public interface Pessoa {

boolean existeAcao(String descricao);


void adAcao(String descricao);
void vota(String descricao, boolean bomParaPessoa,
boolean bomParaOutros);
String getNome();
int getPersonalidade();
double getAborrecimento();
}

FriendsBook Referência:
DI FCT UNL
Documento de partida

Esqueleto da classe Fase 1


Modelação
Fase 2

PessoaClass Construção e Validação

Entregáveis

72

public class PessoaClass implements Pessoa{


private static final int DEFAULT = 20;
private Acao[] myAcao;
private int contador;
private String nome;

public PessoaClass(String nome) {...}


public boolean existeAcao(String descricao) {...}
public void adAcao(String descricao) {...}
public void vota(String descricao,
boolean bomParaPessoa, boolean bomParaOutros) {...}
public String getNome() {...}
public int getPersonalidade(){...}
public double getAborrecimento() {...}
// ...
}

FriendsBook Referência:
DI FCT UNL
Documento de partida

Fase 1

Interface Acao
Modelação
Fase 2
Construção e Validação

Entregáveis

73

public interface Acao {

void vota(boolean bomParaPessoa, boolean bomParaOutros);


String getDescricao();
int getBeneficioProprio();
int getOtherBenefit ();
}

FriendsBook Referência:
DI FCT UNL
Documento de partida

Esqueleto da classe Fase 1


Modelação
Fase 2

AcaoClass Construção e Validação

Entregáveis

74

public class AcaoClass implements Acao {


private String descricao;
private int selfBenefitScore;
private int otherBenefitScore;

public Acao(String descricao){...}


public void vota(boolean bomParaPessoa, boolean bomParaOutros){...}
public String getDescricao(){...}
public int getBeneficioProprio(){...}
public int getBeneficioOutro(){...}
}

FriendsBook Referência:
DI FCT UNL
75 Iterador com filtro

Referência:
DI FCT UNL
Interface FriendsBook
76

public interface FriendsBook {


// Constantes de perfis de personalidade
int INTELLIGENTE =0,ANJINHO =1,BANDIDO =2,ESTUPIDO =3;

...

// Métodos para a iteração


void inicializar(int tipo);
boolean temProximo();
Pessoa proximo();

...

}
Referência:
DI FCT UNL
Esqueleto da classe
FriendsBookClass
77

public class FriendsBookClass implements FriendsBook{


private static final int DEFAULT = 10;
private Pessoa[] amigo;
private int contador;
private int actual;
private int tipo;

public FriendsBookClass(){
amigo = new Pessoa[DEFAULT];
contador = 0;
actual = 0;
tipo = -1;
}
...
// Métodos para a iteração
public void inicializar(int tipo) {...}
public boolean temProximo() {...}
public Pessoa proximo() {...} Referência:
DI FCT UNL
Métodos para iteração (simples)
78

public void inicializar() {


actual = 0;
}

public boolean temProximo() {


return actual < contador;
}

public Pessoa proximo() {


return amigo[actual++];
}

Referência:
DI FCT UNL
Métodos para iteração (filtro)
79

public void inicializar(int tipo) {


actual = 0;
this.tipo = tipo;
while (actual < contador && amigo[actual].getPersonalidade() != tipo)
actual++;
}
public boolean temProximo() {
return actual < contador;
}

public Pessoa proximo() {


Pessoa res = amigo[actual++];
while (actual < contador && amigo[actual].getPersonalidade() != tipo)
actual++;
return res;
}

Referência:
DI FCT UNL
Temos aqui algum código repetido
80

public void inicializar(int tipo) {


actual = 0;
this.tipo = tipo;
while (actual < contador &&
amigo[actual].getPersonalidade() != tipo)
actual++;
}
public boolean temProximo() {
return actual < contador;
}

public Pessoa proximo() {


Pessoa res = amigo[actual++];
while (actual < contador &&
amigo[actual].getPersonalidade() != tipo)
actual++;
return res;
}
Referência:
DI FCT UNL
Podemos refabricar o código para evitar a
repetição
81

public void inicializar(int tipo) {


actual = 0;
this.tipo = tipo;
searchNext();
}
public boolean temProximo() {
return actual < contador;
}
public Pessoa proximo() {
Pessoa res = amigo[actual++];
searchNext();
return res;
}
private void searchNext() {
while (actual < contador &&
amigo[actual].getPersonalidade() != tipo)
actual++;
}
Referência:
DI FCT UNL
Métodos para iteração
82

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
}
}
// Método na classe Main que usa os métodos de iteração para
// percorrer os amigos da rede social

actual = -1

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = -1

Referência:
DI FCT UNL
Métodos para iteração
83

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (f b.temProximo()) {
public void inicializar(int tipo) {
actual = 0; this.tipo = tipo;
System.out.println(fb.proximo(
} )); searchNext();
}
}

actual = -1

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = -1

Referência:
DI FCT UNL
Métodos para iteração
84

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (f b.temProximo()) {
public void inicializar(int tipo) {
actual = 0; this.tipo
System.out.println(fb.proximo( = tipo;
} )); searchNext();
}
}

actual = 0

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
85

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (f b.temProximo()) {
public void inicializar(int tipo) {
actual = 0; this.tipo
System.out.println(fb.proximo( = tipo;
} )); searchNext();
}
}

actual = 0

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
86

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (f b.temProximo()) {
public void inicializar(int tipo) {
actual = 0; this.tipo
System.out.println(fb.proximo( = tipo;
} )); searchNext();
private void searchNext() {
} while (actual < contador &&
} amigo[actual].getPersonalidade() != tipo)
actual++;
}

actual = 0

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
87

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (f b.temProximo()) {
public void inicializar(int tipo) {
actual = 0; this.tipo
System.out.println(fb.proximo( = tipo;
} )); searchNext();
private void searchNext() {
} while (actual < contador &&
} amigo[actual].getPersonalidade() != tipo)
actual++;
}

actual = 1

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
88

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (f b.temProximo()) {
public void inicializar(int tipo) {
actual = 0; this.tipo
System.out.println(fb.proximo( = tipo;
} )); searchNext();
private void searchNext() {
} while (actual < contador &&
} amigo[actual].getPersonalidade() != tipo)
actual++;
}

actual = 1

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
89

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (f b.temProximo()) {
public void inicializar(int tipo) {
actual = 0; this.tipo
System.out.println(fb.proximo( = tipo;
} )); searchNext();
private void searchNext() {
} while (actual < contador &&
} amigo[actual].getPersonalidade() != tipo)
actual++;
}

actual = 2

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
90

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (f b.temProximo()) {
public void inicializar(int tipo) {
actual = 0; this.tipo
System.out.println(fb.proximo( = tipo;
} )); searchNext();
private void searchNext() {
} while (actual < contador &&
} amigo[actual].getPersonalidade() != tipo)
actual++;
}

actual = 2

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
91

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (f b.temProximo()) {
public void inicializar(int tipo) {
actual = 0; this.tipo
System.out.println(fb.proximo( = tipo;
} )); searchNext();
private void searchNext() {
} while (actual < contador &&
} amigo[actual].getPersonalidade() != tipo)
actual++;
}

actual = 2

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
92

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (f b.temProximo()) {
public void inicializar(int tipo) {
actual = 0; this.tipo
System.out.println(fb.proximo( = tipo;
} )); searchNext()
}
}

actual = 2

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
93

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().get e());
public boolean temProximo() {
Nam
} return actual < contador;
} }

actual = 2

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
94

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
} public Pessoa proximo() {
} Pessoa res = amigo[actual++];
searchNext();
return res;
}

actual = 2

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
95

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
} public Pessoa proximo() {
} Pessoa res = amigo[actual++];
searchNext();
return res;
}

actual = 3

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
96

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
} public Pessoa proximo() {
} Pessoa res = amigo[actual++];
searchNext();
return res;
}

actual = 3

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
97

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
} public Pessoa proximo() {
} Personres = amigo[actual++];
private void searchNext() {
searchNext();
return while
res;
(actual < contador &&
} amigo[actual].getPersonalidade() != tipo)
actual++;
}
actual = 3

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
98

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
} public Pessoa proximo() {
} Person res = amigo[actual++];
private void searchNext() {
searchNext();
return while
res;
(actual < contador &&
} amigo[actual].getPersonalidade() != tipo)
actual++;
}
actual = 4

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
99

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
} public Pessoa proximo() {
} Person res = amigo[actual++];
private void searchNext() {
searchNext();
return while
res;
(actual < contador &&
} amigo[actual].getPersonalidade() != tipo)
actual++;
}
actual = 4

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
100

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
} public Pessoa proximo() {
} Person res = amigo[actual++];
private void searchNext() {
searchNext();
return while
res;
(actual < contador &&
} amigo[actual].getPersonalidade() != tipo)
actual++;
}
actual = 4

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
101

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
} public Pessoa proximo() {
} Pessoa res = amigo[actual++];
searchNext();
return res;
}

actual = 4

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
102

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().get
public boolean temProximo() { e());
} Nam return actual < contador;
}
}

actual = 4

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
103

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
} public Pessoa proximo() {
} Pessoa res = amigo[actual++];
searchNext();
return res;
}

actual = 5

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
104

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
} public Pessoa proximo() {
} Pessoa res = amigo[actual++];
searchNext();
return res;
}

actual = 5

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
105

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
} public Pessoa proximo() {
} Person res = amigo[actual++];
private void searchNext() {
searchNext();
return while
res;
(actual < contador &&
} amigo[actual].getPersonalidade() != tipo)
actual++;
}
actual = 5

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
106

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
} public Pessoa proximo() {
} Person res = amigo[actual++];
private void searchNext() {
searchNext();
return while
res;
(actual < contador &&
} amigo[actual].getPersonalidade() != tipo)
actual++;
}
actual = 6

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
107

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
} public Pessoa proximo() {
} Person res = amigo[actual++];
private void searchNext() {
searchNext();
return while
res;
(actual < contador &&
} amigo[actual].getPersonalidade() != tipo)
actual++;
}
actual = 6

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
108

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
} public Pessoa proximo() {
} Person res = amigo[actual++];
private void searchNext() {
searchNext();
return while
res;
(actual < contador &&
} amigo[actual].getPersonalidade() != tipo)
actual++;
}
actual = 7

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
109

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
} public Pessoa proximo() {
} Person res = amigo[actual++];
private void searchNext() {
searchNext();
return while
res;
(actual < contador &&
} amigo[actual].getPersonalidade() != tipo)
actual++;
}
actual = 7

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
110

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
} public Pessoa proximo() {
} Person res = amigo[actual++];
private void searchNext() {
searchNext();
return while
res;
(actual < contador &&
} amigo[actual].getPersonalidade() != tipo)
actual++;
}
actual = 7

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
111

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
} public Pessoa proximo() {
} Pessoa res = amigo[actual++];
searchNext();
return res;
}

actual = 7

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
112

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().get
public boolean temProximo() { e());
} Nam return actual < contador;
}
}

actual = 7

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL
Métodos para iteração
113

private static void lista(int tipo, FriendsBook fb) {


fb.inicializar(tipo);
while (fb.temProximo()) {
System.out.println(fb.proximo().getNome());
}
}

actual = 7

amigo = B E I E I A A contador = 7

[0] [1] [2] [3] [4] [5] [6] tipo = I

Referência:
DI FCT UNL

You might also like