@Godod

Абстрактные и простые модели?

Добрый день. Сразу прошу прощения, если кому-то вопрос покажется глупым и не уместным.
Как сейчас реализовано:
Screenshot_from_2014_02_13_15_07_21.png
Как я вижу реализацию:
Screenshot_from_2014_02_13_15_07_35.png

Проблема:
Есть общий класс (первый - главный - класс), который наследуют очень многие другие классы и естественно лишний код, который есть в данном классе, плохо влияет на быстродействие всего приложения. Есть другой класс (второй класс), который наследует и который является абстрактным для другого функционала. Но в этом абстрактном классе необходимы методы, общие для всего функционала, который его наследует, но как известно абстракный класс не должен содержать реализации. А мне нужен данный класс для вызова его и другой модели и через new этого сделать нельзя.

Вопрос:
Как поступить со второй моделью, чтобы можно было вызыват его объект, но и чтобы все остальные модели, которые его используют (extends), в обязательном порядке реализовывали необходимые методы?
Спасибо за ответы.
  • Вопрос задан
  • 2634 просмотра
Решения вопроса 1
nazarpc
@nazarpc
Open Source enthusiast
1) Абстрактные классы могут, а иногда даже должны содержать реализацию, наверное, вы спутали абстрактные классы с интерфейсами, в которых реализация не допускается.
2) На счет лишнего кода - чтобы не тащить всё по дереву наследования - разделите на несколько логичных трейтов (trait) и подключайте их по необходимости. Как раз они служат для общих методов и свойств, которые, тем не менее не всегда являются потомками одного класса. К примеру, я написал трейт Singleton, который наследовать было бы тупо, так как это только один аспект его функциональности, и наследование тут не подходит.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@gro
По поводу "как известно абстракный класс не должен содержать реализации" - может.
По поводу всего остального - грамотно составленный вопрос - половина ответа.
Ответ написан
@anitspam
Если сильно не мудрить и делать по заданным условиям, то можно сделать Модель 2 неабстрактную, объекты её типа можно будет создавать и Модель 2_1, в которую добавить абстрактные методы и от которой будут наследоваться Модель 3 и 4.

Если пробовать делать ещё проще, то можно написать, какую проблему из реального мира вы пробуете решить и вам возможно подскажут более правильное разделение на типы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы