Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Средства разработки клиентских программ (Архитектура клиент-сервер)

Содержание:

Введение

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

Технология клиент-сервер по праву считается одним из "китов", на которых держится современный мир компьютерных сетей. Но те задачи, для решения которых она была разработана, постепенно уходят в прошлое, и на сцену выходят новые задачи и технологии, требующие переосмысления принципов клиент-серверных систем. Одна из таких технологий - World Wide Web.

Использование технологии гипертекстовых документов для построения внутренней информационной инфраструктуры компании стимулировало бурное развитие всевозможных систем типа клиент-сервер. Некоторые пытаются противопоставить Web-технологию архитектуре клиент-сервер, однако это заблуждение, поскольку на самом деле Web является развитием данной архитектуры. Можно сказать, что система Web имеет архитектуру клиент-серверы, т. е. с помощью одного клиента можно подключиться ко многим серверам. Web-браузер, который обеспечивает удобный интерфейс с пользователем для доступа к информации, - это лишь вершина айсберга, самый верхний уровень системы Web. Кроме интерфейса любая информационная система должна иметь уровни обработки данных и их хранения. У разработчиков интрасетей часто возникает проблема правильного согласования работы Web с другими элементами системы, например базами данных. Одним из перспективных способов решения этой проблемы являются многоуровневые архитектуры клиент-сервер.

Актуальность темы. Разработка клиентских приложений, удовлетворяющих требованиям пользователей, является одной из важнейших задач при создании программного обеспечения. Обшей тенденцией является усложнение пользовательских интерфейсов. Это связанно как с увеличением функциональности программ, так и с различными и часто изменяющимися условиями их эксплуатации. В результате на пользовательский интерфейс уходит существенная часть общих затрат на разработку программного средства. Поэтому исследования в области человеко-машинных интерфейсов, направленные на уменьшение трудоемкости разработки и сопровождения являются актуальными. Значительный вклад в решение этой проблемы внесли российские и зарубежные ученые: Гаврилова Т.А., Соснин П.И., Хорошевский В.Ф.. Myers В.A., Puerta A.R., Szekely Р.А. и другие.

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

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

При выполнении курсовой работы были поставлены следующие задачи:

  1. рассмотреть основные принципы архитектуры клиент-сервер;
  2. рассмотреть API популярных операционных систем для создания клиентских приложений;
  3. рассмотреть средства создания настольных клиентских приложений;
  4. рассмотреть средства создания клиентских приложений для веб-ресурсов;
  5. рассмотреть веб-фреймворки для создания клиентских приложений;
  6. рассмотреть основные интегрированные системы разработки клиентских приложений.

Целью данной работы является исследование средств разработки клиентских программ.

Объектом исследования является архитектура клиент-сервер.

Предметом исследования в настоящей работе являются средства разработки клиентских программ.

Методологической и теоретической базой исследования служат существующие средства разработки клиентских программ.

Глава 1. Обзор архитектуры клиентских приложений

1.1 Архитектура клиент-сервер

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

  • Прикладной программный интерфейс (Application Programming Interface, API). Набор функций и подпрограмм, обеспечивающих взаимодействие клиентов и серверов
  • Клиент. Объект, запрашивающий информацию но сети. Как правило, это персональный компьютер или рабочая станция, запрашивающая информацию у сервера
  • Промежуточное программное обеспечение. Набор драйверов, прикладных программных интерфейсов и прочего программного обеспечения, позволяющего улучшить взаимодействие между клиентским приложением и сервером
  • Реляционная база данных. База данных, в которой доступ к информации ограничен выбором строк, удовлетворяющих определенным критериям поиска
  • Сервер. Компьютер (как правило, высокопроизводительная рабочая станция, мини-компьютер или мэйнфрейм), хранящий информацию, с которой работают сетевые клиенты
  • Язык структурированных запросов (Structured Query Language, SQL). Разработанный корпорацией IBM и стандартизованный институтом ANSI язык для создания, управления и изменения баз данных

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

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

В этой модели обработка данных приложением распределена (не обязательно поровну) между клиентом и сервером. Обработка данных инициируется и частично управляется клиентом, но не в режиме «ведущий-ведомый», а, скорее, в режиме сотрудничества [3].

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

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

Как предполагает термин, окружение клиент-сервер состоит из клиентов и серверов. Клиентские машины, как правило, представляют собой однопользовательские персональные компьютеры или рабочие станции, предоставляющие конечным пользователям дружественный интерфейс. Клиентская станция обычно имеет наиболее удобный графический интерфейс пользователя, предполагающий наличие окон и мыши. Наиболее известные примеры подобных интерфейсов — интерфейсы операционных систем Microsoft Windows и Macintosh. Клиентские приложения предполагают простоту использования и знакомые инструментальные средства, например, электронные таблицы.

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

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

Есть несколько характеристик, отличающих вычислительную модель клиент-сервер от обычных схем распределенных вычислений.

  • В приложениях клиент-сервер большое внимание уделяется созданию на клиентской машине дружественного пользователю интерфейса. Таким образом, пользователь получает полный контроль над расписанием и режимом работы компьютера, а менеджеры уровня отделов получают возможность реагировать на локальные проблемы.
  • Хотя приложения являются распределенными, в архитектуре клиент-сервер, как правило, используются централизованные корпоративные базы данных. Это позволяет руководству корпорации сохранять полный контроль над инвестициями в информационные системы, а также обеспечивать полную связность всех систем. В то же время такая конфигурация избавляет различные отделы компании от накладных расходов по управлению сложными вычислительными системами, но позволяет им выбирать типы машин и интерфейсы, которые им необходимы для доступа к данным.
  • Как корпоративные пользователи, так и производители отдают предпочтение открытым и модульным системам. Это означает, что пользователю предоставляется более широкий выбор продуктов и большая свобода в объединении оборудования от различных производителей.
  • Компьютерная сеть является ключевым звеном данной архитектуры. Поэтому вопросы сетевого администрирования и сетевой безопасности при работе с информационными системами данного типа имеют приоритет.

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

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

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

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

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

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

