Обоснование выбора средств и методов разработки Выбор языка программирования - polpoz.ru o_O
Главная
Поиск по ключевым словам:
страница 1страница 2
Похожие работы
Название работы Кол-во страниц Размер
1. 2 Характеристика помещений, условий среды, выбор степени 7 защиты... 1 60.22kb.
1. Программа дисциплины Целью изучения дисциплины «Программирование»... 7 860.11kb.
1. Предмет, цели и задачи курса практической стилистики русского... 3 810.81kb.
Обоснование методов и средств экологического мониторинга акватории 1 63.21kb.
Правильность выбора основных направлений, содержания, форм, средств... 1 85.83kb.
Сравнительный анализ инструментальных средств для параллельного программирования 1 78.35kb.
Книга Б. Страуструпа "Язык программирования С++" 35 2749.39kb.
7 технико-экономическое обоснование эффективности разработки и использования... 1 234.24kb.
Применение методов линейного программирования в военном деле. 1 172.47kb.
Теоретические основы радиолокации 3 373.99kb.
Обоснование и выбор способа нутритивной поддержки в периоперационном... 2 389kb.
Он отличен от нуля, следовательно, решение пока не найдено. 1 14.18kb.
1. На доске выписаны n последовательных натуральных чисел 1 46.11kb.

Обоснование выбора средств и методов разработки Выбор языка программирования - страница №1/2


  1. Обоснование выбора средств и методов разработки




    1. Выбор языка программирования

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

Языки веб-программирования — это соответственно языки, которые в основном предназначены для работы с интернет-технологиями. Языки веб-программирования делятся на две группы: клиентские и серверные. Приложении А отображает полную информацию об этих языках.

Клиентские языки. Как следует из названия, программы на клиентских языках обрабатываются на стороне пользователя, как правило их выполняет браузер. Это и создает главную проблему клиентских языков — результат выполнения программы (скрипта) зависит от браузера пользователя. То есть если пользователь запретил выполнять клиентские программы, то они исполняться не будут, как бы ни желал этого программист. Кроме того, может произойти такое, что в разных браузерах или в разных версиях одного и того же браузера один и тот же скрипт будет выполняться по-разному. С другой стороны, если программист возлагает надежды на серверные программы, то он может упростить их работу и снизить нагрузку на сервер за счет программ, исполняемых на стороне клиента, поскольку они не всегда требуют перезагрузку (генерацию) страницы. Самыми распространенными клиентскими языками являются:

– JavaScript;

– ActionScript;

– Microsoft Silverlight.

Серверные языки. Когда пользователь дает запрос на какую-либо страницу (переходит на неё по ссылке или вводит адрес в адресной строке своего браузера), то вызванная страница сначала обрабатывается на сервере, то есть выполняются все программы, связанные со страницей, и только потом возвращается к посетителю по сети в виде файла.

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

– ASP .NET;

– JSP (Java);

– PHP;

– Perl;


– Ruby (Ruby on Rails).

Для более наглядного представления смотрите рисунок 1.1.



d:\bsuir\diplom\my_diplom\web languages_3__.png

Рисунок 1.1 – Популярные языки веб-программирования

Необходимо, также, понимать различие между языком программирования и фреймворком. Язык программирования – это просто некоторый базовый синтаксис (возможно со стандартными библиотеками), с помощью которого можно создавать приложения. Фреймворк же предоставляет программисту различные библиотеки, значительно упрощающие создание программ и сайтов. Некоторые языки и фреймворки представляют собой неразрывное целое (например, ASP.NET и JSP). Другие языки могут использоваться без фреймворка (PHP и Perl).

Коротко рассмотрим самые популярные языки.

JavaScript – прототипно-ориентированный скриптовый язык программирования. Является диалектом языка ECMAScript [1].

JavaScript обычно используется как встраиваемый язык для программного доступа к объектам приложений. Наиболее широкое применение находит в браузерах как язык сценариев для придания интерактивности веб-страницам.

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

На JavaScript оказали влияние многие языки, при разработке была цель сделать язык похожим на Java, но при этом лёгким для использования непрограммистами.

ActionScript – объектно-ориентированный язык программирования, один из диалектов ECMAScript, который добавляет интерактивность, обработку данных и многое другое в содержимое Flash-приложений [1]. ActionScript исполняется виртуальной машиной (ActionScript Virtual Machine), которая является составной частью Flash Player. ActionScript компилируется в байткод, который включается в SWF-файл.

SWF-файлы исполняются Flash Player-ом. Flash Player существует в виде плагина к веб-браузеру, а также как самостоятельное исполняемое приложение (standalone). Во втором случае возможно создание исполняемых exe-файлов (projector), когда Flash Player включается в swf-файл.

С помощью ActionScript можно создавать интерактивные мультимедиа-приложения, игры, веб-сайты и многое другое.

