SlideShare uma empresa Scribd logo
1 de 32
Aula 4 A infra-estrutura aplicacional de colecções do Java (Java Collections Framework)
Na aula anterior… Interfaces Listas e listas ligadas Iteradores 2009/2010 Programação Orientada por Objectos 2
Infra-estrutura aplicacional de colecções do Java Infra-estrutura aplicacional englobando interfaces, classes abstractas e concretas, e algoritmos que disponibilizam vários tipos de colecção em Java Colecções Agregados estruturados de elementos Cada tipo de colecção tem propriedades específicas Têm diferentes eficiências a realizar operações equivalentes 2009/2010 Programação Orientada por Objectos 3 Java Collections Framework (JCF)
JCF: tipos de colecção 2009/2010 Programação Orientada por Objectos 4 Legenda: E – tipo dos elementos K – tipo das chaves de um mapa V – tipo dos valores de um mapa ? – característica depende do tipo concreto Intrínseca – Ordem depende do valor dos elementos (ou da chave) Extrínseca – Ordem depende da forma de inserção e remoção dos elementos.
JCF: principais interfaces 2009/2010 Programação Orientada por Objectos 5 E E «interface» Iterable «interface» Collection E K,V E E «interface» Set «interface» List «interface» Queue «interface» Map “Um conjunto ordenado é um conjunto.” “Uma colecção é iterável.” E E K,V «interface» SortedSet «interface» Deque «interface» SortedMap
JFC: estruturas de dados subjacentes 2009/2010 Programação Orientada por Objectos 6
JCF: elementos, chaves e valores Têm de implementar booleanequals(Objectanother) inthashCode() Operações são fornecidas pela classe Object! Podem ser sobrepostas (com cuidado) Se one.equals(another)então one.hashCode() == another.hashCode() Outras restrições 2009/2010 Programação Orientada por Objectos 7 Para procurar. Para tabelas de endereçamento calculado.
JCF: classes concretas 2009/2010 Programação Orientada por Objectos 8
JCF: classes concretas 2009/2010 Programação Orientada por Objectos 9 E E «interface» RandomAccess «interface» List «interface» Queue E «interface» Deque E E E ArrayList Vector PriorityQueue E E E LinkedList ArrayDeque Stack
JCF: classes concretas 2009/2010 Programação Orientada por Objectos 10 E K,V «interface» Set «interface» Map E K,V E K,V «interface» SortedSet «interface» SortedMap HashMap HashSet E K,V K,V K,V TreeSet TreeMap LinkedHashMap LinkedHashSet
JCF: one.compareTo(another) 2009/2010 Programação Orientada por Objectos 11
JCF: Boas práticas Classe implementa compareTo? Então é de valor Logo, deve sobrepor a sua especialização de equals… …pois por omissão equals compara identidade e não igualdade! As operações compareTo e equals devem ser consistentes… …ou seja, one.compareTo(another) == 0 deve resultar no mesmo que one.equals(another) 2009/2010 Programação Orientada por Objectos 12
public class Rational implements Comparable<Rational> {     private final int numerator;     private final int denominator;     …     public intcompareTo(final Rational another){         return getNumerator() * another.getDenominator()              - another.getNumerator() * getDenominator();     }     … } Aplicação à classe Rational 2009/2010 Programação OrientadaporObjectos 13 «interface» Comparable<T->Rational> Rational
public class Rational implements Comparable<Rational> {     …     public boolean equals(final Object obj) {         if (this == obj)             return true;         if (obj == null || getClass() != obj.getClass())             return false;         final Rational other = (Rational) obj;         return denominator == other.denominator             && numerator == other.numerator;     }     … } Aplicação à classe Rational 2009/2010 Programação OrientadaporObjectos 14
public class Rational implements Comparable<Rational> {     private final int numerator;     private final int denominator;     …     public inthashCode() {         return (getNumerator() + getDenominator())              * (getNumerator() + getDenominator() + 1)              + getDenominator();     }     … } Aplicação à classe Rational 2009/2010 Programação OrientadaporObjectos 15
JCF: List e ArrayList final List<Course> courses =     new ArrayList<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.add(Ip);  // adiciona ao fim courses.add(Poo); int indexOfCourseToRemove = -1; for (int i = 0; i != courses.size(); i++)     if (courses.get(i) == Poo)         indexOfCourseToRemove = i; if (indexOfCourseToRemove != -1)     courses.remove(indexOfCourseToRemove); courses.remove(Ip); 2009/2010 Programação Orientada por Objectos 16 É comum usar um tipo mais genérico para aceder a uma colecção do que a classe real do objecto referenciado. Dessa forma pode-se alterar essa classe alterando apenas uma linha de código. Fará sentido indexar uma lista? E se se mudar a classe real para LinkedList? Remoção fora do ciclo? O.K. Remoção dentro do ciclo? Bronca!
JCF: Vector final Vector<Course> courses =     new Vector<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.add(Ip);  // adiciona ao fim courses.add(Poo); for (int i = 0; i != courses.size(); i++)     out.println(courses.get(i)); 2009/2010 Programação Orientada por Objectos 17
JCF: Stack final Stack<Course> courses =     new Stack<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.push(Ip);  //adiciona no topo courses.push(Poo); while (!courses.isEmpty()) {     out.println(courses.peek());     courses.pop(); } 2009/2010 Programação Orientada por Objectos 18
JCF: List, LinkedList e Iterator final List<Course> courses =      new LinkedList<Course>(); … final Course Esi = new Course("ES I"); … final Iterator<Course> iterator =     courses.iterator(); while (iterator.hasNext()) {     Course course = iterator.next();     if (course == Esi)         iterator.remove(); } 2009/2010 Programação Orientada por Objectos 19 Dois em um: avança e devolve. Muito discutível! Remoção segura: É removido o último elemento devolvido por next().
JCF: LinkedList e Queue final Queue<Course> courses = new LinkedList<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.add(Ip); // adicionaaoinício courses.add(Poo); // adicionaaoinício out.println(courses.element()); out.println(courses.element()); final Iterator<Course> iterator = courses.iterator(); while (iterator.hasNext()) {     Course course = iterator.next();     out.println(course); } 2009/2010 Programação Orientada por Objectos 20 Mais uma vez,  dois em um…
JCF: LinkedList e Deque final Deque<Course> courses = new LinkedList<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.addFirst(Ip); // adicionaaoinício courses.addLast(Poo); // adicionaaofim out.println(courses.getFirst()); out.println(courses.getLast()); final Iterator<Course> iterator = courses.iterator(); while (iterator.hasNext()) {     Course course = iterator.next();     out.println(course); } 2009/2010 Programação Orientada por Objectos 21 Mais uma vez,  dois em um…
Ciclo for-each final List<Course> courses =      new LinkedList<Course>(); for (Course course : courses)     out.println(course); 2009/2010 Programação Orientada por Objectos 22 Modo de iteração compacto, sem usar iterador, mas … de utilização limitada (não se pode alterar a colecção, não se pode facilmente percorrer subsequências da colecção, etc.).
JCF: Iteração e alteração concorrentes final List<Course> courses =      new LinkedList<Course>(); … final Course Poo = new Course(“POO"); … for (Course course : courses) { courses.remove(Poo);     out.println(course); } 2009/2010 Programação Orientada por Objectos 23 Alterações durante o ciclo produzem resultados inesperados. Pode mesmo ser lançada a excepção ConcurrentModificationException.
JCF: Map e HashMap final Map<String, Course> courses =      new HashMap<String, Course>(); … courses.put("IP", new Course("Introdução à …")); … if (courses.containsKey("IP"))     out.println(courses.get("IP")); for (String key : courses.keySet())     out.println(key); for (Map.Entry<String, Course> entry : courses.entrySet())     out.println(entry); for (Course course : courses.values())     out.println(course); 2009/2010 Programação Orientada por Objectos 24
JCF: Map e TreeMap final Map<String, Course> courses =      new TreeMap<String, Course>(); … courses.put("IP", new Course("Introdução à …")); … if (courses.containsKey("IP"))     out.println(courses.get("IP")); for (String key : courses.keySet())     out.println(key); for (Map.Entry<String, Course> entry : courses.entrySet())     out.println(entry); for (Course course : courses.values())     out.println(course); 2009/2010 Programação Orientada por Objectos 25
JCF: Queue e LinkedList Queue<String> courseNames =     new LinkedList<String>(); courseNames.add("POO"); courseNames.add("ES I"); courseNames.add("IP"); while(!courseNames.isEmpty()) {     out.println(courseNames.element()); courseNames.remove(); } 2009/2010 Programação Orientada por Objectos 26
JCF: Queue e PriorityQueue Queue<String> courseNames =     new PriorityQueue<String>(); courseNames.add("POO"); courseNames.add(“ES I"); courseNames.add("IP"); while(!courseNames.isEmpty()) {     out.println(courseNames.element());     courseNames.remove(); } 2009/2010 Programação Orientada por Objectos 27
JCF: Boas práticas na utilização de colecções Não usar colecções de Object Usar o tipo de colecção mais adequado Atentar na diferente eficiência das mesmas operações em diferentes tipos de colecção (consultar a documentação) Não alterar uma colecção durante uma iteração ao longo dos elementos (ou usar o iterador para o fazer) 2009/2010 Programação Orientada por Objectos 28
JCF: Boas práticas na utilização de colecções Alteração de elementos de colecções com ordem intrínseca pode ter efeitos inesperados Usar sempre classes (de valor) imutáveis quando for necessária ordem intrínseca Ter atenção à documentação: nem todas as colecções permitem a inserção de elementos nulos 2009/2010 Programação Orientada por Objectos 29
A reter… A JCF é uma infra-estrutura aplicacional englobando interfaces, classes abstractas e concretas, e algoritmos que disponibilizam vários tipos de colecção em Java As colecções são agregados estruturados de elementos, tendo cada tipo de colecção propriedades específicas, particularmente quanto à eficiência com que realiza cada operação Para usar bem estas classes é necessário conhecer bem a documentação! 2009/2010 Programação Orientada por Objectos 30
A ler para a próxima aula… Secção 18.6 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 31
Aula 4: Sumário A infra-estrutura aplicacional de colecções do Java (Java Collections Framework) 2009/2010 Programação Orientada por Objectos 32

Mais conteúdo relacionado

Semelhante a 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#
Felipe Pimentel
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocos
Ricardo Bolanho
 

Semelhante a Programação Orientada por Objectos - Aula 4 (20)

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
 
Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação Funcional
 
ESTRUTURA DE DADOS (JAVA) AULA 09
ESTRUTURA DE DADOS (JAVA) AULA 09ESTRUTURA DE DADOS (JAVA) AULA 09
ESTRUTURA DE DADOS (JAVA) AULA 09
 
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
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
 
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
 
PHP 5.3 - Funções
PHP 5.3 - FunçõesPHP 5.3 - Funções
PHP 5.3 - Funções
 
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocos
 
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
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
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...
 
Aula5
Aula5Aula5
Aula5
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - Flisol
 
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
 
TDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a Coroutines
TDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a CoroutinesTDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a Coroutines
TDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a Coroutines
 
Aula01
Aula01Aula01
Aula01
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptx
 
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 

Mais de Manuel Menezes de Sequeira

Mais de Manuel Menezes de Sequeira (20)

14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
 
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 ...
 
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
 
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 – ...
 
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
 
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
 
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...
 
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
 
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...
 
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...
 
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...
 
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 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...
 
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
 

Último

Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
sh5kpmr7w7
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
HELENO FAVACHO
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 

Último (20)

Educação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxEducação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptx
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
LENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretaçãoLENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretação
 
Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.ppt
 
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenos
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
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
 
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
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
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
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptx
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
 
Seminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptxSeminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptx
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
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
 

Programação Orientada por Objectos - Aula 4

  • 1. Aula 4 A infra-estrutura aplicacional de colecções do Java (Java Collections Framework)
  • 2. Na aula anterior… Interfaces Listas e listas ligadas Iteradores 2009/2010 Programação Orientada por Objectos 2
  • 3. Infra-estrutura aplicacional de colecções do Java Infra-estrutura aplicacional englobando interfaces, classes abstractas e concretas, e algoritmos que disponibilizam vários tipos de colecção em Java Colecções Agregados estruturados de elementos Cada tipo de colecção tem propriedades específicas Têm diferentes eficiências a realizar operações equivalentes 2009/2010 Programação Orientada por Objectos 3 Java Collections Framework (JCF)
  • 4. JCF: tipos de colecção 2009/2010 Programação Orientada por Objectos 4 Legenda: E – tipo dos elementos K – tipo das chaves de um mapa V – tipo dos valores de um mapa ? – característica depende do tipo concreto Intrínseca – Ordem depende do valor dos elementos (ou da chave) Extrínseca – Ordem depende da forma de inserção e remoção dos elementos.
  • 5. JCF: principais interfaces 2009/2010 Programação Orientada por Objectos 5 E E «interface» Iterable «interface» Collection E K,V E E «interface» Set «interface» List «interface» Queue «interface» Map “Um conjunto ordenado é um conjunto.” “Uma colecção é iterável.” E E K,V «interface» SortedSet «interface» Deque «interface» SortedMap
  • 6. JFC: estruturas de dados subjacentes 2009/2010 Programação Orientada por Objectos 6
  • 7. JCF: elementos, chaves e valores Têm de implementar booleanequals(Objectanother) inthashCode() Operações são fornecidas pela classe Object! Podem ser sobrepostas (com cuidado) Se one.equals(another)então one.hashCode() == another.hashCode() Outras restrições 2009/2010 Programação Orientada por Objectos 7 Para procurar. Para tabelas de endereçamento calculado.
  • 8. JCF: classes concretas 2009/2010 Programação Orientada por Objectos 8
  • 9. JCF: classes concretas 2009/2010 Programação Orientada por Objectos 9 E E «interface» RandomAccess «interface» List «interface» Queue E «interface» Deque E E E ArrayList Vector PriorityQueue E E E LinkedList ArrayDeque Stack
  • 10. JCF: classes concretas 2009/2010 Programação Orientada por Objectos 10 E K,V «interface» Set «interface» Map E K,V E K,V «interface» SortedSet «interface» SortedMap HashMap HashSet E K,V K,V K,V TreeSet TreeMap LinkedHashMap LinkedHashSet
  • 11. JCF: one.compareTo(another) 2009/2010 Programação Orientada por Objectos 11
  • 12. JCF: Boas práticas Classe implementa compareTo? Então é de valor Logo, deve sobrepor a sua especialização de equals… …pois por omissão equals compara identidade e não igualdade! As operações compareTo e equals devem ser consistentes… …ou seja, one.compareTo(another) == 0 deve resultar no mesmo que one.equals(another) 2009/2010 Programação Orientada por Objectos 12
  • 13. public class Rational implements Comparable<Rational> { private final int numerator; private final int denominator; … public intcompareTo(final Rational another){ return getNumerator() * another.getDenominator() - another.getNumerator() * getDenominator(); } … } Aplicação à classe Rational 2009/2010 Programação OrientadaporObjectos 13 «interface» Comparable<T->Rational> Rational
  • 14. public class Rational implements Comparable<Rational> { … public boolean equals(final Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; final Rational other = (Rational) obj; return denominator == other.denominator && numerator == other.numerator; } … } Aplicação à classe Rational 2009/2010 Programação OrientadaporObjectos 14
  • 15. public class Rational implements Comparable<Rational> { private final int numerator; private final int denominator; … public inthashCode() { return (getNumerator() + getDenominator()) * (getNumerator() + getDenominator() + 1) + getDenominator(); } … } Aplicação à classe Rational 2009/2010 Programação OrientadaporObjectos 15
  • 16. JCF: List e ArrayList final List<Course> courses = new ArrayList<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.add(Ip); // adiciona ao fim courses.add(Poo); int indexOfCourseToRemove = -1; for (int i = 0; i != courses.size(); i++) if (courses.get(i) == Poo) indexOfCourseToRemove = i; if (indexOfCourseToRemove != -1) courses.remove(indexOfCourseToRemove); courses.remove(Ip); 2009/2010 Programação Orientada por Objectos 16 É comum usar um tipo mais genérico para aceder a uma colecção do que a classe real do objecto referenciado. Dessa forma pode-se alterar essa classe alterando apenas uma linha de código. Fará sentido indexar uma lista? E se se mudar a classe real para LinkedList? Remoção fora do ciclo? O.K. Remoção dentro do ciclo? Bronca!
  • 17. JCF: Vector final Vector<Course> courses = new Vector<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.add(Ip); // adiciona ao fim courses.add(Poo); for (int i = 0; i != courses.size(); i++) out.println(courses.get(i)); 2009/2010 Programação Orientada por Objectos 17
  • 18. JCF: Stack final Stack<Course> courses = new Stack<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.push(Ip); //adiciona no topo courses.push(Poo); while (!courses.isEmpty()) { out.println(courses.peek()); courses.pop(); } 2009/2010 Programação Orientada por Objectos 18
  • 19. JCF: List, LinkedList e Iterator final List<Course> courses = new LinkedList<Course>(); … final Course Esi = new Course("ES I"); … final Iterator<Course> iterator = courses.iterator(); while (iterator.hasNext()) { Course course = iterator.next(); if (course == Esi) iterator.remove(); } 2009/2010 Programação Orientada por Objectos 19 Dois em um: avança e devolve. Muito discutível! Remoção segura: É removido o último elemento devolvido por next().
  • 20. JCF: LinkedList e Queue final Queue<Course> courses = new LinkedList<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.add(Ip); // adicionaaoinício courses.add(Poo); // adicionaaoinício out.println(courses.element()); out.println(courses.element()); final Iterator<Course> iterator = courses.iterator(); while (iterator.hasNext()) { Course course = iterator.next(); out.println(course); } 2009/2010 Programação Orientada por Objectos 20 Mais uma vez, dois em um…
  • 21. JCF: LinkedList e Deque final Deque<Course> courses = new LinkedList<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.addFirst(Ip); // adicionaaoinício courses.addLast(Poo); // adicionaaofim out.println(courses.getFirst()); out.println(courses.getLast()); final Iterator<Course> iterator = courses.iterator(); while (iterator.hasNext()) { Course course = iterator.next(); out.println(course); } 2009/2010 Programação Orientada por Objectos 21 Mais uma vez, dois em um…
  • 22. Ciclo for-each final List<Course> courses = new LinkedList<Course>(); for (Course course : courses) out.println(course); 2009/2010 Programação Orientada por Objectos 22 Modo de iteração compacto, sem usar iterador, mas … de utilização limitada (não se pode alterar a colecção, não se pode facilmente percorrer subsequências da colecção, etc.).
  • 23. JCF: Iteração e alteração concorrentes final List<Course> courses = new LinkedList<Course>(); … final Course Poo = new Course(“POO"); … for (Course course : courses) { courses.remove(Poo); out.println(course); } 2009/2010 Programação Orientada por Objectos 23 Alterações durante o ciclo produzem resultados inesperados. Pode mesmo ser lançada a excepção ConcurrentModificationException.
  • 24. JCF: Map e HashMap final Map<String, Course> courses = new HashMap<String, Course>(); … courses.put("IP", new Course("Introdução à …")); … if (courses.containsKey("IP")) out.println(courses.get("IP")); for (String key : courses.keySet()) out.println(key); for (Map.Entry<String, Course> entry : courses.entrySet()) out.println(entry); for (Course course : courses.values()) out.println(course); 2009/2010 Programação Orientada por Objectos 24
  • 25. JCF: Map e TreeMap final Map<String, Course> courses = new TreeMap<String, Course>(); … courses.put("IP", new Course("Introdução à …")); … if (courses.containsKey("IP")) out.println(courses.get("IP")); for (String key : courses.keySet()) out.println(key); for (Map.Entry<String, Course> entry : courses.entrySet()) out.println(entry); for (Course course : courses.values()) out.println(course); 2009/2010 Programação Orientada por Objectos 25
  • 26. JCF: Queue e LinkedList Queue<String> courseNames = new LinkedList<String>(); courseNames.add("POO"); courseNames.add("ES I"); courseNames.add("IP"); while(!courseNames.isEmpty()) { out.println(courseNames.element()); courseNames.remove(); } 2009/2010 Programação Orientada por Objectos 26
  • 27. JCF: Queue e PriorityQueue Queue<String> courseNames = new PriorityQueue<String>(); courseNames.add("POO"); courseNames.add(“ES I"); courseNames.add("IP"); while(!courseNames.isEmpty()) { out.println(courseNames.element()); courseNames.remove(); } 2009/2010 Programação Orientada por Objectos 27
  • 28. JCF: Boas práticas na utilização de colecções Não usar colecções de Object Usar o tipo de colecção mais adequado Atentar na diferente eficiência das mesmas operações em diferentes tipos de colecção (consultar a documentação) Não alterar uma colecção durante uma iteração ao longo dos elementos (ou usar o iterador para o fazer) 2009/2010 Programação Orientada por Objectos 28
  • 29. JCF: Boas práticas na utilização de colecções Alteração de elementos de colecções com ordem intrínseca pode ter efeitos inesperados Usar sempre classes (de valor) imutáveis quando for necessária ordem intrínseca Ter atenção à documentação: nem todas as colecções permitem a inserção de elementos nulos 2009/2010 Programação Orientada por Objectos 29
  • 30. A reter… A JCF é uma infra-estrutura aplicacional englobando interfaces, classes abstractas e concretas, e algoritmos que disponibilizam vários tipos de colecção em Java As colecções são agregados estruturados de elementos, tendo cada tipo de colecção propriedades específicas, particularmente quanto à eficiência com que realiza cada operação Para usar bem estas classes é necessário conhecer bem a documentação! 2009/2010 Programação Orientada por Objectos 30
  • 31. A ler para a próxima aula… Secção 18.6 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 31
  • 32. Aula 4: Sumário A infra-estrutura aplicacional de colecções do Java (Java Collections Framework) 2009/2010 Programação Orientada por Objectos 32

Notas do Editor

  1. Consulte a documentação da interface Comparable, onde encontrará as propriedades que a operação compareTo tem de ter. É essencial fazê-lo antes de pensar em fornecer a sua própria implementação dessa operação.
  2. Consulte a documentação da interface Comparable, onde encontrará as propriedades que a operação compareTo tem de ter e de que forma deve ser consistente com equals. É essencial fazê-lo antes de pensar em fornecer a sua própria implementação dessas operações.Boas práticas:Definir ordenação intrínseca e noção de igualdade apenas para classes representando tipos de valor.Sempre que possível, torne os tipos de valor imutáveis.Consulte a documentação e as boas práticas do Java para garantir que as suas implementações das operações equals e compareTo são completas, correctas e consistentes. É mais difícil do que parece!