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

Компонентная разработка программного обеспечения ( CBSE ), также называемая разработкой на основе компонентов ( CBD ), - это отрасль программной инженерии, которая подчеркивает разделение задач в отношении широких функциональных возможностей, доступных в данной программной системе . Это основанный на повторном использовании подход к определению, реализации и составлению слабосвязанных независимых компонентов в системы. Эта практика направлена ​​на получение одинаково широких преимуществ как в краткосрочной, так и в долгосрочной перспективе как для самого программного обеспечения, так и для организаций, спонсирующих такое «программное обеспечение».

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

Компоненты могут создавать или потреблять события и могут использоваться для архитектур, управляемых событиями (EDA).

Определение и характеристики компонентов[ редактировать ]

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

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

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

Однако, когда компоненту необходимо использовать другой компонент для работы, он принимает используемый интерфейс, который определяет необходимые ему службы. На иллюстрациях UML в этой статье используемые интерфейсы представлены символом открытого сокета, прикрепленным к внешнему краю компонента.

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

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

Как показывает опыт инженеров, заменяющих компоненты, компонент B может немедленно заменить компонент A, если компонент B предоставляет по крайней мере то, что предоставлено компонентом A, и использует не больше, чем использованный компонент A.

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

Когда к компоненту необходимо получить доступ или совместно использовать его в контекстах выполнения или сетевых связях, часто используются такие методы, как сериализация или маршаллинг , чтобы доставить компонент к месту назначения.

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

Чтобы написать программный компонент, который можно было бы эффективно повторно использовать, требуются значительные усилия и осведомленность. Компонент должен быть:

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

В 1960-х программисты создали научные библиотеки подпрограмм, которые можно было многократно использовать в широком спектре инженерных и научных приложений. Хотя эти библиотеки подпрограмм эффективно повторно использовали четко определенные алгоритмы , их область применения была ограничена. Коммерческие сайты обычно создавали прикладные программы из многократно используемых модулей, написанных на ассемблере , COBOL , PL / 1 и других языках второго и третьего поколения с использованием как системных, так и пользовательских библиотек приложений.

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

История [ править ]

Идея о том, что программное обеспечение должно быть разбито на компоненты - построено из готовых компонентов - впервые стала заметной в выступлении Дугласа Макилроя на конференции НАТО по разработке программного обеспечения в Гармише , Германия , 1968 г., под названием « Компоненты программного обеспечения массового производства» . [3] Конференция была призвана противостоять так называемому кризису программного обеспечения . Последующее включение Макилроем каналов и фильтров в операционную систему Unix было первой реализацией инфраструктуры для этой идеи.

Брэд Кокс из Stepstone во многом определил современную концепцию программного компонента. [4] Он назвал их программными ИС и намеревался создать инфраструктуру и рынок для этих компонентов, изобретя язык программирования Objective-C . (Он резюмирует этот взгляд в своей книге « Объектно-ориентированное программирование - эволюционный подход» 1986 г.)

Программные компоненты используются в двух разных контекстах и ​​двух видах: i) использование компонентов в качестве частей для создания единого исполняемого файла или ii) каждый исполняемый файл рассматривается как компонент в распределенной среде, где компоненты взаимодействуют друг с другом через Интернет или интрасеть. протоколы связи для IPC (Inter Process Communications). Вышеупомянутое относится к первому виду, а нижнее - к более позднему.

IBM в начале 1990-х гг. Стала лидером в разработке своей системной объектной модели (SOM) . В ответ Microsoft проложила путь к фактическому развертыванию компонентного программного обеспечения с помощью связывания и внедрения объектов (OLE) и модели компонентных объектов (COM). [5] По состоянию на 2010 год существует множество успешных моделей компонентов программного обеспечения.

Архитектура [ править ]

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

Модели компонентов [ править ]

Компонент модели является определение свойств, компоненты должны удовлетворять, методы и механизмы для состава компонентов. [6]

В течение последних десятилетий исследователи и практики предложили несколько компонентных моделей с разными характеристиками. Классификация существующих компонентных моделей приведена в. [6] [7] Примеры компонентных моделей: модель Enterprise JavaBeans (EJB), модель компонентной объектной модели (COM), модель .NET , компонентная модель X-MAN, [8 ] и компонентной модели Common Object Request Broker Architecture (CORBA).

Технологии [ править ]

  • Технологии бизнес-объектов
    • Newi
  • Компонентные программные фреймворки для конкретных областей
    • Расширенная структура компонентов
    • Структура моделирования системы Земля ( ESMF )
    • Платформа MASH IoT для управления активами [9]
    • Компонентная модель KOALA, разработанная для программного обеспечения в бытовой электронике [10] [11]
    • React (библиотека JavaScript)
    • Программная коммуникационная архитектура (JTRS SCA)
  • Компонентно-ориентированное программирование
    • Пакеты, определенные сервисной платформой OSGi
    • Компонентная веб-платформа для модульных js, css и других ресурсов
    • Компонентная объектная модель (OCX / ActiveX / COM) и DCOM от Microsoft
    • TASCS - Центр технологий SciDAC для передовых научных компонентов программного обеспечения
    • Язык программирования Eiffel
    • Enterprise JavaBeans от Sun Microsystems (теперь Oracle )
    • Программирование на основе потоков
    • Модель фрактальных компонентов от ObjectWeb
    • Компонентный каркас MidCOM для Midgard и PHP
    • Oberon , Component Pascal и BlackBox Component Builder
    • Метод rCOS для проектирования на основе компонентных моделей от UNU-IIST
    • Система компонентов SOFA от ObjectWeb
    • Пространство System.ComponentModelимен в Microsoft .NET
    • Unity разработан Unity Technologies
    • Unreal Engine разработан Epic Games
    • UNO из офисного пакета OpenOffice.org
    • VCL и CLX от Borland и аналогичная бесплатная библиотека LCL .
    • XPCOM от Mozilla Foundation
  • Технологии составных документов
    • Активные документы в системе Oberon и конструкторе компонентов BlackBox
    • KParts , технология составных документов KDE
    • Связывание и внедрение объектов (OLE)
    • OpenDoc
  • Компоненты программного обеспечения для распределенных вычислений
    • .NET Remoting от Microsoft
    • Распределенный протокол 9P , разработанный для Plan 9 и используемый Inferno и другими системами.
    • CORBA и компонентная модель CORBA от группы управления объектами
    • D-Bus от организации freedesktop.org
    • DCOM и более поздние версии COM (и COM +) от Microsoft
    • DSOM и SOM от IBM (сейчас списаны)
    • Лед от ZeroC
    • Java EE от Sun
    • Kompics [12] от SICS
    • Универсальные сетевые объекты (UNO) от OpenOffice.org
    • Веб-сервисы
      • ОТДЫХ
    • Zope от Zope Corporation
    • AXCIOMA (компонентная структура для распределенных систем реального времени и встроенных систем) от Remedy IT
    • COHORTE - кроссплатформенная среда выполнения для выполнения и управления устойчивыми и надежными распределенными сервис-ориентированными приложениями на основе компонентов от isandlaTech.
    • Модель обслуживания DX-MAN [13]
  • Общее программирование подчеркивает отделение алгоритмов от представления данных.
  • Языки описания интерфейсов (IDL)
    • Определения интерфейсов открытых служб (OSID)
    • Является частью COM и CORBA
    • Независимый от платформы язык моделирования компонентов
    • SIDL - язык определения научного интерфейса
      • Часть системы взаимодействия языков программирования Babel (SIDL и Babel являются основными технологиями CCA и SciDAC TASCS Center - см. Выше).
    • SOAP IDL от Консорциума World Wide Web (W3C)
    • WDDX
    • XML-RPC , предшественник SOAP
  • Инверсия управления (IoC) и компонентные структуры простого старого C ++ / Java Object (POCO / POJO)
  • Трубы и фильтры
    • Операционная система Unix

См. Также [ править ]

  • Бизнес-логика
  • Модульное программирование
  • Архитектура сервисных компонентов (SCA)
  • Программная коммуникационная архитектура (JTRS SCA)
  • Компонент стороннего программного обеспечения
  • веб-сервис
  • Веб-компоненты

