?

Log in

No account? Create an account
ОО - dz

> Свежие записи
> Архив
> Друзья
> Личная информация
> DZ Online

Апрель 9, 2009


Previous Entry Поделиться Next Entry
10:18 pm - ОО
Ну, ладно. Давайте про ОО ещё разок.

Коротко: ОО - это не какая-то великая идеология, и не теория, которая может быть верна или неверна. Это А - соответствие принципов построения софта принципам мышления человека и Б - набор гигиенических правил: не жрать с пола, заворачивать в пакетик, класть в холодильник. Спорить с ОО в программировании - это как спорить с необходимостью мыть руки: можно и не мыть - само отвалится. когда-нибудь.

А. Генезис.

Многие люди путают путает две вещи:

1. ОБРАЗ МЫШЛЕНИЯ людей. Он всегда был ОО. Вне связи с компьютерами.

2. ОСОЗНАНИЕ человеком образа своего мышления. Появление ОО языков связано не с тем, что человек начал мыслить объектно - он всегда мыслит объектно. Появление было связано с ОСОЗНАНИЕМ объектности мышления человека.

Что такое объект? Это сущность, отнесённая к классу.

Попытайтесь назвать сущность, неотносимую к классу. А я постою в стороне, и посмотрю на вас издевательски.

ЕДИНСТВЕННАЯ доступная нам всем техника структуризации реальности - это отнесение объекта к классу. Вы не можете сказать про ЛЮБОЙ объект НИЧЕГО такого, что бы его не классифицировало. Поэкспериментируйте. Любая фраза вида "эта хрень - такая-то" порождает классифицирующий предикат.

Б. Прикладные свойства.

Люди, которые говорят, что ОО - это "не единственное, не всегода полезно, не серебрянная пуля" просто тупо не читали формулировки. Что такое ОО (по букварю):

- инкапсуляция
-наследование
- полиморфизм

давайте конкретно - что из этого "не единственное" и "не всегда полезно"?

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

Полиморфизм? Вы знаете, ЧТО это такое? Давайте откажемся от полиморфизма. машем волшебной палкой - и полиморфизм пропал. эх. чёрт! и Юникс пропал. Надо же - оказывается, реализация системных вызовов read/write - полиморфична.  Не знали? Эх. Ну так, может, перед тем, как палкой махать обсуждать, плохо ОО или хорошо, надо букварь прочитать? Придётся возвращать полиморфизм назад. Машем палкой вот так, как в "зорро"... о. Хорошо. Вернулись полиморфизм и Юникс.

