/Cars

Primary LanguageC++

Object-oriented C++

Zadanie

  1. Zaproponuj właściwą abstrakcję (interfejs)
  2. Zastosuj dziedziczenie
  3. Napraw enkapsulację
  4. Użyj polimorfizmu, aby za pomocą wskaźnika na klasę bazową reprezentować dowolny typ samochodu

Pytania

  1. Jak trzymać silniki? Przez wartość, referencję, czy wskaźnik?
  2. Czy jest problem diamentowy?
  3. Czy są wycieki pamięci?
  4. Czy kod jest testowalny?

Praca domowa

  1. (5 XP) Utwórz wyjątek InvalidGear. Ma on być rzucany wtedy, gdy ktoś próbuje w niewłaściwy sposób zmienić bieg, np. z 5 na R. Ma on dziedziczyć po std::logic_error.
  2. (10 XP) Napisz testy jednostkowe do tego kodu. W szczególności przetestuj rzucanie powyższego wyjątku. Skonfiguruj odpowiednio CMake'a.
  3. (0 XP) Napraw interfejs, aby był łatwy w poprawnym użyciu i trudny do niewłaściwego użycia (np. accelerate(-999)). Bez punktów, bo ciężko zautomatyzować tak ogólne zadanie i każdy wymyśli tutaj coś innego.
  4. Przeczytaj artykuł SOLID czyli dobre praktyki w programowaniu obiektowym