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, Miguel Carlos Pacheco Afonso Goulão


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 three components in the assessment: the theoretical component (NT); the practical component (NP); and the class participation component (NA). The final grade (NF) is calculated by the formula:

NF = 0.60 * NT + 0.35 * NP + * 0.05 NA

Theoretical component (NT):
This assessment component consists of 2 tests or an exam. The tests and the exam are face-to-face, without consultation, written and individual. In the assessment by tests, the grade for this component is calculated as follows:

NT = 0.3 * NT1 + 0.7 * NT2


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

If the exam is carried out, the NT grade is the grade obtained in the exam.

Practical component (NP):
This assessment component consists of 2 practical laboratory assignments to be carried out in groups of 2 students during the semester. The grade for the practical component is calculated as follows:

NP = 0.3 * NP1 + 0.7 * NP2

- NP1 is the grade of the practical work 1;
- NP2 is the grade of practical work 2.

Class participation component (NA):
This component is constituted by the evaluation of the students'' participation in the classes.

The student who has a grade greater than or equal to 9.5 in the practical component obtains frequency in the subject. The student without frequency is excluded from the appeal exam in that academic year.

Final grade:
The student often passes if both the NF and NT grades are greater than or equal to 9.5.

Practical work:
The delivery of practical work is mandatory.
Practical work is carried out in groups of two students, during part of some classes and outside of classes. If detected:
- that a work was not carried out only by the students who handed it in; or
- that a student turned in work that he did not do; or
- that the distribution of tasks among the group members was not balanced, this work is annulled and, in this case, none of the elements of the group(s) is approved in the discipline.

All students with frequency obtained in the current academic year can be invited to discuss the project.

Frequency of the previous academic year:
Students who have obtained attendance in the previous academic year keep it in this year. If they deliver any work this year, they lose the automatic frequency. In that case, you will have to do all the practical work.

In calculating the final grade, the grades of the practical work of the previous academic year are used. As for the participation grade, it is the maximum of the grades obtained in the previous and current academic year.

Classifications relating to tests, practical assignments and other partial assessment components are rounded to one decimal place.

The usage of electronic devices is not allowed on tests and exams. Both tests and exams are closed-book.

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: