SlideShare a Scribd company logo
1 of 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

More Related Content

What's hot

What's hot (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
 

Viewers also liked

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
guisester
 
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
Robson Ferreira
 
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
Robson Ferreira
 

Viewers also liked (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 to 14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Programação

[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
Felipe Pimentel
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
Infogenius
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
Regis Magalhães
 

Similar to 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
 

More from Manuel Menezes de Sequeira

More from 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
 

Recently uploaded

O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
azulassessoria9
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
tatianehilda
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
AntonioVieira539017
 
Artigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.pptArtigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.ppt
RogrioGonalves41
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
azulassessoria9
 

Recently uploaded (20)

Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
 
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do século
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
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
 
3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
 
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
 
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
 
Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024
 
Artigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.pptArtigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.ppt
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
 
M0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxM0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptx
 
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdfAPRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
 
Aula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .pptAula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .ppt
 

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

Editor's Notes

  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>.