filmeu

Disciplina Linguagens de Programação II

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

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

INSCRIÇÃO AVULSO
Política de Cookies
Este website utiliza cookies para lhe proporcionar uma melhor experiência de navegação.
Aceitar
Lisboa 2020 Portugal 2020 Small Logo EU small Logo PRR republica 150x50 Logo UE Financed Provedor do Estudante Livro de reclamaões Elogios