Обновить
13
Денис Щетинин@chaetal

Пользователь

4
Подписчики
Отправить сообщение

Зачем? Зачем создавать что-то новое, пока нет понимания уже существующего?

…Даже, правильнее сказать, "существующИХ". Потому что после Smalltalk-а были и Self, и Strongtalk, и Newspeak… и даже Erlang с Elixir-ом. В общем были, были попытки развития разной степени успешности (разумеется, здесь я не имею ввиду популярность) — именно на основе понимания идеи ООП.

Но большинству милее деградация через всякие С++, Java и прочие химеры. Неадекватность заложенных в основу подобных ЯП принципов, "идеям ООП" (которые они тщатся "воплотить") компенсируется извращением и вырождением этих самых идей. Зато Algol-истый синтаксис — он же такой знакомый и "простой" (точнее, привычный) в реализации. Не зря же в ВУЗах основы теории компиляторов преподают. …Или уже не преподают?

А ещё можно очень успешно критиковать то, что не понимаешь. Особенно, если не хочешь понимать. Это ведь очень удобно делать, когда вокруг столько уродливо-кривых воплощений. Железная же "логика": идея —> извращение идеи —> воплощение извращённой идеи —> провал => вывод: идея была неправильной. Столько простора для "творчества"!

Так что ждать новых ЯП не приходится. А если они появятся, вряд ли это будет шагом вперёд для ООП.

Зато можно ожидать повторения раундов борьбы инкапсуляции с иммутабельностью и наследования с полиморфизмом. Это — всегда пожалуйста, это — сколько угодно! :D

По-моему, это слишком упрощенный взгляд на сложную проблему неопределенности.

100%

Упрощённый — там, где нужно учесть неустранимую сложность. Почему-то все при любом удобном случае радостно кричат "давайте проще!", но при этом предпочитают ездить на работу на сложных автомобилях и летать в отпуска на сверх-сложных самолётах, а не передвигаться на гораздо более простых средствах передвижения (типа собственных ног). Может быть потому, что сложность бывает полезной, и устранить её не всегда возможно?

…Но ещё и переусложнённый — там, где всё действительно просто и можно обойтись одной фразой: "не надо превносить лишнюю сложность". Про то, как это сделать (что, в свою очередь, тоже не просто) — речи, разумеется нет.

Но зато сколько хайпа вокруг этого упрощённо-переусложнённого взгляда! :)

Вы не путаете "забыто" и "умерло"?

Нет. Но что вы понимаете под "умерло" — я понять не смог. Я-то всего лишь говорил о том, что исходная идея ООП существенно отличалась от "общепринятой" сейчас. И нет, она не умерла — просто забыта. И это печально, потому что она обладает гораздо большими выразительным возможностями, но при этом ещё и проще.

ООП соответствует базису мышления человека.

С этим утверждением я, в общем-то, согласен. Правда, не совсем уверен, что правильно понимаю, что вы имеете ввиду под "базисом мышления"…  Но зато теперь уже практически полностью уверен, что "ООП" у вас и у меня — очень разные. Так что:

  • Тот ООП, который (как я понимаю) имел ввиду Алан Кэй, придумывая этот термин, — да, похоже, является "базисом" человеческого мировосприятия.

  • Тот ООП, который про полиморфизм-инкапсляцию-наследование, — нет, таким базисом не является, и не может являться: слишком сложно и слишком узко для "базиса". И это "ООП" обречено постоянно "бодаться" с ФП и прочими в попытке обосновать и защитить себя, вместо того, чтобы стать эмерджентным синтезом.

Есть гипотеза, что я понял, наконец, что вас так выводит из себя.

Меня ничто не выводит из себя. Я всегда в себе, что бы со мной ни происходило ;) И уж точно повальное извращение ООП не может вывести из себя — я всё ещё продолжаю удивляться, как можно, но уже почти не верю, что это всё можно изменить :)

Я использую термин «полиморфизм» в качестве синонима для /…/

Я всё больше склоняюсь к тому, что использование одних и тех же слов для обозначения разные вещей — одна из основных проблем человечества :D

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

И я бы тоже с удовольствием сокращал количество фрикций в фалангах своих пальцев, ограничившись словом "сообщение", но почему-то это всякий раз приходится объясняться…

Сути это, впрочем, не меняет.

Ну, вот как?! Как использование слов не по их исходному значению может не менять сути?

