Re[21]: Как мало людей понимает ООП...
От: Mamut Швеция http://dmitriid.com
Дата: 28.07.12 11:47
Оценка:
S>>>Ещё раз — я нигде не говорил, что ФП это плохо. Моя мысль проста как слеза — мозг мыслит объектно, соответственно моделирование/проектирование/реализацию системы разумнее вести с учётом этой особенности мозга.

M>>Нуну. А банальное «открыть дверь» ты так и не смог описать так, чтобы оно легло на реальную жизнь.

pkl>А чё там сложного? Дверь — это не объект штоле?

Ну, давай дальше. Напомню утверждение

человек называет окружающие предметы в терминах существительных (мозг его так устроен), и это ложится на существующую ООП парадигму.


Расскажи об открытии двери так, чтобы это легло на существуюзую ООП-парадигму и продолжало отражать реальный мир


dmitriid.comGitHubLinkedIn
Re[21]: Как мало людей понимает ООП...
От: Mamut Швеция http://dmitriid.com
Дата: 28.07.12 11:55
Оценка: 6 (1)
S>>>Ещё раз — я нигде не говорил, что ФП это плохо. Моя мысль проста как слеза — мозг мыслит объектно, соответственно моделирование/проектирование/реализацию системы разумнее вести с учётом этой особенности мозга.

M>>Нуну. А банальное «открыть дверь» ты так и не смог описать так, чтобы оно легло на реальную жизнь.


S>Программа не моделирует реальную жизнь вообще и в целом. Программа абстрагируется от многих деталей, оставляя только то важное, что необходимо для решения задачи.


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

S>Таким образом нельзя без знания задачи описать так, что бы правильно легло на реальную жизнь. Если этих данных нет, то, для начала, хватит пары строк:


S>

S>class Дверь {
S>  открыть();
S>  закрыть();
S>};

S>Дверь дверь = new Дверь();

S>дверь.открыть();
S>дверь.закрыть();

S>


Только это даже близко не относится к реальному миру. Потому что ты считаешь, что действие по открыванию двери принадлежат двери. Что, естественно, не так (за исключением автоматических дверей). Если в примере выше заменить «открыть дверь» на «выкинуть мусор» (с точки зрения человека относящиеся к одной категории — активное дейстиве над пассивным предметом), то твоя модуель вообще становится бредовой с точки зрения реального мира.

ООП всегда является очень грубой, и не всегда корректной моделью мира — как и любая другая модель. Продолжу оставлять это здесь: Execution in the Kingdom of Nouns


dmitriid.comGitHubLinkedIn
Re[22]: Как мало людей понимает ООП...
От: Steamus Беларусь  
Дата: 28.07.12 12:09
Оценка: :)
Здравствуйте, Mamut, Вы писали:

M>То есть заявление, что ООП отражает реальную модель мира, что то, как мы думаем, отражается в ООП — это уже ложь, потому что приходится упрощать, обобщать и т.п.


Полностью реальный мир отражает зеркало. А модель отражает его в том минимуме, который достаточен для решения поставленной задачи. И в ООП она отталкивается от существительных.

S>>Таким образом нельзя без знания задачи описать так, что бы правильно легло на реальную жизнь. Если этих данных нет, то, для начала, хватит пары строк:


S>>

S>>class Дверь {
S>>  открыть();
S>>  закрыть();
S>>};

S>>Дверь дверь = new Дверь();

S>>дверь.открыть();
S>>дверь.закрыть();

S>>


M>Только это даже близко не относится к реальному миру. Потому что ты считаешь, что действие по открыванию двери принадлежат двери. Что, естественно, не так (за исключением автоматических дверей). Если в примере выше заменить «открыть дверь» на «выкинуть мусор» (с точки зрения человека относящиеся к одной категории — активное дейстиве над пассивным предметом), то твоя модуель вообще становится бредовой с точки зрения реального мира.