Таблица 1.

Достоинства и недостатки архитектуры клиент-сервер

Системная характеристика

Значение

Достоинства

Сеть небольших мощных машин

Если одна машина выйдет из строя, ваша компания все равно сможет продолжать работу

Мощные объединения компьютеров

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

Некоторые рабочие станции столь же мощны, как мэйнфреймы, но их стоимость на порядок ниже

Предоставляя вычислительные мощности за меньшие деньги, система позволяет вам тратить сэкономленные средства на другие приобретения или на увеличение ваших доходов

Открытые системы

Аппаратуру, программы и услуги можно приобретать у разных поставщиков

Легкость наращивания системы

Вашу систему нетрудно модернизировать, как только ваши потребности изменятся

Индивидуальная рабочая среда клиента

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

Недостатки

Слабая поддержка

Отдельные части системы не всегда корректно работают вместе. Бывает довольно трудно найти причину неисправности

Недостаток инструментальных средств обслуживания

При использовании архитектуры клиент-сервер часто приходится искать инструментальные средства на рынке или разрабатывать их самостоятельно

Необходимость переобучения

Философия программирования для Мае или Windows существенно отличается от философии программирования на языке COBOL или С

1.2 Эволюция архитектуры клиент-сервер

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

Однако в окружении, состоящем исключительно из персональных компьютеров, пользователи при совместной работе сталкивались с определенными трудностями. Даже на уровне одного подразделения компании было необходимо поддерживать базу данных, а также форматы и стандарты их использования. Решение проблем дает архитектура клиент-сервер, развернутая на уровне подразделения. Как правило, подобная архитектура включает одну локальную сеть, несколько персональных компьютеров и один или два сервера.

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

1.3 Классы приложений клиент-сервер

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

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

  • Обработка данных на базе хоста. Данная схема не является настоящим приложением клиент-сервер, а относится к традиционному окружению мэйнфрейма, когда вся или практически вся обработка данных осуществляется на главной вычислительной машине. Зачастую в подобной вычислительной среде интерфейс пользователя предоставляет примитивный терминал. Но даже если пользователь сидит за персональным компьютером, роль персонального компьютера в этом случае ограничивается эмуляцией терминала.
  • Обработка данных на базе сервера. Простейшим классом конфигурации клиент-сервер является схема, в которой клиент отвечает лишь за предоставление графического интерфейса пользователя, тогда как практически вся обработка данных осуществляется на сервере.
  • Обработка банных па базе клиента. Данная схема представляет сооои другую крайность. Практически вся обработка данных осуществляется на клиенте, за исключением процедур проверки целостности данных и прочей логики, относящейся к обслуживанию базы данных, которые лучше исполнять на сервере. Как правило, наиболее сложные функции для работы с базой данных располагаются на клиентской стороне. На сегодняшний день подобная схема, возможно, является наиболее распространенной реализацией архитектуры клиент-сервер. Она позволяет пользователю работать с приложениями, соответствующими его локальным потребностям.
  • Совместная обработка данных. В данной конфигурации обработка данных оптимизирована таким образом, чтобы использовать сильные стороны как клиента, так и сервера, а также самого факта распределения данных. Подобные конфигурации гораздо сложнее в установке и обслуживании, но в долговременной перспективе они позволяют обеспечить лучшие показатели производительности и эффективности использования сетевых ресурсов, чем другие методы реализации архитектуры клиент-сервер.

Модель «толстого» клиента стала популярной благодаря появлению таких инструментальных средств как PowerBuilder корпорации Powersoft и SQL Windows корпорации Gupta. Данные инструментальные средства рассчитаны на создание приложений уровня подразделения с поддержкой от 25 до 150 пользователей. Главное достоинство модели «толстого» клиента заключается в том, что она максимально опирается на вычислительные возможности настольного компьютера, освобождая сервер от излишней нагрузки по обработке данных и, таким образом, повышая их эффективность и снижая вероятность того, что сервер станет узким местом системы.

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

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

Вывод по главе

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

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

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

Глава 2. Обзор API для создания клиентских приложений

2.1 Настольные приложения

2.1.1 Создание клиентских приложений в Windows.

Для разработки клиентских приложений для Windows используется совокупность функций для написания ПО, работающих под управлением Microsoft Windows 98, Windows NT или Windows 2000 — Win32 API .

Реализация как МFС, так и Windows Forms основана на вызовах функций Windows API. Эти интерфейсы являются надстройкой над Win32 АPI и разработаны для того чтобы облегчить программирование Windows приложений. МFC и Windоws Fоrms способны повысить производительность работы программистов, но также гораздо менее гибки по сравнению с Win32 API. [10]

После запуска windows-программа находится в состоянии ожидания, она ожидает, когда ей операционная система пошлёт сообщение. Операционная система посылает специально оформленные группы данных, называемых сообщениями. Сообщения бывают разных типов, они взаимодействуют с ОС хаотично, поэтому приложение не может знать, какое сообщение оно получит. Отсюда следует, что логике построения Windows-приложения необходимо обеспечивать корректную и предсказуемую работу при поступлении сообщений любого типа. Здесь можно провести некоторую ана­логию между механизмом сообщений Windows и механизмом прерываний в архитектуре IBM PC. Для обеспечения правильной работы программы программисту необходимо знать правила использования функций интерфейса (API) ОС. Windows поддерживает два типа приложений.

  1. Оконное приложение создаётся с помощью функций API, которые составляют графический интерфейс пользователя (Graphic User Interface, GUI). Оконное приложение - это программа, в которой вывод на терминал производится в графическом виде. В результате работы оконных приложений на экране отображаются специальные объекты — окна. Затем, приложения должны поддерживать эти окна их в актуальных состояниях.
  2. Консольное приложение - это программа, которая работает в текстовом режиме. Консольное приложение в процессе выполнения похоже на программу MS-DOS. Но это только внешние впечатления. Работа консольного приложения осуществляется с помощью специальных функций Windows.

