Файл: Применение объектно-ориентированного подхода при проектировании информационной системы (Методы и средства).pdf
Добавлен: 23.04.2023
Просмотров: 12102
Скачиваний: 1
Factory method (фабричный метод)
Данный паттерн довольно сложно объяснить в метафорах, но всё же попробую.
Ключевой сложностью объяснения данного паттерна является то, что это «метод», поэтому метафора метода будет использовано как действие, то есть например слово «Хочу!». Соответственно, паттерн описывает то, как должно выполнятся это «Хочу!».
Допустим ваша фабрика производит пакеты с разными соками. Теоретически мы можем на каждый вид сока делать свою производственную линию, но это не эффективно. Удобнее сделать одну линию по производству пакетов-основ, а разделение ввести только на этапе заливки сока, который мы можем определять просто по названию сока. Однако откуда взять название?
Для этого мы создаем основной отдел по производству пакетов-основ и предупреждаем все под-отделы, что они должны производить нужный пакет с соком про простому «Хочу!» (т.е. каждый под-отдел должен реализовать паттерн «фабричный метод»). Поэтому каждый под-отдел заведует только своим типом сока и реагирует на слово «Хочу!».
Таким образом если нам потребуется пакет апельсинового сока, то мы просто скажем отделу по производству апельсинового сока «Хочу!», а он в свою очередь скажет основному отделу по созданию пакетов сока, «Сделай ка свой обычный пакет и вот сок, который туда нужно залить».
Lazy initialization (отложенная инициализация)
Иногда требуется что-то иметь под рукой, на всякий случай, но не всегда хочется прилагать каждый раз усилия, чтобы это каждый раз получать/создавать. Для таких случаев используется паттерн «отложенная инициализация». Допустим вы работаете в бухгалтерии и для каждого сотрудника вы должны подготавливать «отчет о выплатах». Вы можете в начале каждого месяца делать этот отчет на всех сотрудников, но некоторые отчеты могут не понадобиться, и тогда скорее всего вы примените «отложенную инициализацию», то есть вы будете подготавливать этот отчет только тогда, когда он будет запрошен начальством (вышестоящим объектом), однако начальство по сути в каждый момент времени может сказать что у него этот отчет уже есть, однако готов он уже или нет, оно не знает и знать не должно. Как вы уже поняли, данный паттерн служит для оптимизации ресурсов.
Dependency injection (внедрение зависимости)
Внедрение зависимости позволяет переложить часть ответственности за какой-то функционал на другие объекты. Например если нам требуется нанять новый персонал, то мы можем не создавать свой отдел кадров, а внедрить зависимость от компании по подбору персонала, которая свою очередь по первому нашему требованию «нам нужен человек», будет либо сама работать как отдел кадров, либо же найдет другую компанию (при помощи «локатора служб»), которая предоставит данные услуги.
«Внедрение зависимости» позволяет перекладывать и взаимозаменять отдельные части компании без потери общей функциональности.
Service Locator (локатор служб)
«Локатор служб» является методом реализации «внедрения зависимости». Он возвращает разные типы объектов (компаний) в зависимости от кода инициализации. Пускай задача стоит доставить наш пакет сока, созданный строителем, фабрикой или ещё чем, куда захотел покупатель. Мы спрашиваем у локатора «дай нам службу доставки», и он нам соединяет на со службой доставки по номеру телефона, который директор ему дал (потому что получает откат они нам дают скидку как постоянным клиентам), а мы уже просим службу доставить сок по нужному адресу. Сегодня одна служба, а завтра может быть другая. Нам без разницы какая это конкретно служба, решение принимает директор и сообщает об этом локатору служб, нам важно знать лишь что они могут доставлять то, что мы им скажем туда, куда скажем, то есть службы реализуют интерфейс «Доставить <предмет> на <адрес>».
2. Структурирующие паттерны
Эти паттерны помогают навести порядок и научить различные объекты более правильно взаимодействовать друг с другом.
Adapter или wrapper (адаптер, обертка)
Этот паттерн полностью соответствует своему названию. Чтобы заставить» советскую «вилку работать через евро-розетку, требуется адаптер. Это то, что делает «адаптер», служа промежуточным объектом между двумя другими, которые не могут работать непосредственно друг с другом.
Composite (компоновщик)
Довольно интересная закономерность, которая сводит к минимуму различия в управлении как группами объектов, так и отдельными объектами. Например, можно рассмотреть управление солдатами в строю. Существует Строевой устав, который определяет, как управлять формированием и согласно этому уставу, не имеет значения, кому отдается приказ (например, «шаг Марш») одному солдату или целому взводу. Соответственно, Устав (если его рассматривать в чистом виде как образец «линкера») не может включать команду, которая может быть выполнена только одним солдатом, но не может быть выполнена группой или наоборот.
Decorator (декоратор, оформитель)
Как следует из названия, этот шаблон чаще всего используется для расширения исходного объекта до желаемого внешнего вида. Например, мы можем условно считать человека с кистью и красной краской «декоратором». Таким образом, какой бы объект (или определенный тип объекта) мы ни передали в руки «декоратора», на выходе мы получим красные объекты.
3. Паттерны поведения
Эта группа паттернов позволяет структурировать подходы к обработке поведения и взаимодействия объектов. Проще говоря, как должны проходить процессы в которых существует несколько вариантов протекания событий.
Command или action (команда, действие)
Шаблон «команда» очень похож в реальной жизни на кнопки на выключателях света в наших квартирах и домах. Каждый коммутатор по существу выполняет одно простое действие-разъединяет или соединяет два провода, но что находится за этими проводами, коммутатор не знает. Что связано, то и произойдет. Шаблон «команда» также работает таким же образом. Он определяет только общие правила для объектов (устройств), в виде соединения двух проводов для выполнения команды, а то, что именно будет выполнено, уже определяется самим устройством (объектом).
Servant (слуга)
Как следует из названия, этот шаблон используется для предоставления группе объектов некоторой общей функциональности. Например, телефонная станция является «слугой» для жителей города, когда дело доходит до выяснения точного времени.
Таким образом, паттерны имеют очень много общего с реальной жизнью и позволяют делать код насколько же простым для чтения и понимания, как и то, что мы видим в реальной жизни.
3.2 Фреймворки
Фреймворк (фреймворк, «фреймворк», «конструкция») - это динамически пополняемая библиотека языка программирования, содержащая его основные модули. Фреймворки создаются для упрощения разработки приложений, сайтов и сервисов. Чтобы избежать написания модуля в приложении с нуля, гораздо проще обратиться к готовым шаблонам фреймворка, которые формируют рабочую среду разработчика [9].
Каждый язык программирования имеет фреймворки-Java, JavaScript, Python, Ruby и PHP. Но именно PHP-фреймворки занимают почетное место в качестве основного инструмента для разработки бэкенда.
Преимущества фреймворков [4]
1. Представление. Фреймворки ускоряют развитие. Например, фреймворк PHP избавляет вас от необходимости писать запросы к базам данных. Фреймворки реализуют базовые функции CRUD, необходимые для работы с базами данных.
2. Масштабируемость. Приложения, написанные на фреймворках, легко масштабируются.
3. Удобство. Код фреймворка лаконичен, поэтому с ним легко работать. Проще поддерживать проект в рамках фреймворка, чем на родном языке.
4. Простота. Фреймворки используют шаблоны проектирования. Это значительно упрощает разработку, делая процесс более быстрым.
5. Безопасность. Приложения на фреймворках лучше защищены.
6. Эффективность. Каркас реализует сухой принцип. Это позволяет разработчикам писать меньше кода.
Какой фреймворк PHP является наиболее подходящим, зависит от объема и целей проекта. При выборе такой платформы следует обратить внимание на ряд базовых показателей.
1. Насколько широка и гибка функциональность фреймворка. Содержит ли он все, что может потребоваться для текущего проекта.
2. Легко ли выучить фреймворк? Исходя из уровня штатного (внештатного) разработчика.
3. Скорость и современность-насколько фреймворк ориентирован на прогрессивные методы программирования. Например, существует ли поддержка объектно-ориентированного метода.
4. Как масштабируется проект, созданный на фреймворке. Возможно ли написать структурированный код для масштабируемых приложений.
5. Как часто выпускаются обновления и есть ли у платформы активное сообщество.
6. Имеет ли фреймворк гарантированную долгосрочную службу поддержки релизов (LTS)?
7. Есть ли поддержка архитектуры MVC (Model ViewController / Model-view-controller).
Фреймворк Laravel
Эта бесплатная платформа является одним из самых популярных фреймворков PHP, благодаря своей активной разработке и простоте разработки. Новичкам, решившим освоить его впервые, предоставляются комфортные условия для постепенного погружения в область веб-разработки по широкому спектру задач: от обычных рутинных задач до сложных интеграционных проектов и масштабирования приложений. Благодаря этой расширенной функциональности Laravel может помочь вам решить целый ряд бэкенд-задач даже без большого опыта работы [7].
Yii
Объектно-ориентированный PHP-фреймворк Yii считается лидером по производительности и часто выбирается для высоконагруженных приложений. С момента своего первого выпуска в 2008 году эта структура постоянно развивалась на протяжении многих лет. Yii часто входит в топ PHP фреймворков, благодаря высокоразвитому сообществу пользователей, значительная часть которых являются русскоязычными.
CodeIgniter
Этот фреймворк с открытым исходным кодом отличается элегантностью кода и простотой написания. Простота обучения и свобода разработки кода обеспечивают отличные условия для быстрого старта проекта. CodeIgniter отлично подходит для создания небольших PHP-приложений, которые можно легко масштабировать.
Фреймворк symfony
В дополнение к своему звучному названию, этот фреймворк обладает гибкой функциональностью, основанной на модульном подходе к построению системы. Это позволяет выбрать необходимые функции языка PHP или управлять всей инфраструктурой.
Эта структура будет сбалансированным решением для разработчика, который ценит модульность и преимущество использования отдельных компонентов. Веб-приложения Symfony отличаются впечатляющей производительностью, поэтому они используются для решения сложных задач на уровне предприятия [6].
Фреймворк Zend
Гибкая методология позволяет разрабатывать высококачественные корпоративные веб-приложения. Одним из главных недостатков PHP фреймворка является сложность в обучении, что, вероятно, отпугнет новичков. Однако преимущества объектно-ориентированного программирования и расширяемой функциональности с интеграцией внешних библиотек заслуживают большего внимания при изучении Zend.
SlimCarcass
Это еще одна относительно популярная платформа, известная как PHP micro framework. Он предназначен для создания API и веб-приложений, которые являются одновременно простыми и высокопроизводительными. Slim легко усваивается, имеет активную техническую поддержку и развитую базу документации.
Фреймворк - это идеальный инструмент для создания API и полнофункциональных веб-приложений, работающих на стороне сервера. Они позволяют экономить время на «ручном» программировании с использованием готовых шаблонов и решений.
Таким образом, выбор в пользу того или иного фреймворка будет зависеть от сложности проекта. Чем она больше, тем больше требуется ресурсов и технологий. Сложные задачи предполагают тщательный предварительный анализ функциональности платформы PHP, ее совместимости с версиями PHP, поддерживаемых баз данных, ресурсоемкости, масштабируемости и критериев производительности. Для небольших проектов можно выбрать универсальные решения с оптимальным балансом основных компонентов и отсутствием ресурсных требований.
ЗАКЛЮЧЕНИЕ
Основные идеи объектно-ориентированного подхода опираются на следующие положения:
- программа представляет собой модель некоторого реального процесса, части реального мира; модель содержит не все признаки и свойства представляемой ею части реального мира, а только те, которые существенны для разрабатываемой программной системы;
- модель реального мира или его части может быть описана как совокупность взаимодействующих между собой объектов;
- объект описывается набором атрибутов (свойств), значения которых определяют состояние объекта, и набором операций (действий), которые может выполнять объект;
- взаимодействие между объектами осуществляется посылкой специальных сообщений от одного объекта к другому; сообщение, полученное объектом, может потребовать выполнения определенных действий, например изменения состояния объекта;
- объекты, описанные одним и тем же набором атрибутов и способные выполнять один и тот же набор операций, представляют собой класс однотипных объектов.