-
Apresentação
Apresentação
Esta UC é o culminar de um caminho iniciado em Fundamentos de Programação e aprofundado em Algoritmia e Estruturas de Dados, solidificando os conhecimentos de programação. Com um foco no desenvolvimento e manutenção de programas de elevada complexidade, o paradigma imperativo deixa de ser suficiente e são abordados os paradigmas orientado a objectos e funcional. São igualmente abordados conceitos adjacentes à fase de implementação, como o controlo de versões, os testes unitários e funcionais, a cobertura de código e outras métricas de qualidade. Esta é uma UC fundamental na formação de qualquer profissional da área de Informática, pois fornece um conjunto de conhecimentos e ferramentas que serão essenciais nos projectos empresariais em que estes alunos virão a estar inseridos.
-
Disciplina do curso
Disciplina do curso
-
Grau | Semestres | ECTS
Grau | Semestres | ECTS
Licenciado | Semestral | 6
-
Ano | Natureza | Lingua
Ano | Natureza | Lingua
2 | Obrigatório | Português
-
Código
Código
ULHT2531-898
-
Pré-requisitos e co-requisitos
Pré-requisitos e co-requisitos
Não aplicável
-
Estágio Profissional
Estágio Profissional
Não
-
Conteúdos Programáticos
Conteúdos Programáticos
- Paradigmas de programação
- Imperativo, funcional, orientado a objetos
- Conceitos de programação por objectos
- Entidades, Atributos, Acções
- Classe vs Objecto, Principio do encapsulamento
- Herança, polimorfismo, parametrização por herança, composição
- UML
- Diagramas de classes
- Java orientado a objectos
- Classes, objectos, variáveis
- Construtores, métodos
- Visibilidade, Exceptions
- Estruturas de dados: Arrays, Lists, Maps
- Herança, classes abstractas
- Input/Output
- Testes unitários
- JUnit
- Controlo de versões
- Git, Github
- Padrões de desenho
- Factory, Singleton, Observer/Observable, Composite
- Conceitos de programação funcional em Kotlin
- Funções puras, lambdas, funções de primeira ordem, iteração interna, operações com listas
- Boas práticas de programação multi-paradigma
- Paradigmas de programação
-
Objetivos
Objetivos
Esta UC tem como objetivo apresentar uma visão multi-paradigma da programação. São analisados e comparados os 3 paradigmas mais populares: imperativo, orientado a objectos e funcional. Os alunos revêm conceitos da programação imperativa e adquirem conceitos fundamentais da programação orientada a objetos (herança, encapsulamento, polimorfismo, etc.) e da programação funcional (lambdas, funções de 1a ordem, etc.) de forma a que consigam aplicá-los em projetos de desenvolvimento de software complexo usando linguagens de programação modernas multi-paradigma (Java, C#, Python, Kotlin, JavaScript).
Ao longo do semestre, os alunos são consciencializados para a necessidade de redução de custos de manutenção através de melhorias na qualidade do software produzido e aplicação de boas práticas tirando partido das vantagens específicas de cada paradigma. São igualmente expostos a ferramentas essenciais no desenvolvimento moderno de software, como controlo de versões e testes unitários.Todos estes conceitos são aplicados num projeto de elevada complexidade, multi-paradigma e multi-linguagem que atinge em média as 2500 LOC. O projeto tem que ser desenvolvido em Git e ter uma cobertura elevada de testes unitários. Mais do que as capacidades técnicas, os alunos trabalham a gestão de tempo, o rigor e a resiliência, a capacidade analítica e espírito crítico, a criatividade e o trabalho em equipa.
-
Metodologias de ensino e avaliação
Metodologias de ensino e avaliação
- As aulas teóricas são parcialmente leccionadas no modelo "flipped learning": são disponibilizados vídeos antes da aula teórica que os alunos devem visualizar; a aula teórica é maioritariamente ocupada com exercícios sobre essa matéria e respetiva correção, intercalada com alguma matéria adicional.
- Os trabalhos de casa são avaliados no modelo "peer assessment": os alunos avaliam anonimamente os trabalhos uns dos outros.
- A validação do código produzido nas fichas práticas e no projeto é feita através de uma ferramenta de validação automática do código, que permite aos alunos grande autonomia.
- Alguns exercícios de programação são realizados obrigatoriamente com o apoio de um LLM (ChatGPT, Bard, etc..). Estes exercícios terão enunciados adaptados, para evitar que seja simplesmente feito o copy/paste para o LLM - serão apresentados de forma visual, seja por diagramas seja por vídeos demonstrando o que se pretende. O objetivo é que os alunos treinem a construção de "prompts" eficazes.
-
Bibliografia principal
Bibliografia principal
-
Booch, G. et al (2007) Object-Oriented Analysis and Design with Applications, 3rd edition.
-
Fowler, M. (2003) UML Distilled, 3rd edition.
-
Downey, A. and Mayfield, C. (2019) Think Java: How to Think Like a Computer Scientist, 2nd edition.
-
-
Horário de Atendimento
Horário de Atendimento
-
Mobilidade
Mobilidade
Não