SlideShare una empresa de Scribd logo
1 de 34
Interfaces
Listas e listas ligadas
Iteradores
 Polimorfismo de subtipos
 Classes e operações polimórficas
 Herança
 Ligação estática e ligação dinâmica
 Classes abstractas e classes concretas
 Operações abstractas
 Análise, desenho e implementação
 Dicionário do domínio
 Conceitos
 Conceitos concretos e conceitos abstractos
2013/2014 Fundamentos de Programação 2
 Definem um comportamento que as classes podem
implementar
 Contêm apenas constantes e declarações de
operações (e tipos embutidos)
 Classes podem implementar interfaces
 Uma classe pode implementar várias interfaces,
embora possa derivar apenas de uma outra classe
 Uma interface pode estender (derivar de) outra
2013/2014 Fundamentos de Programação 3
public interface Comparable<Type> {
int compareTo(Type object);
}
public interface Queue<Item> {
Item element();
void add(Item item);
void remove();
}
2013/2014 Fundamentos de Programação 4
Operações apenas declaradas.
Não se define qualquer método.
Não é necessário usar o
qualificador abstract.
Operações públicas
por omissão.
Nota: A interface Queue é um
pouco diferente na biblioteca do
Java!
Interface genérica. Type é um
parâmetro. O correspondente
argumento tem de ser um tipo.
public final class Rational implements Comparable<Rational> {
private final int numerator;
private final int denominator;
…
@Override
public int compareTo(final Rational another) {
final int leftNumerator =
getNumerator() * another.getDenominator();
final int rightNumerator =
another.getNumerator() * getDenominator();
if (leftNumerator > rightNumerator)
return 1;
if (leftNumerator < rightNumerator)
return -1;
return 0;
}
…
}
2013/2014 Fundamentos de Programação 5
public final class Rational implements Comparable<Rational> {
private final int numerator;
private final int denominator;
…
public int compareTo(final Rational another){
…
}
…
}
Implementação
2013/2014 Fundamentos de Programação 6
«interface»
Comparable<Type → Rational>
Rational
Relação de
realização
Comparable<Type → Rational>
Rational
public class CustomerQueue implements Queue<Customer> {
…
}
public class MyQueueTester {
…
public static void main(final String[] arguments) {
Queue<Customer> customerQueue =
new CustomerQueue();
…
}
…
}
2013/2014 Fundamentos de Programação 7
Queue<Item → Customer>
CustomerQueue
 Adjectivo denotando possibilidade de realizar
determinadas operações (e.g., Comparable)
 Nome denotando conceito cujo
comportamento será implementado (e.g.,
Queue)
2013/2014 Fundamentos de Programação 8
Caso semelhante ao das classes abstractas, mas
1. não há qualquer herança de implementação (i.e.,
de atributos não constantes e métodos) e
2. uma classe que implemente a interface pode
simultaneamente implementar outras interfaces.
 Precisa-se de classes semelhantes
 Com operações semelhantes
 Com atributos semelhantes
 Variando apenas em alguns tipos (e.g., o tipo dos
elementos a guardar em diferentes listas)
 É necessário definir essas classes
