Object Oriented Programming Laboratory

LPOO :: 2020/21 2nd Semester


You should have been invited to a workspace on Slack. If not, contact your teacher.


Week Theory Classes Practice Sessions
1 Course Presentation.
A gentle introduction to Git:
- Introduction.
- Basics and Git as a local VCS.
- Branches, remotes and workflows.
Java: Quick introduction.
LPOO | Git | Java
2 Java/Git
Exercises | Solutions
3 Java:
- Types, literals and variables.
- Loop and conditional blocks.
- A small introduction to classes and the Hello World example.
- Collections.
Dependency Management using Gradle.
Exercises | Solutions
4 Unit Testing:
- Test levels and test types.
- Unit Testing
- JUnit
- Mocks and Stubs using Mockito
- Test Coverage and Mutation Testing
Exercises | Solutions
5 SOLID Principles:
- [SRP] Single Responsibility
- [OCP] Open/Closed
- [LSP] Liskov Substitution
- [ISP] Interface Segregation
- [DIP] Dependency Inversion
UML - Class Diagrams:
- Classes
- Inheritance, Abstract Classes and Interfaces
- Associations and Aggregation
Unit Testing
Exercises | Solutions
6 Design Patterns:
- Factory-Method
- Command
- Composite
- Observer
- Strategy
Design Pattern Examples: GitHub
Exercises | Solutions
7 Refactoring:
- Code Smells
- Refactoring Techniques
Design Patterns
Exercises | Solutions
8 Design Patterns:
- State
- Adapter
- Decorator
- Singleton
UML - State Diagrams:
- States
- Transitions
- Composite States
Exercises | Solutions
9 Special Covid-19 Exams (no classes)
10 Special Covid-19 Exams (no classes)
11 Hero project the SOLID way:: A live coding experience
Repository for SOLID Hero: GitHub
12 Java Generics:
- Generic methods
- Generic classes
- Variance
- Wildcards
Architectural Patterns:
- MVC Pattern
- Repository for SOLID Hero: GitHub (now with generic viewers)
13 Java Threads:
- Processes
- Threads
- Synchronization
Java Input/Output:
- Streams
- File Streams
- Resources
- Repository for SOLID Hero: GitHub (now with level loader)
- Repository for SOLID Hero: GitHub (now with game loop)
- Repository for SOLID Hero: GitHub (now with tests)
14 UML - Sequence Diagrams:
- Elements
- Messages
- Fragments
- Gates
- Repository for SOLID Hero: GitHub (now with states)
15 Property Based Testing:
- What is PBT?
- Arbitraries
- Statistics
- Shrinking
- PBT in Java using jqwik
16 The evolution of JUnit, by Marc Philipp, Gradle Inc.

2017 marked a revolutionary year for the most popular Java testing framework: after two years of development, JUnit 5 was finally released – the first major release in over a decade. In this talk, I’ll provide the backstory of how JUnit 5 came to be and discuss some of our design decisions. Moreover, I’ll explain some of the challenges of working on such a high-profile open-source project and describe how our development process works. Last but not least, there will be time for questions.

Marc Philipp is a software engineer with over 10 years of experience in developing business and consumer applications, as well as training and coaching other developers. In his work at Gradle Inc. he’s working on improving the productivity of developers and pursuing his passion for software builds and open source. He is a long-time core committer and maintainer of JUnit and initiator of the JUnit Lambda crowdfunding campaign that started what has become JUnit 5.
Project Demo