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
Lisboa 2020 Portugal 2020 Small Logo EU small Logo PRR republica 150x50 Logo UE Financed Provedor do Estudante Livro de reclamaões Elogios