Как можно просто брать и использовать термин "полиморфизм", у которого есть вполне определённый (хотя и очень сложный) смысл, преданный этому термину ещё до появления термина "ООП", для краткой передачи смысла сообщений? Да ещё и учитывая, что с помощью этого термина переврали, извратили и буквально поставили с ног на голову всю концепцию? :)

Как можно говорить, что Кэй "дистанцировался" от ООП, используя «genericity», если Кэй с помощью этого термина пытался объяснить смысл ООП, (безрезультатно) демонстрируя, что "полиморфизм" (несмотря на всю сложность) не в состоянии дать те же возможности, что и концепция ООП и сообщений?

Не понимаю как, но вот вижу, что можно: именно так и превратили ООП в того уродца, о котором нынче ломают копья "тупоконечники" с "остроконечниками". И нет, это не выводит меня из себя. Скорее, уже забавляет ;)

Да окститесь, в смолтолке полиморфизм был с первого дня.

Вы про какой полиморфизм? Тот, который сейчас используют для "объяснения" что такое "ООП" — но который при про функции, а не про сообщения? Или всё же про ваш личный, который вы каким-то образом привязываете к связке объект-сообщение?

И про первый день какого именно Smalltalk-а речь? Про Smalltalk-80? Или про Smalltalk-76? Или, может быть, про Smalltalk-72? Было бы интересно услышать, как вы к нему привяжете полиморфизм… Или вообще про концепцию 71-го года — это было бы даже интереснее.

…Хотя, вы же, наверное, привяжете полиморфно — наделив термин "полиморфизм" ещё какой-нибудь интерпретацией? :)

> как же полиморфизм с инкапсуляцией позволяют добавить прилагательные и наречия?

Трейтами, например. Еще раз: я оперирую сущностями, а не ООП-шными паттернами.

По всей видимости, под "прилагательными" и "наречиями" вы тоже имеете ввиду что-то другое — не то, что в учебниках по русскому языку? Можно считать этот вопрос риторическим :)

Дайте угадаю, вы никогда не сталкивались с понятийными аппаратами современной математики (всякие там аффинные геометрии, теории групп, и т. п.).

Не угадали.

Все эти понятийные аппараты именно упорядочивают и упрощают — то есть убирают избыточную сложность, а не добавляют её. Они появились по необходимости — без них просто не удавалось получить желаемое (формализованные доказательства).

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

Я же про это и спросил! Только не про аксиоматику Пеано, а про аксиоматику ООП.

Какое утверждение провозглашает "теорема" под названием "полиморфизм" в ООП? Что она даёт, чего не даёт на порядки более простая пара утверждений: "одно и то же сообщение может быть по-разному обработана разными объектами" и "один и тот же объект может по-разному обработать одно и то же сообщение в разные моменты времени"? Зачем мне может понадобится для определения (sic!) понятия ООП начинать ссылаться на "способность функции обрабатывать данные различных типов", строя искусственные изоморфизмы из пространства объектов и сообщений в пространство функций, данных и типов? А затем перечислять все виды и подвиды полиморфизма, добавляя ещё больше бессмысленной избыточности?

(В классическом определении ООП через объекты и сообщения, дополненного вариантом реализации через поведение и состояние не хватает…) Прилагательных и наречий :) Поведение — это глагол. Состояние — существительное. И пока мы с вами — не Бродский, — нам не обойтись одними глаголами. «Красный» — это не поведение и не состояние.

"Красный" — это именно состояние, которое влияет на поведение.

И как же полиморфизм с инкапсуляцией позволяют добавить прилагательные и наречия?

И ещё интересно, как же, по вашему мнению, без них древние смогли создать, например, Smalltalk, который до сих пор по выразительным/функциональным возможностям и простоте минимум на порядок превосходит все ополиморфленные и обинкапсулированные якобы ООП-шные современные языки? ;)

"Минимальный понятийный аппарат" — это вы про полиморфизм и инкапсуляцию? А я почему-то думал, понятийный аппарат должен быть хотя бы более однозначным и более простым, чем то, для описания чего он используется.

Как странно получается… Про сообщения и объекты вы в курсе. Про то, что на их основе сделаны Smalltalk/Self, Erlang (с оговорками, но всё же) и акторы — видимо, тоже? Про то, что "инкапсуляция" с "полиморфизмом" в отношении ООП появились позже, наверное, как минимум, догадываетесь. Но для описания очевидных следствий из "аксиоматики" всё равно почему-то считаете необходимым введение "понятийного аппарата" на основе переусложнённого и искажённого "полиморфизма" и шизофреничной "инкапсуляции". А чем они лучше простейших и интуитивно понятных, наверное, любому школьнику "поведения" и "состояния"? В последних по вашему мнению чего-то не хватает? Чего?