Silverlight (Microsoft Silverlight) – это программная платформа, включающая в себя плагин для браузера, который позволяет запускать приложения, содержащие анимацию, векторную графику и аудио-видео ролики, что характерно для RIA (Rich Internet application). Версия 2.0 добавила поддержку для языков .NET и интеграцию с IDE.

Рассмотрев наиболее популярные клиентские языки я остановился на JavaScript, так как он обладает рядом преимуществ по сравнению с другими, а имеено:

– кроссплатформенность.

– не требует дополнительного ПО (Flash Player для ActionScript, .NET Framework для Silverlight);

– предоставляет большую интерактивность по сравнению с остальными;

– легкость в изучении.

Теперь рассмотрим серверную часть проекта.

ASP.NET — технология создания веб-приложений и веб-сервисов от компании Майкрософт. ASP.NET имеет преимущество в скорости по сравнению со скриптовыми технологиями, так как при первом обращении код компилируется и помещается в специальный кэш, и впоследствии только исполняется, не требуя затрат времени на парсинг, оптимизацию, и т. д.

JSP (JavaServer Pages) — технология, позволяющая веб-разработчикам легко создавать содержимое, которое имеет как статические, так и динамические компоненты. По сути, страница JSP является текстовым документом, который содержит текст двух типов: статические исходные данные, которые могут быть оформлены в одном из текстовых форматов HTML, SVG, WML, или XML, и JSP элементы, которые конструируют динамическое содержимое [1].

JSP — одна из высокопроизводительных технологий, так как весь код страницы транслируется в java-код сервлета с помощью компилятора JSP страниц Jasper, и затем компилируется в байт-код виртуальной машины java (JVM).

PHP – скриптовый язык программирования общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков программирования, применяющихся для создания динамических веб-сайтов.

Язык и его интерпретатор разрабатываются группой энтузиастов в рамках проекта с открытым кодом. Проект распространяется под собственной лицензией, несовместимой с GNU GPL.

В настоящее время PHP используется сотнями тысяч разработчиков. Согласно рейтингу корпорации TIOBE, базирующемся на данных поисковых систем, в апреле 2011 года PHP находился на 5 месте среди языков программирования. К крупнейшим сайтам, использующим PHP, относятся Facebook, ВКонтакте, Wikipedia и др.

Perl – высокоуровневый интерпретируемый динамический язык программирования общего назначения, созданный Ларри Уоллом, лингвистом по образованию. Название языка представляет собой аббревиатуру, которая расшифровывается как Practical Extraction and Report Language — «практический язык для извлечения данных и составления отчётов». Первоначально аббревиатура состояла из пяти символов и в таком виде в точности совпадала с английским словом pearl («жемчужина»). Но затем стало известно, что такой язык существует, и букву «a» убрали. Талисманом языка Perl является верблюд — не слишком красивое, но очень выносливое животное, способное выполнять тяжёлую работу.

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

Ruby – динамический, рефлективный, интерпретируемый высокоуровневый язык программирования для быстрого и удобного объектно-ориентированного программирования [1]. Язык обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, сборщиком мусора и многими другими возможностями. Ruby близок по особенностям синтаксиса к языкам Perl и Eiffel, по объектно-ориентированному подходу — к Smalltalk.

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

Переменные Ruby передаются по ссылке. Для программиста, привычного к распространённым гибридным языкам программирования, некоторые эффекты такого решения могут показаться неожиданными.

Рассмотрев эту группу языков, я остановился на PHP, так как он обладает несколькими преимуществами по сравнению с остальными:

– традиционностью;

– простотой;

– эффективностью;

– безопасностью;

– гибкостью.

Традиционность

Язык РНР кажется знакомым программистам, работающим в разных областях. Многие конструкции языка позаимствованы из Си, Perl. Код РНР очень похож на тот, который встречается в типичных программах на С или Pascal. Это заметно снижает начальные усилия при изучении РНР. PHP — язык, сочетающий достоинства Perl и Си и специально нацеленный на работу в Интернете, язык с универсальным (правда, за некоторыми оговорками) и ясным синтаксисом.

Простота

Сценарий РНР может состоять из 10 000 строк или из одной строки — все зависит от специфики задачи. Не нужно подгружать все библиотеки, указывать специальные параметры компиляции или что-нибудь в этом роде.

Эффективность

Эффективность является исключительно важным фактором при программировании для многопользовательских сред, к числу которых относится и web. Очень важное преимущество PHP заключается в его «движке». «Движок» PHP не является ни компилятором, ни интерпретатором. Он является транслирующим интерпретатором. Такое устройство «движка» PHP позволяет обрабатывать сценарии с достаточно высокой скоростью.

По некоторым оценкам, большинство PHP-сценариев (особенно не очень больших размеров) обрабатываются быстрее аналогичных им программ, написанных на Perl.

Безопасность

В РНР реализованы механизмы безопасности, находящиеся под управлением администраторов; при правильной настройке РНР это обеспечивает максимальную свободу действий и безопасность. РНР может работать в так называемом безопасном режиме (safe mode), который ограничивает возможности применения РНР пользователями по ряду важных показателей. Например, можно ограничить максимальное время выполнения и использование памяти (неконтролируемый расход памяти отрицательно влияет на быстродействие сервера).

В стандартный набор функций РНР входит ряд надежных механизмов шифрования. РНР также совместим с многими приложениями независимых фирм, что позволяет легко интегрировать его с защищенными технологиями электронной коммерции (e-commerce). Другое преимущество заключается в том, что исходный текст сценариев РНР нельзя просмотреть в браузере, поскольку сценарий компилируется до его отправки по запросу пользователя. Реализация РНР на стороне сервера предотвращает похищение нетривиальных сценариев пользователями, знаний которых хватает хотя бы для выполнения команды View Source.

Гибкость

Поскольку РНР является встраиваемым (embedded) языком, он отличается исключительной гибкостью по отношению к потребностям разработчика. Хотя РНР обычно рекомендуется использовать в сочетании с HTML, он с таким же успехом интегрируется и в JavaScript, WML, XML и другие языки. Кроме того, хорошо структурированные приложения РНР легко расширяются по мере необходимости (впрочем, это относится ко всем основным языкам программирования).

Подводя итог данной части дипломной работы можно сделать краткий вывод. Для написания ПО по управлению анализатором спектра N9320A с web-интерфейсом будет использованя связка – PHP + JavaScript + HTML.




    1. Выбор шаблона проектирования

В разработке программного обеспечения, шаблон проектирования или паттерн – повторимая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста.

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

«Низкоуровневые» шаблоны, учитывающие специфику конкретного языка программирования, называются идиомами. Это хорошие решения проектирования, характерные для конкретного языка или программной платформы, и потому не универсальные.

На наивысшем уровне существуют архитектурные шаблоны, они охватывают собой архитектуру всей программной системы.

Типы шаблонов проектирования :


  1. Основные

  2. Частные

    1. Шаблоны параллельного программирования

    2. MVC

    3. Enterprise

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

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

MVC – схема использования нескольких шаблонов проектирования, с помощью которых модель данных приложения, пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента так, что модификация одного из компонентов оказывает минимальное воздействие на остальные [1]. Данная схема проектирования часто используется для построения архитектурного каркаса, когда переходят от теории к реализации в конкретной предметной области.

Основная цель применения этой концепции состоит в разделении бизнес-логики (модели) от её визуализации (представления, вида). За счет такого разделения повышается возможность повторного использования. Наиболее полезно применение данной концепции в тех случаях, когда пользователь должен видеть те же самые данные одновременно в различных контекстах и/или с различных точек зрения. В частности, выполняются следующие задачи:

– К одной модели можно присоединить несколько видов, при этом не затрагивая реализацию модели. Например, некоторые данные могут быть одновременно представлены в виде электронной таблицы, гистограммы и круговой диаграммы.

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

– Ряд разработчиков специализируются только в одной из областей: или разрабатывают графический интерфейс или разрабатывают бизнес-логику. Поэтому возможно добиться, что программисты, занимающиеся разработкой бизнес-логики (модели), вообще не будут осведомлены о том, какое представление будет использоваться.

Enterprise – этот шаблон проектирования применим ко множеству языков программирования, большинству программного обеспечения, нуждающемуся в хранении информации и к большей части баз данных, но традиционно этот шаблон связывают с приложениями на платформе Java Enterprise Edition, взаимодействующими с реляционными базами данных через интерфейс JDBC, потому что он появился в рекомендациях от фирмы Sun Microsystems.

Рассмотрев вкратце основные шаблоны проектирования, я остановился на MVC, так как она показался мне наиболее понятным и простым в реализации, по сравнению с другими.


  1. Архитектура MVC

В предыдущей главе мы выбрали языки программирования (PHP+JavaScript) и шаблон проектирования (MVC). В этой части дипломной работы подробно будет рассмотрен шаблон проектирования.

Концепция MVC была описана в 1979 году Трюгве Реенскаугом, тогда работающем над языком программирования Smalltalk в Xerox PARC. Оригинальная реализация описана в статье “Applications Programming in Smalltalk-80: How to use Model-View-Controller” [1].

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

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

– Активная модель – модель оповещает представление о том, что в ней произошли изменения, а представления, которые заинтересованы в оповещении, подписываются на эти сообщения. Это позволяет сохранить независимость модели как от контроллера, так и от представления.

