ООП в php стиль программирования
Главная  
Про проект  
Книги  
Обмен ссылками  
Сервис  
Добавить статью  
Главная
Про проект
Книги
Обмен ссылками
Сервис
Добавить статью
Главная
dragon
Статьи в разделе:
Пример создания сайта
всего статей (13)

» Выбор движка сайта
» Парадигма ООП в php
» ООП и классы в php
» Использование Ajax
» Использование smarty
» Переменные php, метод Get и Post
» Favicon - иконки Вашего сайта
» Таблица символов в html коде
» Технология создания web-проекта
» Практический урок
» Создаем «файл-шаблон»
» Создаем «файл PHP»
» Полезные елементы сайта

Другие разделы:
    Подготовка к созданию сайта
    Установка програм
    Хостинг и домен
    Оптимизация сайта
    Раскрутка сайта
    Заработок Web-мастера
    Примеры PHP/Javascript

 
 
 
sape
 
Кнопка сайта:
Самостоятельное создание сайта, веб-дизайн, web-программирование, продвижение и оптимизация сайта




По всем вопросам пишите на webmaster@info-pages.com.ua. Вы можете свободно использовать/размещать/перепечатывать статьи сайта всего лишь указав ссылку на источник.
Игрушки в ванную. Игрушка для ванной водная горка. Игрушки для ванной tomy.
ООП в php стиль программирования
  

   Парадигма ООП в php

Размещено: 15 сентября 2009   

   Объектно-ориентированное программирование (далее по тексту - ООП) имеет очень древние корни, которые прорастали еще на языках программирования "низкого" уровня. На сегодня эта концепция считается самой оптимальной для построение сложных систем. Суть такой системы лежит в использовании отдельных объектов взаимосвязанных между собой. ООП очень напоминает конструктор - кубики различных форм и свойств складываются в сложную фигуру.
   В программировании ООП в php предоставляет отдельные части кода в виде объектов с уникальными свойствами. Взаимодействие этих объектов создает сложную систему, такую как: сайт, портал или интернет-магазин. PHP версии 5.x.x имеет все необходимое для создания полноценной ООП структуры. Основной единицей здесь выступает класс, а объектом - экземпляр класса.
   Классы и объекты появляются в результате планирования и разбиения проекта на отдельные абстракции. Абстракция - выделение некой предметной области, по ее характеристикам, свойствам и назначению. Грубо говоря, абстракция это те же объекты на которые мы разбиваем проект, например: меню, новости, блок каталога, прогноз погоды. В свою очередь абстракции могут состоять из других абстракций, например: меню горизонтальное и вертикальное, новости мира и Украины, прогноз погоды вмещает температуру, давление, пиктограммы погоды.

   В этой статье я постараюсь создать в PHP модель архитектуры ООП, согласно принципов ООП, как пример для планирования и построения сложных систем при веб разработке.
   Парадигма ООП это стандарт создания как небольшой части системы та и системы в целом, которая позволяет команде разработчиков планировать и решать параллельно отдельные задачи на основе общего подхода к созданию и проектированию, что позволяет легко связывать разработанные компоненты и создавать целостную прозрачную систему доступную для модифицирования и понимания всеми разработчиками.

   К основным группам принципов в ООП можно отнести:

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

   - инкапсуляция;
   Инкапсуляция позволяет вложить все алгоритмы и расчеты связанные с какой-то абстракцией в отдельный класс, которые могут быть доступными или закрытыми для использования за пределами класса или потомками класса.

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

   Давайте создадим иерархию классов и посмотрим, как они будут взаимодействовать между собой. Все глобальные абстракции разделим на модули.
   Припустим, что нам необходимо создать самостоятельный модуль, который будет отвечать за все, что связано с работниками фирмы. Основными функциями модуля будет выдача информации о работниках, в том числе:
   - об отработанном времени;
   - их уровне образования;
   - персональные данные;
   - автомобилях работников и т.д.
   Посмотрите на рисунок ниже.


   На изображении спроектирован модуль Worker. Модуль состоит из классов непосредственно связанных с обработкой информации по работникам (class Persons, class WorkTime, class Education, class Cars и class WorkerCars) и дополнительных классов (abstract class ModWorker - ответственный за связь модуля с окружающей средой (сцепление), другими классами или модулями; class Worker - конструкторский класс объединяющий все объекты классов модуля, в результате этот класс порождает супер объект obj_worker обладающий всеми свойствами модуля).
   Начинается модуль с абстрактного класса. Основное его назначение это связь с другими модулями или классами (сцепление). Сцепление осуществляется через создание объектов внутри абстрактного класса. Кроме этого абстрактный класс может принадлежать к специальному интерфейсу. Это будет гарантировать, что класс имеет необходимые связи и находится в актуальном состоянии.

   Теперь можно глянуть на содержимое модуля:

