Разница между объектами и данными

Научно-технические вопросы применения русского языка в программировании. Проекты с сайта программирование-по-русски.рф, кроме ЯОС . Информация об организациях и людях, использующих или изучающих русский язык в программировании. Сравнение операционных систем.
Ответить
БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Разница между объектами и данными

Сообщение БудДен » 19.04.20 15:13

Родилось в телеграме:

Чем отличается "объект" от "данных". Данные - это то, что содержится само в себе. А объекты - это то, что связано со средой. Хоть в таком виде это и не ООП, но это похоже на определение объекта из ООП. У объекта в ООП есть поведение, но о том, что поведение возможно только в какой-то среде, теоретики ООП обычно умалчивают, подразумевая это. А это на самом деле важно. Поведение проявляется в чём? В той среде, где этот объект существует. Сферический конь в вакууме не может иметь поведения не потому, что у него нет ног, а потому, что не по чему ступать этими ногами. Помести настоящего коня в воду - и он не сможет по ней идти, будет плыть.

Я только сейчас понял, что я не знаю теории, в которой была бы проведена эта граница. В лиспе я её заметил не сразу и не факт что они именно это имели в виду. Скорее всего они сначала сделали записи, а потом добавили ООП, когда оно вошло в моду. Но идеология ООП ущербна, потому что она игнорирует данные. Она говорит, что всё есть объект. Конечно, можно сказать, что данные - это тоже объект, но это всё же это настолько особый объект, что его лучше бы назвать другим словом.

Если взять чистое ФП, то как раз там понятие данных во всю ширь. Данные, кстати, иммутабельны.
Мутабельная запись в любом ЯП, даже если у неё нет методов - это уже не данные, а хранилище данных.

Когда берём Хаскель, они пытаются извращённо представить объекты как данные, за это я их и не люблю. Т.е. получается, что они не видят объектов.

В итоге, я не знаю парадигмы, где признавалось бы существование и данных, и объектов, проводилась бы чёткая грань между ними и определялись области их применения.

Поэтому коротко перечислю разницу:
  • Данные абстрактны и самодостаточны, объект существует только в среде
  • Данные иммутабельны, объекты - мутабельны
  • Операции над данными безопасны, операции над объектами имеют последствия.
  • Данные можно копировать и передавать, от этого они не пострадают. Объекты - нельзя.
  • Данные вечны (их можно только забыть, но нельзя уничтожить) и в то же время они мертвы; объекты рождаются и умирают, но у них есть жизнь.
  • Примеры данных - число, строка, текст в формате json. Не исключено, что данные вообще не могут существовать в компьютере, зато они могут существовать и обрабатываться в программе. Хотя может быть, содержимое ROM - это данные. Но это уже философия, можно копать вглубь до потери почвы под ногами, мне кажется, разница и так видна
  • Примеры объектов - переменная в программе, мутабельная запись в памяти компьютера, дескриптор открытого файла, терминальная сессия, окно на экране, подключенная мышь.
Возвращаясь к активному оберону, из данных в обероне есть только числа. Записи без конструкторов в АО близки к данным. Добавление конструкторов опустошает экологическую нишу данных. Хотя я не знаю, может и строковые константы в обероне есть - я недостаточно знаю язык. В лиспе как ни странно с данными едва ли не хуже, чем в Обероне, хотя константы разных типов там есть, но они не защищены языком и рантаймом от разрушения. Безусловно, данные есть в чистых ФП языках. Другое дело, что чистых ФП языков почти нет. Из практически значимых я бы назвал только SQL (в части SELECT), хотя наверняка есть и другие.

Также есть схожая дихотомия в объектах. Бывает "здоровый объект" с защищёнными инвариантами и "иммунодефицитный объект", внутреннее состояние которого не защищено. Несмотря на это, такой объект не является хранилищем данных, хотя так может показаться - он является объектом, но опасным.

Вывод отсюда: если начальное значение не было задано явно, то числа обнулялись а строки заполнялись пробелами. - ну вот и в Обероне было бы лучше так и оставить, без конструкторов для записей. Или нужно упразднить секцию VAR и все переменные размещать в теле.

MihalNik
Сообщения: 244
Зарегистрирован: 05.11.18 11:02

Re: Разница между объектами и данными

Сообщение MihalNik » 19.04.20 17:51

БудДен писал(а):
19.04.20 15:13
Чем отличается "объект" от "данных". Данные - это то, что содержится само в себе. А объекты - это то, что связано со средой.
Данные не существуют вне набора действий. Как натуральные или вещественные числа без аксиом.
Если есть физическая переменная величина, то есть ее мгновенное значение,
в математике же не бывает переменных, а бывают связанные или свободные величины. Поэтому она позволяет не запутаться во времени.
Безусловно, данные есть в чистых ФП языках. Другое дело, что чистых ФП языков почти нет.
Так оно и в пошаговом Прологе имеется - нельзя изменить связанное с именем значение, иначе противоречие и откат.
В итоге, я не знаю парадигмы, где признавалось бы существование и данных, и объектов, проводилась бы чёткая грань между ними и определялись области их применения.
Тут дело лишь в удачном выборе подходящих слов.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Разница между объектами и данными

Сообщение БудДен » 19.04.20 20:54

> Данные не существуют вне набора действий.
Но это не повод не отличать данные от объектов. От других объектов, если угодно. Поскольку действия над обычными объектами могут происходить только в той среде, где эти объекты живут. Действия над числами и строками могут происходить в любой среде.
> Тут дело лишь в удачном выборе подходящих слов.
Терминология значит очень много. Но не только. Понимание этой границы позволяет чётко определить допустимые операции, плюсы и минусы каждого вида сущностей. А если всё запихивать в одну парадигму, то результат будет по слабому звену.

Но я не особо склонен развивать эту дискуссию :) Если когда-то дойдёт дело до развития языка в А2, то будет повод к этому вернуться.

Ответить