Доброго времени суток. В данной статье я бы хотел затронуть ООП в PHP и среды разработки для написания веб-приложений на этом языке.



ООП в PHP будет затронуто с академической точки зрения, тобишь что есть сейчас и не вникая в технические тонкости.



Среды разработки будут стараться ответить на вопрос, могут ли они способствовать облегчению создания ОО систем, которые являются функциональной частью сайта.



В какой-то степени статья популяризирует язык Smalltalk и призывает его попробовать. Однако те, кто считают, что язык уже давно пылиться на полке истории, слепо ошибаются и я могу предложить статью 1 и статью 2, в качестве доказательства, что язык живёт припеваючи.



Оглавление


  • Истоки
  • Текущее ОО положение в языке
  • Заключение




Истоки



Давным-давно в далёком 1980-ом году, увидел свет Smalltalk, главной особенностью которого было не только ООП, которое затем было искажено в других ОО-языках, но и интегрированная среда разработки и среда исполнения.



В пример, (в защиту) можно привести цитату, относительно всего языка:
Но Smalltalk — это не просто язык, это динамическая среда исполнения, в которой объекты постоянно создаются, развиваются и уничтожаются. Среда разработки Smalltalk является лучшей иллюстрацией возможностей системы, она целиком написана на самом языке и любая ее часть может быть динамически модифицирована средствами этой же среды.

Говоря о Smalltalk, я сразу начну с её интегрированной среды разработки и в принципе основная идея статьи — это поставить вопрос «А нужна ли подобная IDE для языка PHP, в силу того, что сейчас он всё больше движется в сторону ООП языка? Так как он имеет общие черты с самим Smalltalk».

Ниже представлено изображение, демонстрирующее рабочее пространство Dolphin Smalltalk.

image
Рабочее пространство Dolphin Smalltalk


Основные инструменты, которые присутствуют в среде:
  • Workspace – рабочее пространство, в котором можно писать исходный код и выполнять его
  • Inspector – инструмент для просмотра содержимого инспектируемого объекта
  • Class Browser – основной инструмент, в котором происходит создание/удаление и изменения классов
  • Debugger – отладчик
  • Pool Dictionaries – инструмент для работы со словарями. Своего рода константы
  • Package Browser – менеджер работы с пакетами
  • Protocol Browser – менеджер для просмотра интерфейса классов


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



Вернёмся к тому, что выше мною было написано: "… имеет схожие черты со Smalltalk". Ниже приведены сходства и различия. Однако, при более углублённом изучении сильных и слабых сторон того и другого языка кол-во будет схожих/различных черт может меняться.



Схожие черты PHP со Smalltalk:


  • Наличие виртуальной машины
  • Динамическая типизация
  • Объектно-ориентированная парадигма
  • Интерпретируемость


Различные черты PHP от Smalltalk:


  • Not Pure OOP (Нечистое ООП)
  • Не предназначен для создания огромных комплексных систем


Как вы уже заметили, главный вопрос статьи уже был изложен выше, но на этом она не заканчивается. Я постараюсь проанализировать (в основном поверхностно) те инструменты, которыми пользуются PHP разработчиками, т.е. их IDE. Однако сам вопрос можно перефразировать так: «Нужна ли подобная IDE для любого другого ОО-языка, чтобы изменить подход к разработке?».



Данный вопрос у меня возник в следствии того, что во время разработки своих проектов, чертовски устал от бесконечного лазанья по исходникам и выискивания тех мест, в которых возникла ошибка или нужно что-то исправить и в целом хотел, чтобы весь код где-то лежал и можно было с лёгкостью «достать рукой» до любой части, не испытывая особые трудности.



Немного сделав паузу в PHP я решил рассмотреть Smalltalk, который меня очень заинтересовал и до сих пор я желаю изучить его как основной язык программирования. И для меня было большим удивлением, что сам подход к написанию программ на нём кардинально другой и в последствии это натолкнуло на мысль, а что если для того же PHP можно было бы разработать IDE, которая позволит делать тоже самое, что и в Smalltalk? Я взял в расчёт, что PHP как раз таки подойдёт для этих целей, ибо есть схожие черты и сами разработчики языка движутся в сторону большего ООП.



Какие задачи встали передо мной:


  1. Разработка прототипа
  2. Анализ существующих решений


Конкретно в этой статьей я займусь второй задачей. И спросить уже у матёрых разработчиков, а может уже есть что-то такое и я просто создаю трёхколёсный велосипед в эпоху гироскутеров?

Текущее положение ОО в языке PHP



На данный момент PHP поддерживает основные принципы ООП:

  • Инкапсуляция
  • Наследование
  • Полиморфизм


Так же в стороне не остались:
  • Абстракция
  • Интерфейсы
  • Трейты
  • Создание статических методов
  • Клонирование


Ещё существуют пару вещей, которые лично мне очень понравились:
Контроль типов
Магические методы

Важно взять в расчёт так же стандартный набор классов, доступные из «коробки»:
  • Directory
  • Trowable
    • Exception
      • ErrorException
      • LogicException
        • BadFunctionCallException
          • BadMethodCallException

        • DomainException
        • InvalidArgumentException
        • LengthException
        • OutOfRangeException

      • RuntimeException
        • OutOfBoundsException
        • OverflowException
        • RangeExcpetion
        • UnderflowException
        • UnexpectedValueException


    • Error
      • AssetionError
      • DivisionByZeroError
      • ParseError
      • TypeError
        • ArgumentCountError

      • ArthmeticError


  • Traversable
    • IteratorAggregate
    • Iterator
      • Generator


  • ArrayAccess
  • Serializable
  • Closure
  • Countable
  • DateTime
  • And other SPL classes..


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

Заключение



Возвращаясь к затронутой теме о необходимости IDE для PHP. Сама суть вопроса — это переход от стандартного способа создания приложения на этом языке к более «прозрачному», за счёт наличия удобного графического интерфейса и необходимых инструментов для создания ОО функциональный части сайта. То есть по факту это переход к Smalltalk`овскому подходу создания приложений, конкретно — это функциональная часть веб-приложения, не дизайн, а чисто кода.



Лично я вижу работу такой IDE следующим образом:


  1. Создание образа будущей ОО-системы
  2. Разработка классов и их поведения в этом образе
  3. Генерация кода из этого образа в готовые исходники
  4. Тестирование получившегося кода
  5. Сопровождение


Вопрос остаётся открытым…

Комментарии (4)