Сабж — те же вопросы, что и в теме «Интерфейсы объектов для блондинок», только понятие «интерфейс объекта» нужно заменить на «абстрактный класс». Вообщем, мне надо как-то очень просто, лаконично, четко и так, чтобы стало очевидно, объяснить, зачем нужны абстрактные классы и с чем их едят.
Ура, с интерфейсами объектов разобрались, теперь абстракции. Ну, люди, объясните, пожалуйста, а-то я сам никак не разберусь.
Как одно из применений - запрещение создания "калеченного" объекта и в тоже время реализация методов общих для потомков. Например класс для работы с БД. Допустим есть такие методы: select - выполняет запрос select checkQuery - проверяет запрос на безопасность exec - собственно выполняет запрос Реализация select и checkQuery - одинакова для всех баз данных. Поэтому мы можем создать абстрактный класс DB, который будет реализовывать эти методы. PHP: <?php abstract class DB{ //всякие свойства ... abstract protected function exec($sql); public function select($sql){ checkQuery($sql); exec($sql); } protected function checkQuery($sql){ //тут проверка запроса и выбрасывание исключения если запрос неверен } //прочие методы ... } Сам по себе объект класс DB бесполезен. Однако если сделать потомков MysqlDB, MssqlDB, OracleDB, то в них надо будет только реализовать метод exec, а методы select и checkQuery уже будут реализованы.