Я готовлюсь к собеседованию и выполняю задания из книги «Взлом интервью». Я знаю, что есть ответы на эти задачи, но, к сожалению, в объектно-ориентированном дизайне они очень размыты, и я не знаю, правильно ли я их делаю. Пожалуйста, посмотрите на мое решение и скажите, что можно сделать лучше в этом конкретном ответе. И, пожалуйста, оцените мое решение. В частности, меня интересует, какие рекрутеры обращают внимание на такие вопросы.
Вопрос: Создайте музыкальный автомат с использованием объектно-ориентированных принципов.
Мой ответ:
#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/, потому что они сказали: это проектирование, а не кодирование ".