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

∴ Установка програм

» Netbeans - редактор php » Учимся использовать логи » Список программ для создания сайта » Установка Denwer » Установка Photoshop » Установка Smarty » Установка Dreamweaver » Установка phpMyAdmin » Установка Web-сервера Apache » Установка PHP » Установка MySQL

∴ Оптимизация сайта

» Addstudio - SEO модуль » Отладка js и CSS » Атрибут rel="nofollow" » Тестируем кроссбраузерность » Понятие кроссбраузерности » Оптимизация кода » Детально про PageRank » Создание статических страниц » Внутреняя перелинковка » Про валидность сайтов » Правила оптимизации » Мета-теги

∴ Пример создания сайта

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

∴ Раскрутка сайта

» Каталоги и биржи статей » SEO программа » Продвижение ключевых слов » Если сайт забанили » Форум как способ раскрутки » Создание дорвеев (doorway) » Обзор seo-программ » Индексация сайта » Обмен ссылками » Раскрутка в рейтингах » Обмен статьями » Поисковые системы » Продвижение сайта на Sape.ru

∴ Хостинг и домен

» Свой веб сервер » Про хостинг и домен » Выбор хостинга » Выбор домена

∴ Заработок Web-мастера

» Аутсорсинг на oDesk.com » Обзор биржи Liex.ru » Стратегия дохода на Sape.ru » Про заработок Web-мастера » Заработок на Sape.ru

∴ Подготовка к созданию сайта

» Платный или бесплатный? » Лицензии open source » Фриланс - каждый может! » Готовимся к созданию сайта » Про уникальность контента » Основы создания сайта » Создание семантического ядра » Курс молодого web-мастера » Тематика сайта

∴ Примеры PHP/Javascript

» Шифруем код base64 » Bcompiler расширение php » Отладка скриптов в php » Авторизация на sape.ru » Cокеты в php » Защита js кода » Отправка почты на PHP » Создание часов » Защита от спама » Резолюция дисплея на Javascript
 
 
 
sape
a Продажа авто через автоломбарды или срочный выкуп /a ?
 
Кнопка сайта:
Самостоятельное создание сайта, веб-дизайн, web-программирование, продвижение и оптимизация сайта
Купить мониторы с большой скидкой




По всем вопросам пишите на webmaster@info-pages.com.ua. Вы можете свободно использовать/размещать/перепечатывать статьи сайта всего лишь указав ссылку на источник.
ООП в 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
Проголосовать!
Спасибо, Вы успешно
проголосовали!
Ошибка скрипта,
сообщите администратору!
Ошибка,
неверный код!
Вы уже голосовали!
Рейтинг: +3, проголосовало 35
  Отображено 5 последних комментариев  
std Код плохо комментирован для учебного
14:35 01.11.11
admin ну, если учесть что обращаться к методам класса Cars() через экземпляр objWorkerCars, тогда можно сказать, что лишнее
14:57 14.09.11
Виталий Хорошая статья, спасибо! :) Вопрос: может, создание объекта $this->objCars = new Cars(); было лишним? Мы же всё равно создаём его потомка $this->objWorkerCars = new WorkerCars();
17:34 13.09.11
int21h Просто, доступно и наглядно :Ok
12:04 28.06.11
Алексей Спасибо, отличная статья! :Ok P.S. mounce? :B
03:19 08.09.10
Д О Б А В И Т Ь    К О М М Е Н Т А Р И Й:
   Ваше имя:    
   Почтовый ящик @:     * - не отображается
   Текст комментария:




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

                                                                                                                                                                                                                                                                                                                                                                                 
Авторизация

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



















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