abstract class ModWorker implements Interface1 {
   protected $objMysql;
   //создаем объект класса ответственного за связь с базами данных Mysql
   function __construct (Mysql $mysql) {//создаем объект класса Mysql
      $this->objMysql = $mysql;
   }
}

Обратите внимание на то, как создают объекты внешних классов внутри класса.

class Persons extends ModWorker{
   private $table = "workers";
   protected $first_name;
   protected $work_telefon;
   protected $home_adress;
   // Подключаемся к mysql данные пользователя по его id
   function get_worker_data($id_worker) {
      $id = (int) $id;
      if (empty($id)) return 0;
      if ($res = $this->objMysql->query("SELECT * FROM ".$this->table." WHERE `id`='".$id."'")) {
         $row = mysql_fetch_assoc($res);
         $this->first_name = $row["first_name"];
         $this->work_telefon = $row["work_telefon"];
         $this->home_adress = $row["home_adress"];
      }
   }
}

class WorkTime extends Persons{
   protected $work_time_week;
   protected $work_time_mounce;
   // Получаем данные по отработанному времени работника
   function calculate_time($id_worker) {
      //...
   }
}

class Education extends Persons{
   protected $MBA;
   protected $school_graduate;
   // Получаем данные по образованию работника
   function get_worker_education($id_worker) {
      //...
   }
}

class Cars extends ModWorker{
   protected $type_car;
   protected $STO;
   // Получаем технические характеристики машины
   function atrribute_car($id_car) {
      //...
   }
}

class WorkerCars extends Cars{
   protected $worker_car;
   protected $time_work_car;
   //Получаем информацию по машине работника
   function get_worker_car_info($id_worker) {
      //...
   }
}

class Worker {
   private $objWorkTime;
   private $objEducation;
   private $objWorkerCars;
   private $objCars;
   private $objPersons;
   //создаем супер объект из объектов модуля
   function __construct () {
      $this->objWorkTime = new WorkTime();
      $this->objEducation = new Education();
      $this->objWorkerCars = new WorkerCars();
      $this->objCars = new Cars();
      $this->objPersons = new Persons();
   }
}
$objWorker = new Worker();

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

interface DB { //функции для связи с базой данных
   function link_mysql();
   function modify_DB();
}
interface file_system { //функции для работы с файловой системой
   function create_file();
   function delete_file();
}
abstract class ModWorker implements DB, file_system {//класс имеет реализацию всех функций подключеных интерфейсов

   Наличие интерфейса означает, что в данном классе существует реализация общедоступных универсальных функций. Например, как в примере выше, наличие DB, file_system означает, что в классе реализуется функции для работы с файловой системой и с базой данных.

   Результатом статьи получился вот такой вот небольшой пример, в котором я постарался раскрыть один кубик из которых строится система. ООП требует немного больше времени на разработку и планирование. Особенно важно все правильно спланировать заранее. Естественно довольно сложно охватить всю разработку в целом. Но основным преимуществом ООП и есть разработка автономных объектов.
   Данная парадигма ООП в php не является идеальной. Для ее создания мне пришлось перечитать материалы по ООП. В частности для более глубокого понимания принципов ООП, я бы порекомендовал Вам перечитать книгу Гради Буча "Объектно-ориентированный анализ и проектирование". Мое субъективное понимание ООП, позволило создать, на мой взгляд, универсальную парадигму ООП которая может разделить задачи на параллельное создание компонентов, с минимальными затратами объединить их и соблюсти все принципы ООП. Если у Вас есть другое мнение и большой опыт ООП, то возможно Вы поделитесь знаниями, чем бы я мог еще дополнить эту статью.

Ваша оценка:
 kod
Проголосовать!
Спасибо, Вы успешно
проголосовали!
Ошибка скрипта,
сообщите администратору!
Ошибка,
неверный код!
Вы уже голосовали!
Текущий рейтинг: +2, проголосовало 9
Комментариев к статье (0)
Д О Б А В И Т Ь    К О М М Е Н Т А Р И Й:
   Ваше имя:
   
   Почтовый ящик @:
    * - не отображается
   Текст комментария:
   



   Введите защитный код: :) :( ;) :| 8) :] :0 :S :Ok :sos :B B( yes boom write
   kod
   
 

Где еще почитать на эту тему?
 

                                                                                                                                                                                                                                                                                                                                                                                 
Авторизация

Логин:
Пароль:



















 
Все права защищены, 2007-2009рр. статей: всего 71, на модерации 245; комментариев: 331, ссылок: всего 15, новых 0; выполнено за 0.39 sec. Карта сайта