filmeu

Class Programming Languages II

  • Presentation

    Presentation

    This CU ends a journey that started with Programming Fundamentals, followed by Algorithms and Data Structures and is now focused on deepening the students' programming knowledge. Focused on the development and maintenance of highly complex programs, the imperative programming paradigm is no longer adequate and the object-oriented and functional paradigms are addressed. Some concepts adjacent to the implementation phase are equally addressed, such as version control, unit/functional tests, code coverage and other software quality metrics. This is a fundamental CU in the training of any IT professional, as it provides the knowledge and tools that will be required by the real-world projects that will, some day, be developed by the students.

  • Code

    Code

    ULHT260-898
  • Syllabus

    Syllabus

    • Programming paradigms
      • Imperative, object-oriented, functional
    • Object-oriented programming concepts
      • Entities, attributes, actions
      • Class vs Object, encapsulation principle
      • Inheritance, polymorphism, parameterisation by inheritance, composition
      • UML
        • Class diagrams
    • OOP applied to Java
      • Classes, objects, variables
      • Constructors, methods
      • Visibility, exceptions
      • Data structures: Arrays, Lists, Maps
      • Inheritance, abstract classes
      • Input/Output
    • Unit tests
      • JUnit
    • Version Control Systems
      • Git, Github
    • Design patterns
      • Factory, Singleton, Observer/Observable, Composite
    • Function programming concepts in Kotlin
      • Pure functions, lambdas, first-order functions, internal iteration
    • Best practices in multi-paradigm programming
  • Objectives

    Objectives

    This CU aims to present a multi-paradigm vision of programming. The 3 most popular paradigms (imperative, object-oriented and functional) are analysed and compared. Students review concepts of imperative programming and acquire concepts of object-oriented programming (inheritance, encapsulation, polymorphism, etc.) and functional programming (lambdas, first-order functions, etc.), applying them to complex software development projects, using modern multi-paradigm languages (Java, C#, Python, Kotlin, Javascript).
    Along the semester, students become aware of the need for maintenance cost reduction by developing software with better quality, taking advantage of the specific advantages of each paradigm.

  • Teaching methodologies and assessment

    Teaching methodologies and assessment

    • Theoretical classes are partially taught in the "flipped learning" model: videos are provided before the theoretical class that students must watch; the theoretical class is mostly occupied with exercises on that subject and their respective correction, interspersed with some additional material.
    • Some homework assignments are assessed in the "peer assessment" model: students anonymously evaluate each other's assignments.
    • The validation of the code produced in practical assignments and the project is done through an automatic code validation tool, which allows students great autonomy.
    • Some programming exercises are mandatory with the support of an LLM (ChatGPT, Bard, etc.). These exercises will have adapted instructions to prevent simple copy/paste to the LLM - they will be presented visually, either through diagrams or videos demonstrating the desired outcome. The goal is for students to practice constructing effective prompts.
  • References

    References

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

SINGLE REGISTRATION
Lisboa 2020 Portugal 2020 Small Logo EU small Logo PRR republica 150x50 Logo UE Financed Provedor do Estudante Livro de reclamaões Elogios