Изложим понятийный аппарат объектно-ориентированного подхода к программированию.
Прежде чем будут изложены математически строгие определения (в том числе в терминах теории дескрипций), попытаемся сформировать предварительное представление об основных сущностях данного подхода.
Сформулируем на интуитивном уровне определения таких основополагающих для объектно-ориентированного подхода к программированию понятий, как объект, класс, свойство и метод.
Под объектом будем понимать математическое представление сущности реального мира (или предметной области), которое используется для моделирования.
Классом будем называть весьма общую сущность, которая может быть определена как совокупность элементов (нужно заметить, что класс при объектно-ориентированном подходе к программированию - это, как правило, первичное, неопределяемое понятие, до некоторой степени аналогичное теоретико-математическому понятию множества, или, точнее, домена).
Под свойством (или атрибутом) будем понимать пропозициональную функцию, определенную на произвольном типе (данных).
Методом (или функцией) назовем операцию, которая определена над объектами того или иного класса.
Заметим, что класс при объектно-ориентированном подходе является аналогом понятия типа в том смысле, что к нему относят лишь объекты, отобранные по определенному правилу. Это правило можно формализовать математически посредством предикатной функции, т.е. функции, область значений которой совпадает со значениями истинности: "истина" и "ложь". При этом тот или иной объект относится к классу, если значение аппликации функции к данному объекту истинно, и не относится в противном случае.
Функцию такого рода принято называть индивидуализирующей функцией. Индивидуализирующая функция фактически является моделью экспертной классификации.
Важным условием при исследовании объектно-ориентированного подхода к программированию является установление взаимосвязей фундаментальных сущностей. Отметим в этой связи, что понятие класса является изначально более общим, чем понятие объекта.
Точнее, говорят, что объект является экземпляром (instantiation) класса.
Таким образом, класс может рассматриваться как совокупность объектов (подобно тому как множество или домен есть совокупность элементов).
В рамках объектно-ориентированного подхода к программированию произвольный класс может быть элементарным либо подразделяться на подклассы (подобно тому как множество или домен подразделяется на подмножества или субдомены).
Например, более общий класс PERSON может содержать внутри себя подкласс STUDENT, который, в свою очередь, содержит конкретный объект John_Smith.
Как отмечалось во вступительной лекции, в 90-е годы В.Э. Вольфенгагеном (Vyatcheslav E. Wolfengagen) была создана так называемая двухуровневая схема концептуализации, основанная на двукратном применении постулата свертывания, до известной степени аналогичного операции ламбда-абстракции.
Рассмотрим более подробно основные аспекты данной формализации объектно-ориентированного подхода к программированию. В общих чертах схема построения модели выглядит следующим образом.
Основу модели составляет типизированный вариант ламбда-исчисления, семантика которого моделируется посредством полных и непрерывных решеток Д. Скотта.
Для описания объектов произвольной сложности вводятся аппликативные структуры с приписыванием типов. Последнее обстоятельство необходимо для формализации иерархии классов, в которые объединяются объекты.
Для формализации определений используются определенные дескрипции Скотта-Фурмана вида:
IxФ,
что означает "тот единственный объект x, для которого значение индивидуализирующей функции Ф истинно".
При таком подходе произвольный объект моделируется упорядоченной тройкой элементов вида
<концепт, индивид, состояние>,
составляющие которой соединены соотнесениями.
Основным соотношением формальной схемы двухуровневой концептуализации является так называемый принцип концептуализации, подобный принципам свертывания, которые (в той или иной форме) присутствуют практически во всех математических теориях, исследованных ранее в рамках курса (в частности, в исследованных ранее в рамках курса ламбда-исчислении и комбинаторной логике).
Формальная запись принципа концептуализации посредством определенных дескрипций выглядит следующим образом:
||Ix(x)Ф(x)||i = d <=> _ {d} = {d