Классической реализацией паттерна MVC принято считать версию именно с активной моделью.

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

Основная цель применения этой концепции состоит в разделении бизнес-логики (модели) от её визуализации (представления, вида). За счет такого разделения повышается возможность повторного использования. Наиболее полезно применение данной концепции в тех случаях, когда пользователь должен видеть те же самые данные одновременно в различных контекстах и/или с различных точек зрения. В частности, выполняются следующие задачи:

– К одной модели можно присоединить несколько видов, при этом не затрагивая реализацию модели. Например, некоторые данные могут быть одновременно представлены в виде электронной таблицы, гистограммы и круговой диаграммы.

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

– Ряд разработчиков специализируются только в одной из областей: или разрабатывают графический интерфейс или разрабатывают бизнес-логику. Поэтому возможно добиться, что программисты, занимающиеся разработкой бизнес-логики (модели), вообще не будут осведомлены о том, какое представление будет использоваться.

Концепция MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента:

– Модель (англ. Model). Модель предоставляет знания: данные и методы работы с этими данными, реагирует на запросы, изменяя своё состояние. Не содержит информации, как эти знания можно визуализировать.

– Представление, вид (англ. View). Отвечает за отображение информации (визуализацию). Часто в качестве представления выступает форма (окно) с графическими элементами.

– Контроллер (англ. Controller). Обеспечивает связь между пользователем и системой: контролирует ввод данных пользователем и использует модель и представление для реализации необходимой реакции.

На рисунке 2.1 представлена концепция MVC и взаимодействие между отдельными компонентами.
c:\users\katran\desktop\350px-modelviewcontrollerdiagram2.svg.png

Рисунок 2.1. Концепция Model-View-Controller.

Сплошными линиями показаны прямые связи (вызовы методов, присвоение значений полей), прерывистыми линиями показаны косвенные связи (сообщения через события).
На первый взгляд, кажется, что все сложно, поэтому на рисунке 2.2 представлен непосредственный процесс посылки запроса, его обработки и отображение результата работы. На этом рисунке можно подробно проследить все стадии работы MVC концепции.

На этой диаграмме показана последовательность действий, а также последовательность передаваемых данных: от пользователя, к контроллеру и между модулями.d:\bsuir\diplom\my_diplom\appflowchart.gif


Рисунок 2.2. Диаграмма последовательностей в MVC

d:\bsuir\diplom\my_diplom\struct.png

Рисунок 2.3. Структура файлов в MVC

На рисунке 2.2 отображена структура которая будет реализована в данной дипломной работе. Модели, библиотеки, хелперы, плагины и скрипты – все это представляет собой модель из MVC; отображение и кеш – предсталение; роутинг, безопасность и контроллер приложения – контроллер MVC.

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

MVC шаблон подразумевает под собой так же и специальную структур файлов, входящих в проект. На рисунке 2.3 представлена уже готовая структура файлов.



  1. Разработка графического пользовательского интерфейса

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

На рисунке 3.1 представлена схема работа проекта.

d:\bsuir\diplom\my_diplom\php+apache.png

Рисунок 3.1 – Схема работы PHP и анализатора спектра


Из рисунка 3.1 хорошо видно, что ‘узкое’ место – это обмен данными между PHP процессом и анализатором спектра, поэтому этот обмен будет происходить по API (написанном на С++), что положительно сказывается на скорости.


    1. Разработка ядра проекта (контроллера)

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

Вот так должен выглядеть URL для нашего проекта:
http://diplom/index.php?mod=agilent&act=frequency&page=1,
Где http – протокол, diplom – хост (доменное имя), index.php – название исполняемого файла, mod=agilentназвание файла контроллера для обработки запроса (в данном случае - agilent), act=frequencyназвание функции в контроллере, page=1 – страница №1.

Ниже представлен код страницы index.php.


require_once "./_app/include.php";

$core = new Core(@$_GET['alias'], 'visitor');

// start first mark for Timer

$core->mark('global_start');

$core->process();

?>
Здесь мы подключаем файл include.php, который подключает все необходимые модули и тд. Затем создаем объект класса Core. Потом стартуем таймер Timer (необходим для отображения скорости работы скриптов). И наконец – запускаем процесс обработки входных данных.

Класс Core является главным классом из всего проекта, поэтому рассмотрим основные моменты работы это класса (он является ядром всего проекта). Ниже приведен код конструктора класса Core.

/**

* Constructor



*

* Set default varaible

*

* @param string url = www.example.host/home.html - $alias = home



* @param string visitor|member|admin

* @return void

* @access public

*/

public function __construct($alias = FALSE, $area = 'visitor')



