Principle of Object-Oriented programming assignment. Implementation of observable design pattern, deterministic testing, 3 layers architecture