Введение в теорию программирования. Объектно-ориентированный подход



         

Теория типов и типизация в .NET - часть 2


Таким образом, каждое выражение языка программирования с сильной типизацией по успешном завершении анализа корректности типизации является корректно типизированным. Примером языка программирования с сильной типизацией может служить SML. Использование механизма выводимости типов гарантирует сильную типизацию даже при отсутствии строгости. Язык программирования, не имеющий сильной системы типизации, может быть назван языком со слабой типизацией.

Еще одним важным видом систем типизации языков программирования является полиморфная типизация. При таком подходе допустимы выражения переменного типа (скажем, функция упорядочения списка с заранее неопределенным типом элементов).

Иерархия типов в .NET

Рис. 18.1.  Иерархия типов в .NET

Процедура контроля соответствия типов (type-checking) может быть реализована как во время компиляции (compile time), т.е. более безопасным образом, так и во время выполнения (run time) программы, что потенциально менее безопасно для программного кода.

Исследуем особенности управления типами в системе типизации Common Type System технологии Microsoft .NET.

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

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

Иерархия типов в соотнесении с Microsoft .NET может быть представлена в форме той или иной совокупности (в частности, в виде пространства имен, файла или сборки).

Как уже отмечалось, наиболее крупными и важными подкатегориями иерархической системы типизации в Microsoft .NET являются ссылочные типы (reference type) и типы-значения (value type).

Рассмотрим более подробно особенности реализации ссылочных типов и типов-значений в языке программирования C#.

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

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

В качестве иллюстрации особенностей реализации ссылочных типов и типов-значений в языке программирования C# рассмотрим следующий фрагмент программы на языке C#:

int i = 25; string s = "John_Smith";

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




Содержание  Назад  Вперед