{

// set default charset

$this->setHeaderCharset();
// if user have uncorrect $area - rerirect /404.html

if(!in_array($area, array('visitor', 'member', 'admin')))

$this->redirectPage('404');
// if we view error text, we already have session

if(!isset($_SESSION))

session_start();
if(($area === 'visitor') && isset($_SESSION['member']))

$this->area = 'member';

else

$this->area = $area;


// Parse url

$url = new Url();

$this->alias = $alias;

$this->mod = $url->getParam('mod');

$this->act = $url->getParam('act');

// create request object

$this->request = new Request();

// if debug On save request into debug store

if(_conf('debug') === '1'){

debugStore('request', $this->request);

}

}
Хотя код достаточно комментирован, я подробно расскажу еще раз. Здесь устанавливается кодировка отдаваемого контента (по умолчанию UTF-8). Если была выбрана неправильная точка входа – отображаем страницу с сообщение об ошибке. Стартуем сессию (в ней содержатся все параметры для доступа к анализатору спектра N9320A). Достаем из ULR необходимые параметры. Класс Request содержит все входные данные, которые были переданы сценарию. И последнее что мы делаем – это сохраняем все входные данные в функцию (необходимо для отладки программы).



/**

* Function analyse URL and select any action

*

* @return void



* @access public

*/

public function process()



{

if($this->area === 'visitor'){

if(!isset($_SESSION['visitor'])){

$_SESSION['visitor']['id'] = 0;

$_SESSION['visitor']['fname'] = 'Гость';

$_SESSION['visitor']['lname'] = '';

}

}

elseif($this->area === 'admin'){



if(!isset($_SESSION['admin']) && (($this->mod != 'account') && ($this->act != 'do_login'))){

$this->mod = 'account';

$this->act = 'login';

}

}


// set default layout

$this->setLayout('layout_'.$this->area);


if($this->mod)

$this->processMod();

elseif($this->alias)

$this->processAlias();

else

$this->redirectPage('404');



}
В коде, приведенном выше, происходи сохранение некоторых параметров в сессию, устанавливается layout (интерфейс который отображается пользователю).

Layout – это не полный интерфейс программы а только его часть, которая должна отображаться на всех web страницах проекта (‘шапка’ и ‘подвал’). ProcessMod() – одна из главных функций (методов) всего класса, так как она занимается непосредственной передачей входных параметров к модели, которая занимается их окончательной обработкой и выводом результатов своей работы.

Код функции ProcessMod представлен ниже.


/**

* Function analise $mod, $act and call some class

*

* @return void



* @access private

*/

private function processMod()



{

if(!$this->mod)

_error(404, "Class name:".__CLASS__.'()   line:'.__LINE__.'    function: '.__FUNCTION__.'()    Request hasn\'t Mod param.', __FILE__, __LINE__);
$class_file_path = _conf('path').'/_app/mod/'.$this->mod.'/controller/'.$this->area.'.php';

$view_path = _conf('path').'/_app/mod/'.$this->mod.'/tpl/';

if(!file_exists($class_file_path))

_error(404, 'File: '.$class_file_path.'. Not found.', __FILE__, __LINE__);


// include controller file

require_once $class_file_path;

// create object by 'mod' and 'action'

$class_name = ucfirst($this->area).'_'.ucfirst($this->mod);

if($this->act){

$pre = str_replace('_', ' ', $this->act);

$act_name = 'act'.str_replace(' ', '', ucwords($pre));

}

else



$act_name = 'actIndex';
$obj = new $class_name();

// echo error text if method non exists

if(!method_exists($obj, $act_name))

_error(404, "Class name:".__CLASS__.'()   line:'.__LINE__.'    function: '.__FUNCTION__.'()    Call to undefined method '.$class_name.'->'.$act_name.'().', __FILE__, __LINE__);


$view = $obj->$act_name($this->request);

$templaRs = $this->getTemplateFromView(_conf('path').'/_app/mod/'.$this->mod.'/tpl/'.$view->file_name);

// if view has templates - get their content

if(count($templates) > 0){

$this->parseTemplateFromView($templates, $view);

$this->getTemplateContent($view);

}
$view->content = $this->getFileContent($view_path.$view->file_name, $view->args);

// if view has templates - replace template tags substitute for their content

if(count($templates) > 0){

$this->replaceTemplateTags($view);

}
// it's bad but work quickly

$this->alias_content_text = $view->content;

$this->getFullText();

$this->display();

}
В начале функции проходят стандартные проверки на существование исполняемого файла, а так же на доступ к данной функции. Затем ‘подключается’ сам файл который содержит в себе необходимый нам метод для обработки данных.

Создается объект нужного нам класса (один класс – один файл, это одно из важных допущения в дипломном проекте) $obj = new $class_name().

Строка $view = $obj->$act_name($this->request) – говорит о том что в созданном ранее объекте вызывается метод, название которого содержится в переменной $act_name. Помимо этого в ,вызываемую нами функцию передаются все входные данные – $this->request. Переменная $view содержит полную информация об представлении, которое нам нужно вернуть пользователю, а именно: путь к файлу в котором содержится HTML код, данные, которые нужно передать в этот файл.