А если ещё сюда добавить что глагол 'открыть' имеет разные значения: открыть (распахнуть) дверь в спальню, открыть (отыскать) потайную дверь в сарае и т.д. то можно вообще такого нафантазировать. И всякий раз, придумывая некую особенность, которая несомненно бывает в реальном мире, с упоением макать собеседника доказывая ему что дверь есть настолько сложная абстракция, что никакое ООП её не потянет. Я потому и сказал, что пляшем от задачи и там будет понятно дверь ли у вас от трамвая или от собачей будки. А пока я просто абстрагировался. И, между прочим, не писал реализации. Возможно там метод 'открыть' вообще спутники разворачивает. И что? Мне то что от этого? На данном этапе декомпозиции меня это не волнует. И не должно волновать. Потому что ООП.
Re[8]: Как мало людей понимает ООП...
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 28.07.12 12:21
Оценка:
Здравствуйте, 0x7be, Вы писали:

DM>>Это не существительное, это местоимение.

0>В именительном и винительном падежах "нечто" применяется как существительное.

Оно в других не применяется просто. А вместо существительного — так на то оно и местоимение.
Re: Как мало людей понимает людей...
От: AlexCab LinkedIn
Дата: 28.07.12 13:51
Оценка:
Здравствуйте, SV., Вы писали:
SV.>...Просто потому, что мы мыслим объектами.
На самом деле люди мыслят нервными импульсами "странствующими" по нейросети мозга. "Люди мыслят объектами" лишь теория(теоретическая модель) пытающаяся объяснить мышление на чуть более высоком абстрактном уровне(по отношению к нейросети), на подобии теории относительности Эйнштейна, питающейся объяснить чево-то там в физике. Чтобы извлечь из этой(и любой другой) т.модели максимальную пользу нужно пройти три этапа её изучения: узнать -> понять -> научится использовать.
-------------------
ООП даже в чистом виде, понять не так то просто(по сравнению например с ИмперативнымП),потому что:
1)IRL люди очень редко используют такие высокоабстрактные понятия как "объект","класс" etc., т.к. больше взаимодействуют с конкретными вещами. Из-за чего им сложно представить объект как собственно "объект" а не как нечто конкретное.
2)IRL людям редко приходится абстрагировать/классифицировать, в большинстве случаев используются готовые классификации и абстракции.
3)IRL люди не очень часто используют композицию-декомпозицию, а это ключевые навыки для любого конструирования(не столько программ).
4)IRL люди не часто пользуются воображением, дающим возможность представить нечто одно как нечто другое, например представить габариты здания как структуру из трёх переменных.
Все эти(а может быть и не только эти) скиллы требуют серьёзной прокачки только для того чтобы человек смог собрать что нибудь из набора готовых ООП объектов(как например в QT конструкторе можно складывать простенькие приложения), ну а осилить магию превращения объекта реальности в конструкцию из методов и свойств, та ещё задача.
Но я так-же считаю что, не смотря на высокий порог вхождения(возможно даже более высокий чем у ФП), на сегодня ООП наиболее мощная из реально используемых парадигм.
-------------------
Тем не менее, ООП должно умереть!
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[3]: Как мало людей понимает ООП...
От: -VaS- Россия vaskir.blogspot.com
Дата: 28.07.12 14:15
Оценка:
SV.>Да, самое главное. Надо помнить, что эволюция идет постепенно. Может быть, через пару лет и в Яве будет все в порядке с обработчиками и предикатами. А вот если они упрутся, и по идеологическим причинам не станут их вводить, тогда и скажем — заставь дурака...

В Java 8 лямбды будут. И много чего еще.
Re[9]: Как мало людей понимает ООП...
От: 0x7be СССР  
Дата: 28.07.12 14:18
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Оно в других не применяется просто. А вместо существительного — так на то оно и местоимение.

Все это круто, конечно, только что это означает в контексте обсуждаемого вопроса?
Re[22]: Как мало людей понимает ООП...
От: pkl  
Дата: 28.07.12 15:50
Оценка:
Здравствуйте, Mamut, Вы писали:

S>>>>Ещё раз — я нигде не говорил, что ФП это плохо. Моя мысль проста как слеза — мозг мыслит объектно, соответственно моделирование/проектирование/реализацию системы разумнее вести с учётом этой особенности мозга.


M>>>Нуну. А банальное «открыть дверь» ты так и не смог описать так, чтобы оно легло на реальную жизнь.

pkl>>А чё там сложного? Дверь — это не объект штоле?

M>Ну, давай дальше. Напомню утверждение

M>

