Компонентный подход к программированию и CASE-технологии.



Технология программирования. Основные понятия. ТП – это совокупность методов и средств, используемых в процессе разработки ПО.ТП представляет собой набор технологических инструкций, включающих: ¾ Указания последовательности выполняемых технологических операций; ¾ Перечень условий, при которых выполняется та или иная операция; ¾ Описание самих операций, где для каждой операции определены исходные данные, результаты, инструкции, нормативы, стандарты, критерии, методы оценки. Рис.1.1. Структура описания технологических операций. Кроме набора операций, их последовательности технология также определяет способ описания проектируемой системы (модели, используемые на конкретном этапе разработки). Различают технологии, используемые на конкретных этапах разработки или для решения отдельных задач этих этапов, и технологии, охватывающие несколько этапов или весь процесс разработки. В основе первых обычно лежит ограниченно применяемый метод, в основе вторых – базовый метод, или подход, определяющий совокупность методов на разных этапах разработки, или методологию.

Этапы развития технологии программирования

1). «Стихийное» программирование (до середины 60х гг.).

Отсутствовала сформулированная технология, программирование было искусством. Программы имели простейшую структуру (программы на машинном языке и обрабатываемые ими данные).

<<Рис.1.2. Структура простейших программ.

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

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

Рис. 1.3. Структура программ с глобальной областью данных.>>

Было предложено в подпрограмме размещать локальные данные.

 

<<Рис. 1.4. Структура программ, использующих локальные данные.

 

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

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

Объективно это было вызвано несовершенством технологии программирования:

Стихийно использовалась разработка восходящего подхода и т. Д.

Процесс тестирования и отладки программ занимал более 80% времени разработки.

2). «Структурный» подход к программированию (60е – 70е гг.).

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

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

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

1…n1 – подпрограммы с локальными данными.

<<Рис. 1.5. Структура программ, состоящих из модулей.

Использование модульного программирования упростило разработку ПО несколькими программистами: каждый мог разрабатывать свои модули независимо, обеспечивая взаимодействие модулей через межмодульный интерфейс. Также модули без изменений могли быть использованы в других разработках.

Буг: «Структурный» подход в сочетании с модульным программированием позволил получать достаточно надежные программы размером <= 100000 операторов». Недостатки модульного программирования: ошибка в интерфейсе при вызове подпрограммы выявляется только при выполнении программы. При увеличении размера программы вырастает сложность межмодульных интерфейсов и с некоторого момента предусмотреть взаимодействие отдельных частей программы становится практически невозможно. Для разработки ПО большого объема было предложено использовать объектный подход.

3). Объектный подход (середина 80-х – конец 90х гг.).

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

 

<<Рис.1.6. Структура программы при ООП.

 

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

Использование объектного подхода имеет ряд преимуществ, но конкретная реализация в объектно-ориентированных языках (Pascal, C++) имеет недостатки:

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

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

 


Компонентный подход к программированию и CASE-технологии.

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

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

Технология COM фирмы Microsoft является дальнейшим развитием технологии OLE1. Технология COM определяет общую парадигму взаимодействия программ любых видов: библиотек, приложений, операционной системы, т. е. позволяет одной части ПО использовать функции (службы), предоставляемые другой, независимо от того, функционируют ли эти части в пределах одного процесса, в разных процессах на одном компьютере или на разных компьютерах (Рис. 1.7.). Модификация COM, обеспечивающая передачу вызовов между компьютерами, называется DCOM (распред. COM).

 

Рис. 1.7. Взаимодействие программных компонентов различных типов.

 

По технологии COM приложение предоставляет свои службы, используя специальные объекты COM, которые являются экземплярами классов COM. Объект COM, как и обычный объект, включает поля и методы, но в отличие от обычных объектов, объект COM может реализовать несколько интерфейсов, обеспечивающих доступ к его полям и функциям. Это достигается за счет организации отдельной таблицы адресов метода для каждого интерфейса (по типу таблиц виртуальных методов). При этом интерфейс обычно объединяет несколько однотипных функций. Кроме этого классы COM поддерживают наследование интерфейса, но не поддерживают наследование реализации, т. е. наследуют код метода, хотя при необходимости объект класса потока может вызвать метод родителя. Каждый интерфейс имеет имя, начинающееся с буквы I, и глобальный уникальный идентификатор ID. Любой объект COM обязательно реализует интерфейс IUnknown. На схемах этот интерфейс всегда располагается сверху. Использование его позволяет получить доступ ко всем интерфейсам объекта.

Объект всегда функционирует в составе сервера – динамической библиотеки или исполняемого файла, который обеспечивает функционирование объекта.

Различают три типа серверов:

1). Внутренний сервер.

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

 

2). Локальный сервер.

Создается отдельным процессом (модулем .exe), который работает на одном компьютере с клиентом.

3). Удаленный сервер.

Создается процессом, который работает на другом компьютере.

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

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

На базе технологии COM и DCOM были разработаны компонентные технологии, решающие различные задачи разработки ПО:

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

- ActiveX – технология, построенная на базе OLE-automation, предназначенная для создания ПО, как сосредоточенного на одном компьютере, так и распределенного в сети. Предполагает использование визуального программирования для создания компонентов – элементов управления ActiveX. Полученные таким образом элементы управления могут устанавливать на компьютер дистанционно с удаленного сервера, причем устанавливаемый код зависит от используемой ОС. Это позволяет применять элементы управления ActiveX в клиентских частях приложений Internet. Основные преимущества ActiveX:

· Быстрое написание программного кода, так как все действия, связанные с организацией взаимодействия сервера и клиента на программное обеспечение COM, программирование сетевых приложений становится похожим на программирование самого компьютера;

· Открытость и мобильность. Сертификация технологии передана в OpenGroup, как основа открытого стандарта;

· Возможность написания приложений с использованием знакомых приложений, таких как Visual C++, Borland C++ и т.д. и любых средств разработки Java;

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

· Стандартность. Технология ActiveX основана на стандартах Internet (TCP/IP, Java, HTML) с одной стороны и стандартах, необходимых для сохранения совместимости (COM, OLE), с другой.


Платформа .NET

C# (произносится Си-Шарп) - это новый язык программирования от компании Microsoft. Он входит в новую версию Visual Studio - Visual Studio.NET.

Одна из причин разработки нового языка компанией Microsoft - это создание компонентно-ориентированного языка для новой платформы .NET. Другие языки были созданы до появления платформы .NET, язык же C# создавался специально под эту платформу и не несет с собой груза совместимости с предыдущими версиями языков.

Еще одна из причин разработки компанией Microsoft нового языка программирования - это создание альтернативы языку Java. Реализация Java у Microsoft не была лицензионно. Компания Sun, владелица Java, подала на Microsoft в суд, и Microsoft этот суд проиграла. Тогда Microsoft решила вообще отказаться от Java, и создать свой Java-подобный язык, который и получил название C#. Что будет с Java после выхода C# - пока неизвестно. Скорей всего эти языки будут существовать оба, хотя ясно, что одна из целей разработки C# - это противоборство именно с Java

Код, получаемый в результате компиляции программы, написанной на C# выполняется в среде NET Runtime. Среда выполнения NET Runtime основана не на ассемблере (т. е. не на коде, родном для процессора), а на некотором промежуточном коде. Отдаленно он напоминает виртуальную Java машину. Только если в случае Java был только один язык для виртуальной машины, то для NET Runtime таких языков может быть несколько. Теоретически программа для среды NET Runtime может выполняться под любой операционной системой, в которой NET Runtime установлена. Но на практике пока единственная платформа для этого - это Windows.

NET Runtime состоит из нескольких частей. Одна из них - это Common Language Runtime. Это, говоря кратко, это некоторый набор стандартов, которые должны поддерживать все языки платформы .NET. Например, в предыдущих версиях Visual Studio была такая проблема, что разные языки по-разному хранили данные одного по идее типа. Так, скажем, тип целого в Visual Basic'е занимал два байта, а в Visual C++ - четыре. А это порождало проблемы при совместном использовании языков. Common Language Runtime как раз в частности и определяет стандартные для все языков .NET типы данных. И уже есть гарантии, что целый тип в одном языке будет в точности соответствовать одноименному типу в другом.

Еще одна важная часть NET Runtime - это набор базовых классов. Их очень много Кроме того, эти классы относятся не к конкретному языку, а к NET Runtime. То есть мы получается набор классов, общий для всех языков .NET, что достаточно удобно.

Именно NET Runtime берет на себя некоторые рутинные функции. Например, в нем организована сборка мусора. И если раньше программисту приходилось самому освобождать объекты, созданные динамически, то теперь эту задачу берет на себя среда NET Runtime. Еще одно свойство среды NET Runtime - это проверка типов. Означает это вот что. Когда программа выполняется, то в принципе некоторой функции можно подсунуть параметр неправильного типа. Скажем вместо целого подставить действительное число или еще что-нибудь в этом роде. Языки типа C++ свои параметры функций не проверяют, в результате чего записанная переменная большего размера может повредить чужую область памяти и программа может просто рухнуть. Еще классический пример на эту тему - это выход за пределы массива. В NET Runtime же такого невозможно. NET Runtime

Существует несколько языков для NET Runtime. В настоящее время это C#, VB.NET и Visual C++. Кроме того фирма Borland объявила, что ее продукты C++ Builder и Delphi тоже будут поддерживать NET Runtime.


Дата добавления: 2018-05-13; просмотров: 3148; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!