Хрен с ним. Давайте убъём наследование? Давайте. Машем палкой. Проверяем. Юникс не пропал? Нет. Напротив! Его стало больше! Он огромный! Что опять не так? Ой. Оказывается, в ядре было восемь вариантов функции printf. И - надо же - они были реализованы - на чистом Си! - с использованием техники наследования. :( И файловые системы наследовали часть функциональности друг у друга и у базовой реализации. И драйвера. И X11 window. Оказывается, практика частичного использования более общей реализации и уточнения деталей, как бы, не в языке C++ родилась.

Наследование существует вне зависимости от нашего желания в силу того, что все классификации - вложенны и графоподобны. Не в си пл пл, не в яве - в башке у человечков.

Это - синие кубики, а это - красные. но они все - кубики, и НАСЛЕДУЮТ у КУБИКОВ свойство иметь все рёбра одной длины. Мы можем старательно игнорировать этот факт, и реализовать в нашей программе СИНИЕ и КРАСНЫЕ кубики совершенно независимо, два раза повторив тот код, который отвечает за общие свойства, но единственный результат этого - многократный труд и незавидно глупый сизифоватый вид кода и его автора.





(241 комментарий | Оставить комментарий)

Comments:


Страница 1 из 2
<<[1] [2] >>
[User Picture]
From:the__listener
Date:Апрель 9, 2009 07:16 pm
(Link)
Все бы хорошо, только здесь идет смешивание теплого с мягким.
"Классы" и "ОО" - это ортогональные вещи.

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

Чтобы проиллюстрировать ситуацию наглядно - классы относятся к ОО примерно так же, как файлы - к хранению информации.
[User Picture]
From:lugoblin
Date:Апрель 9, 2009 08:26 pm
(Link)
Я на гуруство в ОО не претендую. Покажите, где я ошибаюсь.

Файл - контейнер, информация - содержимое. Конейнер может быть другим, содержимое от этого менятся не должно.

Класс - описание, объект - воплощение. Если мы изменим описание, воплощение изменится согласно описанию. Можно изменить форму описания без ущерба духу описания, наверное, это будет соответсввовать смене языка.

--
tears I've
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
[User Picture]
From:maxim
Date:Апрель 9, 2009 07:25 pm
(Link)
Наблюдаю за вашим мозгом, как быстро и четко он думает и самопознает себя. Очень жалко что такой хороший мозг занимается такой хуйней как софтверная инженерия, нет для бизнеса и куска хлеба это хорошо. Но вот интересно как ваш мозг нарезает РЕАЛЬНОСТЬ а не printf/mikrokernel/embedded/lisp/smalltalk/asm ...
[User Picture]
From:dz
Date:Апрель 10, 2009 12:08 am
(Link)
Наблюдаю за тем, как Ваш мозг наблюдает за моим. Очень жалко... (и далее по тексту, с заменами.)

PS: как Вам удалось выкинуть софтверную инженерию из реальности?

PPS: есть кУ-Уда более хлебные профессии.
[User Picture]
From:ocume
Date:Апрель 9, 2009 07:40 pm

the Whaley

(Link)
Какая-то очень длинная и непонятная статья про Open Office.
:(
[User Picture]
From:m61
Date:Апрель 9, 2009 07:43 pm

Re: the Whaley

(Link)
Про Обитаемый Остров. ;)
[User Picture]
From:thesz
Date:Апрель 9, 2009 08:10 pm
(Link)
То есть, способ мышления людей всегда был "наследование, инкапсуляция и полиморфизм" в определении этой самой тройки.

Или, способ мышления людей был "объекты, обменивающиеся сообщениями" в определении Алана Кея.

Более того, вернемся к корням: к машине Тьюринга и лямбда-исчислению. Который из этих двух способов более ОО?

Ложится ли ОО на функциональную парадигму, которая есть манифестация конструктивной математики?

Я люблю приводить в пример труд Люка Карделли под названием Случайный пользователь Симулы. Товарищ 25 лет изобретал логику для описания ОО и всех его тонкостей. Изобрёл, надо признать.

В ОО реализован так называемый ad-hoc полиморфизм. Параметрического, который стократ полезней, в нем нет. В надстройках типа шаблонов или генериков есть, в чистом ОО - нет.

Для сравнения: в современных ФЯ есть оба вида полиморфизмов.

Что там ещё? Наследование? Так это и есть ad-hoc полиморфизм.

Осталась инкапсуляция.

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

Хочу представить двух игроков на этом поле: Epigram и Agda. Оба имеют интерактивную среду, которая подсказывает, что надо сделать, чтобы удовлетворять условиям инвариантов типов.

Например, можно сделать построение XML по любой XML схеме и построение всегда будет правильным. А можно сделать полностью формально верифицированный компилятор с Си в ассемблер PowerPC. Правда, это уже Coq.

А теперь попробуй сделать это на любом ОО языке по твоему выбору.

Да хотя бы прикинь, во что тебе обойдётся написание такого компилятора. Подчеркну, написание компилятора без ошибок в преобразованиях между Сишным текстом и ассемблером. Их там нет вообще, по построению.
[User Picture]
From:blacklion
Date:Апрель 9, 2009 09:07 pm
(Link)
Как только я опять пытаюсь почитать Луку Карделли и компанию, на которую он ссылается и которая ссылается на него — теория категорий, денотационная семантика, и прочие современные основы CS, у меня ощущение, что я смотрю в бездну. Мне становится страшно на животном, самом глубинном уровне, глубже даже чем ночью в незнакомом глухом (по-настоящему глухом и зверином) лесу в палатке. Не знаю, почему.

Такой же эффект у меня вызывают размышления/чтение о теории струн.

Вот.

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

Что-то надо с этим делать.
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
[User Picture]
From:za1chas
Date:Апрель 9, 2009 08:11 pm

опять про Бондарчука?!

(Link)
скока можна!!!
From:mak_
Date:Апрель 9, 2009 08:32 pm

Re: опять про Бондарчука?!

(Link)
дык, скоро же вторая серия? или была уже? в общем, пора уже...

Дим, "я за вами две остановки бежала, что бы объяснить, как вы мне безразличны". нравится тебе ОО - ну ради бога. мне вот не нравится. ну бывает, да? риторикой своей ты меня все равно не убедишь:) а наблюдая за тем, как ОО используется - чего далеко ходить - в моем телефоне нокия, можно понять что ОО надо применять умеючи, а не с фанатизмом...
[User Picture]
From:xfyre
Date:Апрель 9, 2009 08:19 pm
(Link)
"образ мышления человека" в зависимости от контекста может быть об'ектным, процедурным или, например, функциональным и мне таки вообще неясно, зачем весь этот пафос: кажется вполне очевидным, что применяемая парадигма диктуется задачей, к которой ее применяют?
[User Picture]
From:lugoblin
Date:Апрель 9, 2009 08:33 pm
(Link)
У мальчика на хелпдеске образ мышления процедурный, а у девочки в борделе - функциональный. Так что-ли?

