Формальное определение / встречная часть в математике для «объектов» объектно-ориентированных моделей


9

Это вопрос, который я задал на форуме по математике SE, и меня сюда направили. Так вот вопрос

Я новичок в формальной математике и теоретической информатике, поэтому, пожалуйста, потерпите меня, если вы обнаружите, что мой вопрос не сформулирован должным образом. Объектно-ориентированное моделирование кажется очень полезным при определении сложных взаимодействий при моделировании реального мира. Но это в основном используется в программировании. Мне было интересно, есть ли у нас похожая концепция в математике. Когда мы занимаемся программированием, мы можем понять концепцию «Объекты» и «Объектно-ориентированное программирование» и просто реализовать ее. Но есть ли у нас формальное определение «объектов» в терминах теории множеств? Или в этом отношении любая другая формальная математическая теория?

Можем ли мы реализовать / формально определить три основных концепции моделирования объектов - 1. Инкапсуляция 2. Наследование 3. Полиморфизм

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


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

Спасибо .. не могли бы вы предложить мне материал для формализации объектно-ориентированных концепций, который считается стандартным или "учебником"? Я буду ждать вашего ответа для второго .... :)
user1260776

2
Стандартная книга (несколько лет назад) - «Теория объектов» . Более поздняя работа - Полулегкий Java . Есть также серия семинаров под названием « Основы объектно-ориентированных языков», на которых рассматриваются эти вопросы.
Дейв Кларк

Спасибо! Пройду через них ... Также я наткнулся на "лямбда-исчисление", которое тесно связано с моим вопросом ..
user1260776

Ответы:


9

Ответ сложен по двум причинам.

  1. Разные люди в области компьютерных наук по-разному интерпретируют термин «объект». Во-первых, объект состоит из данных и операций, упакованных вместе. Другое состоит в том, что объект - это все, но также имеет «состояние», т. Е. Это некоторая форма изменяемой сущности.

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

Объект в смысле данных + операций : это довольно стандартно в математике. Возьмите любой учебник по теории групп. Это будет где-то такое определение, какчасг(Икс)знак равногИксг-1, (Это оператор сопряжения.)часгявляется «объектом» в этой терминологии. Есть некоторые данные (г) и операция ИксгИксг-1, Или вы можете сделать его более объектным, взяв паруг,ИксгИксг-1 или тройной г,ИксгИксг-1,Иксг-1Иксг, Вы можете создавать такие «объекты» на любом функциональном языке программирования, который имеет лямбда-абстракцию и может образовывать кортежи. «Теория объектов» Абади и Карделли имеет дело с объектами такого рода.

Объекты с состоянием (или объекты, которые меняются ): есть ли у математики такие вещи? Я так не думаю. Я не видел, чтобы математик говорил о чем-либо, что меняется, не в его / ее профессиональной жизни. Ньютон раньше писалИкс для положения частицы, которая предположительно изменяется, и Икс˙для его скорости изменения. В конце концов математики выяснили, что то, о чем говорил Ньютон, было функциейИкс(T) из действительных чисел в векторное пространство, и Икс˙ была еще одна такая функция, которая была первой производной от Икс(T) в отношении T, Исходя из этого, многие глубокомысленные математики пришли к выводу, что изменений на самом деле не существует, и все, что у вас есть, это функции времени. Но в ньютоновской механике менялось не положение, а частица . Позиция - это мгновенное состояние. Ни один математик или физик не сделал бы вид, что частица является математической идеей. Это физическая вещь.

Так же и с объектами. Это «физические» вещи, а состояния - их математические атрибуты. Хорошее обсуждение этого аспекта см. В главе 3 « Структура и интерпретация компьютерных программ» Абельсона и Суссмана . Это учебник в Массачусетском технологическом институте, и они преподают его всем ученым и инженерам, которые, я думаю, прекрасно понимают «физические» вещи.

Тот факт, что частицы не являются математическими, не означает, что мы не можем иметь дело с ними математически. Если вы попросите математика смоделировать двухчастичную систему, он немедленно создаст две функции и вызовет ихИкс1(T) а также Икс2(T), Итак, две частицы сводятся к двум бессмысленным показателям (1 и 2). Это способ математика сказать, что мы не знаем, что это за частицы, и нам все равно. Все, что нам нужно знать, это то, что их позиции развиваются независимо (или по отдельности). Итак, мы будем моделировать их двумя отдельными функциями.

Точно так же стандартный математический способ моделирования объектно-ориентированных программ состоит в том, чтобы рассматривать каждый объект как индекс в пространстве состояний. Единственное отличие состоит в том, что, поскольку объекты приходят и уходят, а структура системы является динамической, нам необходимо расширить ее до модели «возможного мира», где каждый мир представляет собой набор показателей. Распределение и освобождение объектов предполагает перемещение из одного мира в другой.