Две последние функции: getFullText(); и display();выводят результат работы модели в браузер. Функция getFullText(); достает содержимое файла представления и передает ему данные полученные после работы модели. Функция же display(); просто выводит результат работы getFullText() в браузер, что в конечном счете и видит пользователь за своим монитором.

/**

* Function set $this->full_text



*

* @return void

* @access private

*/

private function getFullText()



{

$file = _conf('path').'/_app/tpl/'.$this->layout.'.php';

$array = array('layout_content' => $this->alias_content_text);
// if debug On - show debug div

if(_conf('debug') === '1'){

$debug_file = _conf('path').'/_app/tpl/template/debug.php';

$debug = array('sql' => debugStore('sql_log'), 'request' => debugStore('request'));

$debug_str = $this->getFileContent($debug_file, $debug);

$array['debug'] = $debug_str;

}
$this->full_text = $this->getFileContent($file, $array);

}


/**

* Function display all content (layout+views)

*

* @return ALL



* @access private

*/

public function display()



{

// _d($this->full_text);

echo $this->full_text;

return;


}



    1. Написание системы обработки входной информации (модель)

Весь проект будет содержать только одну модель Visitor_Agilent, так как проект “завязан” только на одном анализаторе спектра. Название модели выбрано не случайно. Visitor говорит о том что доступ к этой модели имеют все пользователи компьютера (возможны и другие варианта: Member – только для авторизованных пользователей, Adminтолько для администраторов проекта). Agilent это название фирмы производителя анализатора спектра N9320A (полное название фирмы производителя – Agilent Technologies ).

В проекте есть одна модель, но у этого класса имеется много методов, которые отвечают за разные функции:

actHome – отображение страницы по умолчанию;

actFrequency – отображение страницы для управления частотой;

actAmplitude – отображение страницы для управления амплитудой;

actGetData – возвращает данные для JavaScript;

_frequency – возвращает массив данных о частоте;

– и тд;


Ниже приведен пример функции actFrequency:

/**


* Function view frequency page

*

* @param object $request



* @return view

* @access public

*/

public function actFrequency(&$req)



{

$view = new View('visitor_frequency.php');

$view->setParam('page', $req->getInt('page', 1));

return $view;

}

Да, все правильно, она такая маленькая из-за того, что мы выбрали MVC шаблон. Функции передается только один параметр $req, это объект, который содержит все входные данные необходимые для корректной работы сценария. Строка $view = new View('visitor_frequency.php') говорит о том, что мы берем представление с названием visitor_frequency.php . Следующая – говорит о том, что мы передаем в представление параметр page (числовой тип данных). Ну а последняя стока return $view, возвращает все представление (вместе с параметром page ) контроллеру, для отображения в окне браузера.




    1. Разработка графического интерфейса (представление)

На рисунке 3.2 представлент web-интерфейс для управления анализатором спектра.


c:\sites\diplom\www\pic\agilent_1024.png
Рисунок 3.2 – Web-интерфейс для управления анализатором спектра
Как видно из рисунка 3.2 – он полностью повторяет реальный интерфейс прибора. Ниже приведен код страницы visitor_frequency.php .

Нужно отметить такую структуру: <template name="agilent">…template> – это шаблон, который используется для удобства. Так как web-интерфейс должен присутствовать на всех страницах проекта, то нужно чтобы на всех этих страницах был один и тот же код. Количество строк кода необходимого для отображения интерфейса ровняется 78. А теперь представьте, что нам необходимо 15 таких страниц (по одной странице на каждую управляющую кнопку), получается 1170 строчек дублирующих одно и то же. А теперь вопрос: “В 15-ом файле я нашел ошибку, как исправить все остальные 14?”. Ужасно, правда? Поэтому для того, чтобы такой ситуации не было и был придуман такой шаблон . Изменив что-нибудь в нем, мы автоматически из меняем содержимое всех 15 файлов. Правда удобно?

Так же следует отметить, что для написания представления необходимы знания HTML и CSS.

HTML – стандартный язык разметки документов во Всемирной паутине. Большинство веб-страниц создаются при помощи языка HTML (или XHTML). Язык HTML интерпретируется браузерами и отображается в виде документа, в удобной для человека форме.

CSS (каскадные таблицы стилей) – формальный язык описания внешнего вида документа, написанного с использованием языка разметки.

Преимущественно используется как средство описания, оформления внешнего вида веб-страниц, написанных с помощью языков разметки HTML и XHTML.



  1. Разработка API для работы с анализатором спектра N9329A