M>человек называет окружающие предметы в терминах существительных (мозг его так устроен), и это ложится на существующую ООП парадигму.


M>Расскажи об открытии двери так, чтобы это легло на существуюзую ООП-парадигму и продолжало отражать реальный мир

Дверь — объект, может находиться в разных состояниях. Всё.
Re[17]: Как мало людей понимает ООП...
От: IT Россия linq2db.com
Дата: 28.07.12 17:18
Оценка: 12 (1) +2
Здравствуйте, Steamus, Вы писали:

S>И многие даже используют ФП языки, ибо инструмент в своей нише — мощный. В своей нише.


Вообще-то, ниша ФП — это любой код внутри метода.
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: Как мало людей понимает ООП...
От: IT Россия linq2db.com
Дата: 28.07.12 17:23
Оценка: +4 :))) :))) :)))
Здравствуйте, elmal, Вы писали:

IT>>Другими словами твоя цель — контроль над сложностью проекта. Остальное побоку. Я прав?

E>Угу.

Очень хорошо. Жаль что это понимает ещё меньше людей, чем понимает ООП.

E>А что, могут быть другие цели ? Типа фен шуй рулит ?


У разных людей цели могут быть самые разные. Например, целью может быть обязательное использование какого-нибудь паттерна. А если никакой паттерн не подходит, то по умолчанию используется визитор-паттерн.
Если нам не помогут, то мы тоже никого не пощадим.
Re[23]: Как мало людей понимает ООП...
От: Mamut Швеция http://dmitriid.com
Дата: 28.07.12 17:32
Оценка:
M>>Расскажи об открытии двери так, чтобы это легло на существуюзую ООП-парадигму и продолжало отражать реальный мир
pkl>Дверь — объект, может находиться в разных состояниях. Всё.

Нет, далеко не все. Процесс открывания двери ты так и не описал


dmitriid.comGitHubLinkedIn
Re[23]: Как мало людей понимает ООП...
От: Mamut Швеция http://dmitriid.com
Дата: 28.07.12 17:36
Оценка:
M>>То есть заявление, что ООП отражает реальную модель мира, что то, как мы думаем, отражается в ООП — это уже ложь, потому что приходится упрощать, обобщать и т.п.

S>Полностью реальный мир отражает зеркало. А модель отражает его в том минимуме, который достаточен для решения поставленной задачи. И в ООП она отталкивается от существительных.


Ссылку Executin in the Kingdom of Nouns я не зря здесь оставляю. Далеко не все в нашем мире и мышлении отталкивается от существительных.

S>>>Таким образом нельзя без знания задачи описать так, что бы правильно легло на реальную жизнь. Если этих данных нет, то, для начала, хватит пары строк:


S>>>

S>>>дверь.открыть();
S>>>дверь.закрыть();

S>>>


M>>Только это даже близко не относится к реальному миру. Потому что ты считаешь, что действие по открыванию двери принадлежат двери. Что, естественно, не так (за исключением автоматических дверей). Если в примере выше заменить «открыть дверь» на «выкинуть мусор» (с точки зрения человека относящиеся к одной категории — активное дейстиве над пассивным предметом), то твоя модуель вообще становится бредовой с точки зрения реального мира.


S>А если ещё сюда добавить что глагол 'открыть' имеет разные значения: открыть (распахнуть) дверь в спальню, открыть (отыскать) потайную дверь в сарае и т.д. то можно вообще такого нафантазировать. И всякий раз, придумывая некую особенность, которая несомненно бывает в реальном мире, с упоением макать собеседника доказывая ему что дверь есть настолько сложная абстракция, что никакое ООП её не потянет. Я потому и сказал, что пляшем от задачи и там будет понятно дверь ли у вас от трамвая или от собачей будки. А пока я просто абстрагировался. И, между прочим, не писал реализации. Возможно там метод 'открыть' вообще спутники разворачивает. И что? Мне то что от этого? На данном этапе декомпозиции меня это не волнует. И не должно волновать. Потому что ООП.


Только твоя «бастрагированная супер модель» не имеет к реальному миру никакого отношения.

Ставлю тебе задачу:

