Принципы объектно ориентированного проектирования

Выделяйте статичные элементы сущности и динамические.

Если нам надо разложить какую либо сущность и представить ее в ОО виде, то в первую очередь надо понять, что будет меняться часто, а что меняться не будет, ну или очень редко. Статичные сущности при этом можно оставить в суперклассе, а динамические вынести в в виде интерфейсов и реализовать отдельными классами.

Программируйте на уровне интерфейсов, а не на уровне конечно реализации.

Это значит, что на самом верхнем уровне надо использовать всю силу абстракции и оперировать обобщенными сущностями не думая о конечной реализации, это позволит делать более гибкие системы, нежели если вы будете думать на уровне готовых объектов.

Отдавайте предпочтение агрегированию/композиции нежели наследованию.

Наследоваться должны только те свойства и методы, которые железно будут доступны у каждого подкласса, иначе вы сделаете жесткую систему, которая не будет гибкой. Включайте в свой класс интерфейсы, которые будут реализовывать другие классы.

Например банальный класс "автомобиль" может включать в себя подклассы через интерфейсы наподобие "колеса", "движение" и так далее.


comments powered by Disqus