Предположим, что я разрабатываю робот, который может захватывать различные инструменты и использовать их. Я бы создал класс роботов, у которого есть метод Pickup, чтобы выбрать инструменты, которые я хотел использовать. Для каждого инструмента я бы создал для него класс, скажем, класс Ножа, который имеет метод Cut. После вызова метода «Пикап» на роботе теперь я хочу сказать, чтобы мой робот разрезал. Итак, для концепции ООП я должен сказать роботу, а не ножу? И метод Cut на ноже, так как я могу это вызывать? Я должен реализовать какой-то UseToolCurrentlyHeld()
на Robot для распространения моих команд на Knife. Или я просто прямо называю нож (который мой робот удерживает) напрямую, используя это: myrobot.ToolCurrentlyInHand.Cut()
Скрытие функциональных возможностей из родительских классов
Мне кажется странным, что родительский метод должен иметь ВСЁ, чтобы заботиться о классах, которые они содержат. Теперь у меня есть повторяющиеся методы, например, у Ножа есть Cut()
, и теперь у Робота должно быть UseCutOnKnife()
только для вызова Cut()
на Нож, потому что хорошая практика ООП заключается в том, чтобы абстрагировать Нож и заставить его чувствовать, что приказывает Роботу, не беспокоясь о внутренней информации, такой как Нож.
Другой вопрос, если я сочиняю музыку, я бы создал класс Music
, который содержит много классов Measure
для хранения информации о заметке. В одном измерении внутри него может быть много классов Note
, класс Note будет иметь такую информацию, как, где эта мера проживает эта заметка, или как долго играет эта заметка. Теперь я хочу добавить одну ноту на меру 45, помещенную примерно на середину меры. Чтобы создать Мера, я должен позвонить CreateMeasure(45)
на Music, а затем позвонить CreateNote(0.5f)
по измерению? Способ создания находится на родительском элементе? И если теперь я хочу изменить эту ноту на 0,25 на мера вместо этого, тот, кто несет ответственность за изменение метода. Примечание: это класс Note
или класс Measure
? Или я должен реализовать метод изменения заметок в самом верхнем классе Music
?
Это обзор моих классов:
class Music
{
List<Measure> measures = new List<Measure>();
//methods...
}
class Measure
{
int measureNumber;
List<Note> notes = new List<Note>();
//methods...
}
class Note
{
float positionInMeasure; //from 0 to 1
}
Как теперь класс музыка находится на вершине все теперь должны выдавать все через музыку? И связать метод, чтобы наконец назвать самый сокровенный класс?
+1 за пахнущие что-то неладное, и артикулировать его – razlebe