API (интерфейс программирования приложений) – набор готовых классов, процедур, функций, структур и констант, предоставляемых приложением (библиотекой, сервисом) для использования во внешних программных продуктах. Используется программистами для написания всевозможных приложений.

API предоставляемое анализатором спектра хорошо изложено а мануале по устройству “Agilent N9320A Spectrum Analyzer” [3].

Так как анализатор спектра – это внешнее устройство, то мы не можем обращаться к нему из PHP. Необходимо написать небольшое приложение на С++, которое и будет “общаться” с внешним устройством (анализатор подключен через USB). Поэтому необходимы некоторые изменения в структуру работы проекта изображенного на рисунке 3.1.

На рисунке 4.1 изображена структура взаимодействия PHP процесса и анализатора спектра.d:\bsuir\diplom\my_diplom\php+apache+api.png

Рисунок 4.1 – Измененная схема работы PHP и анализатора спектра

Ниже приведен код программы first.exe, которая и занимается обменом данных между PHP и анализатором спектра.

#include

#include

#include "visa.h"

ViSession defaultRM, viN9320A;

ViStatus errStatus;

ViChar cIdBuff[256] ={0};

char cEnter = 0;

int iResult =0;

int main(int argc, char* argv[])

{

// Program Variable



ViStatus viStatus = 0;

double dStartFreq =0.0;

double dStopFreq =0.0;

double dMarkerAmplitude = 0.0;

// Open an USB session

viStatus=viOpenDefaultRM(&defaultRM);

viStatus=viOpen(defaultRM,"USB0::2391::8472::0163000935::0::INSTR",VI_NULL,VI_NULL, &viN9320A);

if(viStatus){

printf("Could not open a session to USB device!\n");

return 0;

}

// Clear the instrument



viClear(viN9320A);

// Reset the instrument

viPrintf(viN9320A,"*RST\n");

// Set the analyzer to single sweep mode

viPrintf(viN9320A, argv[1]);

// Close the session

viClose(viN9320A);

viClose(defaultRM);

return 0;

}

Давайте подробнее рассмотрим данным пример. В самом начале подключаем необходимые библиотеки: stdio.h – ввод-вывод инфрмации, conio.h – работа в консольном режиме, visa.h – самая главная библиотека (она поставляется вместе с драйверам на анализатор спектра).



Вся программа стоит из того что мы передаем команду вида “SENS:FREQ:SPAN 10MHz” в переменной argv[1], а дальше вызываем стандартные функции из библиотеки visa.h для передачи команды анализатору спектра N9320A.

Все функции хорошо описаны в мануале по устройству и принципам работы с ним.



  1. Разработка графического вывода результатов работы web-интерфейса




    1. Структура графического вывода информации в реальном времени

Главная проблема вывода результатов работы состоит в том, что их нужно показывать пользователю в режиме реального времени (те. без перезагрузки страницы). Для этого мы используем еще одну технологию, которая называется AJAX.

d:\bsuir\diplom\my_diplom\ajax-process-flow.png

Рисунок 5.1 – Блок-схема операций связи,

происходящих между клиентом и сервером

Ajax – это аббревиатура, означающая "Асинхронный JavaScript и XML" (Asynchronous JavaScript and XML). Основное назначение Ajax состоит в предоставлении веб-приложению возможности эффективной обработки взаимодействия между пользователем и веб-страницей, при этом значительно снижаются требования к обновлению или полной перезагрузке страницы при каждом взаимодействии с пользователем. Такой подход предоставляет широкие возможности при использовании обозревателя (аналогичные возможностям настольного приложения или веб-приложения на основе подключаемого модуля). Обработка взаимодействия Ajax осуществляется асинхронно в фоновом режиме. Благодаря этому пользователь может продолжать работу со страницей. Взаимодействие Ajax инициируется посредством кода JavaScript. После выполнения взаимодействия Ajax код JavaScript обновляет исходный текст HTML для страницы. Изменения вносятся немедленно без необходимости обновления страницы. Взаимодействия Ajax могут использоваться для выполнения таких задач, как проверка правильности формата вводимых записей на основе серверной логики (непосредственно во время их ввода пользователем), извлечение подробных данных из сервера, динамическое обновление данных на странице и передача элементов форм страницы.

На рисунке 5.1 представлена блок-схема операций связи, происходящих между клиентом и сервером.

Хорошо, проблему получения данных мы решили, теперь возникает вопрос как непосредственно нарисовать график. Для это го мы будем использовать Canvas.

Canvas – элемент HTML 5, который предназначен для создания растрового изображения при помощи JavaScript.

На рисунке 5.2 представлен уже готовый вариант отображения графика с помощью Canvas.



d:\bsuir\diplom\my_diplom\canvas.png

Рисунок 5.2 – Отображение графика с помощью Canvas элемента



    1. Реализация вывода информации на JavaScripte

