Файл: Особенности алгоритмизации при разработке WEB-приложений (Общие подходы программирования).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.03.2023

Просмотров: 107

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Введение

На заре появления Всемирной паутины (WWW - World Wide Web) сайты были статичными, без какой либо интерактивности, взаимодействии с пользователем. Для создания сайта достаточно было использовать язык разметки гипертекста HTML. С развитием интернета сайты стали усложняться, языка разметки уже не хватало для реализации сайтов с такими возможностями, как поисковые системы, форумы и т. п.

Для разработки сайтов стали использовать языки программирования. Одним из первых был Perl, в дальнейшем создавались языки специально для Веб-разработки, либо разработанные с учетом Веб-программирования, такие как PHP, Ruby, Python. Данные языки используются для выполнения каких либо действий (формирования контента, работы с Базой Данных) на серверной стороне.

Для выполнения сценариев на стороне клиента (в браузере) был разработан язык JavaScript, который на данный момент является стандартом во всех современных браузерах. Следует отметить, что теперь JavaScript может использоваться и на серверной стороне, благодаря программной платформе NodeJs.

Особенностью разработки Web-приложений, в отличии от прикладных программ, является использование Клиент-серверной архитектуры. В роли клиента выступает браузер пользователя, в котором происходит отображение содержимого сайта. В роли сервера выступает Web-сервер (Apache, Nginx, IIS) с настроенным на нем интерпретатором языком программирование (PHP, Perl), либо уже откомпилированным приложением. Соответственно Веб-приложение работает не постоянно, а выполняется только в момент запроса клиентом, формируя ответ для клиента (содержимое сайта). Всё это, а так же некоторые другие моменты, накладывает свои особенности при разработке Веб-приложений.

Все примеры и листинги в данной курсовой приведены с использованием языка PHP, JavaScript и СУБД MySQL.

Глава 1. Общие подходы программирования

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

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


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

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

Абстрагирование Выделение значимой информации и исключение незначимой. Программист работает с определенным набором свойств и методов.

Инкапсуляция — Сокрытие, разграничение доступа различных частей программы.

Наследование — Возможность системы, позволяющая создать новый класс на основе существующего, наследовав функциональность родительского класса, частично дополнив и/или расширив существующий функционал родительского класса.

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

В Веб-программирование чаще всего используется Процедурный подход, либо ООП. При разработке сложных и больших (сложнее, чем сайт из нескольких страничек и формы обратной связи) Веб-приложений чаще всего используют Объектно-ориентированный подход. Это позволяет разделить приложение на несколько независимых частей, которые можно изменять, без опасности повредить работу других частей приложения. Например выделить работу с базой данных в отдельный класс, снабдить его методами для чтения, изменения, удаления данных. Тогда при смене СУБД, можно изменить только класс для работы с базой данных, снабдив его такими же методам, не изменяя всю остальную логику и структуру Веб-приложения. Также такой способ позволяет разделить труд программистов в команде. Одна часть команды занимается разработкой логики работы приложения, другая занимается формированием страниц на стороне пользователя (версткой HTML кода).

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


Глава 2. Вкрапления в код. Код в шаблоне

При появлении первых интерактивных (с иcпользованием языков программирования) сайтов непосредственно кода было очень мало. В этом случае вполне можно было писать программу вперемешку с HTML версткой. Пример с вкраплением HTML-верстки в PHP скрипт показан на Листинге 1:

<?php // Листинг 1

$heading = 'Последние новости';

echo '<html><head><title>'.$heading.'</title></head><body>';

echo '<h2>'.$heading.'</h2>';

echo '<ul>';

$f = fopen("../last_news.txt", "r");

for ($i=1; !feof($f) && $i <=10; $i++)

{

echo "<li><strong>Новость № $i</strong>". fgets($f, 1024); echo "</li>";

}

echo '</ul>';

echo '</body></html>';

?>

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

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

Пример разделения шаблона и кода показан в Листинге 2:

<?php // Листинг 2

$f = fopen("../last_news.txt", "r");

$news_storage = array();

for ($i=1; !feof($f) && $i <=10; $i++)

{

$news_storage[] = ['number' => $i, 'text'=>fgets($f, 1024)];

}

$heading = 'Последние новости';

?>

<html>

<head><title><?=$heading?></title></head>

<body>

<h2><?=$heading?></h2>

<ul>

<?php foreach ($news_storage as $news) { ?>

<li><strong>Новость № <?=$news['number']?></strong>

<?=$news['text']?>

</li>

<?php } ?>

</ul>

</body>

</html>

