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º Semestre : 1º Ano Letivo : 2011/2012 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 C. 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 C. 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 C. 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
C C. 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 C. 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 C. 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 C. 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 C. 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 C. 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 C. 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 5.2 Detalhado 1.1. Objetos e classes 1.2. Encapsulamento, herança e polimorfismo 2.1. Conceitos de modelo, vista e controlador 2.2. Separar o armazenamento dos dados da sua apresentação 3.1. Streams de entrada e de saída 3.2. Streams de texto e streams binárias 3.3. Streams processadas 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.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.1. Conceito de pilha e sua utilização 4.3.2. Conceito de fila e respetiva utilização
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.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.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 5.1. Comparar diferentes algoritmos que resolvem o mesmo problema 5.2. Notação Big-Oh (simplificada) 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.1. Objetos e classes (C1) 1.2. Encapsulamento, herança e polimorfismo (C1) 2.1. Conceitos de modelo, vista e controlador (C2) 2.2. Separar o armazenamento dos dados da sua apresentação (C2) 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) 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.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.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.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.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) 5.1. Comparar diferentes algoritmos que resolvem o mesmo problema (C7, C8) 5.2. Notação Big-Oh (simplificada) (C7, C8) 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 1. Estudo 3.1 Sessões de orientação pessoal para conduzir o processo de aprendizagem e esclarecerem-se dúvidas 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, Addison- Wesley, 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