Хотя есть проблема. В отличие от механики, мы хотим, чтобы состояние наших объектов было инкапсулировано . Но математические описания объектов помещают состояния повсюду, полностью разрушая инкапсуляцию. Существует математический трюк, называемый «реляционная параметричность», который может быть использован для сокращения размеров. Сейчас я не буду вдаваться в подробности, за исключением того, что подчеркну, что это математический прием, а не очень концептуальное объяснение инкапсуляции. Второй способ математического моделирования объектов с инкапсуляцией заключается в уточнении состояний и описании поведения объекта в терминах наблюдаемых событий. Для хорошего обсуждения обеих этих моделей я могу отослать вас к моей статье под названием Объекты и классы на Алголоподобных Языках .


[Примечание добавлено:]

Хороший анализ математических основ объектов можно найти в статье Уильяма Кука « О понимании абстракции данных, снова в обзоре ».


2
Я знал, что кто-то здесь сможет ответить ...
Андрей Бауэр

Спасибо Uday, за ваше время и подробный ответ. Когда я задавал этот вопрос, я думал только о смысле «данные + операции», и мне никогда не приходило в голову, что теория групп может представлять «ОБЪЕКТ» как «данные + операции». Кроме того, я также пойду по ссылкам, которые вы указали.
user1260776

@AndrejBauer. Да, я, вероятно, пошел за борт. ФП, вероятно, использовал «математику» как слово для формализации, а не как дисциплину.
Удай Редди

@ Возможно, я не правильно сформулировал вопрос, но когда я имел в виду «математику», я явно имел в виду формальную математику. Я думал, что «теория множеств» формирует фундамент математики, как «объяснить» или «вывести» объекты ОО-моделирования с точки зрения теории множеств. Как мы можем объединить все эти - теорию множеств, объекты и формальную логику (например, логика первого порядка) ... «Хотя я не совсем понимаю ваш ответ, я могу« понять »то, что вы сказали, и уверяю вас, это ответ, который я ожидал. Спасибо !! (мои идеи не полностью организованы, пожалуйста, прости меня, я все еще новичок :))
user1260776

2
@ user1260776. Я понимаю. Но я хочу сказать, что «формальное» и «математика» - разные идеи. Вы можете формализовать понятия, не сводя их (или выводя их) из математики. Ньютон формализовал механику, но не удосужился свести «частицы» к «множествам». Лично я очень счастлив последовать примеру Ньютона и признать вещи, которые не сводим к сетам. Но, я думаю, мы должны знать, когда уменьшать, а когда не уменьшать. Получив образование физика, я считаю, что это довольно легко сделать. Для многих других компьютерных ученых это может быть не так просто.
Удай Редди

0

Я думаю, что есть довольно хорошее теоретическое описание объектов в старой классической книге «Структура и интерпретация компьютерных программ» [1] Абелсона и Сассмана, основанной на схеме (вариант LISP). теперь бесплатно онлайн! это показывает, как концепция ориентации объекта может быть встроена даже в лямбда-исчисление (~ Lisp), если у вас есть механизм для хранения локального состояния. насколько я понимаю, это был стандартный учебник MIT для многих лет. не говорю, что это лучший реф на subj; Я уверен, что есть и другие лучшие на этом пункте.

Я не думаю, что это было полностью формализовано везде, где я когда-либо слышал, но свободно говорящие объекты в основном состоят из кода + данных в форме

  • методы (с параметрами)
  • состояние, т.е. переменные экземпляра

в какой-то инкапсулированной форме. возможно, другие аспекты, такие как наследование, не являются фундаментальными. как говорится в abelson & sussman, то, что они называют «синтаксическим сахаром».

[1] структура и интерпретация компьютерных программ Абельсона и Сассмана


3
Конечно, объекты в смысле объектно-ориентированного программирования были формализованы. Этой теме посвящены книги Абади и Карделли, Кастанги и Ким Брюса. В серии FOOL прошло 10 лет семинаров, посвященных основам объектно-ориентированного программирования. На конференциях ECOOP и OOPSLA регулярно размещались доклады об основах OO. Действительно, первой статье о семантике ОО около 20 лет.
Дейв Кларк

@vzn, спасибо за ответ. Я пойду по книгам, которые вы предложили ...
user1260776

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

Другой пример функции ООП, которая не согласована как фундаментальная из того, что я могу сказать, это множественное наследование, которое видно, например, в C ++, но намеренно избегается в java в пользу интерфейсов. и т.д.
vzn
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.