Опубликован: 19.08.2004 | Уровень: для всех | Доступ: платный | ВУЗ: Национальный исследовательский ядерный университет «МИФИ»
Лекция 7:

Теория типов и типизация в .NET

Как показали исследования системы типизации Common Type System среды проектирования и реализации программных систем Microsoft .NET, эта иерархия имеет внушительный объем.

С целью повышения эффективности организации описания типов и манипулирования ими в программном обеспечении, работающем под управлением среды Microsoft .NET, вводится понятие пространства имен ( namespace ).

Пространством имен будем называть механизм среды Microsoft .NET, предназначенный для идентификации типов объектов языков программирования и среды реализации.

Значение механизма пространств имен состоит в том, что появляется возможность логической структуризации системы типизации Common Type System в среде разработки приложений Microsoft .NET.

Описания пространств имен по аналогии с описаниями типов данных размещаются в файлах.

Перечислим основные свойства, которыми характеризуются пространства имен в среде Microsoft .NET:

  1. пространства имен могут объединять различные сборки ;
  2. пространства имен могут быть вложенными друг в друга;
  3. между пространствами имен и файлами не существует однозначного соответствия (т.е. отображения, переводящего название пространства имен в имя файла);
  4. полное имя типа должно содержать все необходимые пространства имен.

Для иллюстрации применения механизма пространств имен в среде программирования Microsoft .NET приведем развернутый пример описания пространств имен на языке программирования C#:

namespace N1{
	// N1
	class C1{
		// N1.C1
		class C2{
			// N1.C1.C2
		}
	}
	namespace N2{
		//N1.N2
		class C2{
			// N1.N2.C2
		}
	}
}

Рассмотренный пример содержит описания пространств двух имен: пространства N1 с описанием классов C1 и C2 и пространства N2 с описанием класса C2.

Заметим, что в комментариях к каждой строке программы на языке C# приведены полные наименования пространств имен. Так, для обращения к классу C2, описанному в пространстве имен N1, нужно использовать полное имя N1.C1.C2, а для обращения к классу C2, описанному в пространстве имен N2 - полное имя N1.N2.C2.

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

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

Оказывается, что непременное использование полных имен типов в среде программирования Microsoft .NET является избыточным требованием.

Для экономии трудозатрат и во избежание коллизий обозначений при разработке крупных программных систем в языке программирования C# предусмотрен оператор using, к рассмотрению которого мы и переходим.

Чтобы проиллюстрировать применение механизма ликвидации коллизии обозначений типов в пространствах имен среды программирования Microsoft .NET посредством оператора using , приведем развернутый пример на языке программирования C#:

using N1;
C1 a;
// Имя N1 является неявным
N1.C1 b;
// Полное имя
C2 c;
// Ошибка: имя C2 не определено
N1.N2.C2 d;
// Один из (под)классов C2
C1.C2 e;
// Еще один из (под)классов C2
using C1 = N1.N2.C1;
using N2 = N1.N2;
C1 a;
// Соответствует имени N1.N2.C1
N2.C1 b;
// Соответствует имени N1.N2.C1

Заметим, что оператор using позволяет использовать типы как с указанием полного имени, так и без него, а также для указания альтернативных имен (alias).

Еще одним аспектом проектирования и реализации крупных программных комплексов под управлением среды Microsoft .NET является потенциальная коллизия имен типов в рамках масштабных проектов.

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

Ссылки передаются компилятору в ходе трансляции программы на том или ином языке программирования под управлением среды Microsoft .NET по ссылке (при этом используется опция /r или /reference ).

Скажем, команда на компиляцию файла HelloWorld с исходным текстом программы на языке C# со ссылкой на пространство имен System.WinForms.dll будет иметь вид:

csc HelloWorld.cs 
	/reference:System.WinForms.dll

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

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

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

Подводя итоги рассмотрения основных аспектов теории типов и типизации в языках программирования, можно сделать следующие выводы:

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

В частности, технология .NET использует централизованную, унифицированную, интегрированную систему типизации Common Type System (CTS), общую для всех языков программирования, реализуемых на данной платформе.

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

Целям безопасности типизации служит явное разделение на ссылочные типы и типы-значения, а также гибкий и надежный механизм преобразования типов-значений в ссылочные (известный также под названием boxing) и обратно (известный также под названием unboxing ).

Для более подробного самостоятельного ознакомления с тематикой лекции рекомендуется следующий список источников: [ 32, 43, 44, 59].