Моделируем игровой мир. Дверь может открыть игрок, может открыть ветер, дверь может открыться, если она под наклоном, из-за силы тяжести.
Если ты опять сделаешь дверь.открыть(), то к реальному миру это опять не будет иметь никакого отношения.


dmitriid.comGitHubLinkedIn
Re[24]: Как мало людей понимает ООП...
От: pkl  
Дата: 28.07.12 17:36
Оценка:
Здравствуйте, Mamut, Вы писали:


M>>>Расскажи об открытии двери так, чтобы это легло на существуюзую ООП-парадигму и продолжало отражать реальный мир

pkl>>Дверь — объект, может находиться в разных состояниях. Всё.

M>Нет, далеко не все. Процесс открывания двери ты так и не описал

А сей процесс разве не инкапсулируется в методах "открыть", "закрыть", мать их за ногу?
Re[16]: Как мало людей понимает ООП...
От: Mamut Швеция http://dmitriid.com
Дата: 28.07.12 17:37
Оценка:
S>Открыть можно ящик стола, ящик Пандоры, Америку, окно, дверь, глаз, рот, душу... От того, что глагол 'открыть' применим ко всем этим существительным, абсолютно никак не следуют что все они имеют общего предка. Дверь и окно, если мы говорим о комнате, могут иметь предка ДыраВСтене или ЭлементИнтеръера или ЭлементПокраски или ГорючийМатериал или. То есть некую абстракцию, несущую общие ствойства этих предметов в контексте решаемой задачи.

Только в реальной жизни они этих предков не имеют, вот ведь засада.


dmitriid.comGitHubLinkedIn
Re[16]: Как мало людей понимает ООП...
От: мыщъх США http://nezumi-lab.org
Дата: 28.07.12 17:39
Оценка: +2
Здравствуйте, Steamus, Вы писали:

S>Здравствуйте, мыщъх, Вы писали:


М>>Здравствуйте, Mamut, Вы писали:



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


S>Мдя...


S>Открыть можно ящик стола, ящик Пандоры, Америку, окно, дверь, глаз, рот, душу...

сарказм неуместен. открытие двери и окна реализуется практически идентичным кодом. писать псевдокод лень, но будет что-то типа -- объект заперт? если да, то вставить ключ и отомкнуть. повернуть ручку и сделать pull/push в зависимости от флажка.

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

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

> От того, что глагол 'открыть' применим ко всем этим существительным,

> абсолютно никак не следуют что все они имеют общего предка.
они открываются по общей схеме. а вот банка пива открывается по другой схеме. и реализуется совсем другим кодом.

> Дверь и окно, если мы говорим о комнате, могут иметь предка ДыраВСтене или ЭлементИнтеръера

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

проблема в том, что общему предку трудно дать осмысленное название.

> или ЭлементПокраски или ГорючийМатериал или. То есть некую абстракцию,

> несущую общие ствойства этих предметов в контексте решаемой задачи.
сегодня один контекст, завтра -- другой. а хороший код позволит "подхватить" и ящик пандоры и много чего другого.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[17]: Как мало людей понимает ООП...
От: pkl  
Дата: 28.07.12 17:40
Оценка:
Здравствуйте, Mamut, Вы писали:

S>>Открыть можно ящик стола, ящик Пандоры, Америку, окно, дверь, глаз, рот, душу... От того, что глагол 'открыть' применим ко всем этим существительным, абсолютно никак не следуют что все они имеют общего предка. Дверь и окно, если мы говорим о комнате, могут иметь предка ДыраВСтене или ЭлементИнтеръера или ЭлементПокраски или ГорючийМатериал или. То есть некую абстракцию, несущую общие ствойства этих предметов в контексте решаемой задачи.


M>Только в реальной жизни они этих предков не имеют, вот ведь засада.

А вы в курсе, что бывают чисто виртуальные классы/методы и т.п.? Как вы предлагаете создать объект абстрактного класса? Вы наверное не шарите. У двери и шкатулки есть общий предок, но он абстрактный. Стрелять колотить.
Re[14]: хихи
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 28.07.12 18:08
Оценка: 40 (1) +3 -1
Здравствуйте, Mamut, Вы писали:


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


S>>Я исхожу из того, что человек называет окружающие предметы в терминах существительных (мозг его так устроен), и это ложится на существующую ООП парадигму.


