Доброго времени суток. В данной статье я бы хотел затронуть ООП в PHP и среды разработки для написания веб-приложений на этом языке.
ООП в PHP будет затронуто с академической точки зрения, тобишь что есть сейчас и не вникая в технические тонкости.
Среды разработки будут стараться ответить на вопрос, могут ли они способствовать облегчению создания ОО систем, которые являются функциональной частью сайта.
В какой-то степени статья популяризирует язык Smalltalk и призывает его попробовать. Однако те, кто считают, что язык уже давно пылиться на полке истории, слепо ошибаются и я могу предложить статью 1 и статью 2, в качестве доказательства, что язык живёт припеваючи.
Оглавление
- Истоки
- Текущее ОО положение в языке
- Заключение
Истоки
Давным-давно в далёком 1980-ом году, увидел свет Smalltalk, главной особенностью которого было не только ООП, которое затем было искажено в других ОО-языках, но и интегрированная среда разработки и среда исполнения.
В пример,
Но Smalltalk — это не просто язык, это динамическая среда исполнения, в которой объекты постоянно создаются, развиваются и уничтожаются. Среда разработки Smalltalk является лучшей иллюстрацией возможностей системы, она целиком написана на самом языке и любая ее часть может быть динамически модифицирована средствами этой же среды.
Говоря о Smalltalk, я сразу начну с её интегрированной среды разработки и в принципе основная идея статьи — это поставить вопрос «А нужна ли подобная IDE для языка PHP, в силу того, что сейчас он всё больше движется в сторону ООП языка? Так как он имеет общие черты с самим Smalltalk».
Ниже представлено изображение, демонстрирующее рабочее пространство Dolphin Smalltalk.
Рабочее пространство 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 как раз таки подойдёт для этих целей, ибо есть схожие черты и сами разработчики языка движутся в сторону большего ООП.
Какие задачи встали передо мной:
- Разработка прототипа
- Анализ существующих решений
Конкретно в этой статьей я займусь второй задачей. И спросить уже у матёрых разработчиков, а может уже есть что-то такое и я просто создаю
Текущее положение ОО в языке PHP
На данный момент PHP поддерживает основные принципы ООП:
- Инкапсуляция
- Наследование
- Полиморфизм
Так же в стороне не остались:
- Абстракция
- Интерфейсы
- Трейты
- Создание статических методов
- Клонирование
Ещё существуют пару вещей, которые лично мне очень понравились:
Контроль типов
Магические методы
Важно взять в расчёт так же стандартный набор классов, доступные из «коробки»:
- Directory
- Trowable
- Exception
- ErrorException
- LogicException
- BadFunctionCallException
- BadMethodCallException
- DomainException
- InvalidArgumentException
- LengthException
- OutOfRangeException
- BadFunctionCallException
- RuntimeException
- OutOfBoundsException
- OverflowException
- RangeExcpetion
- UnderflowException
- UnexpectedValueException
- Error
- AssetionError
- DivisionByZeroError
- ParseError
- TypeError
- ArgumentCountError
- ArthmeticError
- Exception
- Traversable
- IteratorAggregate
- Iterator
- Generator
- ArrayAccess
- Serializable
- Closure
- Countable
- DateTime
- And other SPL classes..
В следствии этого, я считаю, что было бы неплохо иметь возможность видеть их перед глазами и знать из чего они состоят. Я не говорю о том, что можно было бы даже предоставить возможность для их изменения, потому что в этом мне кажется нет особой необходимости. Опять же это лишним не было бы, на мой взгляд.
Заключение
Возвращаясь к затронутой теме о необходимости IDE для PHP. Сама суть вопроса — это переход от стандартного способа создания приложения на этом языке к более «прозрачному», за счёт наличия удобного графического интерфейса и необходимых инструментов для создания ОО функциональный части сайта. То есть по факту это переход к Smalltalk`овскому подходу создания приложений, конкретно — это функциональная часть веб-приложения, не дизайн, а чисто кода.
Лично я вижу работу такой IDE следующим образом:
- Создание образа будущей ОО-системы
- Разработка классов и их поведения в этом образе
- Генерация кода из этого образа в готовые исходники
- Тестирование получившегося кода
- Сопровождение
Вопрос остаётся открытым…