separadamente?
2013/2014 Fundamentos de Programação 9
public class ArrayList {
private Object[] items;
…
}
2013/2014 Fundamentos de Programação 10
- items
*
ObjectArrayList
Room
public class ArrayList<Item> {
private Item[] items;
…
}
2013/2014 Fundamentos de Programação 11
ArrayList<Item → Room> Room
*
- items
ArrayList
Item
«bind» <Item → Room>
- items : Item [*]
Notação UML para classes
genéricas (também conhecidas
por modelos ou templates).
Classe genérica. Item é um
parâmetro. O correspondente
argumento tem de ser um tipo.
public class Floor {
private ArrayList<Room> rooms =
new ArrayList<Room>();
public Floor(final int numberOfRooms) {
for (int roomNumber = 1;
roomNumber != numberOfRooms + 1;
roomNumber++)
rooms.addFirst(new Room(roomNumber));
}
public void show() {
while (rooms.hasNext())
out.println(rooms.next());
}
}
2013/2014 Fundamentos de Programação 12
Inserir novo elemento no início ou a meio
da lista implica «empurrar» elementos
existentes para «fazer espaço».
Para fazer isto o
que é preciso?
public class LinkedList<Item> {
private Node<Item> firstNode = null;
private Node<Item> currentNode = null;
…
private static class Node<Item> {
private Node<Item> nextNode;
private Item item;
private Node(final Node<Item> nextNode,
final Item item) {
this.nextNode = nextNode;
this.item = item;
}
}
…
}
2013/2014 Fundamentos de Programação 13
Classe embutida (nested)
privada. A classe
LinkedList<Item> tem
acesso aos membros
privados de Node<Item>.
2013/2014 Fundamentos de Programação 14
LinkedList
Item
Node
Item
- nextNode: Node
- item: Item
LinkedList
Item
- firstNode: Node<Item>
- currentNode: Node<Item>
Node
Item
- nextNode: Node
- item: Item
Notações para o
embutimento.
LinkedList::Node
Item
- nextNode: Node
- item: Item
LinkedList
Item
- firstNode: Node<Item>
- currentNode: Node<Item>
public class Floor {
private LinkedList<Room> rooms =
new LinkedList<Room>();
public Floor(final int numberOfRooms) {
for (int roomNumber = 1;
roomNumber != numberOfRooms + 1;
roomNumber++)
rooms.addFirst(new Room(roomNumber));
}
public void show() {
while (rooms.hasNext())
out.println(rooms.next());
}
}
2013/2014 Fundamentos de Programação 15
Inserir novo elemento no início ou no meio
da lista não implica «empurrar» elementos
existentes!
2013/2014 Fundamentos de Programação 16
rooms : LinkedList<Item → Room>
: Node<Item → Room>
firstNode currentNode
nextNode
item item
nextNode = null
: Room
: Node<Item → Room>
: Room
public class LinkedList<Item> {
private Node<Item> firstNode = null;
…
private static class Node<Item> {
…
private Node(final Node<Item> nextNode,
final Item item) {
this.nextNode = nextNode;
this.item = item;
}
}
public void addFirst(final Item newItem) {
firstNode = new Node<Item>(firstNode, newItem);
}
…
}
2013/2014 Fundamentos de Programação 17
2013/2014 Fundamentos de Programação 18
rooms : LinkedList<Item → Room>
: Node<Item → Room>
firstNode currentNode
nextNode
item item
nextNode = null
: Room
: Node<Item → Room>
: RoomnewItem : Room
: Node<Item → Room>
nextNode
item
firstNode
public class LinkedList<Item> {
…
public void removeFirst() {
if (isEmpty())
throw new NoSuchElementException(…);
if (currentNode == firstNode)
currentNode = currentNode.nextNode;
Node<Item> nextFirstNode = firstNode.nextNode;
firstNode.item = null;
firstNode.nextNode = null;
firstNode = nextFirstNode;
}
…
}
2013/2014 Fundamentos de Programação 19
2013/2014 Fundamentos de Programação 20
rooms : LinkedList<Item → Room>
: Node<Item → Room>
firstNode currentNode
nextNode
item item
nextNode = null
: Room
: Node<Item → Room>
: Room
item = null
nextFirstNode : «ref» Node<Item → Room>
firstNode
public class LinkedList<Item> {
…
public void addLast(final Item newItem) {
if (firstNode == null)
firstNode = new Node<Item>(null, newItem);
else
lastNode().nextNode = new Node<Item>(null, newItem);
}
private Node<Item> lastNode() {
Node<Item> node = firstNode;
while (node.nextNode != null)
node = node.nextNode;
return node;
}
…
}
2013/2014 Fundamentos de Programação 21
public class LinkedList<Item> {
…
public void addLast(final Item newItem) {
if (firstNode == null)
firstNode = new Node<Item>(null, newItem);
else {
Node<Item> lastNode = firstNode;
while (lastNode.nextNode != null)
lastNode = lastNode.nextNode;
lastNode.nextNode = new Node<Item>(null, newItem);
}
}
…
}
2013/2014 Fundamentos de Programação 22
2013/2014 Fundamentos de Programação 23
rooms : LinkedList<Item → Room>
: Node<Item → Room>
firstNode currentNode
nextNode
item item
nextNode = null
: Room
: Node<Item → Room>
: Room
lastNode : «ref» Node<Item → Room>
nextNode = null
: Node<Item → Room>
nextNode
newItem : Room
item
public class LinkedList<Item> {
…
public Item next() {
if (!hasNext())
throw new NoSuchElementException("…");
if (currentNode == null)
currentNode = firstNode;
else
currentNode = currentNode.nextNode;
return currentNode.item;
}
…
}
2013/2014 Fundamentos de Programação 24
2013/2014 Fundamentos de Programação 25
rooms : LinkedList<Item → Room>
: Node<Item → Room>
firstNode currentNode
nextNode
item item
: Room
: Node<Item → Room>
: Room
nextNode = null
: Node<Item → Room>
nextNode
item
currentNode
: Room
2013/2014 Fundamentos de Programação 26
LinkedList
Item
Node
Ite
m
- item: Item
nextNode
firstNode
currentNode 0..1
0..1
0..1
0..1
Esta solução não
permite percorrer a
lista mais do que uma
vez em paralelo!
0..1
0..1
1
*
public class Floor {
private LinkedList<Room> rooms =
new LinkedList<Room>();
public Floor(final int numberOfRooms) {
for (int roomNumber = 1;
roomNumber != numberOfRooms + 1;
roomNumber++)
rooms.add(new Room(roomNumber));
}
public void show() {
while (rooms.hasNext())
out.println(rooms.next());
}
}
2013/2014 Fundamentos de Programação 27
public class Floor {
private LinkedList<Room> rooms =
new LinkedList<Room>();
public Floor(final int numberOfRooms) {
for (int roomNumber = 1;
roomNumber != numberOfRooms + 1;
roomNumber++)
rooms.add(new Room(roomNumber));
}
public void show() {
LinkedList<Room>.Iterator i = rooms.iterator();
while(i.hasNext())
out.println(i.next());
}
}
2013/2014 Fundamentos de Programação 28
public class Floor {
private LinkedList<Room> rooms =
new LinkedList<Room>();
public Floor(final int numberOfRooms) {
for (int roomNumber = 1;
roomNumber != numberOfRooms + 1;
roomNumber++)
rooms.add(new Room(roomNumber));
}
public void show() {
Iterator<Room> i = rooms.iterator();
while(i.hasNext())
out.println(i.next());
}
}
2013/2014 Fundamentos de Programação 29
Iterator é uma
classe interna (inner).
As suas instâncias têm
uma ligação implícita
à instância da classe
envolvente que as
criou. A ver com
pormenor mais tarde.
2013/2014 Fundamentos de Programação 30
LinkedList
Item
Node
Item
- item: Item
nextNode
firstNode currentNode
0..10..1
0..1
Esta solução permite
percorrer a lista mais
do que uma vez em
paralelo!
Iterator
LinkedList.this
*
0..1
0..1
*
*
1
 Permitem iterar ao longo de uma sequência de