--
Bartholomew Athena
[User Picture]
From:anton_solovyev
Date:Апрель 9, 2009 08:27 pm
(Link)
Это опять какая-то борьба из 15 лет назад, как Linux vs Windows.

Проехали давно уже!
[User Picture]
From:dz
Date:Апрель 10, 2009 12:22 am
(Link)
не надо комментировать то, что Вам неинтересно или Вами не понято.
[User Picture]
From:gineer
Date:Апрель 9, 2009 08:38 pm
(Link)
"Границы моего языка - это границы моего мира" Л. Витгенштейн.

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

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

Вот пример языка -- http://ithkuil-russian.narod.ru/

Вот на счет мозгов... и всего остального -- http://www.refal.net/turchin/phenomenon/

ЗЫ Просто не нужно считать всех незнакомых коментирующих в журнале априори глупее себя... глядишь, и интересных людей, с которыми много о чем поговорить можно, больше станет... ;)
[User Picture]
From:dz
Date:Апрель 10, 2009 12:21 am
(Link)
я ограничен в языках. И, безусловно, могу исходить только из собственных знаний, которые ограничены. Давайте я прибавлю ограничение - всё вышесказанное - в рамках русского языка.

я не считаю незнакомых глупее себя.

я не ставлю знака равенства между о, к, с.

как и многим иным, задаю Вам тот же вопрос: способны ли Вы породить утверждение, которое описывает нечто, не порождая при этом класса.
(Удалённый комментарий)
[User Picture]
From:dz
Date:Апрель 10, 2009 12:18 am
(Link)
Да. Эта проблема есть. Но она ничего не меняет. Имеющиеся ОО инструменты - говно. Придётся создать другие. Нет никаких шансов, что они не будут ОО. (При условии, что это всё ещё цивилизация людей.)
(Удалённый комментарий)
[User Picture]
From:dz
Date:Апрель 10, 2009 07:59 am
(Link)
говорите от себя и за себя. и конкретно. я не интересуюсь ведением дискуссии с тем, кто не может ответить - и в ЕГО терминологии.
[User Picture]
From:old_skipper
Date:Апрель 9, 2009 10:06 pm
(Link)
>ОБРАЗ МЫШЛЕНИЯ людей. Он всегда был ОО. Вне связи с компьютерами.

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

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