M>Расскажи, как ложится на ООП-парадигму такое банальное описание, как «открыть дверь». С нетерпением жду


Кстати, если-таки дверь открыть удастся, то я могу подкинуть ещё парочку задач:
1. Описать с помощью ООП как корова щиплет траву (там будет корова.щипать(трава), трава.бытьОщипанной(корова) или Природа.поедание(корова, трава)?).
2. Совсем хардкор, где бесполезность ООП лично для меня очевидна. Есть лужа (совсем необязательно являющаяся сечением шара), в лужу бросили камень (вектор скорости совсем необязательно перпендикулярным поверхности). Задача: описать поведение волн с течением времени.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[6]: Как мало людей понимает ООП...
От: Steamus Беларусь  
Дата: 28.07.12 18:09
Оценка:
Здравствуйте, BrainSlug, Вы писали:



S>>Назовите какое-нибудь, хотя бы одно, существительное для которого нет более высокого абстрактного понятия.

BS>более чем что? существительное не является понятием самому себе. оно есть обозначение. казалось бы я придираюсь? но например вам отвечают:
BS>-понятие
BS>вы не ответили
BS>или:
BS>-время
BS>вы ответили:
BS>-измерение
BS>теперь я спрашиваю:
BS>-а измерение?

Давайте уже сразу с этим покончим — Господь Бог!
Re[7]: Как мало людей понимает ООП...
От: BrainSlug Израиль  
Дата: 28.07.12 18:24
Оценка:
S>Давайте уже сразу с этим покончим — Господь Бог!
это не понятие. это существительное , которое является обозначением для http://ru.wikipedia.org/wiki/%D0%91%D0%BE%D0%B3 . Читаем определение http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BD%D1%8F%D1%82%D0%B8%D0%B5
.
Re[24]: Как мало людей понимает ООП...
От: Steamus Беларусь  
Дата: 28.07.12 18:38
Оценка: 22 (2) +1
Здравствуйте, Mamut, Вы писали:

M>Ставлю тебе задачу:


M>Моделируем игровой мир. Дверь может открыть игрок, может открыть ветер, дверь может открыться, если она под наклоном, из-за силы тяжести.

M>Если ты опять сделаешь дверь.открыть(), то к реальному миру это опять не будет иметь никакого отношения.

Задач мне ставить не надо, право же, мне неловко бесплатно решать их для Вас...

Если дверь открывается от ветра и под наклоном, то, не исключено, что речь идёт о сельском сортире. Уже некая определённость с задачей. Хорошо. Предположим вы внутри, и дверь открылась. Невезуха, да. Но какая вам разница от чего она открылась? От ветра ли, от того что сосед накренил сортир или просто некий “пролетающий” мимо чибис дёрнул за ручку. Главное что дверь перешла из состояния ‘закрыта’ в состояние ‘открыта’. Да что там дверь, весь сортир перешёл из состояния ‘сортир с закрытой дверью’ в состояние ‘сортир с открытой дверью’. А вам то что до этого? Абстрагируйтесь-абстрагируйтесь... Кто-то дёрнул метод ‘открыть’, во делов то. Пока для вас это не важно, вы можете не обращать на это никакого внимания.

Ладно, допустим, для вас это всё-таки важно. Скажем, вы хотите начистить репу этому залётному чибису (накрайняк — соседу). Ну затребуйте в параметре какая сука вызвала метод ‘открыть’. Хозяин вы своему коду или не хозяин?

Допустим чибис практически не виноват. Он, пролетая, дёргает все попадающие на пути двери (натура такая, ищет где нарваться на приключения). Некие двери открываются, некие нет. Усложним модель. Введём в дверь метод ‘воздействовать’ с некими параметрами типа (ё.пнул ногой, дёрнул за ручку, зацепил сапогом/бампером, пальнул из РПГ и так далее). Внутри метода тщательно анализируем угол приложения усилия и саму его величину и, о чудо, сами вызываем свой метод ‘открыть’, переводя сортир в паблик/стриптиз состояние. И вот... наша пикантная модель заиграла новыми красками. Любой сторонний объект может воздействовать, а мы, подумав/посчитав (да хоть эрлангом) вежливо открываем дверь. Всё живёт, всё крутится...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.