elementos, actuando sobre essa sequência
 A uma sequência podem associar-se vários
iteradores
 Classes que forneçam iteradores podem ser
usadas em ciclos for-each…
 … mas têm de implementar a interface Iterable
2013/2014 Fundamentos de Programação 31
public class Floor {
private LinkedList<Room> rooms =
new LinkedList<Room>();
public Floor(final int numberOfRooms) {
for (int roomNumber = 1;
roomNumber != numberOfRooms + 1;
roomNumber++)
rooms.add(new Room(roomNumber));
}
public void show() {
for (Room room : rooms)
out.println(room);
}
}
2013/2014 Fundamentos de Programação 32
Mais tarde voltaremos a este assunto.
 Interfaces
 Definem comportamentos (adjectivam)
 Classes implementam-nas
 Listas
 Listas ligadas
 Operações sobre listas ligadas
 Introdução aos iteradores
2013/2014 Fundamentos de Programação
Página
33
 Interfaces
 Listas e listas ligadas
 Iteradores
2013/2014 Fundamentos de Programação
Página
34

Más contenido relacionado

La actualidad más candente

Semana 3: Introdução à linguagem de programação Java
Semana  3: Introdução à linguagem de programação Java Semana  3: Introdução à linguagem de programação Java
Semana 3: Introdução à linguagem de programação Java Manuel Menezes de Sequeira
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...Manuel Menezes de Sequeira
 
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...Manuel Menezes de Sequeira
 
Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Andre Nascimento
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...Manuel Menezes de Sequeira
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Leonardo Melo Santos
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Marcos Castro
 
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...Manuel Menezes de Sequeira
 
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...
Semana  1: Programação como arte de resolver problemas, algoritmos e problema...Semana  1: Programação como arte de resolver problemas, algoritmos e problema...
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...Manuel Menezes de Sequeira
 

La actualidad más candente (20)

Semana 3: Introdução à linguagem de programação Java
Semana  3: Introdução à linguagem de programação Java Semana  3: Introdução à linguagem de programação Java
Semana 3: Introdução à linguagem de programação Java
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
 
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
 
Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#
 
Introducao ao C#
Introducao ao C#Introducao ao C#
Introducao ao C#
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
Java4
Java4Java4
Java4
 
Java2
Java2Java2
Java2
 
Java5
Java5Java5
Java5
 
SubProgramas
SubProgramasSubProgramas
SubProgramas
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
 
Linguagem C - Estruturas
Linguagem C - EstruturasLinguagem C - Estruturas
Linguagem C - Estruturas
 
Paradigma funcional
Paradigma funcionalParadigma funcional
Paradigma funcional
 
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...
Semana  1: Programação como arte de resolver problemas, algoritmos e problema...Semana  1: Programação como arte de resolver problemas, algoritmos e problema...
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...
 
SFD - C# para a comunidade
SFD - C# para a comunidadeSFD - C# para a comunidade
SFD - C# para a comunidade
 

Destacado

1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...Manuel Menezes de Sequeira
 
Introdução à programação em Android - Alcides Maya 16.04.2013
Introdução à programação em Android - Alcides Maya 16.04.2013Introdução à programação em Android - Alcides Maya 16.04.2013
Introdução à programação em Android - Alcides Maya 16.04.2013guisester
 
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...Luís Gustavo Martins
 
Conceitos e técnicas de programação introdução
Conceitos e técnicas de programação introduçãoConceitos e técnicas de programação introdução
Conceitos e técnicas de programação introduçãoRobson Ferreira
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosMoises Omena
 
