Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Управление типами в технологии .NET




Полимофная типизация

Статическая типизация

Пример 1. Определим тип статической переменной x, которой присвоим значение, сводимое к целому типу:

val x=2*3;

val x = 6: int

Как и следовало ожидать, значение переменной x оказывается целочисленным (int).

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

Пример 2. Определим тип константы, которой присвоим значение, также сводимое к целому типу:

1+2;

3: int

Как и следовало ожидать, значение константы 3 также оказывается целочисленным (int).

Пример 3. Определим тип функции сложения двух целочисленных аргументов:

fun add (x: int)(y: int) = x+y;

val add = fn: int -> int -> int

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

Пример 4. Проиллюстрируем означивание (вычисление значения) определенной выше функции сложения двух целочисленных аргументов:

add 1 3;

val it = 4: int

Очевидно, что, как и следует из ранее вычисленного типа

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

Пример 5. Рассмотрим тип функции, которая является производной от функции add и выполняет операцию прибавления единицы:

val f = add 1;

val f = fn: int -> int

Вновь введенная функция имеет тип "из целого числа в целое число" (int -> int).

Наконец, означивание последней функции

f 4;

val it = 5: int

в соответствии с ее типом дает целочисленный результат.

Рассмотрим пример полиморфизма - оперирования функциями переменного типа.

Для иллюстрации исследуем поведение встроенной функции hd (от слова "head" - голова), которая выделяет "голову" (первый элемент) списка, вне зависимости от типа его элементов.

Пример 6. Применим функцию к списку из целочисленных элементов:

hd [1,2,3];

val it = 1: int

Получим, что функция имеет тип функции из списка целочисленных величин в целое число (int list -> int).

Пример 7. В случае списка из значений истинности та же самая функция

hd [true, false, true, false];

val it = true: bool

возвращает значение истинности, т.е. имеет следующий тип:

bool list -> bool

Пример 8. Для случая списка кортежей из пар целых чисел

hd [(1,2)(3,4),(5,6)];

val it = (1,2): int*int

получим тип:

((int*int)list -> (int*int)).

В итоге можно сделать вывод о том, что функция hd имеет тип (type list) -> type, где type - произвольный тип, т.е. полиморфна.

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

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

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

Таблица 7.1. Отображение типов языка программирования SML в типы иерархии CTS

Тип Класс.NET Пояснение
  int System.Int32 Целое число
  string System.String Строка
  bool System.Boolean Логическое значение
... ... ... ...

Позднее мы обсудим подобное соответствие типов для языка программирования C#.




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


Дата добавления: 2014-01-07; Просмотров: 270; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.