Impressão em: 03-01-2013 16:09:57 Ficha da Unidade Curricular (UC) 1. Identificação Unidade Orgânica : Escola Superior de Tecnologia e Gestão Curso : [IS] Informática para a Saúde Tipo de Curso : UC/Módulo : Programação Avançada Carácter : obrigatória Área Científica : Sistemas de Informação ECTS : 6 Ano : 2º Ano Letivo : 2011/2012 Semestre : 1º Pré-Requisitos : Não tem. Horas de Trabalho Ensino Teórico (T) 30:00 Ensino Prático Laboratorial (PL) 45:00 Orientação Tutorial (OT) 5:00 Horas de Trab. Autónomo 82:00 Horas Totais 162:00 Idioma: Português e Inglês 2. Corpo Docente Docente Responsável : António Carlos Alves Urbano Docentes: António Carlos Alves Urbano Catarina Isabel Ferreira Viveiros Tavares Reis 3. Enquadramento Esta UC pertence ao 2º ano e complementa os conceitos apreendidos no 1º ano em Computadores e Programação e Complementos de Programação. O estudante adquire competência para utilização e implementação de algoritmos e estruturas de dados na resolução dos problemas de engenharia de software. 4. Objetivos/Competências Gerais C1. Conhecimentos sobre Programação Orientada aos Objetos C2. Capacidade de desenvolver aplicações utilizando arquiteturas de software (MVC) C3. Capacidade de armazenar (gravar e ler) eficientemente dados através de streams C4. Estudo de conceitos básicos e fundamentos sobre estruturas de dados e algoritmos C5. Capacidade de analisar estratégias de implementação destas estruturas de dados C6. Capacidade de aplicar as estruturas de dados e algoritmos mais apropriados no desenvolvimento de projetos C7. Capacidade de analisar a complexidade de um algoritmo C8. Capacidade de desenvolver algoritmos eficientes Específicas C1. Breve revisão sobre POO. No fim desta unidade o estudante deverá saber: C1.1. Identificar entidades (objetos), as suas características e comportamentos C1.2. Relacionar as várias entidades de um problema C1.3. Utilizar a POO no desenvolvimento de aplicações de software C2. Arquitetura de software MVC. No fim desta unidade o estudante deverá saber: C2.1. A importância de separar o armazenamento dos dados da sua apresentação C2.2. Separar adequadamente o armazenamento dos dados da sua apresentação C3. Noções básicas de Streams. No fim desta unidade o estudante deverá saber: C3.1. Identificar e usar streams de entrada C3.2. Identificar e usar streams de saída C3.3. Identificar e usar streams de texto C3.4. Identificar e usar streams binárias C3.5. Identificar e usar streams processadas C3.6. Identificar as streams adequadas para um dado problema C4. Estruturas de dados genéricas C4.1. Tabelas (revisões). No fim desta unidade o estudante deverá saber: C4.1.1. Conceito de tabela C4.1.2. Como são inicializadas as tabelas C4.1.3. Como se acedem aos valores das tabelas C4.1.4. Criar e utilizar tabelas multidimensionais C4.1.5. Quais as vantagens e desvantagens na utilização de tabelas C4.1.6. Tabelas em Java C4.2. Listas. No fim desta unidade o estudante deverá saber: C4.2.1. Conceito de lista ligada, duplamente ligada e lista circular C4.2.2. As operações disponibilizadas por uma lista C4.2.3. Implementar e utilizar listas ADT (em Java) C4.2.4. Quais as vantagens e desvantagens da sua utilização comparativamente às tabelas C4.2.5. Listas existentes no Java C4.3. Pilhas e filas. No fim desta unidade o estudante deverá saber: C4.3.1. Conceito de pilha e sua utilização C4.3.2. As operações disponibilizadas por uma pilha C4.3.3. Conceito de fila e respetiva utilização C4.3.4. As operações disponibilizadas por uma fila C4.3.5. Implementar e utilizar pilhas e filas ADT (em Java) C4.3.6. Quais as vantagens e desvantagens da utilização destas estruturas C4.3.7. Pilhas e Filas que existem no Java C4.4. Tabelas de hash. No fim desta unidade o estudante deverá saber: C4.4.1. Conceito de tabela de hash C4.4.2. As operações disponibilizadas por uma tabela de hash C4.4.3. Como funciona uma tabela de hash com separate chaining (tabelas de hash de listas) C4.4.4. Como funciona uma tabela de hash com open addressing (tabelas de hash de sondagem linear, quadrática e hashing duplo) C4.4.5. Implementação e utilização de tabelas de hash ADT (em Java) C4.4.6. Quais as vantagens e desvantagens da utilização destas estruturas C4.4.7. Tabelas de hash existentes no Java C4.5. Árvores binárias. No fim desta unidade o estudante deverá saber: C4.5.1. Conceito de árvore binária C4.5.2. As operações disponibilizadas por uma árvore binária C4.5.3. Funcionamento de uma árvore binária que mantém os seus elementos ordenados C4.5.4. Implementação e utilização de árvores binárias ADT (em Java) C4.5.5. Quais as vantagens e desvantagens da utilização destas estruturas C4.5.6. Quais as estruturas do Java que permitem ordenação C5. Análise de algoritmos. No fim desta unidade o estudante deverá saber: C5.1. Comparar diferentes algoritmos que resolvem o mesmo problema utilizando, por exemplo, a notação Big-Oh C5.2. Implementar algoritmos eficientes C6. Recursividade. No fim desta unidade o estudante deverá saber: C6.1. Conceito de recursividade C6.2. Quais as vantagens e desvantagens da sua utilização C6.3. Como implementar estruturas de dados utilizando recursividade Transversais CT1. CT2. CT3. CT4. Capacidade de estudar autonomamente Capacidade de trabalhar em equipa Capacidade de realizar projetos Capacidade de raciocínio lógico 5. Programa 5.1 Resumido 1. Breve revisão sobre POO 2. Arquitetura de software MVC 3. Noções básicas de Streams 4. Estruturas de dados genéricas 4.1. Tabelas (revisões) 4.2. Listas 4.3. Pilhas e filas 4.4. Tabelas de hash 4.5. Árvores binárias 5. Análise de algoritmos 6. Recursividade 5.2 Detalhado 1. Breve revisão sobre POO 1.1. Objetos e classes 1.2. Encapsulamento, herança e polimorfismo 2. Arquitetura de software MVC 2.1. Conceitos de modelo, vista e controlador 2.2. Separar o armazenamento dos dados da sua apresentação 3. Noções básicas de Streams 3.1. Streams de entrada e de saída 3.2. Streams de texto e streams binárias 3.3. Streams processadas 4. Estruturas de dados genéricas 4.1. Tabelas (revisões) 4.1.1. Conceito de tabela 4.1.2. Vantagens e desvantagens na utilização de tabelas 4.1.3. Tabelas em Java 4.2. Listas 4.2.1. Conceito de lista ligada, duplamente ligada e lista circular 4.2.2. Implementação e utilização de listas ADT (em Java) 4.2.3. Vantagens e desvantagens da sua utilização 4.2.4. Listas do Java 4.3. Pilhas e filas 4.3.1. Conceito de pilha e sua utilização 4.3.2. Conceito de fila e respetiva utilização 5. 6. 4.3.3. Implementação e utilização de pilhas e filas ADT (em Java) 4.3.4. Vantagens e desvantagens da utilização destas estruturas 4.3.5. Pilhas e Filas do Java 4.4. Tabelas de hash 4.4.1. Conceito de tabela de hash 4.4.2. Separate chaining: tabelas de hash de listas 4.4.3. Open addressing: Tabelas de hash de sondagem linear, quadrática e hashing duplo 4.4.4. Implementação e utilização de tabelas de hash ADT (em Java) 4.4.5. Vantagens e desvantagens da utilização destas estruturas 4.4.6. Tabelas de hash do Java 4.5. Árvores binárias 4.5.1. Conceito de árvore binária 4.5.2. Implementação e utilização de árvores binárias ADT (em Java) 4.5.3. Vantagens e desvantagens da utilização destas estruturas Análise de algoritmos 5.1. Comparar diferentes algoritmos que resolvem o mesmo problema 5.2. Notação Big-Oh (simplificada) Recursividade 6.1. Conceito de recursividade 6.2. Vantagens e desvantagens da sua utilização 5.3 Fundamentação da coerência dos conteúdos programáticos com os objetivos/competências da unidade curricular Os conteúdos programáticos lecionados contribuem para as competências gerais estabelecidas para a UC da seguinte forma: 1. 2. 3. 4. 5. 6. Breve revisão sobre POO 1.1. Objetos e classes – (C1) 1.2. Encapsulamento, herança e polimorfismo – (C1) Arquitetura de software MVC 2.1. Conceitos de modelo, vista e controlador – (C2) 2.2. Separar o armazenamento dos dados da sua apresentação – (C2) Noções básicas de Streams 3.1. Streams de entrada e de saída – (C3) 3.2. Streams de texto e streams binárias – (C3) 3.3. Streams processadas – (C3) Estruturas de dados genéricas 4.1. Tabelas (revisões) 4.1.1. Conceito de tabela – (C4, C5, C6) 4.1.2. Vantagens e desvantagens na utilização de tabelas – (C4, C5, C6) 4.1.3. Tabelas em Java – (C4, C5, C6) 4.2. Listas 4.2.1. Conceito de lista ligada, duplamente ligada e lista circular – (C4, C5, C6) 4.2.2. Implementação e utilização de listas ADT (em Java) – (C4, C5, C6) 4.2.3. Vantagens e desvantagens da sua utilização – (C4, C5, C6) 4.2.4. Listas do Java – (C4, C5, C6) 4.3. Pilhas e filas 4.3.1. Conceito de pilha e sua utilização – (C4, C5, C6) 4.3.2. Conceito de fila e respetiva utilização – (C4, C5, C6) 4.3.3. Implementação e utilização de pilhas e filas ADT (em Java) – (C4, C5, C6) 4.3.4. Vantagens e desvantagens da utilização destas estruturas – (C4, C5, C6) 4.3.5. Pilhas e Filas do Java – (C4, C5, C6) 4.4. Tabelas de hash 4.4.1. Conceito de tabela de hash – (C4, C5, C6) 4.4.2. Separate chaining: tabelas de hash de listas – (C4, C5, C6) 4.4.3. Open addressing: Tabelas de hash de sondagem linear, quadrática e hashing duplo – (C4, C5, C6) 4.4.4. Implementação e utilização de tabelas de hash ADT (em Java) – (C4, C5, C6) 4.4.5. Vantagens e desvantagens da utilização destas estruturas – (C4, C5, C6) 4.4.6. Tabelas de hash do Java – (C4, C5, C6) 4.5. Árvores binárias 4.5.1. Conceito de árvore binária – (C4, C5, C6) 4.5.2. Implementação e utilização de árvores binárias ADT (em Java) – (C4, C5, C6) 4.5.3. Vantagens e desvantagens da utilização destas estruturas – (C4, C5, C6) Análise de algoritmos 5.1. Comparar diferentes algoritmos que resolvem o mesmo problema – (C7, C8) 5.2. Notação Big-Oh (simplificada) – (C7, C8) Recursividade 6.1. Conceito de recursividade – (C5, C7, C8) 6.2. Vantagens e desvantagens da sua utilização – (C5, C7, C8) 6. Metodologia de Ensino / Aprendizagem 6.1 Presencial e Autónoma 1. Ensino teórico 1.1 Apresentação dos conceitos sobre algoritmos e estruturas de dados 1.2 Exemplificação e aplicação a problemas reais 2. Ensino prático 2.1 Resolução de problemas através da programação de algoritmos e aplicação de estruturas de dados 2.2 Análise crítica dos resultados 2.3 As últimas aulas serão de apoio ao projeto 3. Orientação tutorial 3.1 Sessões de orientação pessoal para conduzir o processo de aprendizagem e esclarecerem-se dúvidas 1. Estudo 1.1 Leitura da bibliografia indicada e resolução de exercícios de forma a aprofundar e complementar o conhecimento 1.2 Resolução dos exercícios recomendados pela unidade curricular 2. E-aprendizagem 2.1 Consulta de material relativo à unidade curricular 3. Reunião com o colega de grupo de forma a dividirem tarefas do projeto e estudarem em conjunto os diversos conceitos 6.2 Recursos Específicos 1. Ensino teórico – sala de aula normal 2. Ensino prático – laboratório informático com computadores contendo: 2.1 JDK (Java Development Kit) 2.2 NetBeans ou Eclipse 3. Orientação tutorial – gabinete ou sala de aula normal 6.3 Fundamentação da coerência das metodologias de ensino com objetivos/competências da unidade curricular As metodologias de ensino usadas contribuem para as competências gerais estabelecidas para a UC da seguinte forma: Presencial 1. Ensino teórico 1.1 Apresentação dos conceitos sobre algoritmos e estruturas de dados – (C1, C4, C5, C7) 1.2 Exemplificação e aplicação a problemas reais – (C6, C7) 2. Ensino prático 2.1 Resolução de problemas através da programação de algoritmos e aplicação de estruturas de dados – (C2, C3, C5, C8) 2.2 Análise crítica dos resultados – (C6, C7) 2.3 As últimas aulas serão de apoio ao projeto – (C6, C8) 3. Orientação tutorial 3.1 Sessões de orientação pessoal para conduzir o processo de aprendizagem e esclarecerem-se dúvidas – (C1, C2, C3, C4, C5, C6, C7, C8) Autónoma 1. Estudo 1.1. Leitura da bibliografia indicada e resolução de exercícios de forma a aprofundar e complementar o conhecimento – (C4, C5, C6, C7) 1.2. Resolução dos exercícios recomendados pela unidade curricular – (C6, C8) 2. E-aprendizagem 2.1. Consulta de material relativo à unidade curricular – (C4, C5, C6, C7) 3. Reunião com o colega de grupo de forma a dividirem tarefas do projeto e estudarem em conjunto os diversos conceitos – (C2, C3, C5, C6, C7, C8) 7. Avaliação 7.1 Descrição Os métodos de avaliação de conhecimentos e competências são os seguintes: · · Avaliação Contínua: - 2 provas escritas teóricas (10% + 20%) - 1 projeto (grupos de 2 estudantes) (70% - mínimo 8.5) 1ª etapa (30%) 2ª etapa (40%) Apresentação obrigatória de cada etapa do projeto Sem mínimos nas componentes Avaliação Final (Normal, Recurso e Especial): - 1 prova escrita teórica (30%) - 1 prova prática emm computador (70% - mínimo 8.5) Por opção do estudante, qualquer das componentes pode ser substituída pela nota da componente respetiva obtida numa época de avaliação anterior. 7.2 Número de Elementos de Avaliação 7.2.1 Contínua/Periódica: 3 7.2.2 Final: 2 8 Bibliografia 8.1 Principal • Data structures & problem solving using Java (4ª edição), Mark Allen Weiss, Addison Wesley, 2009, ISBN: 978-0321541406 • Data Structures and Algorithms in Java (3ª edição), Adam Drozdek, Cengage Learning Asia, 2008, ISBN: 978-9814239233 • Thinking in Java (4ª edição), Bruce Heckel, Prentice-Hall, 2006, ISBN: 978-0131872486 • Data structures & algorithm analysis in Java, Mark Allen Weiss, Addison Wesley, 1998, ISBN: 978-0201357547 • Data structures in Java, Thomas Standish, Addison Wesley, 1997, ISBN: 978-0201305647 • Algorithms in C (3ª edição), Robert Sedgewick, Addison Wesley, 1997, ISBN: 978-0201314526 8.2 Complementar • Introduction to algorithms (3ª edição), Cormen, Leiserson and Rivest, MIT Press, 2009, ISBN: 978-0262033848 • Programação Orientada aos Objectos em Java 2, F. Mário Martins, FCA, 2000, ISBN: 978-9727221967 • The Java Tutorials, http://download.oracle.com/javase/tutorial/ • Understanding Object-Oriented Programming with Java, Timothy Budd, Addison-Wesley, 1999, ISBN: 978-0201612738 • Introduction to Programming Using Java: An Object-Oriented Approach (2ª edição), David M. Arnow, Geral Weiss, AddisonWesley, 2003, ISBN: 978-0321200068 • The Java Tutorial (2ª edição), Mary Campione & Kathy Wallrath, Sunsoft Press, 1998, ISBN: 978-0201310078 • The Java Handbook, Patrick Naughton, Osborne/Mc Graw-Hill, 1996, ISBN: 978-0078821998 9. Aprovação pelo CTC Aprovado em Conselho Científico em : 29-06-2012