Украина |
Компонентное программирование в .NET
Рассмотрим особенности использования механизма сборок, важнейшей концепции компонентного программирования, применительно к языку C#.
Сборка является минимальной единицей для развертывания приложений, т.е. представляет собой своеобразный атом компонентного программирования .
Каждый тип сборки характеризуется уникальным идентификатором - номером версии сборки . Таким образом, каждый программный проект формируется в виде сборки, которая является самодостаточным компонентом для развертывания, тиражирования и повторного использования. Сборка идентифицируется цифровой подписью автора и уникальным номером версии.
Между сборками и пространствами имен существует следующее соотношение. Сборка может содержать несколько пространств имен. В то же время, пространство имен может занимать несколько сборок.
Сборка может иметь в своем составе как один, так и несколько файлов, которые объединяются в так называемом манифесте или описании сборки, который подобен оглавлению книги. Манифест содержит метаданные о компонентах сборки, идентификацию автора и версии, сведения о типах и зависимостях, а также описывает режим и политику использования сборки. Метаданные типов манифеста в полной мере описывают все типы, которые содержатся в сборке.
В ходе обсуждения реализации механизма сборок в языке программирования C# следует отметить еще несколько важных характеристик.
Прежде всего, сборка как элемент языка программирования C# является аналогом компонента в среде проектирования и реализации программного обеспечения Microsoft .NET.
В результате компиляции программного кода на языке C# в среде вычислений .NET (например, в .NET Framework SDK) создается либо сборка, либо так называемый модуль.
При этом сборка существует в форме исполняемого файла (с расширением EXE), а также файла динамически присоединяемой библиотеки (с расширением DLL). Естественно, в состав сборки входит манифест. Модуль представляет собой файл с расширением .NETMODULE и, в отличие от сборки, не содержит в своем составе манифеста .
Заметим, что интеграция в программный проект других модулей и ресурсов (в частности, типов и метаданных ) может быть осуществлена посредством системного программного обеспечения, известного под названием компоновщика сборок.
Подводя итоги рассмотрения основных аспектов концепции компонентно-ориентированного подхода к программированию и особенностей реализации этой концепции применительно к языку программирования C#, кратко отметим достоинства подхода.
Прежде всего, важным практическим следствием реализации концепции компонентного подхода для экономики программирования является снижение стоимости проектирования и реализации программного обеспечения.
Еще одно очевидное достоинство компонентного программирования - возможность усовершенствования стратегии повторного использования кода. Код с более высоким уровнем абстракции не требует существенной модификации при адаптации к изменившимся условиям задачи или новым типам данных.
Кроме того, к преимуществам концепции компонентного программирования следует отнести унификацию обработки объектов различной природы. В самом деле, абстрактные классы и методы позволяют единообразно оперировать гетерогенными данными, причем для адаптации к новым классам и типам данных не требуется реализации дополнительного программного кода.
Важно также отметить, что идеология компонентного программирования основана на строгом математическом фундаменте (в частности, в виде формальной системы ламбда-исчисления), что обеспечивает интуитивную прозрачность исходного текста для математически мыслящего программиста, а также верифицируемость программного кода.
Наконец, концепция компонентного программирования, по сути, универсальна и в равной степени применима для различных подходов к программированию, включая функциональный и объектно-ориентированный.
Завершая вторую часть учебного курса, посвященного исследованию современных языков программирования (на примере языка программирования C#) и поддерживающих их сред вычислений (на примере инструментально-технологической платформы .NET), кратко резюмируем содержание рассмотренных вопросов и проблем.
Прежде всего, нами был рассмотрен объектно-ориентированный подход к проектированию и реализации программного обеспечения в сопоставлении с другими подходами.
Затем было дано представление о важнейших концепциях, которые составляют теоретическое и практическое основание объектно-ориентированного подхода к программированию. В частности, были рассмотрены концепции объекта, класса, метода, абстракции, инкапсуляции, наследования, полиморфизма, а также подходы к их формализации на основе исчисления ламбда-конверсий, комбинаторной логики, теории решеток и концептуализации.
Далее, посредством перечисленных теорий были формализованы такие важнейшие аспекты объектно-ориентированных языков программирования, как синтаксис и семантика.
Кроме того, было исследовано понятие типа, изучены основы теории типов и типизации в языках программирования, реализованных в среде вычислений .NET.
Затем мы перешли к рассмотрению вопросов, связанных с событийно-ориентированным программированием.
Наконец, было исследована трансформация ООП в приложении к среде .NET, которая привела к появлению компонентного подхода, основанного на объектной модели COM.
Вполне естественно, что, исходя из обширного спектра и глубины рассматриваемой проблематики, ряд важнейших аспектов реализации современных языков программирования (в рамках изложенного курса) был лишь обозначен или изложен весьма конспективно.
В связи с этим, представляет интерес систематическое изучение следующих вопросов:
- компонентная разработка интегрированных гетерогенных программных систем на профессиональном уровне (на примере языков программирования SML и C#);
- разработка событийно-управляемых приложений;
- математически строгий сравнительный анализ функционального и объектно-ориентированного подходов к программированию на основе изученных теоретических разделов computer science;
- формализация семантики событийно управляемого (и, возможно, компонентно-ориентированного ) программирования.
Согласно общей концепции изложения курса, дальнейшие исследования имеет смысл вести синтетически по направлениям теоретического обоснования программирования на основе изученных формальных систем computer science и современной практики проектирования и реализации программного обеспечения на основе универсальной и прогрессивной программно-инструментальной платформы Microsoft .NET.
Для более подробного самостоятельного ознакомления с тематикой лекции рекомендуется следующий список источников: [ 28, 54, 55, 66, 67, 69, 73, 79-81].