На практике я мало использовал абстрактные классы, хотя я понимаю, что они из себя представляют: способ диктовать подклассам, какие методы должны быть реализованы.
Я только что провел проект Kohana через Doxygen и могу видеть всю иерархию классов. Я вижу, что на вершине цепочки у нас есть фабрика:
abstract class Kohana_Model {
public static function factory($name){
// Add the model prefix
$class = 'Model_'.$name;
return new $class;
}
}
Унаследованный непосредственно под ним, у нас есть пустой абстрактный класс:
abstract class Model extends Kohana_Model {}
... И ниже этого есть три унаследованных класса: Kohana_Model_Database
, Kohana_ORM
и Model_Foobar
.
Кто-нибудь, пожалуйста, объясните причины программирования для этого - какова цель наличия пустого абстрактного класса на таком высоком уровне в цепочке? (и вообще?)
Почему бы не наследовать Kohana_Model_Database, Kohana_ORM и Model_Foobar непосредственно от Kohana_Model, когда между Model и Kohana_Model не происходит (очевидно?) никакого другого ветвления или наследования?