Разница между этими типами Windows-приложений только в том, с какими типами информации они работают.

Основная задача главной функции оконного Windows-приложения состоит в правильной инициализации программы и корректном ее заверше­нии.

Правильная инициализация приложения предполагает выполнение ряда предопределенных шагов.

Под классом окна понимается совокупность присущих ему характеристик, таких как стиль его границ, формы указателя мыши, значков, цвет фона, наличие меню, адрес оконной процедуры, обрабатывающей сообщения этого окна. Класс окна можно впоследствии использовать для создания окон приложения функцией CreateWindow. Характеристики окна описываются с помощью специальной структуры WNDCLASS (или ее рас­ширенного варианта WNDCLASSEX в Win32).

В WinMain определен экземпляр структуры WNDCLASSEX — wc. Первое поле структуры WNDCLASSEX cbSize должно содержать длину структуры. В поле style можно определять стиль границ окна и его поведение при пере­рисовке. Значение стиля является целочисленным и формируется из констант. Каждая константа означает некоторую предопределенную характеристику.

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

Поля cbClsExtra и cbWndExtra служат для указания количества байтов, дополнительно резервируемых в структуре класса окна WNDPROC и структуре параметров окна, которая поддерживается внутри самой системы Windows. Обычно эти поля инициализированы нулевыми значениями.

Дескриптор приложения формируется в поле hlnstance.

В поля Iсоn и hCursor загружаются дескрипторы значка и ука­зателя мыши. После запуска приложения значок будет отображаться на панели задач Windows и в левом верхнем углу окна приложения, а указатель мыши по­явится в области окна. Значки и указатели мыши представляют собой ресурсы и находятся в отдельных файлах. Windows предоставляет в распоряжение программиста ряд стандартных изображений указателей мыши и значков. B фaйлe winuser.h содержатся символические имена констант, обозначающих стандартные указатели мыши и значки.

Последнее действие при описании класса окна — присвоение данному классу уникального имени. Это имя описано в виде ASCIIZ-строки в поле szClassName lpszClassName.

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

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

После описания и регистрации в системе класс окна, приложение на его основе может создать множество различных окон. Создание окна выполняется функцией Win32 API CreateWindowEx. В качестве результата функция возвращает уникальный дескриптор окна hWnd, который необходимо сохранить.

Какой именно кнопке послано сообщение, оконная функция определяет по полю hwnd в структуре сообщения. Наличие одного класса для всех кнопок гарантирует их одинаковое поведение.

Все параметры, передаваемые функции CreateWindowEx, сохраняются в создаваемой Windows внутренней структуре CREATESTRUCT.

Параметр hlnst— дескриптор приложения, создающего окно.

Параметр hMenu — дескриптор главного меню окна.

Параметр hWndParent — дескриптор родительского окна.

Параметр dwStyle определяет стиль окна приложения.

Параметр szTitleName — указатель на ASCII-строку содержащее имя класса окна

Параметр szClassName — указатель на ASCII-строку содержащее текст, помещаемый в заголовок окна.

Параметр dwExStyle задаёт дополнительные стили окна.

В качестве результата функция CreateWindowExA возвращает дескриптор окна hWnd. Он имеет уникальное значение и является одним из важнейших описателей объектов приложения. Он передается как параметр многим функциям Win32 API и как значение полей в некоторых структурах. Дескриптор hWnd однозначно идентифицирует то окно в Windows, для работы с которым вызывается какая-либо функция Win32 API. Также результатом работы функции CreateWindowExA является посылка асинхронного сообщения WMCREATE в оконную функцию приложения.

В случае успешного выполнения функции CreateWindowExA требуемое окно будет создано, но пока это произойдет лишь внутри самой системы Windows — на экране это новое окно пока еще не отобразится. Для того чтобы созданное окно появилось на экране, необходимо применить еще одну функцию Win32 API — ShowWindowA. В качестве параметров этой функции передаются дескриптор hWnd окна, которое необходимо отобразить на экране, и константа, задающая начальный вид окна на экране. В зависимости от значения последнего параметра окно отображается в стандартном виде, развернутым на весь экран или свернутым в значок. Весь вывод на экран должен производиться в оконной функции [11].

Это показывает роль сообщений (и не только WMPAINT), цирку­лирующих в системе.

Сообщение в Win32 - это объект особой структуры, формируемый Windows. Формирование и доставка этого объекта в нужное место в системе позволяют управлять работой как самой системы Windows, так и загруженных Windows-приложений. Инициировать формирование сообщения могут несколь­ко источников: пользователь, само приложение, система Windows, другие прило­жения. Именно наличие механизма сообщений позволяет Windows реализовать многозадачность, которая при работе на одном процессоре является, конечно же, псевдо мультизадачностью. Windows поддерживает очередь сообщений для каждого приложения [5].

Если в системе произошло какое-то событие, например, некоторому приложению необходимо перерисовать свое окно, в результате чего система Windows сформировала сообщение WMPAINT. Данное сообщение попадает в очередь сообщений приложения, создавшего окно.

Выход из цикла обработки сообщений означает одно — необходимо завершить программу. В программе на C/C++ для этого непосредственно за циклом обработки сообщений помешается оператор return: return LpMsg.wParam;

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

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

Таким образом, при поступлении сообщения Windows вызывает оконную функцию и передает ей ряд параметров. Все они берутся из соответствующих полей сообщения. В нотации языка C/C++ заголовок оконной функции описан следующим образом:

LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAH LParam)

Здесь hWnd — дескриптор окна, которому предназначено сообщение; message — идентификатор сообщения, характеризующий тип сообщения; wParam и IParam — дополнительные параметры, являющиеся копиями соответствующих полей струк­туры поступившего сообщения.

Центральным местом оконной функции является синтаксическая конструкция, в задачу которой входит распознавание поступившего сообщения по его типу (параметр message) и передача управления на ту ветвь кода оконной функции, ко­торая продолжает далее работу с параметрами сообщения. В языке C/C++ для этого используется оператор switch (переключатель).

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

2.1.2 Создание клиентских приложений в ОС Linux.

Введение в систему X.

Система X первоначально разработанная в MIT (Массачусетский технологиче­ский институт) вначале 1980 гг., имеет длинную и яркую историю. Она была создана в качестве унифицированной оконной системы для высокопроизводительных рабочих станций того времени.

Одной из наиболее передовых и в результате разочаровывающих характеристик X является жесткая привязка к идеологии "инструментов, а не политики". Это означает, что в системе X не существует определения какого-нибудь пользовательского интерфейса» но имеются средства для его создания. Программист может создавать полностью свою собственную среду рабо­чего стола, добавляя совершенно новые элементы при желании

Х-сервер находится в состоянии ожидания ввода и передаёт нажатия кла­виш и щелчки мыши в приложения Х-клиентам. Такие сообщения называются событиями; они являются ключевыми элементами программирования GUI.

Х-клиент — все программы, использующие X Window System как GUI. Например xterm, xcalc и другие более сложные приложения, например. Abiword. Х-клиент ожидает события от пользователя, которые посылаются Х-сервером, затем он отвечает на них путём отправки серверу сообщений об внесение изменений в изображение.

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

Для генерации сообщений Х-протокола Х-клиент использует библиотеку Xlib. Эта библиотека предлагает свой API, который позволяет кли­ентам отрисовывать простейшие элементы и откликаться на простейший ввод. Xlib является библиотекой очень низкого уровня, и разработка с ее применением даже простого меню, будет неве­роятно трудоемким процессом с сотнями строк кода [9].

Разработчики GUI не могут эффективно программировать непосредственно при помощи Xlib. Для этого им требуется API, делающий более простым создание таких элемен­тов GUI, как списки, панели меню, кнопки и т.д. Эту роль выполняет комплекты инструментальных средств или комплекты элементов интерфейса.

Комплекты инструментов. Оконные менеджеры

Комплект элементов интерфейса - это библиотека GUI, применяемая Х-клиентами для упрощения создания панелей меню, окон и т. д. С помощью комплекта элементов интерфейса программист можете создать окна, флажки и тому подобное посредством вызовов одной функции. Виджеты - это общий термин для обозначения элементов GUI. Они являются универсальными элементами, которые можно найти во всех современных биб­лиотеках GUI.

Из массы комплектов элементов интерфейса для системы X можно выбирать те, которые обладают нужными достоинствами. Вопрос о том какой комплект выбрать является важным проектным решением для приложения, поэтому рекомендуется брать в расчёт следующие факторы:

  • Для чего предназначено приложение?
  • Есть ли библиотеки комплекта элементов у пользователей?
  • Присутствует ли комплект элементов в других популярных ОС?
  • На какой лицензии распространяется комплект?
  • Есть ли поддержка нужного языка программирования?

В течение многих лет наиболее популярными комплектами инструментальных средств были OpenLook, Motif, и Xt, но затем они уступили более совершен­ным комплектам GTK+ и Qt, формирующим основу рабочих столов GNOME и KDE соответственно.

Оконный менеджер или диспетчер отвечает за положение окна на экране. Диспетчер часто поддерживает отдельные "рабочие области", на которые может делиться рабочий стол, чтобы увеличить область экрана, с которой пользователь можете работать. Также оконный диспетчер ответственен за графическое оформление окна, состоящее, обычно, из полосы заголовка и пиктограмм минимизации, максимизации и закрытия окна. Оконные диспетчеры частично обеспечивают внешний вид рабочего стола, напри­мер заголовки окон [12].

Наиболее популярные оконные менеджеры:

  • Metacity — используется для рабочего стола GNOME по умолчанию;
  • KWin—применяется для рабочего стола KDE по умолчанию;
  • Openbox— разработан для запуска на системах с сильно ограниченными ресурсами, запускается на медленных и ста­рых системах;
  • Enlightenment—отображает превосходную графику и спецэффекты.

Оконные диспетчеры в системе X можно переключать.

Введение в GTK+

Вначале GTK+ был лишь частью одного из популярных графических редакторов GNU Imаgе Маnipulation Program (GIMР), от него он и получил своё имя (Thе Gimр ToоlKit). Затем GTK+ стал самостоятельным проектом, сейчас он один из самых мощных и попу­лярных комплектов инструментов.

Комплект GTK+ полностью реализован на языке С и преобладающая часть программного обеспечения GTK+ тоже реализована на С. В GTK, присутствуют привязки к некоторым языкам (language binding), которые позволяют применять GTK+ с предпочитаемыми языками программирования: С++, Python. PHP, Ruby, Perl, C# или Java.

Комплект GTK+ был создан в качестве надстройки для нескольких других библиотек. К этим библиотекам относятся следующие:

  • Glib – это ряд низкоуровневых структур данных, типы, которые обеспечивают многопоточную разработку, циклы событий и динамическую загрузку;
  • GObjec - реализация объектно-ориентированной системы на языке С, благодаря которой не требуется применять язык С++;
  • Pango - поддержка визуализации и форматирования текста;
  • АТК— используется для создания приложений которые пользователи могут запускать используя средства чтения экрана и другие средства доступа;
  • GDK (GIMP Drawing Kit) – используется для обработки визуализации низкоуровневой гра­фики поверх библиотеки Xlib;
  • GdkPixbuf - используется для манипуляции изображениями в программах созданных с помощью GTK+;
  • Xlib – используется для работы с низкоуровневой графикой в системах Linux и UNIX.

GLib и GObject - библиотеки переносимости языка С, на которых основан набор средств GTK+, они определяют эти типы для того, чтобы реализовать возможность межплатформенных разработок.

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

Все современные комплекты инструментов, включая GTK.+, написаны в объектно-ориентированном стиле программирования.

Независимо от того, что набор инструментов GTK+ реализован на чистом С, благодаря библиотеке GObject он имеет поддержку объектов и ООП. Библиотека GObject поддерживает концепцию наследования объектов и полиморфизма с помощью макросов.

Все функции, которые предназначены для создания виджетов, должны возвращать тип GtkWidget [9].

Каркасное приложение средствами GTK+

Далее приведён фрагмент простейшей из программ GUI, созданной средствами GTK+ - отображение окна.

#include <gtk/gtk.h>

int main (int _argc, char *_argv[]) (

GtkWidget *_window;

gtk_init(&_argc, &_argv);

_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_show(_window);

gtk_main ();

return 0;

)

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

Для начала программирования средствами GTK+ необходимо включить заголовочные файлы, необходимые для библиотек GTK+ и связанных с ними библиотек с помощью одного оператора #include <gtk/gtk.h>. Да­лее объявлено окно как указатель на объект Gtkwidget.

Затем для инициализации библиотек GTK+ следует выполнить вызов gtkimt, передав аргументы командной строки _argc и _argv. Это дает возможность GTK+ вы­полнить синтаксический анализ любых параметров командной строки, о которых комплект должен знать. Необходимо всегда инициализировать GTK + таким способом перед вызовом любых функций GTK+.

Суть примера заключается в вызове функции gtkwindownew. Далее приведен ее прототип:

GtkWidget* gtk windownew (GtkWindowType type) ;

Параметр type может принимать в зависимости от назначения окна одно из двух значений:

  • gtk_window_toplevel — стандартное окно с рамкой;
  • gtkwindowpopup — окно без рамки, подходящее для диалогового окна.

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

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

gtk_widget_show(_window);

Эта функция принимает указатель типа Gtkwidget, поэтому нужно просто предостав­ить ссылку на свое окно.

Последним выполняется вызов функции gtk_main. Эта основная функция запус­кает процесс обмена информацией (interactivity process), передавая управление GTK+, и не возвращает его до тех пор, пока не будет выполнен вызов функции gtk_main_quit.

I:\Screenshot from 2015-05-13 09_51_49.png

Рисунок 1 - Простейшей окно, созданное средствами GTK+.

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

Современные оконные системы имеют систему событий и приемники событий, кото­рым адресована эта задача. Общая идея основана на том, что любой пользовательский ввод как правило, при помощи мыши или клавиатуры инициирует событие. Перемещение мыши, например, вызывает "событие маши". Затем используется программный код, который будет ждать приема именно этого события и выполняться, в случае если оно возникнет.

Эти события генерирует система X Window System, но они мало помогут программисту GTK+, т. к. они очень низкоуровневые. Когда про­изводится щелчок кнопкой мыши, X порождает событие, содержащее координаты указателя мыши, а разработчику нужно знать, когда пользователь активизирует виджет [12].

У GTK+ есть собственная система событий и приемников событий, называемых сигналами и обратными вызовами. Их очень легко применять, поскольку для уста­новки обработчика сигнала можно использовать очень полезное свойство языка С, указатель на функцию.

Сигнал GTK+ порождается объектом типа GtkObject, когда происходит нечто, например, ввод пользователя. Функция, связанная с сигналом и, следовательно, вызываемая при любом порождении сигнала, называется функцией обратного вызова.

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

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

void a__callback_function (GtkWidget *widget, gpointer user_data) ;

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

Для связывания функции обратного вызова необходимо вызвать функцию g_signal_connect и передать ей виджет, имя сигнала в виде строки ASCII, указатель на функцию обратного вызова и произвольный указатель:

gulong g_signal_connect (gpointer *object, const gchar *name,

GCallback func, gpointer user data );

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

2.1.3 Платформенно-независимые оконные API

Существуют и другие способы программирования приложений GUI для ОС Linux, — существуют языки программирования со своей собственной поддержкой GUI.

  • Язык Java имеет поддержку программирования GUI с помощью Swing и некоторых более старых API AWT. Внешнее оформление приложений GUI на языке Java может понравиться не всем и на многих более старых компьютерах интерфейс может восприниматься громоздким и медленно реагирующим. Преимущество языка Java в том, что однажды откомпилированный код способен выполняться неизменным на лю­бой платформе с установленной виртуальной машиной Java (Java Virtual Machine), реализация которой существует для Linux, Windows, Mac OS и мобильные устройства.
  • Язык программирования С# похож на язык Java. В ОС Linux приход обще­языковой исполняющейся среды (С# Common Language или CLR) был осуществлён благодаря проек­ту Mono. На платформе Mono язык С# имеет поддержку модели программирования Windows Forms, которая применяется в Windows, а также необходимую привязку к комплекту инструментов GTK+, которая называется Gtk#.
  • Tcl/Tk - это язык сценариев который отлично подходит для быстрого создания интерфейсов GUI и работает с X, Windows и Mac OS. Он является очень удобным для эффективного макетирования или маленьких утилит, которые нуждаются в удобстве сопровождения сценария.
  • Python – также является языком сценариев. В Linux имеется возможность использовать привязку Python к GTK+, и тем самым разрабатывать програм­му GTK+ на языке Python.
  • Perl - является еще одним популярным языком сценариев в Linux. Возможно применять Тk или часть Tcl/Tk, в языке Perl как Perl/Tk.

За независимость от платформы, которую обеспечивают эти языки, приходится платить. Затрудняется совместное использование данных их собственными приложениями, примером является использование операций перетаскивания мышью (drag and drop), сохранение конфигурации не стандарт­ным способом, которое характерно для данного рабочего стола. Зачастую поставщики программного обеспечения на языке Java включают в поставку платформенно-зависимые расширения с целью избежать этих проблем [1].

2.2 Разработка клиентских приложений для web-ресурсов

Веб-приложение (Web-приложение) - это прикладная программа, которая хранится на удаленном сервере и доставляется через Интернет через интерфейс браузера.

Веб-службы по определению являются веб-приложениями, и многие, хотя и не все, веб-приложения содержат веб-приложения.

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

2.2.1 HTML5

HTML5 - это язык программирования, акроним расшифровывается как Hyper Text Markup Language. Это система, которая позволяет изменять внешний вид веб-страниц, а также вносить коррективы в их внешний вид. Он также используется для структурирования и представления контента в Интернете.

С помощью HTML5 такие браузеры, как Firefox, Chrome, Explorer, Safari и другие, могут знать, как отображать определенную веб-страницу, знать, где находятся элементы, где размещать изображения и где размещать текст.

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

Основными достоинствами HTML5 по сравнению с его предшественником (HTML4) является то, что вы можете добавлять мультимедийный контент без использования Flash или другого медиаплеера. Благодаря HTML5 пользователи могут получать доступ к веб-сайтам без подключения к Интернету. К этому добавляется функция перетаскивания, а также онлайн-редактирование документов, которое было популяризировано в Документах Google. Кроме того, вот возможности, которые вы имеете, когда используете HTML5:

Одной из основных особенностей разработки приложений HTML5 является то, что конечный результат полностью доступен. То есть можно получить доступ к этому приложению с компьютера, планшета или мобильного телефона. Даже если меняются устройства, все равно можно получить доступ к веб-приложению по соответствующему URL-адресу, что не относится к мобильному приложению [6].

2.2.2 CSS

Каскадные таблицы стилей (CSS) - это язык таблиц стилей, используемый для описания представления документа, написанного на языке разметки, например HTML. CSS является краеугольной технологией Всемирной паутины, наряду с HTML и JavaScript.

CSS предназначен для разделения представления и содержимого, включая макет, цвета и шрифты. Такое разделение может улучшить доступность контента, обеспечить большую гибкость и контроль в спецификации характеристик презентации, дать возможность нескольким веб-страницам совместно использовать форматирование, указав соответствующий CSS в отдельном файле .css, а также уменьшить сложность и повторяемость структурного контента [7].

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

Каскадирование имен происходит из указанной схемы приоритетов, чтобы определить, какое правило стиля применяется, если конкретному элементу соответствует несколько правил. Эта каскадная схема приоритетов предсказуема [8].

2.2.3 JavaScript

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

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

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

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

Термины Vanilla JavaScript и Vanilla JS относятся к JavaScript, который не распространяется ни на какие фреймворки или дополнительные библиотеки. Скрипты, написанные на Vanilla JS, представляют собой простой код JavaScript.

Хотя между JavaScript и Java есть сходства, в том числе имя языка, синтаксис и соответствующие стандартные библиотеки, эти два языка отличаются друг от друга и сильно различаются по дизайну. На JavaScript повлияли такие языки программирования, как Self и Scheme. Формат сериализации JSON, используемый для хранения структур данных в файлах или их передачи по сетям, основан на JavaScript [5].

2.2.4 Веб фреймворки для разработки клиентских приложений

        1. Angular

Angular — основанная на TypeScript инфраструктура веб-приложений с открытым исходным кодом, возглавляемая Angular Team в Google и сообществом людей и корпорации. Angular - это полное переписывание от той же команды, которая создала AngularJS.

  • Angular не имеет понятия «объем» или контроллеров, вместо этого он использует иерархию компонентов в качестве своей основной архитектурной характеристики.
  • Angular имеет другой синтаксис выражений, фокусируясь на «[]» для привязки свойства и «()» для привязки события;
  • Модульность - основная функциональность перешла на модули;

Angular рекомендует использовать язык Microsoft TypeScript, который включает следующие функции:

  • Статическая типизация, в том числе Generics
  • TypeScript является расширенным набором ECMAScript 6 (ES6) и обратно совместим с ECMAScript 5 (т. Е. JavaScript).
  • Динамическая загрузка
  • Асинхронная компиляция шаблонов
  • Итеративные обратные вызовы, предоставляемые RxJS. RxJS ограничивает видимость состояния и отладку, но их можно решить с помощью реактивных надстроек, таких как ngReact или ngrx.
  • Поддержка Angular Universal, технологии, которая запускает ваше приложение Angular на сервере
  • Имеет собственный набор современных компонентов пользовательского интерфейса, которые работают через Интернет, мобильные и настольные системы, под названием Angular Material [13].

Vue.js

Vue.js — это JavaScript-инфраструктура с открытым исходным кодом для создания пользовательских интерфейсов и одностраничных приложений.

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

