За последние 24 часа нас посетили 62994 программиста и 1758 роботов. Сейчас ищут 886 программистов ...

Абстракция классов для блондинок

Тема в разделе "Вопросы от блондинок", создана пользователем artuska, 24 дек 2009.

  1. artuska

    artuska Активный пользователь

    С нами с:
    6 авг 2007
    Сообщения:
    61
    Симпатии:
    0
    Адрес:
    Riga, Latvia
    Сабж — те же вопросы, что и в теме «Интерфейсы объектов для блондинок», только понятие «интерфейс объекта» нужно заменить на «абстрактный класс».
    Вообщем, мне надо как-то очень просто, лаконично, четко и так, чтобы стало очевидно, объяснить, зачем нужны абстрактные классы и с чем их едят.
     
  2. artuska

    artuska Активный пользователь

    С нами с:
    6 авг 2007
    Сообщения:
    61
    Симпатии:
    0
    Адрес:
    Riga, Latvia
    Ура, с интерфейсами объектов разобрались, теперь абстракции. Ну, люди, объясните, пожалуйста, а-то я сам никак не разберусь.
     
  3. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Как одно из применений - запрещение создания "калеченного" объекта и в тоже время реализация методов общих для потомков.

    Например класс для работы с БД.
    Допустим есть такие методы:
    select - выполняет запрос select
    checkQuery - проверяет запрос на безопасность
    exec - собственно выполняет запрос

    Реализация select и checkQuery - одинакова для всех баз данных. Поэтому мы можем создать абстрактный класс DB, который будет реализовывать эти методы.
    PHP:
    1. <?php
    2. abstract class DB{
    3. //всякие свойства
    4. ...
    5.  
    6. abstract protected function exec($sql);
    7.  
    8. public function select($sql){
    9.     checkQuery($sql);
    10.     exec($sql);
    11. }
    12.  
    13. protected function checkQuery($sql){
    14.     //тут проверка запроса и выбрасывание исключения если запрос неверен
    15. }
    16.  
    17. //прочие методы
    18. ...
    19.  
    20. }
    Сам по себе объект класс DB бесполезен. Однако если сделать потомков MysqlDB, MssqlDB, OracleDB, то в них надо будет только реализовать метод exec, а методы select и checkQuery уже будут реализованы.
     
  4. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Ну и то, что я писал для интерфейсов справедливо для абстрактных классов.