Это вопрос, который я задал на форуме по математике SE, и меня сюда направили. Так вот вопрос
Я новичок в формальной математике и теоретической информатике, поэтому, пожалуйста, потерпите меня, если вы обнаружите, что мой вопрос не сформулирован должным образом. Объектно-ориентированное моделирование кажется очень полезным при определении сложных взаимодействий при моделировании реального мира. Но это в основном используется в программировании. Мне было интересно, есть ли у нас похожая концепция в математике. Когда мы занимаемся программированием, мы можем понять концепцию «Объекты» и «Объектно-ориентированное программирование» и просто реализовать ее. Но есть ли у нас формальное определение «объектов» в терминах теории множеств? Или в этом отношении любая другая формальная математическая теория?
Можем ли мы реализовать / формально определить три основных концепции моделирования объектов - 1. Инкапсуляция 2. Наследование 3. Полиморфизм
Я знаю, что вопрос слишком широкий, но был бы очень признателен, если бы вы могли также дать некоторые указатели, чтобы я мог лучше понять эти концепции.
Ответы:
Ответ сложен по двум причинам.
Разные люди в области компьютерных наук по-разному интерпретируют термин «объект». Во-первых, объект состоит из данных и операций, упакованных вместе. Другое состоит в том, что объект - это все, но также имеет «состояние», т. Е. Это некоторая форма изменяемой сущности.
Существуют глубокие философские проблемы, связанные с тем, что означает «изменение» (и что означает «сущность», поскольку оно постоянно меняется), и действительно ли математические описания действительно отражают изменяемые сущности.
Объект в смысле данных + операций : это довольно стандартно в математике. Возьмите любой учебник по теории групп. Это будет где-то такое определение, какчасг( х ) = гИксг- 1 , (Это оператор сопряжения.)часг является «объектом» в этой терминологии. Есть некоторые данные (г ) и операция х ↦ гИксг- 1 , Или вы можете сделать его более объектным, взяв пару⟨ г, х ↦ гИксг- 1⟩ или тройной ⟨ г, х ↦ гИксг- 1, х ↦г- 1х г⟩ , Вы можете создавать такие «объекты» на любом функциональном языке программирования, который имеет лямбда-абстракцию и может образовывать кортежи. «Теория объектов» Абади и Карделли имеет дело с объектами такого рода.
Объекты с состоянием (или объекты, которые меняются ): есть ли у математики такие вещи? Я так не думаю. Я не видел, чтобы математик говорил о чем-либо, что меняется, не в его / ее профессиональной жизни. Ньютон раньше писалИкс для положения частицы, которая предположительно изменяется, и Икс˙ для его скорости изменения. В конце концов математики выяснили, что то, о чем говорил Ньютон, было функциейх ( т ) из действительных чисел в векторное пространство, и Икс˙ была еще одна такая функция, которая была первой производной от х ( т ) в отношении T , Исходя из этого, многие глубокомысленные математики пришли к выводу, что изменений на самом деле не существует, и все, что у вас есть, это функции времени. Но в ньютоновской механике менялось не положение, а частица . Позиция - это мгновенное состояние. Ни один математик или физик не сделал бы вид, что частица является математической идеей. Это физическая вещь.
Так же и с объектами. Это «физические» вещи, а состояния - их математические атрибуты. Хорошее обсуждение этого аспекта см. В главе 3 « Структура и интерпретация компьютерных программ» Абельсона и Суссмана . Это учебник в Массачусетском технологическом институте, и они преподают его всем ученым и инженерам, которые, я думаю, прекрасно понимают «физические» вещи.
Тот факт, что частицы не являются математическими, не означает, что мы не можем иметь дело с ними математически. Если вы попросите математика смоделировать двухчастичную систему, он немедленно создаст две функции и вызовет ихИкс1( т ) а также Икс2( т ) , Итак, две частицы сводятся к двум бессмысленным показателям (1 и 2). Это способ математика сказать, что мы не знаем, что это за частицы, и нам все равно. Все, что нам нужно знать, это то, что их позиции развиваются независимо (или по отдельности). Итак, мы будем моделировать их двумя отдельными функциями.
Точно так же стандартный математический способ моделирования объектно-ориентированных программ состоит в том, чтобы рассматривать каждый объект как индекс в пространстве состояний. Единственное отличие состоит в том, что, поскольку объекты приходят и уходят, а структура системы является динамической, нам необходимо расширить ее до модели «возможного мира», где каждый мир представляет собой набор показателей. Распределение и освобождение объектов предполагает перемещение из одного мира в другой.
Хотя есть проблема. В отличие от механики, мы хотим, чтобы состояние наших объектов было инкапсулировано . Но математические описания объектов помещают состояния повсюду, полностью разрушая инкапсуляцию. Существует математический трюк, называемый «реляционная параметричность», который может быть использован для сокращения размеров. Сейчас я не буду вдаваться в подробности, за исключением того, что подчеркну, что это математический прием, а не очень концептуальное объяснение инкапсуляции. Второй способ математического моделирования объектов с инкапсуляцией заключается в уточнении состояний и описании поведения объекта в терминах наблюдаемых событий. Для хорошего обсуждения обеих этих моделей я могу отослать вас к моей статье под названием Объекты и классы на Алголоподобных Языках .
[Примечание добавлено:]
Хороший анализ математических основ объектов можно найти в статье Уильяма Кука « О понимании абстракции данных, снова в обзоре ».
источник
Я думаю, что есть довольно хорошее теоретическое описание объектов в старой классической книге «Структура и интерпретация компьютерных программ» [1] Абелсона и Сассмана, основанной на схеме (вариант LISP). теперь бесплатно онлайн! это показывает, как концепция ориентации объекта может быть встроена даже в лямбда-исчисление (~ Lisp), если у вас есть механизм для хранения локального состояния. насколько я понимаю, это был стандартный учебник MIT для многих лет. не говорю, что это лучший реф на subj; Я уверен, что есть и другие лучшие на этом пункте.
Я не думаю, что это было полностью формализовано везде, где я когда-либо слышал, но свободно говорящие объекты в основном состоят из кода + данных в форме
в какой-то инкапсулированной форме. возможно, другие аспекты, такие как наследование, не являются фундаментальными. как говорится в abelson & sussman, то, что они называют «синтаксическим сахаром».
[1] структура и интерпретация компьютерных программ Абельсона и Сассмана
источник