Vue использует основанный на HTML синтаксис шаблона, который позволяет связать визуализированный DOM с данными базового экземпляра Vue. Все шаблоны Vue представляют собой действительный HTML, который может быть проанализирован совместимыми со спецификацией браузерами и анализаторами HTML. Под капотом Vue компилирует шаблоны в виртуальные функции рендеринга DOM (виртуальная объектная модель документа (или «DOM»)) позволяет Vue рендерить ваш компонент в его памяти до обновления вашего браузера, что ускоряет все, потому что меньше взаимодействий с браузером В сочетании с системой реактивности Vue может рассчитать минимальное количество компонентов для повторного рендеринга и применить минимальное количество манипуляций с DOM при изменении состояния приложения.

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

        1. React

React (также известный как React.js или ReactJS) - это библиотека JavaScript для создания пользовательских интерфейсов. Он поддерживается Facebook и сообществом отдельных разработчиков и компаний.

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

Вывод по главе

В главе были рассмотрены основные принципы разработки программ для Windows на языках C и C++ с применением Win32 API и одна из самых популярных библиотек GUI для ОС Linux — GTK+.

Win32 API — это совокупность функций для написания ПО, работающее под управлением Microsoft Windows 98, Windows NT или Windows 2000.

После запуска windows-программа находится в состоянии ожидания, она ожидает, когда ей операционная система пошлёт сообщение. Операционная система посылает специально оформленные группы данных, называемых сообщениями.

Также были рассмотрены вопросы взаимодействия приложений с GUI и операционных систем.

Реализация как МFС, так и Windоws Forms основана на вызовах функций Windows API. Эти интерфейсы являются надстройкой над Win32 АPI и разработаны для того чтобы облегчить программирование Windows приложений.

GTK+ соответствует одной из популярнейших интегрированных сред рабочего стола Linux: GNOME (GTK+).

Была рассмотрена разработка приложений при помощи библиотек GTK+/GNOME для разработки приложения с интерфейсом GUI. Рассмотрены принципы работы X Window System и основы применения GTK+, а также механизм сигналов обратного вызова этого набора инст­рументальных средств.

Все библиотеки GUI в Linux расположены поверх низкоуровневой оконной системы, которая называется X Window System (или просто X).

Были рассмотрены средства создания клиентских приложений для web, в том числе популярные web фреймворки: Angular, Vue.js, React.

3. Реализация клиентских приложений.

3.1 Visual Studio

Visual Studio (полная версия) - это "полнофункциональная" и "удобная" среда разработки.