Всё уже давно предложено. С самого начала. И благополучно забыто.

В целом, позиция ясна.

Но тезис «ОО очень хорошо ложится на окружающий мир» — не подтвержден буквально ничем. Меж тем, Аланкаевская модель с сообщениями — вот она действительно блистательно описывает мир, ибо объекты гораздо менее важны, в сравнении с обменом информацией. ОБ этом очень много говорил Армстронг, и его реализация «окружающего мира» — гораздо убедительнее Гослинговой.

За это вам наша искренняя сердечная благодарность!

Настоящий ("аланкеевский") ООП не просто хорошо, а изумительно хорошо описывает буквально всё. При этом всего-то и нужны объекты и сообщения.

Универсальность * Простота = МОЩЬ

И не нужны никакие краденые и переиначенные инкапсуляции, полиморфизмы, которые только усложняют и путают. И даже наследования с абстракциями совсем не обязательны. Это всё прекрасно выводится из объектов и сообщений.

Современный "ООП" на столько исковеркал саму идею, что все эти споры остроконечников с тупоконечниками уже просто смешны — про то, что яйцо вариили, чтобы его просто съесть, никто даже не вспоминает. …Нет, уже даже и не знает, похоже.

Кто-то кого-то не понимает — либо я вас, либо вы меня. Давайте выясним:

Буду краток - все три пункта выше - фи-игня. 

Вот и четвёртый (я бы его на первое место поставил) пункт про инкапсуляцию, наследование, полиморфизм — не меньшая фи-игня. Да?

Если бы к "фиговым" трём пунктам добавить ещё и самый неправильный про то, что "ООП — это инкапсуляция, наследование, полиморфизм", могло бы получиться что-то дельное. А так, к сожалению, получился очередной наброс в спор глухих со слепыми о балете.

Это та, которая хуже воровства?

Краткое содержание статьи: YAGNI.

Развёрнутое содержание статьи: You Aren't Gonna Need It.

Статья написана как анти пример к её основному тезису, я правильно понял?

Натягивание совы на глобус.

Но это понятно — автор очень молодой. У него уже были IDE. Что уж говорить про программирование в кодах, с перещёлкиванием тумблеров, и перепайкой перемычек в ПЗУ. И он даже до конца не понимает, как работают запрограммированные им алгоритмы хотя бы на уровне кварков. Конечно, он так и не смог понять истинную суть программирования.

А если серьёзно, почему-то возникает ощущение, что автор писал и, наверное, продолжает писать… ну, скажем так, весьма своеобразный код. Как-то сами собой возникают картинки простыней на многие десятки строк, залежи вложенных друг в друга if-ов и циклов… И после прочтения не удаётся избавиться от мысли, что такие понятия как "декомпозиция", "абстракция", "модульность", "связность" и "сцепление" (про "объекты и сообщения") автор, конечно, знает, но почему-то очень не любит, либо игнорирует по другим причинам.

Нет, я не утверждаю, что автор пишет плохой код — я этого не могу знать. Да и однозначных критериев "хороший"-"плохой" не наблюдается. Но вот почему-то возникает мысль, что при "чтении" его кода будут возникать примерно те же ощущения, что у него возникают при чтении ИИ-шного кода.

Есть гипотеза, что "разница в мышлении" между фронтом и бэком — лишь следствие. Настоящая разница в мышлении — гораздо глубже. И корень проблемы лежит в отсутствии фундаментальной (математической и инженерной) подготовки. Или, скорее, культуры.

Всё остальное — лишь следствия. И даже "скучная теория" (по которой зачастую бездумно, но и даже так всё реже) гоняют на собесах — не такая уж скучная (если в теме) и даже не совсем теория (скорее, частные случаи настоящей теории)… Но судя по тому, куда движется образование, подобные описанном случаи — только цветочки. Скоро вообще имитация интеллекта подтянется, вот тогда только и начнётся всё самое интересное :)

Жаль, что вы этого не понимаете

А, ну да! Конечно! Теоретические принципы не нужны — вам. Уметь думать не нужно — тоже вам. Ничто, кроме инкапсуляции, не интересует — вас. Почему. А не понимаю — я!

И да, я не понимаю. Например, не понимаю, что вы делаете тут в комментариях по не интересным вам теоретическим вопросам, когда вокруг столько практики для вас.

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

