trainings/CreatingReliableSoftwareCpp/Presentation/exercises/templateMethod
2024-05-06 11:58:30 +02:00
..
src Reliable - pierwszy commit 2024-05-06 11:58:30 +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 Player and implement a base class Player, this class should have 3 public virtual members:
    • virtual int attack(Ship& playerShip) = 0;
    • virtual Ship& getShip() = 0;
    • virtual const Ship& getShip() const = 0;
  • Add to Player class a non-virtual function: Action::Status makeAction(const BattleField& battleField);.
  • Add to Player class 2 virtual protected function (a template method):
    • virtual Ship* chooseEnemyShip(const BattleField& battleField) const = 0;
    • virtual std::unique_ptr<Action> chooseAction(const BattleField& battleField) const = 0;
  • Implement some logic in method makeAction based on 2 template method:
    • To simplify, Player can only attack or defense
    • Use class Command from directory Battle

Exercise 2

  • Implement class RealUser which will inherit from class Player. Implement both template methods:
    • Don't make it too complex, just ask user about action and type of ammunition, then you can randomly choose a damage or if missed.
    • To increase defense, you can use method setArmor from Ship class.
  • Rewrite class Enemy to inherit from Player add also implementation for both template methods
  • Uncomment code in main, check if you can perform a real battle!

Exercise 3

  • Go into directory Battle and implement class Escape which will inherit from class Action.
    • Roll a die (1 to 20), if value is bigger than 12 a player successfully escaped.
  • Noticed that we shouldn't modify existing code, but we need to do this in two place, where?
  • How would you refactor the code?