В данном примере PHP код и HTML верстка разделены. При желании можно нижнюю часть с версткой выделить в отдельный файл HTML шаблона, и отдать верстальщику для внесения желаемых изменений в шаблон. Небольшие участки PHP кода не осложняют чтение, и при минимальных знаниях языка программирования не вызовут трудности при работе с шаблоном. Соответственно верхнюю часть кода программист может переделывать не опасаясь повредить верстку, так как здесь не используется ни единого тэга. Данные из файла записываются в массив, из которого в последующем выводятся данные в соответствии с HTML версткой в нужном месте на странице. При желании можно даже изменить получение данных, например получать их из другого файла, получать не по 10 записей, а по 15. Или даже изменить хранилище данных с файла на Базу Данных (БД). Главное записать эти данные в ассоциативный массив с такими же ключами. Получение данных можно обернуть в функцию, добавить условия проверки существования файла.


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

Например вывод новостей необходим на «Главной» странице в ограниченном количестве и на странице «Новости» в полном объеме, так же у каждой страницы есть свой «Заголовок» который хранится в переменной heading. В этом случае нельзя один и тот же участок кода использовать на разных страницах, хотя он и отличается незначительно. Так же при изменении хранилища с файла на БД придется изменять код во всех участках. А при выводе данных из разных источников и взаимодействии с пользователем такой код становится очень трудно поддерживать. Отсюда следует вывод что такой способ подходит только для реализации очень простых сайтов, на которых практически нет никакого взаимодействия с пользователем, очень простая структура и иерархия разделов.

Глава 3. ООП MVC

Наиболее популярный подход на данный момент при разработке сайтов от довольно простых до вполне серьезных Веб-приложений является MVC.

Аббревиатура MVC расшифровывается как Model View Controller и переводится как Модель Представление Контроллер. Это шаблон проектирования, в котором разделены данные приложения, пользовательского интерфейса и управляющей логики, таким образом что изменение любого из этих компонентов может осуществляться независимо. Данный шаблон проектирования появился еще до появления WWW. Со временем его переняли Веб-разработчики, и вкупе с ООП подходом MVC стал удобным и мощным способом для разработки приложений в Веб. Этот шаблон проектирования используется в большинстве фреймворков для разработки Веб приложений, например: Yii2, Laravel, Ruby on Rails и другие.

Model (Модель) — это объект приложения, содержит в себе бизнес-логику приложения. Модель полностью независима от остальных частей приложения. Она ничего не знает об элементах дизайна, о том каким образом он будет отображаться. Также ничего не знает о контроллере, где и как будут вызываться методы модели. Таким образом достигается результат, позволяющий изменять представление данных, их отображение, не трогая саму Модель. Она обладает знаниями только о себе, и не знает о контроллерах и представлениях. Модель может быть слоем данных (База данных, XML-файл), а так же содержать логику для работы с этими данными.


View (Представление) отображает данные полученные от модели, но никак не может влиять на модель. В Веб-приложениях содержит HTML код для отображения в браузере. Грубо говоря представление может только «читать» данные из модели. Представление вызывается контроллером, который ей передает данные из модели, а так же данные полученные в ходе работы самого контроллера.

Controller (Контроллер) — Получает запрос, и на основе данных из модели формирует представление. В Веб приложении получает запрос от браузера клиента (POST, GET и другие). На основе полученных сведений вызывает необходимые методы модели и на основе данных полученных от модели формирует представление, либо совершает какие либо другие действия. Например перенаправление на другие страницы сайта, формирование данных в специальных форматах при AJAX запросах и прочее.

Проще говоря браузер клиента обращается всегда к контроллеру, который производит некоторые действия и возвращает клиенту результат выполнения этих действий в браузер в виде сформированного представления: HTML страницы, XML данных.

Стандартная последовательность действий в Веб приложении при использовании паттерна MVC представлена на рисунке 1.

На этом рисунке схематично изображена работа паттерна MVC. На основе этой схемы можно расписать шаги которые выполняются при посещении пользователем сайта.

1. При заходе пользователя на сайт, Веб-приложение запускает скрипт инициализации, который на основе параметров конфигурации (данные для доступа к БД, часовой пояс, базовый домен и прочих) создает экземпляр приложения и запускает его на исполнение.

2. Приложение на основе данных полученных от пользователя (маршрута, GET, POST запросов) определяет контроллер и действие. Например по маршруту http://domen.local/about приложение на основе правил маршрутизации определяет, что надо вызвать метод actionAbout() в контроллере.

3. Приложение создает экземпляр контроллера и запускает метод действия actionAbout() .

4. В методе контроллера создается экземпляр Модели AboutModel и вызывается метод getData(), полученные данные из модели передаются контроллером в представление. Так же могут происходить различные действия как с моделью, так и без нее, в зависимости от полученных данных контроллером.

5. На последнем этапе контроллер формирует представление с полученными данными из модели и отправляет обратно пользователю в браузер сформированную HTML страницу. Вместо страницы HTML могут быть данные в любом другом формате, включая изображения, документы в форматах PDF doc и т.д.