Object Oriented Programming



  • Object-­Oriented Programming (OOP) concepts, namely classes, interfaces, polymorphism and inheritance.
  • Techniques and algorithms for processing data structures such as lists, strings, vectors, dictionaries, and sets.
  • Basic mechanisms of generic programming.
  • Class libraries and learn how to reuse them.
  • Basic Software Engineering concepts, from a developer perspetive, such as software quality, reuse, development and maintenance costs, or implementation efficiency.


  • Design and develop software applications using OOP.
  • Problem solving with OOP.
  • Using verification and validation techniques.
  • Increasingly autonomous software development skills, both in solo and as a team member.


  • Build up an interest for programming and solving problems.

General characterization





Responsible teacher

Carla Maria Gonçalves Ferreira


Weekly - 5

Total - 60

Teaching language



Available soon


1. Cay Horstmann, Java Concepts: for Java 7 and 8, Sixth Edition, Wiley, 2010.

2. F. Mário Martins, Java 8 - POO + Construções Funcionais, FCA, 2017.

3. Slides de Programação Orientada pelos Objectos (disponibilizados gradualmente na página moodle)

4. David J. Eck, Introduction to Programming Using Java, Seventh edition, 2016.

Teaching method

Lectures consist on a theoretical exposition, illustrated by application examples, and supported by slides and the usage of the software development environment of the lecturer.
In the lab sessions, students solve problems by concretely applying the concepts discussed in the previous lectures.
Students may clarify any doubts during classes or in the instructor’s contact hours.

Evaluation method

Evaluation Components:
There are two components to the assessment: a component related to the written tests (NT); and a component related to practical work and student participation in classes (NP). The final grade (NF) is calculated by the formula:

NF = NT + NP

All students that have obtained "frequência" in the current academic year can be called to a discussion of the project.

Practical Component:
This evaluation component consists of 2 practical laboratory projects top be done in groups of 2 students during the semester, and the participation of students in the class. The grade of the practical component is calculated as follows:

NP = 0.05 * NA + 0.10 * NP1 + 0.25 * NP2

on what:

- NA is the student''s grade in class;
- NP1 is the grade of practical project 1;
- NP2 is the grade of practical project 2;

This evaluation component consists of 2 individual written tests. The grade of this component is calculated as follows:

NT = 0.20 * NT1 + 0.40 * NT2

on what:

- NT1 is the grade of test 1;
- NT2 is the grade of test 2.

Final exam:
NE is the grade obtained in the final exam.

Practical projects:
The delivery of practical assignments is mandatory.
The practical projects are done in groups of two students, during classes and out of class. If detected:
- that a project was not done only by the students who delivered it; or
- that a student has delivered a project s/he has not implemented; or
- that the distribution of tasks among group members has not been balanced, this project is nullified and in this case, none of the members of the group (s) will fail the course.

Final grade:
Students will be approved if both NF and NT scores are greater than or equal to 9.5.

Grades for tests, projects and other partial assessment components are rounded to one decimal place.

Subject matter

1. Interface specification and documentation
2. Software design with classes
3. Interface polymorphism
4. Class inheritance
5. Inheritance polymorphism
6. Assertions
7. Unit and regression testing
8. Exception handling
9. Generic programming
10. Usage of collection generic types


Programs where the course is taught: