Для понимания ОО-подхода необходимо ясно представлять, что классы выполняют две функции,
которые до появления ОО-технологий всегда были разделены. Класс одновременно является модулем
и типом.
Модули и типы
Средства, используемые при разработке ПО, - языки программирования, проектирования, специфи-
каций, графические системы обозначений для анализа, - всегда включали в себя как возможность
применения модулей, так и систему типов.
Модули - это структурные единицы, из которых состоит программа. Различаются виды модулей,
такие как подпрограммы и пакеты. Независимо от конкретного выбора той или иной модульной
структуры, модуль всегда рассматривается как синтаксическая концепция. Отсюда следует, что раз-
биение на модули влияет лишь на форму записи исходных текстов программ, но не определяет
их функциональность. В самом деле, принципиально можно написать программу Ada в виде един-
ственного пакета, или программу Pascal как единую основную программу. Безусловно, такой подход
не рекомендуется, и любой компетентный программист будет использовать модульные возможности
языка для деления программы на обозримые и управляемые части. Но если взять существующую
программу, например на Паскале, то всегда можно собрать воедино все модули и получить работо-
способную программу с эквивалентной семантикой. (Присутствие рекурсивных подпрограмм делает
этот процесс менее тривиальным, но не оказывает принципиального влияния на данную дискуссию.)
Таким образом, деление на модули диктуется принципами управления проектами, а не внутренней
необходимостью.
Концепция типов на первый взгляд совершенно иная. Тип является статическим описанием вполне
определенных динамических объектов - элементов данных, которые обрабатываются во время вы-
полнения программной системы. Набор типов обычно содержит предопределенные типы, такие как