Технологии программирования
Выбери формат для чтения
Загружаем конспект в формате docx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекций «Технологии программирования»
Лекция 1
Современное состояние теории и практики в области программно-технологического обеспечение характеризуется значительной разнородностью применяемых технологий программирования вследствие существенного различия задач, решение которых поддерживают такие технологии. Разработка локальных приложений класса «Рабочий стол» с применение различных методологий анализа и проектирования, разработка приложений для описания схем и управления базами данных, разработка приложений базовой серверной части, клиентских частей, серверов приложений, разработка моделей и методов интеграции распределенной операционной среды – все это порождает необходимость формального и практического определения целого ряда технологий программирования, необходимых для построения полноценного современного программного продукта.
В тоже время, концептуально архитектура современных технологий программирования базируется на общей принципиальной схеме, включающей следующие основные компоненты:
• Система программирования для построения исполняемых программных приложений, обеспечивающих автоматизированную поддержку решения прикладных задач. Система программирования в полном варианте исполнения включает такие компоненты, как язык программирования и его библиотеки функций и классов, текстовый редактор исходного кода, языковой отладчик, транслятор, компилятор, компоновщик исполняемого кода, компонент документирования исходного кода на языке XML.
• Методическая основа прикладного тестирования для проверки соответствия результатов решения прикладных задач с учетом применения разработанного программного приложения.
• Технологический механизм составления и публикации рабочей документации на разработанное программное приложение.
• Методическая основа способов распространения программного продукта, внесения изменений и дополнений и сопровождения программного продукта в целом.
Перечисленные архитектурные компоненты в совокупности и создают современное представление о программном продукте, как результате применения комплекса технологий программирования при организации автоматизированной поддержки решения целевых прикладных задач.
Очевидно, что разнородность применяемых технологий программирования при построении современного программного продукта существенно затрудняет оценку рисков и расчет жизненного цикла созданного программного продукта. Абсолютное большинство описанных в литературе моделей и методов оценки рисков и жизненного цикла программных продуктов основано на том, что программный код представляет собой число алгоритмические последовательности команд и операторов, совершенно не учитывая при этом применение при программировании классов (Class), интерфейсов (Interface), скриптовых процедур (например, процедурный язык psql), сложных методов веб программирования (HTML, CSS), специфики программирования клиентских приложений (Например, на JavaScript) и так далее. Конечно, алгоритмический код достаточно легко оценивать статистическими методами – вероятность ошибок операторов при наборе исходного кода, количество разработанных строк кода – все это является хорошим исходным материалом для расчета рисков и последующей оценки жизненного цикла программного продукта. Но это логика прошлого века. Попытки статистически опираться на спектр решаемых функциональных подзадач, очевидно, не имеет общего пути решения. Прикладные задачи могут существенно различаться. А на уровне кода управления базами данных или веб обработки решаемые подзадачи могут и вовсе просто не иметь прикладного смысла и являться только обеспечивающим инструментом. Поэтому сегодня можно говорить только о базовых критериях оценки SQL для и длительности жизненного цикла современного программного продукта, к числу которых можно отнести следующие ключевые критерии:
• Степень зависимости программного продукта от используемых базовых программных систем (операционная система, система управления базами данных, географическая информационная система, графический объектный редактор и так далее). Из опыта известно, что смена версий базового программного обеспечения регулярно сопровождается изменением интерфейса (например, COM интерфейса) таких систем, что может привести к потере работоспособности программного продукта в целом.
• Применение в программном продукте моделей и методов, не соответствующих общепринятым стандартам также может привести к нарушению работоспособности программного продукта. Например, сетевая модель данных СУБД ORACLE привела к необходимости разработки специфичного раздела языка SQL для поддержки классического реляционного представления содержимого базы данных. Такие SQL сценарии объективно невозможно напрямую перенести в среду другой СУБД, и это также может привести к нарушению ритма применения программного продукта на практике.
• Сегодня в стране активно реализуется государственная программа импортозамещения, особенно критичная для применения базовых программных систем. Продление лицензии на применяемое базовое программное обеспечение может не получить финансирования, или быть заблокированным корпорацией разработчиков. Такой вариант развития событий может привести к полному краху программного продукта. Понятно, что, учитывая вероятность появления такой ситуации, разработка современного программного продукта должна принципиально дистанцироваться от специфики базового программного обеспечения начиная с собственно операционной системы.
• Ряд других критериев в зависимости от прикладной специфики целевых задач и специфики организации соответствующей вычислительной среды.
Лекция 2
Технологии программирования на основе алгоритмического подхода ориентированы на автоматизированную поддержку решения таких прикладных задач, сущность решения которых может быть выражена в виде однозначной последовательности команд, приводящих к одному и тому же результату для одних и тех же исходных данных. Алгоритмический подход, поэтому, называют императивным, командным. Очевидно, что командный поход применим в первую очередь к задачам, реализующим математические вычисления. Алгоритмический подход широко применяется в мире и такой подход ошибочно считать устаревшим. Более того, алгоритмический подход напрямую применяется в объектно-ориентированном подходе при разработке кода объектных методов. Есть масса примеров оптимальности применения алгоритмической методологии для поддержки решения целых спектров прикладных задач.
Как и любая методология анализа и проектирования алгоритмический подход предоставляет разработчикам алгоритмическую модель, инструментами которой можно формально описать командную последовательность решения поставленной задачи. Простота применения алгоритмического подхода связана с тем, что алгоритмическая модель оперирует всего лишь двумя инструментальными единицами – оператор и ветвление. Понятно, что, следуя правилам формальной логики, с помощью этих инструментов можно описать решению любой математически четкой прикладной задачи.
Технологии программирования на основе алгоритмического подхода в чистом виде сегодня используются нечасто (например, с применением систем программирования на основе чистых языков C или Pascal). В тоже время, разработка объектных методов при применении объектно-ориентированного подхода носит число алгоритмический характер (например, для языка C#), основы синтаксиса и семантики процедурного языка SQL серверов имеет алгоритмическую основу – примеры можно продолжать. Другими словами, алгоритмический подход сегодня органично встраивается в технологии программирования, организованные на основе как объектно-ориентированной методологии, так и логико-ориентированной методологии. Классы, интерфейсы и прочие абстрактные построения позволяют многогранно и адекватно описывать сложные конфигурации программно-технологических компонентов, но программная реализация собственно методов, обработчиков событий и прочее выполняется именно в алгоритмическом варианте. Алгоритмический подход сегодня приобретает новые свойства своего применения, когда отладке подлежит не сложное программное приложение в целом, а его отдельные блоки и части.
Системы алгоритмического программирования сопровождаются мощными библиотеками функций (например, MATH), которые органично используются в системах объектно-ориентированного программирования, позволяя разработчику комфортно выполнять алгоритмические расчеты непосредственно в коде, например, на языке C#.
Лекция 3
Базовым принципом объектно-ориентированного подхода является полная классификация предметной области. Понятно, что для системы программирования выполнить этот принцип реально, и именно поэтому вот уже второй десяток лет в мире лидируют в применении студии объектно-ориентированного программирования (например, студия объектно-ориентированного программирования Microsoft Visual Studio 2017). А для прикладных задач объектное представление предметной области напрямую связано с прикладным смыслом решаемой задачи. Поэтому применение системы объектно-ориентированного программирования вовсе не означает объектно-ориентированного характера построенного программного приложения. В тоже время, базовые принципы объектно-ориентированного подхода хорошо применимы на этапе анализа предметной области задачи. На практике обычно так и получается – объектно-ориентированный анализ предметной области и практически алгоритмический способ разработки программного кода. Характерно, что один из авторов языка объектно-ориентированного программирования Страуструп пессимистически отметил, что даже не представляет реальность разработки полноценного объектно-ориентированного программного приложения.
Центральным элементом объектно-ориентированного подхода является объект, состояние которого характеризуется текущими значениями его свойств – именно поэтому объектно-ориентированный подход называют декларативным, описательным. Объект активируется только в результате применения к нему метода класса. Состояние объекта (значения свойств) может измениться и может возникнуть событие (типа OnClick), вызывающее метод обработки такого события. Если к объекту была попытка применения метода другого класса (или вследствие алгоритмической ошибки) возникает ситуация исключения, которое может быть обработано программным способом (конструкции типа try / catch). Над классами могут устанавливаться отношения типа «обобщение – специализация», над объектами тоже могут быть установлены отношения типа «агрегация».
Основным инструментом объектно-ориентированного подходя является объектная модель, которая характеризуется семью базовыми свойствами.
1) Свойство абстрагирования. При выделении класса предметной области набор свойств класса определяется таким образом, чтобы однозначно относить объект к своему классу и однозначно запретить возможность отнесения этого объекта к другому классу. Обычно, вторую часть определения свойства абстрагирования упускают, что может привести к неоднозначности соотнесения объектов предметной области к сформулированным класса, что, в свою очередь, нарушает базовый принцип объектно-ориентированного подхода полной классификации предметной области задачи.
2) Свойство инкапсуляции. Смысл свойства заложен в его названии – «в капсуле», отделение реализации объекта от его интерфейсного описания. Очевидно, что свойство инкапсуляции позволяет относить к одному классу объекты с существенно различной внутренней реализацией. При группировании объектов полностью по внешнему поведению лишило бы смысла всю идею объектно-ориентированного подхода.
3) Свойство типизации – автоматически следует из принципа полной классификации предметной области. Все объекты должны быть типизированы, то есть, изоморфно отнесены к соответствующим классам. На практике в системах программирования часто реализуется свойство полиморфизма – возможности применения к объекту одного класса методов другого класса. С точки зрения объектно-ориентированного подхода это свойство неприемлемо, должно вызывать исключение (нарушение классификации). Неслучайно, что в процессе совершенствования языков программирования свойство полиморфизма практически запрещается и автоматически выполнить преобразование типов становится невозможным.
4) Свойство модульности. Это свойство в объектно-ориентированном программировании приобретает новый специфический смысл. Программные модули по аналогии с классами включают интерфейс и реализацию (interface / implementation), что особенно наглядно было сделано в модулях студии объектно-ориентированного программирования Delphi Borland. Таким образом, в объектной модели модули приобретают смысл физических классов с одним объектом – самим модулем. Свойство модульности существенно расширяет удобство отладки сложных программных приложений, разработанных с применением технологий объектно-ориентированного программирования.
5) Свойство иерархичности. Классы и объекты на основе установленных отношений могут образовывать иерархические структуры. Производное свойство наследования позволяет передавать родительские свойства и методы всем дочерним классам. Конечно, такое производное свойство существенно расширяет возможности классификации предметной области. В тоже время, практика показывает существенное усложнение отладки приложений с иерархиями наследования классов – бывает слишком утомительно контролировать все родительские свойства при выполнение простейших операций над объектами дочерних классов. Библиотеки собственно студий объектно-ориентированного программирования характеризуются весьма разветвленными классовыми иерархиями.
6) Свойство сохраняемости. Это свойство декларирует необходимость сохранения созданного объекта после разрушения породившего его объекта. Вообще, в системах объектно-ориентированного программирования чрезвычайно остро стоит проблема чистка памяти от уже ненужных объектов. В студиях объектно-ориентированного программирования существуют специальные чистильщики памяти, используются принципы «тайм-аута» удаления пассивных объектов и прочее. Для современных компьютеров с размером оперативной памяти 16-32 Гб проблема «загрязнения» памяти не так опасна. Однако, это не снимает ответственности разработчиков за качественную «уборку» операционной среды путем оперативной чистки памяти от закончивших свою работу объектов.
7) Свойство параллелизма. Каждый объект должен работать в архитектуре «клиент – сервер». То есть, приложение должно обеспечить возможность параллельного вызова объекта несколькими другими объектами. Такое свойство накладывает очень жесткие требования к полноценному представлению предметной области и собственно решения прикладной задачи в объектной модели.
Лекция 4
Логико-ориентированный подход сегодня практически не обладает развитой теоретической базой, поэтому количество технологий программирования на основе логико- ориентированного подхода невелико.
Характерным примером такого рода технологий являются технологии на основе языков логического программирования ЛИСП и ПРОЛОГ. Названные языки реализуют принцип исчисления логических выражений, но «не дотягивают» до предикатного уровня за счет отсутствия механизмов обработки кванторов общности и существования. Языковые средства применяются на практике для решения узко специализированных задач.
Гораздо более распространенными сегодня являются программные системы семейства CASE технологий. Одним из авторов CASE подхода является Чен, сформулировавший в 1975 году семантическую модель представления предметной области. В предметной области выделяются сущности (аналоги классов). Каждой сущности определяется атрибутивная схема (аналог реляционного отношения), сущность выражается всем содержимым табличного описания, а каждая строка (кортеж) определяет конкретный объект (экземпляр) предметной области. Сущности организуются в функциональные схемы, которые назвали ER – диаграммами (диаграммы «сущности – связи»), а процесс построения такого рода диаграмм назвали процессом ER – моделирования. Чен ввел понятие «нотация», которая позволяет описать либо все связи одного объекта, либо одну связь двух объектов (нотации Чена).
Основной смысл такого подхода заключается в том, что разработчик сам выделяет сущности в предметной области своей задачи и получает программный инструмент ER – моделирования. Примером подобного CASE продукта является приложение BPMP (Business Process Modeling Program) – программа моделирования бизнес процессов. Рабочие места моделируются как накопители с определенными атрибутивными схемами проходящих через такое рабочее место данных. Потоки (пути перемещения наборов данных между рабочими местами) описывают диаграммные связи. Есть класс, определяющий понятие «Внешний абонент» и другие классы. После набора (из панели компонентов) требуемой схемы выполняется ER – моделирования собственно бизнес – процесса, затем генерируется скрипт, выполняющий разметку соответствующей «базы данных», и далее можно выполнять изучение прецедентных ситуаций для оптимизации целевого бизнес – процесса.
Одним из вариантов развития CASE подхода стала разработка языка UML и возможность качественного документального оформления логического смысла работы программного приложения. Диаграммы прецедентов позволяют оперировать типовыми и стереотипными ситуациями на уровне логического понимания работы программного приложения.
В целом, заявленного применения CASE технологии на практике не получили, и это вполне объективная оценка ситуации. Ведь уровень логического программирования предполагает существование общих теоретических представлений разнородных предметных областей прикладных задач, что составляет проблему фундаментального характера. При принятии ряда ограничений (например, лексикографический подход к представлению содержимого предметной области) существующие технологии программирования позволяют решать многие специализированные задачи.
Лекция 5
Классически базой данных называется организованная совокупность данных и связей между ними. Базы данных собирают и систематизируют прикладные специалисты в самых разнообразных вариантах исполнения – рукописные заметки, чертежи, схемы, зарисовки, фотографии, машинописные фрагменты, цифровые записи на носителях и много другое, что позволяет зафиксировать и сохранить результаты изучения объектов и процессов реального мира. От технологий программирования требуется решить задачу эффективной организации материалов БД для удобной работы с такими материалами пользователям.
В соответствии с классическим определением понятия «база данных» существуют два языка и два класса технологий программирования процессов организации и управления базами данных. Это язык описания данных (ЯОД) и язык манипулирования данными (ЯМД). На протяжении многих лет (работа группы CODASYL в течение 25 лет) предпринимались попытки создания универсального языка описания данных, применимого для любой предметной области. Объективно такая работа не привела к успеху. Поэтому, далее, все усилия разработчиков были перенаправлены на формирование мощного языка манипулирования данными. В результате, повсеместно уверенно победила реляционная модель данных на основе строгого логико-математического аппарата, а лидирующим языком манипулирования данными стал язык SQL (язык структурированных запросов). Сегодня принят единый стандарт – SQL III диалекта. Реляционная модель данных обладает двумя важными свойствами. Во-первых, такая модель базируется на строгом логико-математическом аппарате и позволяет представить содержимое БД в удобном для человека табличном виде (реляционная алгебра оперирует семью базовыми множествами). Но, во-вторых, реляционная модель совершенно не интересуется смыслом данных, оперирую такими данными, как константами. В результате, язык описания данных сводится к простой процедуре описания схем отношений, а вся смысловая нагрузка доступа в БД перекладывается на самого пользователя, оперирующего инструментами языка манипулирования данными (базовый оператор SELECT).
По мере развития технологии БД появилась новая возможность реализации программной технологии организации и управления базами данных – технология SQL-серверов. Такая технология существенно расширила возможности языка описания данных за счет выхода за рамки реляционной модели. К базовым возможностям современных SQL – серверов относятся следующие описательные компоненты расширения языка описания данных:
• Внешние ключи (foreign keys), позволяющие организовывать иерархические структуры над табличными отношениями. В реляционной алгебре понятие ключа отсутствует.
• Триггеры – процедуры, срабатывающие перед или после какого-то события (например, коррекции данных). Это очень мощный механизм, например, при лавинообразной отработке коррекции данных по всей иерархической структуре табличных отношений, или, например, хорошее средство защиты данных в БД от несанкционированного доступа, не только несанкционированной коррекции данных, но и доступа в БД вообще.
• Хранимые процедуры – целые блоки алгоритмического кода, включающего возможности объявления переменных, выполнения ветвлений и прочее. Хранимые процедуры позволяют на уровне языка описания данных реализовывать прикладную специфику предметной области прямо в среде БД.
• Генераторы уникальных чисел – в отличие от соответствующих типов полей в локальных СУБД такие генераторы выдают числа в общепринятом формате integer.
• Пользовательские библиотеки функций (типовой компонент систем алгоритмического программирования), генераторы событий, механизмы назначения грантов для санкционирования доступа и прочее.
Все названные компоненты SQL – серверов, расширяющие возможности реляционной модели, программируются на специальном языке, который сегодня обозначают как PSQL (процедурный SQL). Таким образом, сегодня можно констатировать существование двух базовых разновидностей технологий программирования процессов организации и управления базами данных – технологии SQL – доступа (манипулирования) к содержимому БД и технологии организации и администрирования БД на основе языка PSQL. Сегодня существуют специальные приложения, предоставляющие администраторам БД удобные режимы работы с описаниями БД – IBExpert для SQL – сервера Firebird, или PGADMIN для SQL – сервера PostgreSQL. Технологии программирования манипулирования содержимым баз данных определяются применяемой технологией программирования самого приложения. Например, в C# формируется строка соединения с базой данных, подсоединяется клиентская динамическая библиотека DLL соответствующего SQL – сервера, и, далее, пишутся обычные методы задания параметров и получения соответствующих результатов SQL – запросов.
Появление технологии SQL – серверов и существенное расширений механизмов описания данных позволяет более строго подходить к проблеме извлечения информации из БД. Триггеры, хранимые процедуры и другие компоненты позволяют хранить в БД механизмы управления доступа в БД и получать в результате запросов действительно информацию, а не некоторые совокупности данных или информацию с искажениями. До появления технологии SQL – серверов вся ответственность за извлечение информации из БД ложилась на средства манипулирования данными, то есть на самих пользователей и разработчиков схем БД.
Лекция 6
Совершенствование и развитие веб технологий сегодня характеризуется наибольшей интенсивностью по сравнению с другими технологиями программирования. Это объясняется бурным ростом производительности и возможностей мультимедиа систем передачи данных и вычислительных сетей в целом. Для рассмотрения технологий программирования в среде вычислительных сетей классически можно выделить три уровня программного обеспечения, различающегося составом решаемых задач и программно-технологической реализацией. Соответствующие веб уровни в литературе часто называют «частями» общего веб решения прикладной задачи.
Серверная часть организуется на центральном сетевом компьютере, характеризующимся большой производительностью и объемной дисковой памятью. Обычно такие компьютеры работают под управление специальных операционных систем (например, Windows Server). Серверная часть обслуживает всех клиентов сетевого приложения и использует для синхронизации сетевого доступа веб – сервер (Apache, NGINX и другие). На серверной стороне обычно располагается рабочая серверная БД (под управлением SQL – сервера) и другие разделяемые ресурсы (механизмы авторизации, санкционирования доступа, другие серверные системы (например, ГИС сервер MapServer). Для разработки серверного программно-технологического обеспечения применяются различные технологии программирования. Например, в студии объектно-ориентированного программирования MS Visual Studio разработан специальный аппарат ASPNET, позволяющий выполнять разработку серверной части на стандартном языке C#. Результаты такой разработки обычно оформляются в виде динамических DLL библиотек и располагаются на серверном компьютере в варианте вызываемых методов. Технология ASPNET была разработана с возможностью построения и клиентских частей (на языке HTML) с возможностью вставки визуальных компонентов Windows Forms и методов обработки событий на языке C#. Технология ASPNET активно развивается. Главным недостатком такой технологии является тот факт, что любое событие активности на компьютере клиента приводит к обязательному обращению к серверной части, что может существенно снизить производительность работы приложения и привести к неоправданной загрузке каналов передачи данных, например, значительными по объему фрагментами базы данных, которые нужны для работы клиентской части приложения.
Клиентская часть ориентирована на работу непосредственно на компьютере клиента в среде стандартного браузера, поэтому разработка клиентской части всегда носит специфический характер в аспекте применяемой технологии программирования. Задача заключается в том, чтобы обеспечить большинство действий на клиенте собственно клиентскими обработчиками без обращения к серверной части. Долгое время среди программных технологий разработки клиентских приложений лидировал технология PHP (скриптовый язык для создания веб страниц). За последние годы быстро развивает и получает всеобщее признание более совершенный язык JavaScript, который уже отодвинул применение PHP на второй или далее план. Активно развиваются разработанные ранее, но приобретающие новые возможности языки типа Piton и другие. Все возрастающая популярность технологии JavaScript сегодня привела к построению технологической обертки этого языка и появлению мощной технологии программирования Typescript. Очевидным преимуществом языка Typescript является возможность разработки и серверной и клиентской частей в варианте тонкого клиента, при этом серверная часть, работающая, как и клиентская часть, в стандартном браузере, легко локализуется на конкретном компьютере путем задания домашнего адреса 127.0.0.1.
Сервер приложений является центральным элементом классической трехзвенной сетевой архитектуры. Основной задачей сервера приложений является централизованная обработка прикладных запросов клиентов и возврата клиентам только конечные результаты без необходимости передачи по каналам промежуточных массивов данных. Также, сервер приложений берет на себя обработку сложных вычислительных процедур (например, координатные преобразования) и функционально разгружает работу клиентских приложений, придавая им необходимые простоту и скорость общения с конечными пользователями. Сегодня программно-технологическое обеспечение серверов приложений также разрабатывается в среде стандартных студий программирования и оформляется в виде динамических DLL библиотек. Основной проблемой при этом становится разработка интерфейсов взаимодействия, которые оформляются либо в открытом текстовом формате, либо в общепринятом формате XML.
Таким образом, фактически существуют три класса технологий программирования в среде вычислительных сетей и очевиден тренд разработчиков в стремлении построить единую программную технологию для единого веб программирования.
Лекция 7
Развитие технологий взаимодействия приложений прошло несколько ключевых этапов разрешения одной из сложнейших проблем разработки технологий программирования. К базовым этапам развития технологий взаимодействия приложений можно отнести следующие технологические решения.
• Буфер вставки – копирования. Практически ручная технология переноса данных из одного приложения в другое. Эффективность применения этой технологии не меняется со временем, поскольку для пользователя нет ничего проще набора стандартных комбинаций Ctrl + C, Ctrl + X, Ctrl + V. Современные студии объектно-ориентированного программирования включают в состав библиотек соответствующие классы, позволяющие описывать объект вставки – копирования в виде произвольного объекта заданного класса и выполнять перемещение не просто выделенного текста или изображения, а целых прикладных объектов.
• Технология OLE (Object Linking and Embedding) связывания и внедрения объектов. Компоненты этой технологии встраиваются во взаимодействующие приложения, что, конечно, является серьезным ограничением на ее широкое применение. Проверить наглядно работу программной технологии OLE легко в среде Microsoft Office. Для этого необходимо создать таблицу в приложении Excel. Затем передать это таблицу в документ Word. Выбрав соответствующий пункт меню (конечно, не копировать) и связать таблицу Excel с документом Word в заданном месте документа. Таблица появится в документе. Кроме того, прямо в приложении Word теперь можно открыть полную панель инструментов Excel. Таким образом, кроме собственно табличного объекта в приложение Word осуществилась передача вся линейка инструментов Excel. Если через меню выбрать режим внедрения таблицы, то кроме собственно таблицы в приложении Word окажется усеченная линейка инструментов Excel, то есть вместе с таблицей выполнилось внедрение и определенной части инструментов приложения Excel. Программная технология OLE прошла много редакций и широко применялась преимущественно в продуктах корпорации Microsoft.
• Технология ActiveX представляет собой своеобразный прототип системы Framework, поскольку позволяет транспортировать объекты между приложениями включая методы их управления. Характерной особенностью программной технологии ActiveX является тот факт, что внедрение объекта на компьютер клиента возможно только в том случае, если на компьютере клиента установлено соответствующее программное обеспечение, либо объект упакован в COM оболочку (что само по себе является результатом применения уже другой программной технологии взаимодействия приложений). На практике механизмы ActiveX оказались неудобными и тяжеловесными для широкого применения. Однако разработка такой программной технологии ознаменовало собой реализацию очередного этапа развития технологий взаимодействия в целом.
• Программная технология на основе COM (Component Object Model) модели, предоставляющей разработчикам стандартным образом упаковать объект и методы его управления и передать такой контейнер другому приложению. Помимо сложностей программной реализации идея COM модели показалась настолько перспективной, что корпорация Microsoft всерьез собиралась построить новую версию операционной системы Windows 2000 в COM++ модели, то есть построить интегрированную операционную среду. В такой интегрированной среде прикладного программирования не предполагалось вообще. Построение приложения заключалось бы в сборке в контейнерной среде объектов из доступных серверов (сервер – контейнерная архитектура). Любые программные разработки требовали бы оформления COM++ оболочки, построение которой предполагалось поручать представительствам Microsoft. К счастью, такая идея не была реализована, поскольку задача интеграции операционной среды оставалась решенной только в рамках конкретной операционной системы (Windows).
• Отказавшись от идеи COM++ операционной системы разработчики в Microsoft пришли к выводу о необходимости концептуальной смены образа мышления. В результате в начале нашего века была сформирована новая операционная концепция. Не надо встраивать интеграционные механизмы в операционную систему. Надо просто построить специальную операционную систему над существующими, чтобы приложения можно было бы разрабатывать на логическом уровне программирования без учета специфики операционной системы. А потом внедрять построенное приложение в среду реальной операционной системы. Такая технология получила название DOTNET (.NET), а операционную систему для построения приложений назвали Framework. Такое решение привело к существенному развитию программных технологий с учетом их интеграционных возможностей. Помимо системы программирования на языке C# (библиотека классов языка C# организована на основе строй библиотеки классов MFC языка C++ и библиотеки визуальных компонентов VCL языка Object Pascal студии объектно-ориентированного программирования Borland Delphi. По мере своего развития в сферу интересов студии объектно-ориентированного программирования Microsoft Visual Studio стали вовлекаться другие интеграционные программные технологии. Сегодня, в версии 2017, существуют возможности построения проектов, например, по следующим технологиям:
◦ Универсальное или классическое приложение Windows.
◦ Веб приложение в различных вариантах.
◦ Надстройки и веб надстройки над приложениями MS Office (Excel, Word, Access, Share Point и другие).
◦ Приложение в среде .NET.Core.
◦ Приложение для операционной системы Android.
◦ Приложение для платформы Xamarin.
◦ Облачное приложение Cloud.
◦ Кроссплатформенное приложение для iOS, Android и Windows.
◦ Приложение для iOS смартфонов iPhone и iPad.
◦ Приложение службы WCF.
◦ Приложение на языке F#.
◦ Приложение для технологии Azure.
◦ Приложение на языке JavaScript.
◦ Приложение на языке Python и другие типы проектов.
Из приведенных примеров хорошо видно, какие проблемы развития программных технологий взаимодействия приложений (проблемы интеграции распределенной операционной среды) решают сегодня ведущие разработчики программно-технологического обеспечения ранга Microsoft.
Заключение
С учетом сказанного выше можно сформулировать самую главную тенденцию перспективного развития программных технологий. С учетом существования сегодня десятков разнородных программных технологий и языков программирования интеграции, в первую очередь, должны подлежать собственно языки программирования с учетом кроссплатформенной реализации соответствующих систем программирования. Например, на языке Typescript уже можно разрабатывать однородные серверные и клиентские части сетевых приложений. В тоже время, степень удобства программирования в таких средах сегодня минимальна (разработка на языке JavaScript зачастую ведется просто в системном блокноте Note). Безусловно, требуется стандартизация процедурного языка PSQL и его интеграция с языками разработки программных приложений. Пусть пример с разработкой комплексного языка XAML (HTML + XML) не оправдала надежд. Сама логика развития программных технологий объективно определяет перспективный курс их развития и совершенствования.