излагаете вы хорошо, но попробуйте другие доказательства, эти не годятся :)
[User Picture]
From:dz
Date:Апрель 10, 2009 12:16 am
(Link)
приведите мне пример утверждения на русском языке, которое описывает что-либо, не порождая при этом классификации.
(Удалённый комментарий)
(Удалённый комментарий)
[User Picture]
From:karanagai
Date:Апрель 9, 2009 10:30 pm
(Link)
> Наследование существует вне зависимости от нашего желания в силу того, что
> все классификации - вложенны и графоподобны. Не в си пл пл, не в яве - в
> башке у человечков.

наследование как продукт обобщения обобщений?

есть нюанс: обобщение обобщений (и всякое другое обобщение) в голове происходит динамически. то есть "антропоморфное ОО" должно позволять создавать объекты _до_ описания концепций и переписывать концепции и их онтологию в рантайм по необходимости. сохраняя действующие объекты.

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

и ещё один нюанс: в голове все "классы" абстрактны, если так можно выразиться. то есть не существует инстансов ни у одного "головного класса". нельзя создать инстанс класса "стол". можно только сказать что некий конкретный предмет is-a стол.

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

хехехе остапа несло ;)
[User Picture]
From:lugoblin
Date:Апрель 9, 2009 11:04 pm
(Link)
> всякая система фиксации "онтологии" образов
> приводит в итоге к тем или иным конфликтам результата
> такой фиксации с действительностью.
Вы, случайно, не отождествляете реальный мир с его-же моделью, которой вы оперируете?

> нельзя создать инстанс класса "стол"
Если это правда, то вы очень интересно мыслите. Я создаю инстанс класса "стол" как только он мне требуется чтобы провернуть какую-нибудь мысль с его участием. Реальный прототип для этого, кстати, не требуется.

> мышление в терминах объектов [...] - ущербно само по себе.
Вы, наверное, гуманитарий? Не воспринимайте это, ради бога, как высказывание презрения. Просто если подойти к вопросу достаточно дотошно, то с границами между сущностями дело гораздо лутше обстоит в мысленной модели чем в реальном мире.

--
render down
From:bowhill
Date:Апрель 10, 2009 05:14 am
(Link)
Напоминает как при советской власти Пушкина отностили практически к коммунистам. :)

И второе -- собственная привычка к взгляду на вещи не обязательно является единственной реальностью. Ах, естественный образ мышления. Карл Линней как предтеча Страуструпа.

Это типизация называется. И всё бы хорошо, только реальные сущности разнотипными оказываются. Да ещё и динамично разнотипными. И тут всё стройное дерево сыпется.
[User Picture]
From:dz
Date:Апрель 10, 2009 07:57 am
(Link)
а это типизация и называется. ОО - это не больно, ты его давно знаешь под другим именем.
реальные сущности в программах не встречаются. встречающиеся в программах всегда того типа, который пригоден для обработки данной программой.
From:bowhill
Date:Апрель 10, 2009 05:30 am

И ещё

(Link)
Вот на предмет кубиков -- это ты хорошо заметил. ОО действительно близка к игре в кубики. Это у нас будет кубик, это у нас будет шарик, взрослым дядям легко и приятно возвращаться в детский сад вместо того, чтобы заниматься математической рутиной.
[User Picture]
From:dz
Date:Апрель 10, 2009 08:10 am

Re: И ещё

(Link)
всё программирование - игра в кубики. потому что он всё - оо. И описание классов в программе - всегда более формально, чем хотелось бы.
[User Picture]
From:levgem
Date:Апрель 10, 2009 05:45 am
(Link)
Уж не знаю, сколько он написал, но вот экземпляр того, кто «против ОО»: gornal =)
[User Picture]
From:dz
Date:Апрель 10, 2009 07:43 am
(Link)
я не доктор.

> Go to Top
LiveJournal.com