Слайд 1Концепции традиционного программирования
Слайд 2История программирования насчитывает уже полвека, если начинать отсчет с середины
50-х годов, когда появился первый язык программирования высокого уровня Fortran.
Этот язык получил широкое. За эти полвека технология программирования обогатилась целым рядом не только практических методов, но и продуктивных концепций, которые и будут предметом краткого анализа в данном разделе.
К настоящему времени можно выделить такие основные концепции программирования:
процедурное программирование;
модульное программирование;
объектно-ориентированное программирование;
модель компонентных объектов COM.
Порядок перечисления этих концепций соответствует и хронологии их зарождения.
Слайд 3«Стихийное» программирование
Этот этап охватывает период от момента появления первых вычислительных
машин до середины 60-х годов XX в. Первые программы имели
простейшую структуру. Они состояли из собственно программы на машинном языке и обрабатываемых ею данных. Сложность программ в машинных кодах ограничивалась способностью программиста одновременно мысленно отслеживать последовательность выполняемых операций и местонахождение данных при программировании.
Структура первых программ
Слайд 4Архитектура программы с глобальной областью
Революционным было появление
в языках средств, позволяющих оперировать подпрограммами.
Подпрограммы
можно было сохранять и использовать в других программах. В результате были созданы огромные библиотеки расчетных и служебных подпрограмм, которые по мере надобности вызывались из разрабатываемой программы.
Типичная программа того времени состояла из основной программы, области глобальных данных и набора подпрограмм (в основном библиотечных), выполняющих обработку всех данных или их части.
Слабым местом такой архитектуры было то, что при увеличении количества подпрограмм возрастала вероятность искажения части глобальных данных какой-либо подпрограммой.
Слайд 5Архитектура программы, использующей подпрограммы с локальными данными
Например, подпрограмма поиска корней
уравнения на заданном интервале по методу деления отрезка пополам меняет
величину интервала. Если при выходе из подпрограммы не предусмотреть восстановления первоначального интервала, то в глобальной области окажется неверное значение интервала. Чтобы сократить количество таких ошибок, было предложено в подпрограммах размещать локальные данные.
Сложность разрабатываемого программного обеспечения при использовании подпрограмм с локальными данными по-прежнему ограничивалась возможностью программиста отслеживать процессы обработки данных, но уже на новом уровне. Однако появление средств поддержки подпрограмм позволило осуществлять разработку программного обеспечения нескольким программистам параллельно.
Слайд 6Структурный подход к программированию
Структурный подход к программированию представляет собой совокупность
рекомендуемых технологических приемов, охватывающих выполнение всех этапов разработки программного обеспечения.
В основе структурного подхода лежит декомпозиция (разбиение на части) сложных систем с целью последующей реализации в виде отдельных небольших (до 40 - 50 операторов) подпрограмм. С появлением других принципов декомпозиции (объектного, логического и т. д.) данный способ получил название процедурной декомпозиции.
В отличие от используемого ранее процедурного подхода к декомпозиции, структурный подход требовал представления задачи в виде иерархии подзадач простейшей структуры. Проектирование, таким образом, осуществлялось «сверху вниз» и подразумевало реализацию общей идеи, обеспечивая проработку интерфейсов подпрограмм. Одновременно вводились ограничения на конструкции алгоритмов, рекомендовались формальные модели их описания, а также специальный метод проектирования алгоритмов - метод пошаговой детализации.
Слайд 7Архитектура программы, состоящей из модулей
Дальнейший рост сложности и размеров разрабатываемого
программного обеспечения потребовал развития структурирования данных. Как следствие этого в
языках появляется возможность определения пользовательских типов данных. Одновременно усилилось стремление разграничить доступ к глобальным данным программы, чтобы уменьшить количество ошибок, возникающих при работе с глобальными данными. В результате появилась и начала развиваться технология модульного программирования. Модульное программирование предполагает выделение групп подпрограмм, использующих одни и те же глобальные данные в отдельно компилируемые модули (библиотеки подпрограмм), например, модуль графических ресурсов, модуль подпрограмм вывода на принтер.
Слайд 8Модули в дальнейшем без изменений можно было использовать в других
разработках, что повысило производительность труда программистов.
Практика показала, что структурный подход
в сочетании с модульным программированием позволяет получать достаточно надежные программы, размер которых не превышает 100 000 операторов. ).
При увеличении размера программы обычно возрастает сложность межмодульных интерфейсов, и с некоторого момента предусмотреть взаимовлияние отдельных частей программы становится практически невозможно. Для разработки программного обеспечения большого объема было предложено использовать объектный подход.
Слайд 9Объектный подход к программированию
Объектно-ориентированное программирование определяется как технология создания сложного
программного обеспечения, основанная на представлении программы в виде совокупности объектов,
каждый из которых является экземпляром определенного типа (класса), а классы образуют иерархию с наследованием свойств. Взаимодействие программных объектов в такой системе осуществляется путем передачи сообщений.
Архитектура программы при объектно-ориентированном программирование
Слайд 10Объектная структура программы впервые была использована в языке имитационного моделирования
сложных систем Simula, появившемся еще в 60-х годах XX в.
Основным
достоинством объектно-ориентированного программирования по сравнению с модульным программированием является «более естественная» декомпозиция программного обеспечения, которая существенно облегчает его разработку. Это приводит к более полной локализации данных и интегрированию их с подпрограммами обработки, что позволяет вести практически независимую разработку отдельных частей (объектов) программы. Кроме этого, объектный подход предлагает новые способы организации программ, основанные на механизмах наследования, полиморфизма, композиции, наполнения. Эти механизмы позволяют конструировать сложные объекты из сравнительно простых. В результате существенно увеличивается показатель повторного использования кодов и появляется возможность создания библиотек классов для различных применений.
Связи модулей нельзя разорвать, но можно попробовать стандартизировать их взаимодействие, на чем и основан компонентный подход к программированию.
Слайд 11Компонентный подход и CASE-технологии
Взаимодействие программных компонентов различных типов
Компонентный подход предполагает
построение программного обеспечения из отдельных компонентов физически отдельно существующих частей
программного обеспечения, которые взаимодействуют между собой через стандартизованные двоичные интерфейсы. В отличие от обычных объектов объекты-компоненты можно собрать в динамически вызываемые библиотеки или исполняемые файлы,
распространять в двоичном виде (без исходных текстов) и использовать в любом языке программирования, поддерживающем соответствующую технологию.
Слайд 12Компонентный подход лежит в основе технологий, разработанных на базе COM
(Component Object Model - компонентная модель объектов), и технологии создания
распределенных приложений CORBA (Common Object Request Broker Architecture - общая архитектура с посредником обработки запросов объектов). Эти технологии используют сходные принципы и различаются лишь особенностями их реализации.
Технология СОМ фирмы Microsoft является развитием технологии OLE I (Object Linking and Embedding - связывание и внедрение объектов), которая использовалась в ранних версиях Windows для создания составных документов. Технология СОМ определяет общую парадигму взаимодействия программ любых типов: библиотек, приложений, операционной системы, т. е. позволяет одной части программного обеспечения использовать функции (службы), предоставляемые другой, независимо от того, функционируют ли эти части в пределах одного процесса, в разных процессах на одном компьютере или на разных компьютерах.
Слайд 13Отличительной особенностью современного этапа развития технологии программирования, кроме изменения подхода,
является создание и внедрение автоматизированных технологий разработки и сопровождения программного
обеспечения, которые были названы CASE-технологиями (Computer-Aided Software/System Engineering - разработка программного обеспечения/программных систем с использованием компьютерной поддержки). Без средств автоматизации разработка достаточно сложного программного обеспечения на настоящий момент становится трудно осуществимой: память человека уже не в состоянии фиксировать все детали, которые необходимо учитывать при разработке программного обеспечения. На сегодня существуют CASE-технологии, поддерживающие как структурный, так и объектный (в том числе и компонентный) подходы к программированию.
Слайд 14Программирование — сравнительно молодая и быстро развивающаяся отрасль науки и
техники. Опыт ведения реальных разработок и совершенствования имеющихся программных и
технических средств постоянно переосмысливается, в результате чего появляются новые методы, методологии и технологии, которые, в свою очередь, служат основой более современных средств разработки программного обеспечения. Исследовать процессы создания новых технологий и определять их основные тенденции целесообразно, сопоставляя эти технологии с уровнем развития программирования и особенностями имеющихся в распоряжении программистов программных и аппаратных средств.