Introdução à programação orientada para aspectos
Introdução à programação orientada para aspectosIntrodução à programação orientada para aspectos
Introdução à programação orientada para aspectosManuel Menezes de Sequeira
 
Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2Robson Ferreira
 

Destacado (13)

1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
 
Programação Orientada por Objectos - Aula 1
Programação Orientada por Objectos - Aula 1Programação Orientada por Objectos - Aula 1
Programação Orientada por Objectos - Aula 1
 
Programação Orientada por Objectos - Aula 5
Programação Orientada por Objectos - Aula 5Programação Orientada por Objectos - Aula 5
Programação Orientada por Objectos - Aula 5
 
Introdução à programação em Android - Alcides Maya 16.04.2013
Introdução à programação em Android - Alcides Maya 16.04.2013Introdução à programação em Android - Alcides Maya 16.04.2013
Introdução à programação em Android - Alcides Maya 16.04.2013
 
Aplicando logica orientada_a_objeto_em_java
Aplicando logica orientada_a_objeto_em_javaAplicando logica orientada_a_objeto_em_java
Aplicando logica orientada_a_objeto_em_java
 
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
 
Conceitos e técnicas de programação introdução
Conceitos e técnicas de programação introduçãoConceitos e técnicas de programação introdução
Conceitos e técnicas de programação introdução
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
Programação Orientada por Objectos - Aula 7
Programação Orientada por Objectos - Aula 7Programação Orientada por Objectos - Aula 7
Programação Orientada por Objectos - Aula 7
 
Programação Orientada por Objectos - Aula 6
Programação Orientada por Objectos - Aula 6Programação Orientada por Objectos - Aula 6
Programação Orientada por Objectos - Aula 6
 
Introdução à programação orientada para aspectos
Introdução à programação orientada para aspectosIntrodução à programação orientada para aspectos
Introdução à programação orientada para aspectos
 
Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2
 
Programação Orientada por Objectos - Aula 3
Programação Orientada por Objectos - Aula 3Programação Orientada por Objectos - Aula 3
Programação Orientada por Objectos - Aula 3
 

Similar a 14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Programação

Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologiaselliando dias
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosGregorio Kusowski
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverEduardo Jorge
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#Felipe Pimentel
 
Lista encadeada de inteiros
Lista encadeada de inteirosLista encadeada de inteiros
Lista encadeada de inteirosRobson Eduardo
 
Scala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetosScala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetosFelipe Hummel
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens PooInfogenius
 
Palestra: LINQ via C#
Palestra: LINQ via C# Palestra: LINQ via C#
Palestra: LINQ via C# Thiago Vidal
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012Luís Cobucci
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesRegis Magalhães
 

Similar a 14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Programação (20)

v
vv
v
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologias
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanos
 
Aula5
Aula5Aula5
Aula5
 
Java 06
Java 06Java 06
Java 06
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
 
Como criar classes e objetos
Como criar classes e objetosComo criar classes e objetos
Como criar classes e objetos
 
Como criar classes e objetos
Como criar classes e objetosComo criar classes e objetos
Como criar classes e objetos
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
 
Lista encadeada de inteiros
Lista encadeada de inteirosLista encadeada de inteiros
Lista encadeada de inteiros
 
Scala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetosScala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetos
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 
Interfaces e Porlimosfismo
Interfaces e PorlimosfismoInterfaces e Porlimosfismo
Interfaces e Porlimosfismo
 
Interfaces e polimorfismo
Interfaces e polimorfismoInterfaces e polimorfismo
Interfaces e polimorfismo
 
Palestra: LINQ via C#
Palestra: LINQ via C# Palestra: LINQ via C#
Palestra: LINQ via C#
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 

Más de Manuel Menezes de Sequeira

Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instânciasSemana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instânciasManuel Menezes de Sequeira
 
Semana 9: toString, classes, instâncias e objectos, Scanner
Semana  9: toString, classes, instâncias e objectos, ScannerSemana  9: toString, classes, instâncias e objectos, Scanner
Semana 9: toString, classes, instâncias e objectos, ScannerManuel Menezes de Sequeira
 
Semana 8: Classes e instâncias, cadeias de caracteres
Semana  8: Classes e instâncias, cadeias de caracteresSemana  8: Classes e instâncias, cadeias de caracteres
Semana 8: Classes e instâncias, cadeias de caracteresManuel Menezes de Sequeira
 
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana  6: Matrizes multidimensionais, estratégias de resolução de problemasSemana  6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemasManuel Menezes de Sequeira
 
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaSemana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaManuel Menezes de Sequeira
 
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...Manuel Menezes de Sequeira
 
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)Manuel Menezes de Sequeira
 
Eng.ª do Software - 9. Verificação e validação
Eng.ª do Software - 9. Verificação e validaçãoEng.ª do Software - 9. Verificação e validação
Eng.ª do Software - 9. Verificação e validaçãoManuel Menezes de Sequeira
 
