Разница между объектами и данными
Добавлено: 19.04.20 15:13
Родилось в телеграме:
Чем отличается "объект" от "данных". Данные - это то, что содержится само в себе. А объекты - это то, что связано со средой. Хоть в таком виде это и не ООП, но это похоже на определение объекта из ООП. У объекта в ООП есть поведение, но о том, что поведение возможно только в какой-то среде, теоретики ООП обычно умалчивают, подразумевая это. А это на самом деле важно. Поведение проявляется в чём? В той среде, где этот объект существует. Сферический конь в вакууме не может иметь поведения не потому, что у него нет ног, а потому, что не по чему ступать этими ногами. Помести настоящего коня в воду - и он не сможет по ней идти, будет плыть.
Я только сейчас понял, что я не знаю теории, в которой была бы проведена эта граница. В лиспе я её заметил не сразу и не факт что они именно это имели в виду. Скорее всего они сначала сделали записи, а потом добавили ООП, когда оно вошло в моду. Но идеология ООП ущербна, потому что она игнорирует данные. Она говорит, что всё есть объект. Конечно, можно сказать, что данные - это тоже объект, но это всё же это настолько особый объект, что его лучше бы назвать другим словом.
Если взять чистое ФП, то как раз там понятие данных во всю ширь. Данные, кстати, иммутабельны.
Мутабельная запись в любом ЯП, даже если у неё нет методов - это уже не данные, а хранилище данных.
Когда берём Хаскель, они пытаются извращённо представить объекты как данные, за это я их и не люблю. Т.е. получается, что они не видят объектов.
В итоге, я не знаю парадигмы, где признавалось бы существование и данных, и объектов, проводилась бы чёткая грань между ними и определялись области их применения.
Поэтому коротко перечислю разницу:
Также есть схожая дихотомия в объектах. Бывает "здоровый объект" с защищёнными инвариантами и "иммунодефицитный объект", внутреннее состояние которого не защищено. Несмотря на это, такой объект не является хранилищем данных, хотя так может показаться - он является объектом, но опасным.
Вывод отсюда: если начальное значение не было задано явно, то числа обнулялись а строки заполнялись пробелами. - ну вот и в Обероне было бы лучше так и оставить, без конструкторов для записей. Или нужно упразднить секцию VAR и все переменные размещать в теле.
Чем отличается "объект" от "данных". Данные - это то, что содержится само в себе. А объекты - это то, что связано со средой. Хоть в таком виде это и не ООП, но это похоже на определение объекта из ООП. У объекта в ООП есть поведение, но о том, что поведение возможно только в какой-то среде, теоретики ООП обычно умалчивают, подразумевая это. А это на самом деле важно. Поведение проявляется в чём? В той среде, где этот объект существует. Сферический конь в вакууме не может иметь поведения не потому, что у него нет ног, а потому, что не по чему ступать этими ногами. Помести настоящего коня в воду - и он не сможет по ней идти, будет плыть.
Я только сейчас понял, что я не знаю теории, в которой была бы проведена эта граница. В лиспе я её заметил не сразу и не факт что они именно это имели в виду. Скорее всего они сначала сделали записи, а потом добавили ООП, когда оно вошло в моду. Но идеология ООП ущербна, потому что она игнорирует данные. Она говорит, что всё есть объект. Конечно, можно сказать, что данные - это тоже объект, но это всё же это настолько особый объект, что его лучше бы назвать другим словом.
Если взять чистое ФП, то как раз там понятие данных во всю ширь. Данные, кстати, иммутабельны.
Мутабельная запись в любом ЯП, даже если у неё нет методов - это уже не данные, а хранилище данных.
Когда берём Хаскель, они пытаются извращённо представить объекты как данные, за это я их и не люблю. Т.е. получается, что они не видят объектов.
В итоге, я не знаю парадигмы, где признавалось бы существование и данных, и объектов, проводилась бы чёткая грань между ними и определялись области их применения.
Поэтому коротко перечислю разницу:
- Данные абстрактны и самодостаточны, объект существует только в среде
- Данные иммутабельны, объекты - мутабельны
- Операции над данными безопасны, операции над объектами имеют последствия.
- Данные можно копировать и передавать, от этого они не пострадают. Объекты - нельзя.
- Данные вечны (их можно только забыть, но нельзя уничтожить) и в то же время они мертвы; объекты рождаются и умирают, но у них есть жизнь.
- Примеры данных - число, строка, текст в формате json. Не исключено, что данные вообще не могут существовать в компьютере, зато они могут существовать и обрабатываться в программе. Хотя может быть, содержимое ROM - это данные. Но это уже философия, можно копать вглубь до потери почвы под ногами, мне кажется, разница и так видна
- Примеры объектов - переменная в программе, мутабельная запись в памяти компьютера, дескриптор открытого файла, терминальная сессия, окно на экране, подключенная мышь.
Также есть схожая дихотомия в объектах. Бывает "здоровый объект" с защищёнными инвариантами и "иммунодефицитный объект", внутреннее состояние которого не защищено. Несмотря на это, такой объект не является хранилищем данных, хотя так может показаться - он является объектом, но опасным.
Вывод отсюда: если начальное значение не было задано явно, то числа обнулялись а строки заполнялись пробелами. - ну вот и в Обероне было бы лучше так и оставить, без конструкторов для записей. Или нужно упразднить секцию VAR и все переменные размещать в теле.