Visual Studio (бесплатные версии "Экспресс" - только до 2017 года) - это функциональные и упрощенные версии полной версии. Функционально-ориентированный означает, что существуют разные версии (Visual Studio Web Developer, Visual Studio С# и т.д.) В зависимости от цели.

Visual Studio (бесплатная версия Community - с 2015 года) является упрощенной версией полной версии и заменяет отдельные экспресс-версии, использовавшиеся до 2015 года.

Обзор возможностей:

  • Разработка. Возможность мгновенной очистки кода и точные результаты поиска.
  • Совместная работа. Совместная работа в рамках рабочего процесса Git-first, функции редактирования и отладки, а также рецензирования кода прямо в Visual Studio.
  • Отладка. Выделение определенных значений и переход к ним; создание автоматических моментальных снимков при выполнении приложения.

Ниже приведено несколько примеров того, как Visual Studio IntelliCode может помочь повысить производительность:

  • обеспечивает контекстно зависимое завершение кода;
  • помогает разработчикам придерживаться шаблонов и стилей написания кода в команде;
  • выполняет поиск трудновыявляемых ошибок в коде;
  • при проверке обращает внимание на те участки кода, которые действительно требуют проверки [14].

3.2 Visual Studio Code

Visual Studio Code - это редактор исходного кода, разработанный Microsoft для Windows, Linux и macOS. Он включает поддержку отладки, встроенный элемент управления Git и GitHub, подсветку синтаксиса, интеллектуальное завершение кода, фрагменты кода и рефакторинг кода. Он легко настраивается, позволяя пользователям изменять тему, сочетания клавиш, настройки и устанавливать расширения, которые добавляют дополнительные функции. Исходный код является бесплатным и открытым исходным кодом и выпущен под разрешающей лицензией MIT. Скомпилированные двоичные файлы являются бесплатными и бесплатными для частного или коммерческого использования.

Visual Studio Code основан на Electron, фреймворке, который используется для развертывания приложений Node.js для рабочего стола, работающего на движке макетов Blink. Хотя он использует платформу Electron, [10] программное обеспечение не использует Atom и вместо этого использует тот же компонент редактора (под кодовым названием «Monaco»), который используется в DevOps Azure (ранее назывался Visual Studio Online и Visual Studio Team Services [15].

3.3 Eclipse

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

Проект Eclipse предоставляет своего рода универсальную инструментальную платформу - открытую расширяемую IDE для чего угодно и ничего особенного. Реальная ценность заключается в том, что плагины для инструментов «учат» платформу тому, как работать с такими вещами, как файлы Java, веб-контент, графика, видео - практически все, что только можно вообразить. Eclipse позволяет разработчикам инструментов независимо разрабатывать инструменты, которые интегрируются с инструментами других людей, поэтому вы не сможете определить, где заканчивается один инструмент, а другой начинается.

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

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

Проект Eclipse охватывает две основные области работы:

  • Инструменты интеграции платформ. Разработка базовых структур и технологий, на которых другие могут создавать инструменты для разработки программного обеспечения всех видов.
  • Инструменты, необходимые для создания и расширения этих платформ. Создание инструментов, необходимых коммиттерам проекта Eclipse для построения платформ интеграции инструментов, и инструментов, необходимых сообществу для расширения и адаптации платформ.

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

Для разработки клиентских приложений имеется готовая сборка — Eclipse IDE for JavaScript and Web Developers

Данный пакет имеет все основные инструменты для любого разработчика клиентских приложений, включая JavaScript, HTML, CSS, поддержку языков XML, клиент Git и Mylyn [16].

Вывод по главе

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

Интегрированная среда разработки Visual Studio — это среда разработки, которая позволяет редактировать, отлаживать и создавать код, а затем публиковать приложения. Интегрированная среда разработки (IDE) — это многофункциональная программа, которую можно использовать для различных аспектов разработки программного обеспечения. Помимо стандартного редактора и отладчика, которые существуют в большинстве сред IDE, Visual Studio включает в себя компиляторы, средства выполнения кода, графические конструкторы и многие другие функции для упрощения процесса разработки программного обеспечения.

Visual Studio Code (VSCode) - это кроссплатформенный (Linux, Mac OS, Windows) редактор, который может быть дополнен плагинами.

Eclipse представляет собой основанную на Java расширяемую платформу разработки с открытым исходным кодом. По сути, это просто среда разработки и набор сервисов для построения приложений на основе встраиваемых компонентов (плагинов). В состав Eclipse входит стандартный набор плагинов, в том числе хорошо известный инструментарий Java Development Tools.

Заключение

Проведённое исследование позволяет сделать следующие выводы.

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

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

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

При написании прикладных программ программистам приходится пользоваться огромным объемом документации. Часто приходится тратить много времени, чтобы понять, как работает та или иная функция и её область ее применения. Ситуация становится хуже, когда разработчики программного обеспечения обладают лишь базовой информацией о механизмах и о внутренних процессах с помощью которых ОС вза­имодействует с приложением.

Наличие хороших знаний об интерфейсе прикладного программирования способно существенно облегчить изучение технологий программирования более высокого уровня, например, использование МFC (Microsoft Foundation Classes) или Windоws Fоrms.

MFC и Windоws Fоrms, действительно способны повысить производительность работы программистов, но также гораздо менее гибки по сравнению с Win32 API. Win32 API даёт разработчикам возможность исполь­зования тех возможностей интерфейсов программирования и ОС, которые являются недоступными в MFC или Windows Forms.

Платформа Microsoft.NET Framework, предназначенная для работы приложений Mi­crosoft.NET, дает большие преимущества разработчикам программ. В частности, она способна преодолеть барьеры языковой несовместимости, допуская создание отдельных компонентов создаваемой системы на различных языках программирования.

Среди других преимуществ Microsoft .NET Framework заслуживает упоминания наличие обширной библиотеки классов, существенно облегчающей решение задач, наиболее часто возникающих при создании автономных программ и Web-приложений. Эта библиотека, насчитывающая десятки тысяч классов, готовых к употреблению, позволяет использовать в своих разработках готовые и отлаженные модули.

В работе была рассмотрена разработка приложений при помощи библиотек GTK+/GNOME для разработки приложения с интерфейсом GUI. Рассмотрены принципы работы X Window System и основы применения GTK+, а также механизм сигналов обратного вызова этого набора инст­рументальных средств.

GTK+ - это библиотека, которая существенно упрощает создание графиче­ских интерфейсов пользователей (Graphical User Interface, GUI), предоставляя набор готовых компонентов, именуемых виджетами, которые вы соединяете вместе с помощью легких в использовании вызовов функций, включенных в логическую структуру приложения.

Список использованной литературы

  1. Бэнкс Алекс, Порселло Ева React и Redux: функциональная веб-разработка. — СПб.: Питер, 2018. — 336 с: ил.
  2. Дженифер Тидвелл. Разработка пользовательских интерфейсов. M.: Питер, 2008 г.- 416 с.
  3. Джеф Раскин. Интерфейс: новые направления в проектировании компьютерных систем. M.: Символ-Плюс, 2010 г.- 416 с.
  4. Колисниченко Д. Н. Самоучитель РНР 5 — СПб.; Наука и Техника, 2007. — 640 с, ил.
  5. Лафоре Роберт. Объектно-ориентированное программирование в С++. М.: Питер, 2011.- 928 с.
  6. Никсон P. Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5. 3-е изд. — СПб.: Питер, 2015. — 688 с: ил.
  7. Макфарланд Д. Новая большая книга CSS. — СПб.: Питер, 2016. — 720 с: ил.
  8. Мейер, Эрик А. CSS. Карманный справочник, 4-е изд. : Пер. с англ. — М. : ООО "И.Д. Вильяме" 2016. — 288 с.: ил. — Парал. тит. англ.
  9. Н. Мэтью.Основы программирования в Linux: Пер. с англ. / Н. Мэтью, Р. Стоуне.— СПб.: БХВ-Петербург, 2011. — 896 с: ил.
  10. Побегайло А. П. Системное программирование в Windows. — СПб.: БХВ-Петербург, 2010.- 1056 с.
  11. П. В. Румянцев. Исследование программ Win32: до дизассемблера и отлад­чика. - М.: Горячая линия-Телеком, 2014. - 367 с.
  12. Роббинс А. Linux: программирование в примерах. Пер с англ. - М.: Мир, 2011. - 656 с.
  13. Фримен А. Angular для профессионалов. — СПб.: Питер, 2018. — 800 с: ил..

Электронные ресурсы:

  1. [Электронный ресурс] URL:

https://docs.microsoft.com/en-us/visualstudio/?view=vs-2019 (дата обращения: 28.05.2019)

  1. [Электронный ресурс] URL:

https://code.visualstudio.com/docs

(дата обращения: 28.05.2019)

  1. [Электронный ресурс] URL: https://www.eclipse.org/downloads/packages/release/2018-09/r/eclipse-ide-javascript-and-web-developers

(дата обращения: 28.05.2019)