Eng.ª do Software - 8. Desenho de interfaces com o utilizador
Eng.ª do Software - 8. Desenho de interfaces com o utilizadorEng.ª do Software - 8. Desenho de interfaces com o utilizador
Eng.ª do Software - 8. Desenho de interfaces com o utilizadorManuel Menezes de Sequeira
 
Eng.ª do Software - 7. Desenho arquitectónico
Eng.ª do Software - 7. Desenho arquitectónicoEng.ª do Software - 7. Desenho arquitectónico
Eng.ª do Software - 7. Desenho arquitectónicoManuel Menezes de Sequeira
 

Más de Manuel Menezes de Sequeira (13)

Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instânciasSemana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
 
Semana 9: toString, classes, instâncias e objectos, Scanner
Semana  9: toString, classes, instâncias e objectos, ScannerSemana  9: toString, classes, instâncias e objectos, Scanner
Semana 9: toString, classes, instâncias e objectos, Scanner
 
Semana 8: Classes e instâncias, cadeias de caracteres
Semana  8: Classes e instâncias, cadeias de caracteresSemana  8: Classes e instâncias, cadeias de caracteres
Semana 8: Classes e instâncias, cadeias de caracteres
 
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana  6: Matrizes multidimensionais, estratégias de resolução de problemasSemana  6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
 
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaSemana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
 
Semana 2: Funções e listas, variáveis
Semana  2: Funções e listas, variáveisSemana  2: Funções e listas, variáveis
Semana 2: Funções e listas, variáveis
 
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...
 
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
 
Eng.ª do Software - 10. Testes de software
Eng.ª do Software - 10. Testes de softwareEng.ª do Software - 10. Testes de software
Eng.ª do Software - 10. Testes de software
 
Eng.ª do Software - 9. Verificação e validação
Eng.ª do Software - 9. Verificação e validaçãoEng.ª do Software - 9. Verificação e validação
Eng.ª do Software - 9. Verificação e validação
 
Eng.ª do Software - 8. Desenho de interfaces com o utilizador
Eng.ª do Software - 8. Desenho de interfaces com o utilizadorEng.ª do Software - 8. Desenho de interfaces com o utilizador
Eng.ª do Software - 8. Desenho de interfaces com o utilizador
 
Eng.ª do Software - 7. Desenho arquitectónico
Eng.ª do Software - 7. Desenho arquitectónicoEng.ª do Software - 7. Desenho arquitectónico
Eng.ª do Software - 7. Desenho arquitectónico
 
Eng.ª do Software - 6. Gestão de projectos
Eng.ª do Software - 6. Gestão de projectosEng.ª do Software - 6. Gestão de projectos
Eng.ª do Software - 6. Gestão de projectos
 

Último

DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...IsabelPereira2010
 
AULA DE CARIOLOGIA TSB introdução tudo sobre
AULA DE CARIOLOGIA TSB introdução tudo sobreAULA DE CARIOLOGIA TSB introdução tudo sobre
AULA DE CARIOLOGIA TSB introdução tudo sobremaryalouhannedelimao
 
INTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de ProfessorINTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de ProfessorEdvanirCosta
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdfAna Lemos
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfWagnerCamposCEA
 
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇJaineCarolaineLima
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médiorosenilrucks
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxferreirapriscilla84
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Ilda Bicacro
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
BNCC Geografia.docx objeto de conhecimento
BNCC Geografia.docx objeto de conhecimentoBNCC Geografia.docx objeto de conhecimento
BNCC Geografia.docx objeto de conhecimentoGentil Eronides
 
Introdução a Caminhada do Interior......
Introdução a Caminhada do Interior......Introdução a Caminhada do Interior......
Introdução a Caminhada do Interior......suporte24hcamin
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfFrancisco Márcio Bezerra Oliveira
 
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOFASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOAulasgravadas3
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesFabianeMartins35
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2Maria Teresa Thomaz
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 

Último (20)

DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
AULA DE CARIOLOGIA TSB introdução tudo sobre
AULA DE CARIOLOGIA TSB introdução tudo sobreAULA DE CARIOLOGIA TSB introdução tudo sobre
AULA DE CARIOLOGIA TSB introdução tudo sobre
 
INTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de ProfessorINTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de Professor
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
 
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptx
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
BNCC Geografia.docx objeto de conhecimento
BNCC Geografia.docx objeto de conhecimentoBNCC Geografia.docx objeto de conhecimento
BNCC Geografia.docx objeto de conhecimento
 
Introdução a Caminhada do Interior......
Introdução a Caminhada do Interior......Introdução a Caminhada do Interior......
Introdução a Caminhada do Interior......
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOFASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 

