Шаг 28.
Унифицированный язык моделирования UML.
Контроль типов

    На этом шаге рассмотрим один из типов дополнительных элементов объектной модели - контроль типов.

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

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

    Основным понятием контроля типов является соответствие. Рассмотрим, например, абстракцию физической единицы измерения. Если разделить расстояние на время, мы получим число, означающее скорость, а не вес. Аналогично, деление единицы силы на температуру бессмысленно, а деление единицы силы на массу — нет. Эти примеры относятся к строгому контролю типов, поскольку правила исследуемой предметной области четко определены и регламентируют допустимые сочетания абстракций. Достоинства строгого контроля типов: позволяет использовать язык программирования для поддержки определенных проектных решений и позволяет справиться с нарастающей сложностью систем. Недостатки: на практике она порождает семантические зависимости, при которых небольшое изменение интерфейса в базовом классе вынуждает повторную компиляцию всех его подклассов.

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

    Язык программирования может одновременно предусматривать сильный и статический контроль типов (Ada), сильный и динамический контроль типов (C++, Object Pascal), или не предусматривать контроль типов, но допускать динамическое связывание (Smalltalk).

    Наследование и динамическое связывание порождают полиморфизм. Эта концепция теории типов позволяет одним именем (например, одним объявлением переменной) обозначать объекты, относящиеся к разным классам, но связанные с общим суперклассом. Любой объект, обозначенный таким именем, может обладать общим набором операций. Противоположностью полиморфизма является мономорфизм, присущий всем языкам программирования, предусматривающим сильный и статический контроль типов.

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

    На следующем шаге рассмотрим параллелизм.




Предыдущий шаг Содержание Следующий шаг