Проектирование в C ++ с использованием объектно-ориентированных принципов - PullRequest
0 голосов
/ 19 апреля 2020

Я готовлюсь к собеседованию и выполняю задания из книги «Взлом интервью». Я знаю, что есть ответы на эти задачи, но, к сожалению, в объектно-ориентированном дизайне они очень размыты, и я не знаю, правильно ли я их делаю. Пожалуйста, посмотрите на мое решение и скажите, что можно сделать лучше в этом конкретном ответе. И, пожалуйста, оцените мое решение. В частности, меня интересует, какие рекрутеры обращают внимание на такие вопросы.

Вопрос: Создайте музыкальный автомат с использованием объектно-ориентированных принципов.

Мой ответ:

#include <iostream>
#include <vector>
#include <queue>

class ListToPlay {
  std::queue<const Song&> queue_to_play_;
  const Speaker& speaker;
public:
  void Play();
  void AddSong(const Song& song);
  void RemoveSong(int index);
  void Clean();
  const std::queue<const Song&>& getQueueToPlay() const;
};

class Song {
  std::ostream data_;
  std::string name_;
public:
  const std::ostream getData() const;
  const std::string getName() const;
  void setData(std::ostream data);
  void setName(std::string name);
};

class CD {
  std::vector<Song> sangs_;
  std::string name_;
  std::string author_;
public:
  const std::vector<Song>& getSongs() const;
  const std::string& getName() const;
  const std::string& getAuthor() const;
  void addSong(Song song);
  void setName(std::string name);
  void setAuthor(std::string author);
};

class Grafics {
  const ListToPlay& list_to_play_;
  const std::vector<CD>& cd_vector_;
public:
  void setCDVector(const std::vector<CD>& cd_vector_);
  void setListToPlay(const ListToPlay& list_to_play);
  void ClickedPlay();
  void ClickedStop();
  void ClickedClean();
  void ClickedAddToPlayList(int index);
  void ClickedSelectCD();
};

class Speaker {
public:
  void PlaySound(Song song);
};

class Jukebox {
public:
  Grafics grafics_;
  Speaker speaker_;
  std::vector<CD> cd_vector_;
  std::vector<ListToPlay> list_to_play_;

  Jukebox(Grafics grafics, Speaker speaker, std::vector<CD> cd_vector)
    : grafics_(grafics), speaker_(speaker), cd_vector_(cd_vector) { ; }
};

int main()
{
  ;
}

Я могу описать, как я это придумал, но я не знаю, должен ли код защищаться. Если вам нужно дополнительное описание, напишите, и я напишу его.

Я перенес этот вопрос из https://codereview.stackexchange.com/, потому что они сказали: это проектирование, а не кодирование ".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...