trainings/CreatingReliableSoftwareCpp/Presentation/exercises/observer
Sasza Stanczew 17638fcc48 Reliable - nie zrobiłem zadania Observer bo spierdolony git
git mi didał to jako sub-repository zamiast jako katalog, więc z
frustracji usunąłem cały katalog i nie zdążyłem zaimplemetować od zera
ponownie
2024-05-06 12:10:39 +02:00
..
src Reliable - nie zrobiłem zadania Observer bo spierdolony git 2024-05-06 12:10:39 +02:00
tests Reliable - pierwszy commit 2024-05-06 11:58:30 +02:00
CMakeLists.txt Reliable - pierwszy commit 2024-05-06 11:58:30 +02:00
main.cpp Reliable - pierwszy commit 2024-05-06 11:58:30 +02:00
README.md Reliable - pierwszy commit 2024-05-06 11:58:30 +02:00

Linux compilation

> mkdir build
> cd build
> cmake -DCMAKE_BUILD_TYPE=Debug ..
> make

Exercise 1

  • Go into directory Core and implement Time and TimeObserver class
  • Class Time should have 4 methods:
    • void attach(TimeObserver* observer); -> attach observer
    • void detach(TimeObserver* observer); -> detach observer
    • Time& operator++(); -> increment day and notify observers
    • size_t day() const; -> return current day
  • Go into directory Ship and make Ship class inherit from TimeObserver
  • Each time the observer will be triggered, you should give the crew food and drink
  • Each crew member should consume 1 rum and 1 banana (I know they usually eat biscuits)
  • If you don't have enough cargo crew should rebel
  • Each day of a rebel you should subtract 5 members of the crew
  • If the number of crew drops below 0, throw an exception "Game Over"

Example (We have 40 members of crew): Day: 0

crew: 40
NAME AMOUNT
---------------- ----------------
Rum 300
Banana 200
Banana 150
---------------- ----------------

DAY: 1

crew: 40
NAME AMOUNT
---------------- ----------------
Rum 260
Banana 160
Banana 150
---------------- ----------------

DAY: 2

crew: 40
NAME AMOUNT
---------------- ----------------
Rum 220
Banana 120
Banana 150
---------------- ----------------

DAY: 3

crew: 40
NAME AMOUNT
---------------- ----------------
Rum 180
Banana 80
Banana 150
---------------- ----------------

DAY: 4

crew: 40
NAME AMOUNT
---------------- ----------------
Rum 140
Banana 40
Banana 150
---------------- ----------------

DAY: 5

crew: 40
NAME AMOUNT
---------------- ----------------
Rum 100
Banana 150
---------------- ----------------

DAY: 6

crew: 40
NAME AMOUNT
---------------- ----------------
Rum 60
Banana 110
---------------- ----------------

DAY: 7

crew: 40
NAME AMOUNT
---------------- ----------------
Rum 20
Banana 70
---------------- ----------------

********** Crew rebel **********

DAY: 8

crew: 35
NAME AMOUNT
---------------- ----------------
Banana 30
---------------- ----------------

********** Crew rebel **********

DAY: 9

crew: 30
NAME AMOUNT
---------------- ----------------
---------------- ----------------

********** Crew rebel **********

DAY: 10

crew: 25
NAME AMOUNT
---------------- ----------------
---------------- ----------------

Exercise 2

  • Go into directory Store and make Store class inherit from TimeObserver
  • Class Store should don't know anything about class Time
  • We should attach and detach observer outside of class. Think about how you can make it exception-safe (RAII)
  • Each time the observer will be triggered, you should change the number of available cargo in the store
  • Each time draw a number between -50 and 50 and add it to the amount of cargo
  • Print everyday cargo from the Shop and verify if the amount changes

Exercise 3

  • Rewrite Observer to use modern approach -> by value semantic.
  • Rewrite class Ship
  • Rewrite class Store
  • Question: Which class was easier to rewrite?