Тема 9. Методология объектно-ориентированного программирования (I)

Базовые понятия объектно-ориентированного программирования (ООП). Классы и объекты. Специфика методов (функций, процедур) и данных.

Прежде всего, необходимо составить предварительное представление об основных элементах ООП (объектах, классах и методах) на интуитивном уровне. Затем речь пойдет о соотношении понятий объекта и класса и особенностях каждого из этих элементов ООП. В качестве теоретической формализации понятий «класс» и «объект» будет предложена так называемая концептуальная модель.

Особенности реализации основных аспектов ООП применительно к Microsoft .NET будут проиллюстрированы такими конструкциями языка программирования C# как объекты, свойства и методы. Значительное внимание будет уделено сравнительному исследованию классов и структур языка программирования C#.

Далее в лекции слушателям будет предложен подход к созданию, инициализации и удалению объектов при помощи конструкторов и деструкторов языка программирования C#. По результатам исследования будут выявлены преимущества и недостатки объектного подхода к программированию.

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

Напомним ход эволюции теорий, лежащих в основе современных подходов к моделированию ООП.

Еще в 1924 г. М. Шенфинкель (Moses Shönfinkel) разработал простую (simple) теорию функций, которая фактически являлась исчислением объектов-функций и предвосхитила появление ламбда-исчисления.

Затем в 1934 г. А. Черч (Alonso Church) предложил исчисление ламбда-конверсий или ламбда-исчисление и применил его для исследования теории множеств. Вклад ученого был настолько фундаментальным, что теория до сих пор называется ламбда-исчислением и часто именуется в литературе ламбда-исчислением Черча. Заметим, что исчисление ламбда-конверсий адекватно формализует и объектно-ориентированный подход к программированию.

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

Затем, в 80-е г.г. автором уже известной нам из предыдущего курса теории вычислений Д.Скоттом (Dana S. Scott) вместе с М.Фурманом (Michael P. Fourman) были проведены исследования аппарата определенных дескрипций, который является адекватным средством для формализации определений. В нашем курсе мы будем использовать именно этот аппарат для математически строгой сокращенной записи определений объектов, типов и классов.

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

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

Еще одним существенным преимуществом данной модели является возможность ее использования как применительно к объектам данных (ОД), так и применительно к объектам метаданных (ОМД).

Перейдем непосредственно к понятийному аппарату объектно-ориентированного подхода к программированию.

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

Сформулируем на интуитивном уровне определения таких основополагающих для объектно-ориентированного подхода к программированию понятий, как объект, класс, свойство и метод.

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

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

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

Методом (или функцией) назовем операцию, которая определена над объектами того или иного класса.

Первичным понятием объектно-ориентированного подхода к программированию является понятие класса как совокупности объектов. Заметим, что класс при объектно-ориентированном подходе является аналогом понятия типа в том смысле, что к нему относят лишь объекты, отобранные по определенному правилу. Это правило возможно формализовать математически посредством предикатной функции, т.е. функции, область значений которой совпадает со значениями истинности: «истина» и «ложь». При этом, тот или иной объект относится к классу, если значение аппликации функции к данному объекту истинно, и не относится в противном случае.

Функцию такого рода принято называть индивидуализирующей функцией. Индивидуализирующая функция фактически является моделью экспертной классификации. Важным условием при исследовании объектно-ориентированного подхода к программированию является установление взаимосвязей фундаментальных сущностей. Отметим в этой связи, что понятие класса является изначально более общим, чем понятие объекта. Точнее говорят, что объект является экземпляром (instantiation) класса.

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

Например, более общий класс PERSONможет содержать внутренний подкласс STUDENT, который, в свою очередь, содержит конкретный объект John_Smith.

Наши рекомендации