14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Programação

  • 1. Interfaces Listas e listas ligadas Iteradores
  • 2.  Polimorfismo de subtipos  Classes e operações polimórficas  Herança  Ligação estática e ligação dinâmica  Classes abstractas e classes concretas  Operações abstractas  Análise, desenho e implementação  Dicionário do domínio  Conceitos  Conceitos concretos e conceitos abstractos 2013/2014 Fundamentos de Programação 2
  • 3.  Definem um comportamento que as classes podem implementar  Contêm apenas constantes e declarações de operações (e tipos embutidos)  Classes podem implementar interfaces  Uma classe pode implementar várias interfaces, embora possa derivar apenas de uma outra classe  Uma interface pode estender (derivar de) outra 2013/2014 Fundamentos de Programação 3
  • 4. public interface Comparable<Type> { int compareTo(Type object); } public interface Queue<Item> { Item element(); void add(Item item); void remove(); } 2013/2014 Fundamentos de Programação 4 Operações apenas declaradas. Não se define qualquer método. Não é necessário usar o qualificador abstract. Operações públicas por omissão. Nota: A interface Queue é um pouco diferente na biblioteca do Java! Interface genérica. Type é um parâmetro. O correspondente argumento tem de ser um tipo.
  • 5. public final class Rational implements Comparable<Rational> { private final int numerator; private final int denominator; … @Override public int compareTo(final Rational another) { final int leftNumerator = getNumerator() * another.getDenominator(); final int rightNumerator = another.getNumerator() * getDenominator(); if (leftNumerator > rightNumerator) return 1; if (leftNumerator < rightNumerator) return -1; return 0; } … } 2013/2014 Fundamentos de Programação 5
  • 6. public final class Rational implements Comparable<Rational> { private final int numerator; private final int denominator; … public int compareTo(final Rational another){ … } … } Implementação 2013/2014 Fundamentos de Programação 6 «interface» Comparable<Type → Rational> Rational Relação de realização Comparable<Type → Rational> Rational
  • 7. public class CustomerQueue implements Queue<Customer> { … } public class MyQueueTester { … public static void main(final String[] arguments) { Queue<Customer> customerQueue = new CustomerQueue(); … } … } 2013/2014 Fundamentos de Programação 7 Queue<Item → Customer> CustomerQueue
  • 8.  Adjectivo denotando possibilidade de realizar determinadas operações (e.g., Comparable)  Nome denotando conceito cujo comportamento será implementado (e.g., Queue) 2013/2014 Fundamentos de Programação 8 Caso semelhante ao das classes abstractas, mas 1. não há qualquer herança de implementação (i.e., de atributos não constantes e métodos) e 2. uma classe que implemente a interface pode simultaneamente implementar outras interfaces.
  • 9.  Precisa-se de classes semelhantes  Com operações semelhantes  Com atributos semelhantes  Variando apenas em alguns tipos (e.g., o tipo dos elementos a guardar em diferentes listas)  É necessário definir essas classes separadamente? 2013/2014 Fundamentos de Programação 9
  • 10. public class ArrayList { private Object[] items; … } 2013/2014 Fundamentos de Programação 10 - items * ObjectArrayList Room
  • 11. public class ArrayList<Item> { private Item[] items; … } 2013/2014 Fundamentos de Programação 11 ArrayList<Item → Room> Room * - items ArrayList Item «bind» <Item → Room> - items : Item [*] Notação UML para classes genéricas (também conhecidas por modelos ou templates). Classe genérica. Item é um parâmetro. O correspondente argumento tem de ser um tipo.
  • 12. public class Floor { private ArrayList<Room> rooms = new ArrayList<Room>(); public Floor(final int numberOfRooms) { for (int roomNumber = 1; roomNumber != numberOfRooms + 1; roomNumber++) rooms.addFirst(new Room(roomNumber)); } public void show() { while (rooms.hasNext()) out.println(rooms.next()); } } 2013/2014 Fundamentos de Programação 12 Inserir novo elemento no início ou a meio da lista implica «empurrar» elementos existentes para «fazer espaço». Para fazer isto o que é preciso?
  • 13. public class LinkedList<Item> { private Node<Item> firstNode = null; private Node<Item> currentNode = null; … private static class Node<Item> { private Node<Item> nextNode; private Item item; private Node(final Node<Item> nextNode, final Item item) { this.nextNode = nextNode; this.item = item; } } … } 2013/2014 Fundamentos de Programação 13 Classe embutida (nested) privada. A classe LinkedList<Item> tem acesso aos membros privados de Node<Item>.
  • 14. 2013/2014 Fundamentos de Programação 14 LinkedList Item Node Item - nextNode: Node - item: Item LinkedList Item - firstNode: Node<Item> - currentNode: Node<Item> Node Item - nextNode: Node - item: Item Notações para o embutimento. LinkedList::Node Item - nextNode: Node - item: Item LinkedList Item - firstNode: Node<Item> - currentNode: Node<Item>
  • 15. public class Floor { private LinkedList<Room> rooms = new LinkedList<Room>(); public Floor(final int numberOfRooms) { for (int roomNumber = 1; roomNumber != numberOfRooms + 1; roomNumber++) rooms.addFirst(new Room(roomNumber)); } public void show() { while (rooms.hasNext()) out.println(rooms.next()); } } 2013/2014 Fundamentos de Programação 15 Inserir novo elemento no início ou no meio da lista não implica «empurrar» elementos existentes!
  • 16. 2013/2014 Fundamentos de Programação 16 rooms : LinkedList<Item → Room> : Node<Item → Room> firstNode currentNode nextNode item item nextNode = null : Room : Node<Item → Room> : Room
  • 17. public class LinkedList<Item> { private Node<Item> firstNode = null; … private static class Node<Item> { … private Node(final Node<Item> nextNode, final Item item) { this.nextNode = nextNode; this.item = item; } } public void addFirst(final Item newItem) { firstNode = new Node<Item>(firstNode, newItem); } … } 2013/2014 Fundamentos de Programação 17
  • 18. 2013/2014 Fundamentos de Programação 18 rooms : LinkedList<Item → Room> : Node<Item → Room> firstNode currentNode nextNode item item nextNode = null : Room : Node<Item → Room> : RoomnewItem : Room : Node<Item → Room> nextNode item firstNode
  • 19. public class LinkedList<Item> { … public void removeFirst() { if (isEmpty()) throw new NoSuchElementException(…); if (currentNode == firstNode) currentNode = currentNode.nextNode; Node<Item> nextFirstNode = firstNode.nextNode; firstNode.item = null; firstNode.nextNode = null; firstNode = nextFirstNode; } … } 2013/2014 Fundamentos de Programação 19
  • 20. 2013/2014 Fundamentos de Programação 20 rooms : LinkedList<Item → Room> : Node<Item → Room> firstNode currentNode nextNode item item nextNode = null : Room : Node<Item → Room> : Room item = null nextFirstNode : «ref» Node<Item → Room> firstNode
  • 21. public class LinkedList<Item> { … public void addLast(final Item newItem) { if (firstNode == null) firstNode = new Node<Item>(null, newItem); else lastNode().nextNode = new Node<Item>(null, newItem); } private Node<Item> lastNode() { Node<Item> node = firstNode; while (node.nextNode != null) node = node.nextNode; return node; } … } 2013/2014 Fundamentos de Programação 21
  • 22. public class LinkedList<Item> { … public void addLast(final Item newItem) { if (firstNode == null) firstNode = new Node<Item>(null, newItem); else { Node<Item> lastNode = firstNode; while (lastNode.nextNode != null) lastNode = lastNode.nextNode; lastNode.nextNode = new Node<Item>(null, newItem); } } … } 2013/2014 Fundamentos de Programação 22
  • 23. 2013/2014 Fundamentos de Programação 23 rooms : LinkedList<Item → Room> : Node<Item → Room> firstNode currentNode nextNode item item nextNode = null : Room : Node<Item → Room> : Room lastNode : «ref» Node<Item → Room> nextNode = null : Node<Item → Room> nextNode newItem : Room item
  • 24. public class LinkedList<Item> { … public Item next() { if (!hasNext()) throw new NoSuchElementException("…"); if (currentNode == null) currentNode = firstNode; else currentNode = currentNode.nextNode; return currentNode.item; } … } 2013/2014 Fundamentos de Programação 24
  • 25. 2013/2014 Fundamentos de Programação 25 rooms : LinkedList<Item → Room> : Node<Item → Room> firstNode currentNode nextNode item item : Room : Node<Item → Room> : Room nextNode = null : Node<Item → Room> nextNode item currentNode : Room
  • 26. 2013/2014 Fundamentos de Programação 26 LinkedList Item Node Ite m - item: Item nextNode firstNode currentNode 0..1 0..1 0..1 0..1 Esta solução não permite percorrer a lista mais do que uma vez em paralelo! 0..1 0..1 1 *
  • 27. public class Floor { private LinkedList<Room> rooms = new LinkedList<Room>(); public Floor(final int numberOfRooms) { for (int roomNumber = 1; roomNumber != numberOfRooms + 1; roomNumber++) rooms.add(new Room(roomNumber)); } public void show() { while (rooms.hasNext()) out.println(rooms.next()); } } 2013/2014 Fundamentos de Programação 27
  • 28. public class Floor { private LinkedList<Room> rooms = new LinkedList<Room>(); public Floor(final int numberOfRooms) { for (int roomNumber = 1; roomNumber != numberOfRooms + 1; roomNumber++) rooms.add(new Room(roomNumber)); } public void show() { LinkedList<Room>.Iterator i = rooms.iterator(); while(i.hasNext()) out.println(i.next()); } } 2013/2014 Fundamentos de Programação 28
  • 29. public class Floor { private LinkedList<Room> rooms = new LinkedList<Room>(); public Floor(final int numberOfRooms) { for (int roomNumber = 1; roomNumber != numberOfRooms + 1; roomNumber++) rooms.add(new Room(roomNumber)); } public void show() { Iterator<Room> i = rooms.iterator(); while(i.hasNext()) out.println(i.next()); } } 2013/2014 Fundamentos de Programação 29
  • 30. Iterator é uma classe interna (inner). As suas instâncias têm uma ligação implícita à instância da classe envolvente que as criou. A ver com pormenor mais tarde. 2013/2014 Fundamentos de Programação 30 LinkedList Item Node Item - item: Item nextNode firstNode currentNode 0..10..1 0..1 Esta solução permite percorrer a lista mais do que uma vez em paralelo! Iterator LinkedList.this * 0..1 0..1 * * 1
  • 31.  Permitem iterar ao longo de uma sequência de elementos, actuando sobre essa sequência  A uma sequência podem associar-se vários iteradores  Classes que forneçam iteradores podem ser usadas em ciclos for-each…  … mas têm de implementar a interface Iterable 2013/2014 Fundamentos de Programação 31
  • 32. public class Floor { private LinkedList<Room> rooms = new LinkedList<Room>(); public Floor(final int numberOfRooms) { for (int roomNumber = 1; roomNumber != numberOfRooms + 1; roomNumber++) rooms.add(new Room(roomNumber)); } public void show() { for (Room room : rooms) out.println(room); } } 2013/2014 Fundamentos de Programação 32 Mais tarde voltaremos a este assunto.
  • 33.  Interfaces  Definem comportamentos (adjectivam)  Classes implementam-nas  Listas  Listas ligadas  Operações sobre listas ligadas  Introdução aos iteradores 2013/2014 Fundamentos de Programação Página 33
  • 34.  Interfaces  Listas e listas ligadas  Iteradores 2013/2014 Fundamentos de Programação Página 34

