-
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.
-
Class from course
Class from course
-
Degree | Semesters | ECTS
Degree | Semesters | ECTS
Bachelor | Semestral | 6
-
Year | Nature | Language
Year | Nature | Language
2 | Mandatory | Português
-
Code
Code
ULHT260-898
-
Prerequisites and corequisites
Prerequisites and corequisites
Not applicable
-
Professional Internship
Professional Internship
Não
-
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.
-
Office Hours
Office Hours
-
Mobility
Mobility
No