ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ Глава 1 Технология программирования. Основные понятия и подходы. Программирование — сравнительно молодая и быстро развивающаяся отрасль науки и техники. Опыт ведения реальных разработок и совершенствования, имеющихся программных и технических средств постоянно переосмысливается, в результате чего появляются новые методы, методологии и технологии, которые, в свою очередь, служат основой более современных средств разработки программного обеспечения. 1.1. Технология программирования и основные этапы ее развития. Технологией программирования Технология программирования представляет собой набор технологических инструкций, включающих: называют совокупность методов и средств, используемых в процессе разработки программного обеспечения. - указание последовательности выполнения технологических операций; - перечисление условий, при которых выполняется та или иная операция; - описания самих операций, где для каждой операции определены исходные данные, результаты, а также инструкции, нормативы, стандарты, критерии и методы оценки и т. п. Структура описания технической операции Методические материалы инструкции, нормативы и стандарты критерии оценки результатов Исходные данные в стандартном представлении (документы, рабочие материалы, результаты предыдущей операции) Технологическая операция Исполнители, программные и технические средства Рис. 1.1 Результаты в стандартном представлении Виды технологий программирования: Технологии, используемые на конкретных этапах разработки или для решения отдельных задач этих этапов. В основе лежит ограниченно применимый метод, позволяющий решить конкретную задачу. Технологии, охватывающие несколько этапов или весь процесс разработки. В основе лежит базовый метод или подход, определяющий совокупность методов, используемых на разных этапах разработки, или методологию. Основные этапы развития программирования, как науки I этап – «Стихийное» программирование. Первые программы имели простейшую структуру. Они состояли из собственно программы на машинном языке и обрабатываемых ею данных. Программа Данные Рис. 1.2. Структура первых программ Основные этапы развития программирования, как науки I этап – «Стихийное» программирование. Появление ассемблеров позволило вместо двоичных или 16-ричных кодов использовать символические имена данных и мнемоники кодов операций. С появлением языков программирования высокого уровня, таких, как FORTRAN и ALGOL, снизился уровень детализации операций. Революционным было появление в языках средств, позволяющих оперировать подпрограммами. Основные этапы развития программирования, как науки I этап – «Стихийное» программирование. Типичная программа того времени состояла из Основная программа основной программы, области глобальных данных набора подпрограмм (в основном библиотечных), выполняющих обработку всех данных или их части. Данные 1 2 n Подпрограммы Рис. 1.3. Архитектура программы с глобальной областью данных Основные этапы развития программирования, как науки I этап – «Стихийное» программирование. Основная программа Глобальные данные Данные 1 Данные 2 Данные n Подпрограммы с локальными данными Рис. 1.4. Архитектура программы, использующей подпрограммы с локальными данными Использовалась разработка «снизувверх» - подход, при котором вначале проектировали и реализовывали сравнительно простые подпрограммы, из которых затем пытались построить сложную программу. Основные этапы развития программирования, как науки II этап – Структурный программированию. подход к Процедурные языки программирования Дальнейший рост сложности и размеров Структурный подход к программированию – включают основные «структурные» операторы это совокупность рекомендуемых технологических разрабатываемого программного приемов, охватывающих выполнение всех этапов передачи управления, поддерживают обеспечения потребовал развития разработки программного обеспечения. В егои вложение подпрограмм, локализацию структурирования данных. основе лежитобласти декомпозиция (разбиение на ограничение «видимости» данных. части) сложных систем с целью последующей Наиболее известные языки этой группы: это Модульное программирование реализации в виде отдельных небольших (до–40 PL/1, 50 операторов) подпрограмм. других выделение групп С появлением подпрограмм, принципов декомпозиции (объектного, логического ALGOL-68, использующих одни и те же глобальные и т. д.) данный способ получил название данные в декомпозиции. отдельно компилируемые Pascal, процедурной модули (библиотеки подпрограмм). С. Основные этапы развития программирования, как науки II этап – Структурный подход к программированию. Структурный подход в Для Технологию разработки сочетании с модульного программного модульным программирования программированием обеспечения Модуль l Модуль k поддерживают позволяет получать большого объема Данные Данные современные достаточно надежные было версии языков программы, размер 1 nl 1 nk предложено которых не Pascal и С (С++), Подпрограммы с Подпрограммы с превышает локальными данными локальными данными использовать языки Ада и 100 000 операторов. Modula. объектный Модули с локальными данными и подпрограммами Основная программа Глобальные данные Данные Данные Данные Данные Рис. 1.5. Архитектура программы, состоящей из модулей подход. Основные этапы развития программирования, как науки III этап – Объектный программированию. подход Объектно-ориентированное программирование – это к технология создания сложного программного обеспечения, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного типа (класса), а классы образуют иерархию с наследованием свойств. Взаимодействие программных объектов в такой системе осуществляется путем передачи сообщений. Архитектура программы при объектноориентированном программировании Объект l Данные Объект L 1 Данные 1 nl Объект S Подпрограммы с локальными данными Данные Данные Данные Данные Данные Данные Данные 1 nk Сообщения nl Объект 2 Подпрограммы с локальными данными Подпрограммы с локальными данными Данные Данные Данные 1 nl Подпрограммы с локальными данными Рис. 1.6. Архитектура программы при объектно- ориентированном программировании Основные этапы развития программирования, как науки III этап – Объектный программированию. подход к Основным достоинством объектноориентированного программирования по сравнению с модульным программированием является «более естественная» декомпозиция программного обеспечения. Это приводит к более полной локализации данных и интегрированию их с подпрограммами обработки. Объектный подход предлагает новые способы организации программ, основанные на механизмах: наследования, полиморфизма, композиции, наполнения. Основные этапы развития программирования, как науки III этап – Объектный программированию. подход к Среды, поддерживающие визуальное программирование: Delphi С++ Builder Visual С++. Результатом визуального проектирования является заготовка будущей программы, в которую уже внесены соответствующие коды. Основные этапы развития программирования, как науки III этап – Объектный программированию. подход к Недостатки объектного подхода к программированию: отсутствие стандартов компоновки двоичных результатов компиляции объектов в единое целое; изменение реализации одного из программных объектов, как минимум, связано с перекомпиляцией соответствующего модуля и перекомпоновкой всего программного обеспечения. Основные этапы развития программирования, как науки IV этап – Компонентный подход и CASEтехнологии. Компонентный подход предполагает построение программного обеспечения из отдельных компонентов физически отдельно существующих частей программного обеспечения, которые взаимодействуют между собой через стандартизованные двоичные интерфейсы. Компонентный подход лежит в основе технологий, разработанных на базе COM, и технологии создания распределенных приложений CORBA. Основные этапы развития программирования, как науки IV этап – Компонентный подход и CASEтехнологии. Технология СОМ определяет общую парадигму взаимодействия программ любых типов: библиотек, приложений, операционной системы. Компьютер 2 Приложение 3 Компьютер 1 Приложение 1 Библиотека Приложение 2 Объект Объект Операционная система Объект Объект Объект Операционная система Рис. 1.7. Взаимодействие программных компонентов различных типов Основные этапы развития программирования, как науки IV этап – Компонентный подход и CASEтехнологии. Объекты СОМ: - включают поля и методы; - могут реализовывать несколько интерфейсов. Классы СОМ: поддерживают наследование интерфейсов, но не поддерживают наследования реализации. Основные этапы развития программирования, как науки IV этап – Компонентный подход и CASEтехнологии. Типы серверов: внутренний сервер; локальный сервер; удаленный сервер. Взаимодействие клиента и сервера обеспечивается базовыми механизмами СОМ или DCOM. При использовании локальных и удаленных серверов в адресном пространстве клиента создается proxyобъект - заместитель объекта СОМ, а в адресном пространстве сервера СОМ заглушка, соответствующая клиенту. Основные этапы развития программирования, как науки Виды компонентных технологий: OLE-automation технология создания программируемых приложений, обеспечивающая программируемый доступ к внутренним службам этих приложений. Диспинтерфейс (dispinterface) - специальный интерфейс, облегчающий вызов функций объекта. ActiveX - технология, построенная на базе OLE- automation, предназначена для создания программного обеспечения как сосредоточенного на одном компьютере, так и распределенного в сети. Основные этапы развития программирования, как науки Преимущества технологии ActiveX: быстрое написание программного кода; открытость и мобильность; возможность написания приложений; большое количество уже существующих бесплатных программных элементов ActiveX; Стандартность. Основные этапы развития программирования, как науки Виды компонентных технологий: Технология CORBA реализует MTS (Microsoft Transaction Server - сервер MIDAS (Multitier Distributed Application Server - управления транзакциями) технология, подход, аналогичный СОМ, на базе обеспечивающая безопасность и стабильную объектов и интерфейсов CORBA. Эту работу распределенных приложений при больших объемахможно передаваемых данных. технологию использовать для создания распределенного программного обеспечения в сервер многозвенных распределенных приложений) - (разнородной) технология, организующая гетерогенной доступ к данным разных компьютеров с учетом вычислительной балансировки нагрузкисреде. сети. 1.2. Проблемы разработки сложных программных систем. Логическая сложность решаемых задач. Факторы, увеличивающие сложность разработки программных систем: сложность формального определения требований к программным системам; отсутствие удовлетворительных средств описания поведения дискретных систем с большим числом состояний при недетерминированной последовательности входных воздействий; коллективная разработка; необходимость увеличения степени повторяемости кодов. 1.2. Проблемы разработки сложных программных систем. Сложность определения требований к программным системам. Факторы, обуславливающие сложность определения требований к программным системам: при определении требований необходимо учесть большое количество различных факторов; разработчики программных систем не являются специалистами в автоматизируемых предметных областях, а специалисты в предметной области не могут сформулировать проблему в нужном ракурсе. 1.2. Проблемы разработки сложных программных систем. Отсутствие удовлетворительных средств формального описания поведения дискретных систем. Использование языков низкого уровня приводит к ранней детализации операций в процессе создания программного обеспечения и увеличивает объем описаний разрабатываемых продуктов. Коллективная разработка. Работая в коллективе целостность проекта. обеспечивается 1.2. Проблемы разработки сложных программных систем. Необходимость увеличения степени повторяемости кодов. На сложность разрабатываемого программного продукта влияет создание библиотек компонентов, которые приходится делать более универсальными. 1.3. Блочно - иерархический подход к созданию сложных систем Большинство сложных систем имеет иерархическую внутреннюю структуру. Это связано с тем, что обычно связи элементов сложных систем различны как по типу, так и по силе, что и позволяет рассматривать эти системы как некоторую совокупность взаимозависимых подсистем. 1.3. Блочно - иерархический подход к созданию сложных систем Каждую подсистему можно разделить на подсистемы. Иерархия «целое-часть» - это типы подсистем по-разному скомбинированные и организованные. Иерархия «простое-сложное» - это когда любая функционирующая система является результатом развития более простой системы. 1.3. Блочно - иерархический подход к созданию сложных систем Части объектов блочно-иерархического подхода: Процесс разбиения сложного объекта на сравнительно независимые части получил название – декомпозиции. Пошаговая детализация – при создании очень сложных объектов процесс декомпозиции выполняется многократно. 1.3. Блочно - иерархический подход к созданию сложных систем Блок 1 Блок 1.1 Блок 1.k1 Блок 2 Блок 2.1 Блок n Блок 1.k2 Блок n.1 Абстракция Объект Конкретизация Результат декомпозиции обычно представляют в виде схемы иерархии. Блок n.kn Уровень 0 Уровень 1 Уровень 2 Рис. 1.8. Соотношение абстрактного и конкретного в описании блоков при блочно-иерархическом подходе Чем больше блок, тем более абстрактным должно быть его описание. 1.3. Блочно - иерархический подход к созданию сложных систем В основе блочно-иерархического подхода лежат декомпозиция и иерархическое упорядочение. Принципы блочно-иерархического подхода: непротиворечивость; полнота; формализация; повторяемость; локальная оптимизация. 1.3. Блочно - иерархический подход к созданию сложных систем Совокупность языков моделей, постановок задач, методов описаний некоторого иерархического уровня принято называть уровнем проектирования. Различные взгляды на объект проектирования принято называть аспектами проектирования. 1.3. Блочно - иерархический подход к созданию сложных систем Использование блочно - иерархического подхода: упрощает проверку работоспособности, как системы в целом, так и отдельных блоков; обеспечивает возможность модернизации систем. Структурный подход учитывает только свойства иерархии «целое-часть», а объектный - использует еще и свойства иерархии «простое-сложное».