SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Aula 3 Interfaces Listas e listas ligadas Iteradores
Na aula anterior 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 2009/2010 Programação Orientada por Objectos 2
Interfaces 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 2009/2010 Programação Orientada por Objectos 3
Interfaces: definição public interface Comparable<T> { intcompareTo(T object); } public interface Queue<E> {     E element(); voidadd(E e); void remove(); } 2009/2010 Programação Orientada por Objectos 4 Interface genérica. T é um parâmetro. O correspondente argumento tem de ser um tipo. Nota: A interface Queue é um pouco diferente na biblioteca do Java! Operações públicas por omissão. Operações apenas declaradas. Não se define qualquer método. Não é necessário usar o qualificador abstract.
Interfaces: implementação public class Rational implements Comparable<Rational> {     private int numerator;     private int denominator;     …     public intcompareTo(final Rational another) { intleftNumerator =  getNumerator() * another.getDenominator(); intrightNumerator =  another.getNumerator() * getDenominator();         if (leftNumerator > rightNumerator)             return 1;         if (leftNumerator < rightNumerator)             return -1;         return 0;     }     … } 2009/2010 Programação Orientada por Objectos 5
public class Rational implements Comparable<Rational> {     private int numerator;     private int denominator;     …     public intcompareTo(final Rational another){         return getNumerator() * another.getDenominator()              - another.getNumerator() * getDenominator();     }     … } Interfaces: implementação 2009/2010 Programação OrientadaporObjectos 6 «interface» Comparable<T->Rational> Implementação Relação de realização Comparable<T -> Rational> Rational Rational
Interfaces: polimorfismo publicclassMyListimplementsQueue<Customer> {     … } publicclassMyListTester {     … publicstaticvoidmain(final String[] arguments) { Queue<Customer> customerQueue =  newMyList();         …      }     …  } 2009/2010 Programação Orientada por Objectos 7 Queue<E -> Customer> MyList
Interfaces: nomes Adjectivo denotando possibilidade de realizar determinadas operações (e.g., Comparable) Nome denotando conceito cujo comportamento será implementado (e.g., Queue) 2009/2010 Programação Orientada por Objectos 8 Caso semelhante ao das classes abstractas, mas não há qualquer herança de implementação (i.e., de atributos não constantes e métodos) e uma classe que implemente a interface pode simultaneamente implementar outras interfaces.
Genericidade 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? 2009/2010 Programação Orientada por Objectos 9
Lista genérica? public class ArrayList {     private Object[] elements;     … } 2009/2010 Programação Orientada por Objectos 10 - elements Object ArrayList * Room
Lista genérica: implementação public class ArrayList<E> {     private E[] elements;     … } 2009/2010 Programação Orientada por Objectos 11 Classe genérica. E é um parâmetro. O correspondente argumento tem de ser um tipo. E Notação UML para classes genéricas (também conhecidas por modelos ou templates). ArrayList - elements : E [*] «bind» <E -> Room> - elements ArrayList<E->Room> Room *
Lista genérica: utilização publicclassFloor { privateArrayList<Room> rooms = newArrayList<Room>(); publicFloor(final intnumberOfRooms) {         for (introomNumber = 1;  roomNumber != numberOfRooms + 1;  roomNumber++) rooms.addFirst(newRoom(roomNumber));     } publicvoid show() { while (rooms.hasNext())             out.println(rooms.next());     } } 2009/2010 Programação OrientadaporObjectos 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?
Lista ligada genérica: implementação public class LinkedList<E> {     Node<E> firstNode = null;     Node<E> currentNode = null;     …     private static class Node<E> {         private Node<E> nextNode;         private E element;         private Node(final Node<E> nextNode,                      final E element) { this.nextNode = nextNode; this.element = element;         }     }     … } 2009/2010 Programação Orientada por Objectos 13 Classe embutida (nested) privada. A classe LinkedList<E> tem acesso aos membros privados de Node<E>.
Lista ligada genérica: notação 2009/2010 Programação Orientada por Objectos 14 E E LinkedList LinkedList - firstNode: Node<E> - currentNode: Node<E> E Node - nextNode: Node - element: E E Notações para o embutimento. Node - nextNode: Node - element: E E E LinkedList LinkedList::Node - firstNode: Node<E> - currentNode: Node<E> - nextNode: Node - element: E
Lista ligada genérica: utilização publicclassFloor { privateLinkedList<Room> rooms = newLinkedList<Room>(); publicFloor(final intnumberOfRooms) {         for (introomNumber = 1;  roomNumber != numberOfRooms + 1;  roomNumber++) rooms.addFirst(newRoom(roomNumber));     } publicvoid show() { while (rooms.hasNext())             out.println(rooms.next());     } } 2009/2010 Programação OrientadaporObjectos 15 Inserir novo elemento no início ou no meio da lista não implica “empurrar” elementos existentes!
Lista ligada genérica: Exemplo 2009/2010 Programação Orientada por Objectos 16 rooms : LinkedList<E->Room> firstNode currentNode nextNode : Node<E -> Room> : Node<E -> Room> nextNode = null element element : Room : Room
Lista ligada genérica: inserir no início public class LinkedList<E> {     Node<E> firstNode = null;     …     private static class Node<E> {         …         private Node(final Node<E> nextNode,                      final E element) { this.nextNode = nextNode; this.element = element;         }     }     public void addFirst(final E newElement) { firstNode = new Node<E>(firstNode, newElement);     }     … } 2009/2010 Programação Orientada por Objectos 17
Lista ligada genérica: inserir no início 2009/2010 Programação Orientada por Objectos 18 rooms : LinkedList<E->Room> firstNode firstNode currentNode nextNode nextNode : Node<E -> Room> : Node<E -> Room> : Node<E -> Room> nextNode = null element element element : Room : Room newElement : Room
Lista ligada genérica: remover do início public class LinkedList<E> {     …     public void removeFirst() {         if (isEmpty())             throw new NoSuchElementException(…);         if (currentNode == firstNode) currentNode = currentNode.nextNode;         Node<E> nextFirstNode = firstNode.nextNode; firstNode.element = null; firstNode.nextNode = null; firstNode = nextFirstNode;    }     … } 2009/2010 Programação Orientada por Objectos 19
Lista ligada genérica: remover do início 2009/2010 Programação Orientada por Objectos 20 rooms : LinkedList<E->Room> firstNode currentNode firstNode nextNode : Node<E -> Room> : Node<E -> Room> element = null nextNode = null element element : Room : Room nextFirstNode : «ref» Node<E -> Room>
Lista ligada genérica: inserir no fim public class LinkedList<E> {     …     public void addLast(final E element) {         if (firstNode == null) firstNode = new Node<E>(null, element);         else lastNode().nextNode = new Node<E>(null, element);     }     private Node<E> lastNode() {         Node<E> node = firstNode;         while (node.nextNode != null)             node = node.nextNode;         return node;     }     … } 2009/2010 Programação Orientada por Objectos 21
Lista ligada genérica: inserir no fim public class LinkedList<E> {     …     public void addLast(final E element) {         if (firstNode == null) firstNode = new Node<E>(null, element);         else {             Node<E> lastNode = firstNode;             while (lastNode.nextNode != null) lastNode = lastNode.nextNode; lastNode.nextNode = new Node<E>(null, element);         }     }     … } 2009/2010 Programação Orientada por Objectos 22
Lista ligada genérica: inserir no fim 2009/2010 Programação Orientada por Objectos 23 rooms : LinkedList<E->Room> firstNode currentNode nextNode nextNode : Node<E -> Room> : Node<E -> Room> : Node<E -> Room> nextNode = null nextNode = null element element element : Room : Room newElement : Room lastNode : «ref» Node<E -> Room>
Lista ligada genérica: passar ao seguinte public class LinkedList<E> {     …     public E next() {         if (!hasNext())             throw new NoSuchElementException(“…");         if (currentNode == null) currentNode = firstNode;         else currentNode = currentNode.nextNode;         return currentNode.element;     }     … } 2009/2010 Programação Orientada por Objectos 24
Lista ligada genérica: passar ao seguinte 2009/2010 Programação Orientada por Objectos 25 rooms : LinkedList<E->Room> firstNode currentNode currentNode nextNode nextNode : Node<E -> Room> : Node<E -> Room> : Node<E -> Room> nextNode = null nextNode = null element element element : Room : Room newElement : Room
Lista ligada genérica: notação 2009/2010 Programação Orientada por Objectos 26 1 E LinkedList Esta solução não permite percorrer a lista mais do que uma vez em paralelo! 0..1 0..1 0..1 currentNode E Node 0..1 firstNode 0..1 - element: E * nextNode 0..1
Lista ligada genérica: iteradores publicclassFloor { privateLinkedList<Room> rooms = newLinkedList<Room>(); publicFloor(final intnumberOfRooms) {         for (introomNumber = 1;  roomNumber != numberOfRooms + 1;  roomNumber++) rooms.add(newRoom(roomNumber));     } publicvoid show() { while (rooms.hasNext())             out.println(rooms.next());     } } 2009/2010 Programação OrientadaporObjectos 27
Lista ligada genérica: iteradores publicclassFloor { privateLinkedList<Room> rooms = newLinkedList<Room>(); publicFloor(final intnumberOfRooms) {         for (introomNumber = 1;  roomNumber != numberOfRooms + 1;  roomNumber++) rooms.add(newRoom(roomNumber));     } publicvoid show() { LinkedList<Room>.Iterator i = rooms.iterator(); while(i.hasNext())             out.println(i.next());     } } 2009/2010 Programação OrientadaporObjectos 28
Lista ligada genérica: notação 2009/2010 Programação Orientada por Objectos 29 E LinkedList 0..1 LinkedList.this 1 E * Node 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.  0..1 0..1 * Iterator currentNode firstNode 0..1 Esta solução permite percorrer a lista mais do que uma vez em paralelo! - element: E * 0..1 nextNode
Iteradores 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 2009/2010 Programação Orientada por Objectos 30 Mais tarde voltaremos a este assunto.
A reter… Interfaces Definem comportamentos (adjectivam) Classes implementam-nas Listas Listas ligadas Operações sobre listas ligadas Introdução aos iteradores 2009/2010 Programação Orientada por Objectos Página 31
A ler para a próxima aula… Classes relativas a colecções na API do Java Capítulos 1 a 10 e 16 do livro: Y. Daniel Liang, Introduction to Java Programming, 7.ª edição, Prentice-Hall, 2008.ISBN: 978-0-13-605966-0 2009/2010 Programação Orientada por Objectos Página 32
Aula 3: Sumário Interfaces Listas e listas ligadas Iteradores 2009/2010 Programação Orientada por Objectos Página 33

Weitere ähnliche Inhalte

Was ist angesagt?

Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - DMembros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - DPaulo Henrique Lerbach Rodrigues
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...Manuel Menezes de Sequeira
 
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - E
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - ETipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - E
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - EPaulo Henrique Lerbach Rodrigues
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocosRicardo Bolanho
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...Manuel Menezes de Sequeira
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Karoline Tavares
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...Manuel Menezes de Sequeira
 
Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dadosJean Martina
 
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
 

Was ist angesagt? (20)

Aula 9
Aula 9Aula 9
Aula 9
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - DMembros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
 
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - E
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - ETipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - E
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - E
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
Java4
Java4Java4
Java4
 
Trabalho
TrabalhoTrabalho
Trabalho
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocos
 
Linguagem C 06 Funcoes
Linguagem C 06 FuncoesLinguagem C 06 Funcoes
Linguagem C 06 Funcoes
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
 
Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dados
 
Haskell
HaskellHaskell
Haskell
 
Standard ML / CPN ML
Standard ML / CPN MLStandard ML / CPN ML
Standard ML / CPN ML
 
Lambda Expressions
Lambda ExpressionsLambda Expressions
Lambda Expressions
 
Pilhas e filas
Pilhas e filasPilhas e filas
Pilhas e filas
 
Linguagem C - Strings
Linguagem C - StringsLinguagem C - Strings
Linguagem C - Strings
 
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#
 

Andere mochten auch

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
 
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
 
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
 
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
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
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
 
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
 
Eng.ª do Software - 3. Processos da engenharia de requisitos
Eng.ª do Software - 3. Processos da engenharia de requisitosEng.ª do Software - 3. Processos da engenharia de requisitos
Eng.ª do Software - 3. Processos da engenharia de requisitosManuel Menezes de Sequeira
 
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
 

Andere mochten auch (15)

Programação Orientada por Objectos - Aula 4
Programação Orientada por Objectos - Aula 4Programação Orientada por Objectos - Aula 4
Programação Orientada por Objectos - Aula 4
 
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 – ...
 
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
 
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
 
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
 
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
 
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...
 
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
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação
 
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...
 
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 2
Programação Orientada por Objectos - Aula 2Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2
 
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
 
Eng.ª do Software - 3. Processos da engenharia de requisitos
Eng.ª do Software - 3. Processos da engenharia de requisitosEng.ª do Software - 3. Processos da engenharia de requisitos
Eng.ª do Software - 3. Processos da engenharia de requisitos
 
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...
 

Ähnlich wie Programação Orientada por Objectos - Aula 3

Programação Orientada por Objectos - Aula 4
Programação Orientada por Objectos - Aula 4Programação Orientada por Objectos - Aula 4
Programação Orientada por Objectos - Aula 4guestd521d1f
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#Felipe Pimentel
 
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
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)Armando Daniel
 
Beljug2010
Beljug2010Beljug2010
Beljug2010UFPA
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Marco Mendes
 
C++ Standard Template Library
C++ Standard Template LibraryC++ Standard Template Library
C++ Standard Template LibraryDuda Dornelles
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxClaudia Ferlin
 
Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação FuncionalTales Andrade
 
Lista encadeada de inteiros
Lista encadeada de inteirosLista encadeada de inteiros
Lista encadeada de inteirosRobson Eduardo
 
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
 
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
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem Capolllorj
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2michellobo
 
Aula01
Aula01Aula01
Aula01vdlos
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
 

Ähnlich wie Programação Orientada por Objectos - Aula 3 (20)

Programação Orientada por Objectos - Aula 4
Programação Orientada por Objectos - Aula 4Programação Orientada por Objectos - Aula 4
Programação Orientada por Objectos - Aula 4
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
 
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
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)
 
Beljug2010
Beljug2010Beljug2010
Beljug2010
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10
 
C++ Standard Template Library
C++ Standard Template LibraryC++ Standard Template Library
C++ Standard Template Library
 
PHP 5.3 - Funções
PHP 5.3 - FunçõesPHP 5.3 - Funções
PHP 5.3 - Funções
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptx
 
Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação Funcional
 
Lista encadeada de inteiros
Lista encadeada de inteirosLista encadeada de inteiros
Lista encadeada de inteiros
 
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
 
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
 
Aula17
Aula17Aula17
Aula17
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Javascript
Javascript Javascript
Javascript
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2
 
Aula01
Aula01Aula01
Aula01
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 

Mehr von Manuel 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 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
 
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
 
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
 
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
 

Mehr von Manuel Menezes de Sequeira (11)

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

Kürzlich hochgeladen

Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Centro Jacques Delors
 
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024Sandra Pratas
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniCassio Meira Jr.
 
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdfO Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdfPastor Robson Colaço
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesMary Alvarenga
 
Aula 1, 2 Bacterias Características e Morfologia.pptx
Aula 1, 2  Bacterias Características e Morfologia.pptxAula 1, 2  Bacterias Características e Morfologia.pptx
Aula 1, 2 Bacterias Características e Morfologia.pptxpamelacastro71
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasCassio Meira Jr.
 
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaAula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaaulasgege
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfManuais Formação
 
Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.keislayyovera123
 
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Mary Alvarenga
 
Cultura e Sociedade - Texto de Apoio.pdf
Cultura e Sociedade - Texto de Apoio.pdfCultura e Sociedade - Texto de Apoio.pdf
Cultura e Sociedade - Texto de Apoio.pdfaulasgege
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Educação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SPEducação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SPanandatss1
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditaduraAdryan Luiz
 
Sociologia Contemporânea - Uma Abordagem dos principais autores
Sociologia Contemporânea - Uma Abordagem dos principais autoresSociologia Contemporânea - Uma Abordagem dos principais autores
Sociologia Contemporânea - Uma Abordagem dos principais autoresaulasgege
 
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chaveAula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chaveaulasgege
 

Kürzlich hochgeladen (20)

Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029
 
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
 
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdfO Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das Mães
 
Aula 1, 2 Bacterias Características e Morfologia.pptx
Aula 1, 2  Bacterias Características e Morfologia.pptxAula 1, 2  Bacterias Características e Morfologia.pptx
Aula 1, 2 Bacterias Características e Morfologia.pptx
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades Motoras
 
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaAula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdf
 
Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.
 
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
 
Cultura e Sociedade - Texto de Apoio.pdf
Cultura e Sociedade - Texto de Apoio.pdfCultura e Sociedade - Texto de Apoio.pdf
Cultura e Sociedade - Texto de Apoio.pdf
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
 
Educação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SPEducação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SP
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditadura
 
Em tempo de Quaresma .
Em tempo de Quaresma                            .Em tempo de Quaresma                            .
Em tempo de Quaresma .
 
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
 
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
 
Sociologia Contemporânea - Uma Abordagem dos principais autores
Sociologia Contemporânea - Uma Abordagem dos principais autoresSociologia Contemporânea - Uma Abordagem dos principais autores
Sociologia Contemporânea - Uma Abordagem dos principais autores
 
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chaveAula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chave
 

Programação Orientada por Objectos - Aula 3

  • 1. Aula 3 Interfaces Listas e listas ligadas Iteradores
  • 2. Na aula anterior 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 2009/2010 Programação Orientada por Objectos 2
  • 3. Interfaces 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 2009/2010 Programação Orientada por Objectos 3
  • 4. Interfaces: definição public interface Comparable<T> { intcompareTo(T object); } public interface Queue<E> { E element(); voidadd(E e); void remove(); } 2009/2010 Programação Orientada por Objectos 4 Interface genérica. T é um parâmetro. O correspondente argumento tem de ser um tipo. Nota: A interface Queue é um pouco diferente na biblioteca do Java! Operações públicas por omissão. Operações apenas declaradas. Não se define qualquer método. Não é necessário usar o qualificador abstract.
  • 5. Interfaces: implementação public class Rational implements Comparable<Rational> { private int numerator; private int denominator; … public intcompareTo(final Rational another) { intleftNumerator = getNumerator() * another.getDenominator(); intrightNumerator = another.getNumerator() * getDenominator(); if (leftNumerator > rightNumerator) return 1; if (leftNumerator < rightNumerator) return -1; return 0; } … } 2009/2010 Programação Orientada por Objectos 5
  • 6. public class Rational implements Comparable<Rational> { private int numerator; private int denominator; … public intcompareTo(final Rational another){ return getNumerator() * another.getDenominator() - another.getNumerator() * getDenominator(); } … } Interfaces: implementação 2009/2010 Programação OrientadaporObjectos 6 «interface» Comparable<T->Rational> Implementação Relação de realização Comparable<T -> Rational> Rational Rational
  • 7. Interfaces: polimorfismo publicclassMyListimplementsQueue<Customer> { … } publicclassMyListTester { … publicstaticvoidmain(final String[] arguments) { Queue<Customer> customerQueue = newMyList(); … } … } 2009/2010 Programação Orientada por Objectos 7 Queue<E -> Customer> MyList
  • 8. Interfaces: nomes Adjectivo denotando possibilidade de realizar determinadas operações (e.g., Comparable) Nome denotando conceito cujo comportamento será implementado (e.g., Queue) 2009/2010 Programação Orientada por Objectos 8 Caso semelhante ao das classes abstractas, mas não há qualquer herança de implementação (i.e., de atributos não constantes e métodos) e uma classe que implemente a interface pode simultaneamente implementar outras interfaces.
  • 9. Genericidade 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? 2009/2010 Programação Orientada por Objectos 9
  • 10. Lista genérica? public class ArrayList { private Object[] elements; … } 2009/2010 Programação Orientada por Objectos 10 - elements Object ArrayList * Room
  • 11. Lista genérica: implementação public class ArrayList<E> { private E[] elements; … } 2009/2010 Programação Orientada por Objectos 11 Classe genérica. E é um parâmetro. O correspondente argumento tem de ser um tipo. E Notação UML para classes genéricas (também conhecidas por modelos ou templates). ArrayList - elements : E [*] «bind» <E -> Room> - elements ArrayList<E->Room> Room *
  • 12. Lista genérica: utilização publicclassFloor { privateArrayList<Room> rooms = newArrayList<Room>(); publicFloor(final intnumberOfRooms) { for (introomNumber = 1; roomNumber != numberOfRooms + 1; roomNumber++) rooms.addFirst(newRoom(roomNumber)); } publicvoid show() { while (rooms.hasNext()) out.println(rooms.next()); } } 2009/2010 Programação OrientadaporObjectos 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. Lista ligada genérica: implementação public class LinkedList<E> { Node<E> firstNode = null; Node<E> currentNode = null; … private static class Node<E> { private Node<E> nextNode; private E element; private Node(final Node<E> nextNode, final E element) { this.nextNode = nextNode; this.element = element; } } … } 2009/2010 Programação Orientada por Objectos 13 Classe embutida (nested) privada. A classe LinkedList<E> tem acesso aos membros privados de Node<E>.
  • 14. Lista ligada genérica: notação 2009/2010 Programação Orientada por Objectos 14 E E LinkedList LinkedList - firstNode: Node<E> - currentNode: Node<E> E Node - nextNode: Node - element: E E Notações para o embutimento. Node - nextNode: Node - element: E E E LinkedList LinkedList::Node - firstNode: Node<E> - currentNode: Node<E> - nextNode: Node - element: E
  • 15. Lista ligada genérica: utilização publicclassFloor { privateLinkedList<Room> rooms = newLinkedList<Room>(); publicFloor(final intnumberOfRooms) { for (introomNumber = 1; roomNumber != numberOfRooms + 1; roomNumber++) rooms.addFirst(newRoom(roomNumber)); } publicvoid show() { while (rooms.hasNext()) out.println(rooms.next()); } } 2009/2010 Programação OrientadaporObjectos 15 Inserir novo elemento no início ou no meio da lista não implica “empurrar” elementos existentes!
  • 16. Lista ligada genérica: Exemplo 2009/2010 Programação Orientada por Objectos 16 rooms : LinkedList<E->Room> firstNode currentNode nextNode : Node<E -> Room> : Node<E -> Room> nextNode = null element element : Room : Room
  • 17. Lista ligada genérica: inserir no início public class LinkedList<E> { Node<E> firstNode = null; … private static class Node<E> { … private Node(final Node<E> nextNode, final E element) { this.nextNode = nextNode; this.element = element; } } public void addFirst(final E newElement) { firstNode = new Node<E>(firstNode, newElement); } … } 2009/2010 Programação Orientada por Objectos 17
  • 18. Lista ligada genérica: inserir no início 2009/2010 Programação Orientada por Objectos 18 rooms : LinkedList<E->Room> firstNode firstNode currentNode nextNode nextNode : Node<E -> Room> : Node<E -> Room> : Node<E -> Room> nextNode = null element element element : Room : Room newElement : Room
  • 19. Lista ligada genérica: remover do início public class LinkedList<E> { … public void removeFirst() { if (isEmpty()) throw new NoSuchElementException(…); if (currentNode == firstNode) currentNode = currentNode.nextNode; Node<E> nextFirstNode = firstNode.nextNode; firstNode.element = null; firstNode.nextNode = null; firstNode = nextFirstNode; } … } 2009/2010 Programação Orientada por Objectos 19
  • 20. Lista ligada genérica: remover do início 2009/2010 Programação Orientada por Objectos 20 rooms : LinkedList<E->Room> firstNode currentNode firstNode nextNode : Node<E -> Room> : Node<E -> Room> element = null nextNode = null element element : Room : Room nextFirstNode : «ref» Node<E -> Room>
  • 21. Lista ligada genérica: inserir no fim public class LinkedList<E> { … public void addLast(final E element) { if (firstNode == null) firstNode = new Node<E>(null, element); else lastNode().nextNode = new Node<E>(null, element); } private Node<E> lastNode() { Node<E> node = firstNode; while (node.nextNode != null) node = node.nextNode; return node; } … } 2009/2010 Programação Orientada por Objectos 21
  • 22. Lista ligada genérica: inserir no fim public class LinkedList<E> { … public void addLast(final E element) { if (firstNode == null) firstNode = new Node<E>(null, element); else { Node<E> lastNode = firstNode; while (lastNode.nextNode != null) lastNode = lastNode.nextNode; lastNode.nextNode = new Node<E>(null, element); } } … } 2009/2010 Programação Orientada por Objectos 22
  • 23. Lista ligada genérica: inserir no fim 2009/2010 Programação Orientada por Objectos 23 rooms : LinkedList<E->Room> firstNode currentNode nextNode nextNode : Node<E -> Room> : Node<E -> Room> : Node<E -> Room> nextNode = null nextNode = null element element element : Room : Room newElement : Room lastNode : «ref» Node<E -> Room>
  • 24. Lista ligada genérica: passar ao seguinte public class LinkedList<E> { … public E next() { if (!hasNext()) throw new NoSuchElementException(“…"); if (currentNode == null) currentNode = firstNode; else currentNode = currentNode.nextNode; return currentNode.element; } … } 2009/2010 Programação Orientada por Objectos 24
  • 25. Lista ligada genérica: passar ao seguinte 2009/2010 Programação Orientada por Objectos 25 rooms : LinkedList<E->Room> firstNode currentNode currentNode nextNode nextNode : Node<E -> Room> : Node<E -> Room> : Node<E -> Room> nextNode = null nextNode = null element element element : Room : Room newElement : Room
  • 26. Lista ligada genérica: notação 2009/2010 Programação Orientada por Objectos 26 1 E LinkedList Esta solução não permite percorrer a lista mais do que uma vez em paralelo! 0..1 0..1 0..1 currentNode E Node 0..1 firstNode 0..1 - element: E * nextNode 0..1
  • 27. Lista ligada genérica: iteradores publicclassFloor { privateLinkedList<Room> rooms = newLinkedList<Room>(); publicFloor(final intnumberOfRooms) { for (introomNumber = 1; roomNumber != numberOfRooms + 1; roomNumber++) rooms.add(newRoom(roomNumber)); } publicvoid show() { while (rooms.hasNext()) out.println(rooms.next()); } } 2009/2010 Programação OrientadaporObjectos 27
  • 28. Lista ligada genérica: iteradores publicclassFloor { privateLinkedList<Room> rooms = newLinkedList<Room>(); publicFloor(final intnumberOfRooms) { for (introomNumber = 1; roomNumber != numberOfRooms + 1; roomNumber++) rooms.add(newRoom(roomNumber)); } publicvoid show() { LinkedList<Room>.Iterator i = rooms.iterator(); while(i.hasNext()) out.println(i.next()); } } 2009/2010 Programação OrientadaporObjectos 28
  • 29. Lista ligada genérica: notação 2009/2010 Programação Orientada por Objectos 29 E LinkedList 0..1 LinkedList.this 1 E * Node 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. 0..1 0..1 * Iterator currentNode firstNode 0..1 Esta solução permite percorrer a lista mais do que uma vez em paralelo! - element: E * 0..1 nextNode
  • 30. Iteradores 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 2009/2010 Programação Orientada por Objectos 30 Mais tarde voltaremos a este assunto.
  • 31. A reter… Interfaces Definem comportamentos (adjectivam) Classes implementam-nas Listas Listas ligadas Operações sobre listas ligadas Introdução aos iteradores 2009/2010 Programação Orientada por Objectos Página 31
  • 32. A ler para a próxima aula… Classes relativas a colecções na API do Java Capítulos 1 a 10 e 16 do livro: Y. Daniel Liang, Introduction to Java Programming, 7.ª edição, Prentice-Hall, 2008.ISBN: 978-0-13-605966-0 2009/2010 Programação Orientada por Objectos Página 32
  • 33. Aula 3: Sumário Interfaces Listas e listas ligadas Iteradores 2009/2010 Programação Orientada por Objectos Página 33