Системы программирования




 

Написание программ практически невозможно без соответствующей системы программирования (среды программирования, или интегрированной среды разработки IDE – Integrated Development Environment). Первая среда разработки была создана для языка Бейсик. Среда программирования включает прежде всего текстовый редактор для создания программы на заданном языке программирования, а также инструменты, позволяющие компилировать или интерпретировать программы на этом языке, тестировать и отлаживать полученные программы. Кроме того, могут быть и другие инструменты, например для анализа программ, контроля версий, автоматического создания кода элементов интерфейса и др.

Различают следующие классы сред программирования (рис. 7.1):

– среды общего назначения;

– языково-ориентированные среды.

 

 

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

– интерпретирующие и компилирующие среды;

– синтаксически-управляемые среды.

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

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

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

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

Система программирования представляет собой интегрированную среду разработки программ, которая содержит:

редактор текста – для создания и редактирования текста программы на языке высокого уровня, т.е. формирования исходного модуля (при сохранении текста программы в файле каждая система программирования по умолчанию дает свое стандартное расширение имени файла, например, системы на основе языка Паскаль дают расширение.pas, системы на основе языка Си++ – расширение.срр);

компилятор – для перевода текста программы с языка высокого уровня в машинные коды, т. е. формирование объектного модуля (например, в системе Turbo Pascal – файл с расширением.tpu; в системе на основе языка Си++ – файл с расширением.obj);

компоновщик – для подключения объектных кодов стандартных команд и формирования загрузочного модуля (файл с расширением.ехе);

загрузчик – для выполнения загрузочного модуля программы.

Интегрированная среда разработки программ позволяет:

– создавать и редактировать исходные тексты программ;

– сохранять исходные тексты программ в файлах;

– считывать файлы с диска;

– осуществлять поиск и исправление ошибок (отладка);

– выполнять программу и просматривать результаты выполнения.

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

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

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

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

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

Парадигма программирования. Слово «парадигма» (от греч. paradeigma) означает «пример, образец». Известный американский философ К. Самюэл дал следующее определение этого понятия. Парадигма – совокупность знаний, методов и ценностей, безоговорочно разделяемых членами научного сообщества. Под парадигмой программирования сегодня понимают некоторый взаимосвязанный набор идей и рекомендаций, определяющих стиль написания программ. Парадигма программирования представляет (и определяет) то, как программист видит выполнение программы. В современном программировании сложилось несколько видов парадигм программирования: императивное, процедурное, объектно-ориентированное, декларативное программирование, к которому относят логическое и функциональное программирование.

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

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

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

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

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

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

В 70-е годы широкое распространение и обоснование получили технологии нисходящей разработки и структурного программирования, модульного программирования. С этим временем связано создание методики управления коллективной разработкой ПС, появление инструментальных программных средств (программных инструментов) поддержки технологии программирования. Развитие технологии структурного программирования связано с публикацией письма Э. Дийкстры (1968) в Ассоциацию вычислительной техники (Association for Computing Machinery, ACM), озаглавленного так: «О вреде использования операторов GOTO». В те времена программы писались с активным использованием операторов безусловного перехода. Обращая внимание на недостатки таких программ, Дийкстра предложил концепцию структурного программирования, позволяющую избежать использования этих операторов. Концепция Дийкстры основывалась на доказательстве Бома и Джакопини, что для записи любой программы, в принципе, достаточно только трех конструкций управления – последовательного выполнения, ветвления и цикла, – т.е. что теоретически необходимость в использовании операторов перехода отсутствует.

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

80-е и 90-е годы знаменательны широким охватом человеческого общества международной компьютерной сетью, персональные компьютеры стали подключаться к ней как терминалы. Это поставило ряд проблем регулирования доступа к компьютерно-сетевой информации (как технологического, так и юридического и этического характера). Остро встала проблема защиты компьютерной информации и передаваемых по сети сообщений. Стали бурно развиваться CASE-технологии (Computer-Aided Software Engineering) разработки ПС и связанные с ними формальные методы спецификации программ.

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

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

 

Технология OLE

 