Ссылки [ править ]

  1. ^ Фукалас и др. «Реконфигурация протокола с использованием компонентно-ориентированного проектирования»
  2. Уоллес, Брюс (19 мая 2010 г.). «Отверстие для каждого компонента, и каждый компонент в своем отверстии» . Экзистенциальное программирование. Компонент не существует
  3. ^ Макилрой, Малкольм Дуглас (январь 1969). «Серийные программные компоненты» (PDF) . Software Engineering: Отчет о конференции , организованной Научного комитета НАТО, Гармиш, Германия, 7-11 октября 1968 года . Отдел по научным вопросам, НАТО. п. 79.
  4. ^ Райнер Никамп. «Архитектура программных компонентов» (PDF) . Gestión de Congresos - CIMNE / Институт научных вычислений, Брауншвейгский университет. п. 4 . Проверено 29 июля 2011 . Современная концепция программного компонента во многом определена Брэдом Коксом из Stepstone => язык программирования Objective-C
  5. ^ Рафаэль Gfeller (9 декабря 2008). «Обновление компонентного приложения» . HSR - Hochschule für Technik Rapperswill. п. 4 . Проверено 29 июля 2011 . 1990, IBM изобретает свою системную объектную модель. 1990, как реакция, Microsoft выпустила OLE 1.0 OLE custom controls (OCX)[ постоянная мертвая ссылка ]
  6. ^ a b Crnkovic, I .; Sentilles, S .; Vulgarakis, A .; Chaudron, MRV (2011). «Структура классификации для моделей программных компонентов». IEEE Transactions по разработке программного обеспечения . 37 (5): 593–615. DOI : 10.1109 / TSE.2010.83 . S2CID 15449138 . 
  7. ^ Лау, Кунг-Киу; Ван, Чжэн (2007). «Модели программных компонентов». IEEE Transactions по разработке программного обеспечения . 33 (10): 709–724. DOI : 10.1109 / TSE.2007.70726 . ISSN 0098-5589 . 
  8. ^ Лау, Кунг-Киу; Веласко Элизондо, Перла; Ван, Чжэн (2005). Heineman, Джордж Т .; Црнкович, Ивица; Schmidt, Heinz W .; Стаффорд, Джудит А .; Шиперски, Клеменс; Валлнау, Курт (ред.). «Экзогенные коннекторы для программных компонентов». Компонентная разработка программного обеспечения . Конспект лекций по информатике. Springer Berlin Heidelberg. 3489 : 90–106. DOI : 10.1007 / 11424529_7 . ISBN 9783540320494. S2CID  17971442 .
  9. ^ MASH определяет активы как людей, собственность и информацию, а управление - как мониторинг, контроль и настройку. Представленный на конференции IEEE IoT 2013 в Маунтин-Вью, MASH включает в себя полную среду IDE, клиент Android и среду выполнения. "МАШ YouTube канал"
  10. ^ Компонентно-ориентированный подход - идеальный способ справиться с разнообразием программного обеспечения в бытовой электронике. Модель Koala, используемая для встраиваемого программного обеспечения в телевизоры, допускает позднюю привязку повторно используемых компонентов без дополнительных накладных расходов. [1]
  11. ^ Модель компонентов для встроенных устройств, таких как телевизор, разработанная Philips на основе статьи ван Оммеринга, Р .: Коала, компонентная модель для программного обеспечения бытовой электроники. [2] Архивировано 9 августа 2014 г.в Wayback Machine
  12. ^ Arad, Космин (апрель 2013 г. ). Модель программирования и протоколы для реконфигурируемых распределенных систем (PDF) . Докторская диссертация . Стокгольм, Швеция: Королевский технологический институт KTH. ISBN  978-91-7501-694-8.
  13. ^ Arellanes, Дамиан; Лау, Кунг-Киу (2017). «Экзогенные соединители для иерархической композиции услуг» (PDF) . 2017 IEEE 10-я конференция по сервис-ориентированным вычислениям и приложениям (SOCA) . Канадзава: IEEE: 125–132. DOI : 10,1109 / SOCA.2017.25 . ISBN  9781538613269. S2CID  31211787 .

Дальнейшее чтение [ править ]

  • Брэд Дж. Кокс, Эндрю Дж. Новобильнски (1991). Объектно-ориентированное программирование: эволюционный подход . 2-е изд. Эддисон-Уэсли, ISBN чтения 0-201-54834-8 
  • Бертран Мейер (1997). Построение объектно-ориентированного программного обеспечения . 2-е изд. Прентис Холл.
  • Джордж Т. Хейнеман, Уильям Т. Каунцилл (2001). Компонентная разработка программного обеспечения: соединяем части . Addison-Wesley Professional, чтение 2001 ISBN 0-201-70485-4 
  • Ричард Верьярд (2001). Компонентный бизнес: подключи и работай . Лондон: Спрингер. ISBN 1-85233-361-8 
  • Клеменс Шиперски, Доминик Грунц, Стефан Мурер (2002). Компонентное программное обеспечение: помимо объектно-ориентированного программирования . 2-е изд. ACM Press - Pearson Educational, Лондон 2002 ISBN 0-201-74572-0 

Внешние ссылки [ править ]

  • Почему Software Reuse не удалось и как заставить его работать на вас по Дуглас К. Шмидт
  • В чем истинная сущность и реальность CBD? (Доказательства того, что существующая парадигма КБР ошибочна)
  • полный список компонентных систем на SourceForge
  • Краткое введение в Real COP (компонентно-ориентированное программирование) на примере небольшого приложения с графическим интерфейсом пользователя