Тратить время на очередной цикл развенчания безосновательных утверждений — как старых, так и постоянно накидываемых новых (включая, к примеру очень показательный пример с предположением — сформулированном как утверждение, и именно в этом-то и проблема; в рассуждениях об ООП она проявляется точно так же —  о том, что я не застал Ada) я смысла не вижу.

P.S.: А готовить хотелось бы людей, которые умеют думать, учиться и понимать, что и почему они делают. Тех, кто просто вызубрил "умные" латинские слова, чтобы на бессмысленных интервью ими пробивать себе путь на галеры, а потом жаловаться на то, что их говнокод "ООП" не работает, и поэтому надо срочно искать другую "парадигму" (чтобы и её так же исковеркать, и, исходя из "практических соображений", деградировать до уровня условной "инкапсуляции" или аналогичног абсурда), и так хватает. Только вот всё идёт к тому, что даже при желании "схоластов" очень скоро готовить будет некому и негде — университеты усиленно сводят к уровню ПТУ. И свою лепту в этот процесс вы тоже вносите ;)

P.P.S.: Ещё одно возможное название для данной статьи "Идеи, до смысла которых мы не доросли".

Вспомнился хороший пример… 

Был когда-то такой язык — Pascal. У него было множество реализаций. Очень плотно им занималась компания Borland. В какой-то момент — было это в районе 89-го года в Turbo Pascal версии 5.5 — эта компания (на сколько я помню, криво-косо, но таки) начала добавлять в этот язык объектно-ориентированные "фичи".

А до этого, в районе 86-го года в версии 3.0 появились так называемые "модули" (units). Правда в мануале к "тройке" я их описания не нашёл, но в документации к версии 4.0 описано, вроде бы, неплохо.

К чему я это… Модули в Pascal в полной мере реализовывали понятие "инкапсуляция" (в обеих её ипостасях):

это объединение части данных, представляющих состояние программы и кода, который с этими данными работает, причем с этими данными работать может только этот код

Но никакого отношения к ООП ни модули, ни сам язык (на тот момент) не имели. Инкапсуляция есть, а ООП нет.

Пока не решен вопрос с состоянием объекта (…)

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

Но дело даже не в этом.

Если вводить понятие "инкапсуляция", неизбежно придётся объяснять, что это такое. Для этого придётся вводить другие понятия — как минимум, "данные", "методы"… К тому же, придётся объяснять, что инкапсуляция — это двойственное понятие… И т.д. и т.п. В итоге, понятие "инкапсуляция" будет сложнее, чем понятие "ООП". Но что самое обидное, инкапсуляция сама по себе всё равно не даст понятия об ООП. ООП из инкапсуляции просто-напросто не выводится.

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

Серьёзно? Ну… что ж, очень жаль.

Если желание понять всё же присутствует, возможно вы найдёте что-то интересное и полезное для себя в этом ответе.

Как опытный лектор, могу с уверенностью сказать. что читать лекции сейчас — практически бессмысленное занятие :D

Полностью согласен, что обсуждение любого предмета надо с рассмотрения вопросов "почему?" и "зачем?". Но это же не значит, что можно начинать с чего угодно…

Акторная модель, действительно, имеет — вполне можно сказать — прямое отношение к ООП. Но тогда уж надо рассказывать историю целиком:

  • как Хьюитт придумал Planner с идеей "бросания" в базу знаний паттерна (вместо прямого вызова процедуры), в ответ на что система сама решала, какие теоремы задействовать;

  • как Кэй "украл" и положил эту идею в основу Smalltalk-72 (видимо, до него его ещё и в -71, но про него я знаю ещё меньше), что и стало воплощением придуманного им термина "объектно-ориентированного программирования" (sic! — та самая двоица объекты-сообщения);

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

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

А вот что действительно могло бы заинтересовать и объяснить, почему и зачем родилось это самое ООП — это рассказ про то, как Кэй в 1968 году придумал "iPad"… Хотя нет, он придумал гораздо более крутую штуку, чем iPad. iPad изначально создавался для потребления. А Dynabook придумывался для созидания. И именно поэтому понадобилась операционная система, которая не просто бы делала для пользователя то, что в неё заложили создатели, а позволяла бы пользователю создавать новую функциональность. А пользователями должны были стать… дети(!) И именно поэтому понадобился (принципиально) новый язык программирования: одновременно максимально простой (что-то типа упрощённого английского) и при этом максимально мощный (способствующий воплощению идей пользователей этого языка). Вот здесь и родилось то самое ООП, которые мы потеряли…

1
23 ...

Информация

В рейтинге
5 614-й
Откуда
Тверь, Тверская обл., Россия
Дата рождения
Зарегистрирован
Активность