Notas del editor

  1. Apesar de terem pontos em comum, as interfaces diferem conceptualmente e na prática das classes abstractas.
  2. Note-se que aqui introduzimos dois conceitos em simultâneo: o de interface e o de definição de um tipo genérico. No entanto, as interfaces podem não ser genéricas! Note-se que quando nos limitamos a declarar uma operação (e.g., uma operação numa interface ou uma operação abstracta numa classe), não há qualquer utilidade em qualificar os seus parâmetros como final. De facto, nos parâmetros, o qualificador final é uma protecção adicional para o programador enquanto implementador da operação! Comparable é semelhante a java.lang.Comparable. Queue é semelhante a java.util.Queue.
  3. Note-se que a classe Rational declara implementar a interface Comparable parametrizada consigo mesma! No final podia usar-se simplesmente return leftNumerator - rightNumerator. Esta implementação não tenta evitar a ultrapassagem dos limites dos int!
  4. A relação entre uma interface e uma sua implementação é de realização. Uma implementação realiza uma interface.
  5. As interfaces, tal como as classes, são tipos. O polimorfismo não se aplica apenas entre classes, mas entre tipos em geral. Uma instância de um subtipo pode (deve poder!) ser tratada como se fosse do respectivo tipo.
  6. A segunda possibilidade não é isenta de problemas. Temos os patos e temos também aquilo que “walks like a duck and swims like a duck and quacks like a duck” mas não é um pato. Limita-se a comportar-se como tal. Damos o nome Duck à classe ou à interface e isso gera confusão ou mesmo conflito. Talvez a segunda devesse ser Duckish ou DuckLike…
  7. O que é constante e o que varia? Esta é a base da identificação de unidades de modularização parametrizáveis. A genericidade em Java é uma forma de polimorfismo paramétrico!
  8. Solução péssima do Java original. Os elementos tinham de ser tratados como objectos (que têm disponível um comportamento limitado). Alternativamente, podia usar-se coerções de tipo, mas que tinham a particularidade infeliz de poder falhar em tempo de execução!
  9. Agora sim!
  10. A implementação (e discussão!) dos médodos add, hasNext e next fica como exercício para o leitor.
  11. A ideia é que os itens são guardados em nós possuídos pela lista e que se encadeiam uns nos outros, ficando a lista com uma ligação para o primeiro.
  12. Em rigor, apenas a notação inferior esquerda existe no UML. As restantes notações existem no UML mas apenas no que diz respeito a pacotes. Abusa-se aqui um pouco, por isso, da notação oficial.
  13. A implementação (e discussão!) do médodo hasNext fica como exercício para o leitor. Os restantes são desenvolvidos mais à frente. Na realidade faz mais sentido inserir os novos quartos no final da lista. 
  14. Na realidade deveria escrever-se LinkedList<E → Room>::Node<E → Room>, mas é muito longo para um diapositivo!
  15. Código já visto. Ver em sequência com o próximo diapositivo.
  16. Note-se que a classe Iterator está definida dentro da classe LinkedList<Room>. É necessário um método adicional na lista: iterator().
  17. A classe LinkedList<Room>.Iterator implementará a interface java.util.Iterator<Room>.
  18. Este diapositivo é animado. Conceptualmente os nós são parte da lista. Mas a navegação faz-se usando uma ligação para o primeiro nó e de cada nó para o seguinte.
  19. A classe LinkedList<Room>.Iterator implementará a interface java.util.Iterator<Room>.