Как видно из рисунка 5.2 вся система состоит из двух слоев:

– сетка со всеми надписями;

– сам график на прозрачном фоне.

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

Ниже приведен пример отрисовки сетки (grid).

drowGrid: function()

{

var color = 'rgba(0,0,0, 0.3)';



var lineWidth = 1;

this.canv.save()

this.canv.strokeStyle = color;

this.canv.lineWidth = lineWidth;

// drow line || OY

for(var i = -4; i <= 4; i++){

this.canv.beginPath();

this.canv.moveTo(this.center[0]+i*this.step+0.5, 0);

this.canv.lineTo(this.center[0]+i*this.step+0.5, this.element.height-50);

this.canv.stroke();

}

// drow line || OX



for(var i = -3; i <= 2; i++){

if(i == 2)

this.canv.lineWidth = 2;

else


this.canv.lineWidth = lineWidth;

this.canv.beginPath();

this.canv.moveTo(0, this.center[1]+i*this.step+0.5);

this.canv.lineTo(this.element.width, this.center[1]+i*this.step+0.5);

this.canv.stroke();

}

this.canv.restore();



},

В начале выбираем цвет линий и их ширину. Потом рисуем линии параллельные оси OY с заданным шагом this.step (по умолчанию равен 45 пикселям). И наконец, рисуем линии параллельные оси OX.

Под сеткой оставляем немного места для дополнительной информации типа: амплитуды, частоты и тд.

Ниже представлен кусок кода отвечающий за написание значения амплитуды.

amp: function(amplitude)

{

this.canv.save();



this.canv.fillStyle = '#202020';

this.canv.font = '9px Verdana';

this.canv.textAlign = 'left';

this.canv.clearRect(0, this.element.height-30, this.element.width, 15);

this.canv.fillText('Ampliture (1 grid): '+amplitude, 10, this.element.height-20);

this.canv.restore();

}

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



getData: function()

{

_self = this;



var request = new Request.JSON({

'url':this.get_data_url,

'method': 'get',

'async': false,

'onComplete' : function (data) {

_self.data[_self.data.length] = data;

}

});


request.send();

}

После того как мы получили массив данных мы сохраняем его в переменную, а затем передаем в рекурсивную функцию рисующую график.



drow: function(x_from, y_from, x_to, y_to, data, to, i, y_line){

this.canv.beginPath();

this.canv.moveTo(x_from, y_from);

this.canv.lineTo(x_to, y_to);

this.canv.stroke();

if(i == (to/2).round())

this.getData();

if(i < to){

i++;

setTimeout(function(){



canvas.drow(x_to, y_to, x_to+1, y_line-data[i], data, to, i, y_line);

}, 20);


}

else{


this.data[this.data.length-2] = undefined;

this.recursiveDrow();

}

},

Почему рекурсивная, потому что нужно создать эффект динамического рисования. За рекурсию отвечает данная строка:



setTimeout(function(){canvas.drow(...);}, 20).

Здесь говорится о том, что нужно вызвать функцию canvas.drow() и передать ей данные для отрисовки части графика. Вызвать функцию нужно через 20 миллисекунд.

Так же вы могли заметить что когда мы отрисовали половину графика, то мы выполняем команду this.getData();. Эта команда посылает AJAX запрос на сервер для получения следующей порции данных.

В итоге, совмещая множество технологий таких как: AJAX, Canvas и JavaScript, мы получаем красивый график, отрисованый в режиме реального времени.



  1. Теоретико-экономическое обоснование дипломной работы

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

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

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


  • разработку (проектирование);

  • производство (создание);

  • использование (сопровождение) программных средств.

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



    1. Определение объема и трудоемкости ПО

В данной дипломной работе в качестве единиц измерения объема ПО используется строка исходного кода (LОС)[5].

Преимущества использования строк кода как единиц измерения заключаются в том, что эти единицы:

• отражают сущность труда программистов;

• широко распространены и могут легко адаптироваться;

• позволяют выполнять сопоставление размеров ПО и производи-

тельности в различных группах разработчиков;

• непосредственно связаны с конечным продуктом;

• могут использоваться для оценки работ до завершения проекта;


Таблица 6.1  Характеристика функций ПС и их объем

Номер функции


Наименование (содержание) функций

Объем функций


(усл. маш. команд)

по каталогу

уточнен-ный


101

Организация ввода информации

230

230

102

Контроль, предварительная обработка и ввод информации

160

160

506

Обработка ошибочных и сбойных ситуаций

400

400

107

Синтаксический и семантический анализ входного языка и генерация кодов команд

840

840

109

Организация ввода/вывода информации в интерактивном режиме

250

250

703

Расчет показателей

120

120

707

Графический вывод результатов

1500

1500

Итого:

3500
следующая страница >>


izumzum.ru