Следующим шагом эволюции разработки ПО стала технология OLE 1.0, созданная в 1991 г. Это была попытка фирмы Microsoft создать объектно-ориентированный механизм интеграции приложений. Была введена концепция составного документа, который мог содержать объекты других приложений. Программисты трудились над созданием PowerPoint. Они могли создавать картинку и через буфер обмена вставлять ее в документ, но если ее потом требовалось редактировать, то нужно снова использовать буфер обмена и повторять все операции. Никакой связи с редактором не было. Стали применять технологию DDE (Dynamic Data Exchange), позволяющую поддерживать связи с приложением, в котором был создан объект. Теперь при щелчке по объекту в приложении в отдельном окне открывалось приложение для редактирования. Стало возможным связывать объект. Однако технология OLE 1.0 имела ряд недостатков:

1. Связи OLE 1.0 разбивались при перемещении файлов.

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

Все эти проблемы были успешно решены при создании технологии OLE 2.0 в 1993 г, Технологию DDE заменили на протокол облегченного удаленного вызова процедур (LRPC). Разделяемую память заменили механизмом передачи данных UDT (унифицированный механизм передачи данных).

Технология СОМ, созданная в качестве базиса технологии OLE, может быть рассмотрена как третье поколение архитектуры компонентов фирмы Microsoft. Оно вводит понятие «компонентные объекты». Объектно-ориентированное программирование связывает понятия данных и методов. СОМ расширяет эти понятия – теперь объекты могут поддерживать еще и разные интерфейсы. Например, сервер составного приложения может, как поддерживать активизацию на месте для редактирования объекта, так и не поддерживать. Это зависит от использования интерфейса и определяется при программировании параметрами функции Querylnterface.

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

Каждый объект СОМ поддерживает один или несколько интерфейсов. Однако существует один интерфейс, который должен поддерживаться любым объектом СОМ, – это интерфейс lunknown, имеющий три метода: Querylnterface, AddRef и Release.

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

Вместе с Windows NT4 появляется технология DCOM (Distributed COM), расширяющая возможности технологии СОМ для использования в сети. Теперь технология СОМ использует механизм удаленного вызова процедур – RPC. Независимо от того, где находится объект – в другом процессе, на другой машине, – клиентская программа обращается к нему одинаково.

Технология СОМ не является промежуточным ПО, как, например, ODBC. Время выполнения технологии СОМ включается в установку соединения между клиентом и сервером. Если технология СОМ запускается в тот же процесс, что и клиент, то накладные расходы отсутствуют (то же, что и вызов виртуальных функций). Если она запускается отдельно или с другой машины, то это просто удаленный вызов процедуры.

В эпоху создания управляющих элементов для веб-страниц – их называли «управляющие элементы ActiveX» – весь комплекс технологии OLE назвали ActiveX.

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

Первую задачу успешно решил сервер транзакций Microsoft (Microsoft Transaction Server, MTS). Транзакция – это одна атомарная операция. Программист может создать компонент СОМ как DLL для одного приложения и не заботиться о многопоточности и безопасности. MTS Explorer экспортирует компонент СОМ в пакет MTS, и затем программа будет не обращаться к компоненту СОМ непосредственно, а использовать процесс MTS, который и станет контролировать доступ к общим базам данных и вопросы безопасности. MTS обеспечивает прочную модель управления ресурсами.

Также со временем было разработано понятие очередности сообщений (Microsoft Message Query, MSMQ). Очередность сообщений представляет собой концептуальную модель построения распределенных систем. Программа создает сообщение для другого приложения и пересылает его в очередь сообщений. Другое приложение может его считать и ответить. Очередь сообщений асинхронна. Приложение посылает сообщение и не ждет ответа, а продолжает работать. Сообщение может быть послано к не запущенному еще приложению – как только оно запускается, то, выбирая сообщения из очереди, отвечает пославшим их программам. MTSQ – очень мощное средство. Его можно организовать как объект, который сохраняется в случае сбоя и может быть быстро восстановлен.

Таким образом, в технологии СОМ+ объединены технологии COM, MTS и MSTQ.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-04-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: