Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ООП маст дай! 
:(
    Опции темы
djamshud
Дата 26.9.2010, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



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

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

Где применяют ООП?.. Да почти везде, на всех уровнях разработки ПО. Стоит лишь сказать, что ООП используется сразу при проектировании всей системы. К сожалению адепты неверно поняли системный анализ и решили, что ООП - суть его воплощение. Разделить одну большую проблему на множество локальных - несомненно правильно. Устанавливать связи между ними в духе ООП - убийстов проекта на корню, это создает множество статичных связей, которые очень сложно разрывать или модифицировать при дальнейшем развитии проекта. Поэтому многие ключевые связи делают динамичными, что в итоге превращается в костыли в коде и неудобство взаимодействия модулей.

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

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

Пример.
Допустим, есть некоторые агрегаторы данных. Из одного мы данные получаем, обрабатываем в несколько этапов, в другой отправляем. Очень естественное, натуральное решение выглядит примерно так:
Код

sock=$(tcp 0.0.0.0:80 listen)
read ${sock} | http in | cgi | http out | write $(sender ${sock}) -- эта цепочка - описание действия,
которое необходимо выполнить при появлении новых данных в агрегаторе. Понятно, что очень
сильно упрощенная, понятно, что в реальности будет скорее всего разветвленной.

Решение в процедурном стиле очевидно и чуть менее естественно. ООП-решение будет либо неповоротливым ###м, либо, в идеале, реализует такую же dataflow. Но зачем каждый раз заниматься ее реализацией, когда можно пользоваться специлизированными средствами?

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

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

Когда я использую ООП.
1. Когда естественная сущность элегантно представляется в виде объекта и нескольких обрабатывающих его методах. Этакий "С с классами".
2. Когда писал (и сейчас хочу сильно пропатчить) библиотеку контейнеров. ООП в данном случае весьма хорош: на низком уровне не используется, а вот в средний - что составляет большую часть задачи - он прекрасно вписывается.
3. Когда писал ядро компилятора. Опять же в основном программирование происходило на среднем уровне, а вся информация о типах и лексемах гонялась по RTTI. Уже при его программировании я осознал удобность датафлоу и весь синтаксический анализатор приспособил именно для такой обработки последовательностей лексем.

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

Ну и мнение светил: http://citforum.ru/gazeta/165/

Это сообщение отредактировал(а) djamshud - 27.9.2010, 15:42


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 26.9.2010, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



А. Вы предлагаете :
1. отказаться от ООП в пользу процедурного программирования
2. -//- в пользу некоего другого стиля ? тогда какого ?
3. не поклоняться ООП и использовать его лучшие стороны.
4. или что то другое ?


Б. что лично Вы видите плохого в ООП ?



--------------------
PM MAIL WWW   Вверх
djamshud
Дата 26.9.2010, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



3, поэтому когда-то 1, когда-то 2.

Кстати говоря в статье или по какой-то ссылке в ней хорошо написано, как сильно изуродована изначальная концепция ООП, заложенная в смолтоке, в современных реализациях в С++ и прочих Явах.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 26.9.2010, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(djamshud @  26.9.2010,  22:00 Найти цитируемый пост)
Кстати говоря в статье или по какой-то ссылке в ней хорошо написано, как сильно изуродована изначальная концепция ООП, заложенная в смолтоке, в современных реализациях в С++ и прочих Явах

тогда еще уточняющий вопрос, так Вы против ООП или против С++ реализации ООП ?



--------------------
PM MAIL WWW   Вверх
djamshud
Дата 26.9.2010, 23:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



Лично я плохого в ООП вижу то, что как им, так и напрямую следующими из него костылями из паттернов откровенно промывают мозги в университетах. По себе знаю и по знакомым. После этого, попробовав и хорошенько освоив процедурный подход, сейчас стараюсь самые высокоуровневые вещи реализовывать функционально, реже императивно, на своем диалекте баша, совместимом с С++ и С; реализация основных модулей на С, иногда "С с классами и темплейтами", над этим иногда выстраивается интерфейс из "C с классами и наследованием". Поэтому на буст и большую часть бестолковой стандартной библиотеки С++ смотрю как на ###.

Добавлено через 2 минуты и 33 секунды
mes, лично я не против ни С++ с его реализацей ООП, ни ООП вообще. Я за то, чтобы это перестало быть панацей. Сейчас в современном программировании складывается ситуация, что дураков заставили богу молиться, а они лбы себе расшибают.

Добавлено через 3 минуты и 19 секунд
ЗЫ. За решетку угодили фекалии:).


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Vasay
Дата 26.9.2010, 23:21 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 2
Всего: 73



когда человек что-то не понимает, он это отвергает.

Не утверждаю, что ООП наше все  (и не буду утверждать, ибо имел дело с задачами, где ООП не место), но он занял свою нишу, доказав состоятельность. 


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
djamshud
Дата 26.9.2010, 23:25 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



Vasay, пруфы, пруфы в студию! Я привел пруф с кучей пруфов внутри. За "непонимание" незачет - в статье рассказывают о мнении (обоснованном!) светил программирования.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 26.9.2010, 23:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(djamshud @  26.9.2010,  22:14 Найти цитируемый пост)
так и напрямую следующими из него костылями из паттернов 

 не согласен ни с "костылями" , ни с "напрямую следующими"


Цитата(djamshud @  26.9.2010,  22:14 Найти цитируемый пост)
откровенно промывают мозги в университетах

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

Цитата(djamshud @  26.9.2010,  22:14 Найти цитируемый пост)
над этим иногда выстраивается интерфейс из "C с классами и наследованием"

хочу уточнить, что "С с классами" это более чистое ООП, чем текущий С++, в котором задействаны и другие подходы.. 

Цитата(djamshud @  26.9.2010,  22:14 Найти цитируемый пост)
. Поэтому на буст и большую часть бестолковой стандартной библиотеки С++ смотрю как на ###.

ни стл, ни буст не являются инструментами  ООП как таковые.

Цитата(djamshud @  26.9.2010,  22:14 Найти цитируемый пост)
 Я за то, чтобы это перестало быть панацей. 

учитывая подправки, не понятно , что подразумевается под "это " . Большинство сказанного не относится к ООП.

Цитата(djamshud @  26.9.2010,  22:14 Найти цитируемый пост)
Сейчас в современном программировании складывается ситуация, что дураков заставили богу молиться, а они лбы себе расшибают.

так может проблема все таки в дураках ?
smile

Добавлено через 10 минут и 2 секунды
Цитата(djamshud @  26.9.2010,  22:25 Найти цитируемый пост)
в статье рассказывают о мнении (обоснованном!) светил программирования. 

боюсь насчет "С с классами" они тоже не лучшего впечатления )


--------------------
PM MAIL WWW   Вверх
djamshud
Дата 26.9.2010, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



mes,

>не согласен ни с "костылями" , ни с "напрямую следующими"

Напрямую следуют - потому что все придумано для ООП. Костыли, потому что современное ООП без них не может.

>не было бы ооп, промывали бы чем нибудь другим..

Пейте дети молоко, будете здоровы. Лучше бы чем-нибудь полезным промывали, да хоть тем же православным смолтоковском ООП.

>хочу уточнить, что "С с классами" это более чистое ООП, чем текущий С++, в котором задействаны и другие подходы..

Именно поэтому я его и использую.

>ни стл, ни буст не являются инструментами  ООП как таковые.

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

>учитывая подправки, не понятно , что подразумевается под "это "

"Это" - собственно современный ООП (я все же в основном смотрю с позиций С++) и вся система палок и веревок для того, чтобы этим можно было пользоваться.

>так может проблема все таки в дураках ?

Проблема в тех, кто управляет;)

Добавлено @ 23:43
>боюсь насчет "С с классами" они тоже не лучшего впечатления )

Так я не отстаиваю их позиций, у меня свое мнение:). Хоть во многом и схожее.

Да кстати, для тех, кто не читал, но осуждает: там никто не говорит о полном "запрете" ООП.

Это сообщение отредактировал(а) djamshud - 26.9.2010, 23:43


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Vasay
Дата 26.9.2010, 23:44 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 2
Всего: 73



Цитата(djamshud @  26.9.2010,  23:25 Найти цитируемый пост)
Vasay, пруфы, пруфы в студию! Я привел пруф с кучей пруфов внутри. 



Какой тебе нужен пруф? большинство прикладного ПО пишется с применением ООП. 


Цитата

За "непонимание" незачет - в статье рассказывают о мнении (обоснованном!) светил программирования.


Если бы все "Светилы" были бы согласны с тем что ООП не нужен - его бы не было .

Добавлено через 2 минуты и 49 секунд
djamshud

Так я не понял, вам не нравится ООП, или его реализация в С++ ?


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
mes
Дата 26.9.2010, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(djamshud @  26.9.2010,  22:40 Найти цитируемый пост)
Да кстати, для тех, кто не читал, но осуждает: там никто не говорит о полном "запрете" ООП.

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

Цитата(djamshud @  26.9.2010,  22:40 Найти цитируемый пост)
Напрямую следуют - потому что все придумано для ООП.

ООП патерны лишь малая толика от общего числа паттернов
smile

Цитата(djamshud @  26.9.2010,  22:40 Найти цитируемый пост)
Пейте дети молоко, будете здоровы. Лучше бы чем-нибудь полезным промывали, да хоть тем же православным смолтоковском ООП.

так все таки претензия к ООП или к С++ ?! ведь против православного ООП ничего против не имеете.. 


Цитата(djamshud @  26.9.2010,  22:40 Найти цитируемый пост)
Стандартная библиотека, особенно ее развите за последние лет десять, и буст - это еще одни костыли, на этот раз для поддержания убого ООП, заложенного в С++. 

буст костыль, но не для поддержания ООП.  ну взять хотя бы самое на мой взгляд первоочередное в бусте :  bind - это поддержка функционального программирования.. 
кстати автор стл, тоже против ООП. 

Цитата(djamshud @  26.9.2010,  22:40 Найти цитируемый пост)
"Это" - собственно современный ООП (я все же в основном смотрю с позиций С++) и вся система палок и веревок для того, чтобы этим можно было пользоваться.

современный С++ далек от современного ООП.. или для Вас все что с классами то ООП ? 

Цитата(djamshud @  26.9.2010,  22:40 Найти цитируемый пост)
Проблема в тех, кто управляет;)

решается соблюдением заповеди: не сотвори себе кумира.
smile

Добавлено через 2 минуты и 49 секунд
Цитата(djamshud @  26.9.2010,  22:40 Найти цитируемый пост)
Так я не отстаиваю их позиций, у меня свое мнениеsmile. Хоть во многом и схожее.

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


--------------------
PM MAIL WWW   Вверх
djamshud
Дата 27.9.2010, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



Vasay, я на ночь глядя прочитал совсем не то, что вы написали:) Пруф не надо.

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

>Если бы все "Светилы" были бы согласны с тем что ООП не нужен - его бы не было .

А кто говорит про всех? Я говорю про отдельно взятых светил, которые не троллинга ради хаят ООП. Незачет за то, что вы считаете их непонимающими.

>Так я не понял, вам не нравится ООП, или его реализация в С++ ?

Мне не нравится современные инкарнации ООП в С++, Яве или С#. С последними двумя я не сильно знаком, но из того знакомства, что было, да и по многочисленным публикациям я делаю вывод, что в них ООП создавалась под впечатлением плюсовой реализации, с какими-то уточнениями и другим синтаксисом.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 27.9.2010, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(djamshud @  26.9.2010,  23:05 Найти цитируемый пост)
Мне не нравится современные инкарнации ООП в С++, Яве или С#. 

вот хоть понятно что.. а терь можно узнать пару тройку фактов почему ?


--------------------
PM MAIL WWW   Вверх
Vasay
Дата 27.9.2010, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 2
Всего: 73



Цитата

Вас заставили в этом поверить учителя-адепты, из-за чего ООП и занял свою "нишу"


Как раз в тех двух областях, в которых я получал свое образование (и некоторое время работал) - ООП не нужен  smile  (и когда-то я тоже плохо понимал - зачем мне нужен этот ооп)

Цитата

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


Первое впечатление, обычно ошибочно. В данный момент Вы занимаетесь именно тем, что "отвергаете то чего не понимаете".

Это сообщение отредактировал(а) Vasay - 27.9.2010, 00:14


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
djamshud
Дата 27.9.2010, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



mes, камень не в ваш огород.

>ООП патерны лишь малая толика от общего числа паттернов

Все, что я видел - так или иначе крутится вокруг ООП. Можно ссылок на большую часть?

>так все таки претензия к ООП или к С++ ?! ведь против православного ООП ничего против не имеете.. 

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

>буст костыль, но не для поддержания ООП.

Да, если быть точным, это костыль для того, чтобы этим ООП можно было решать практические задачи. Вот только беда, функциональщина является совершенно инородной в том С++, что задумывался когда-то. Сейчас язык к сожалению превратился в ужаснейшую помойку и только "С с классами" его и спасает (для меня - трезвомыслящего человека:) ).

>современный С++ далек от современного ООП.

Современный - плохое слово, согласен и уже исправился. Я не особо слежу за развитием языков, чтобы говорить о современном ООП. Правильно - мэинстримный ООП.

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

Не вижу больших разногласий и запостил ссылку на нее, потому что разделяю большую часть выдвинутых там позиций. В стартовом сообщении я свое ИМХО высказал предельно ясно. Сейчас мэинстрим для решения почти любой задачи: провести системный анализ, на его основе разработать объектно-ориентированную модель с изначальным уклоном в реализацию на мэинстримных С++/С#/Java ну и собственно набыдлокодить это чудо-юдо.

Добавлено через 11 минут и 24 секунды
Vasay, а я работаю в тех областях, где ООП с радостью применяют. И сам применял, пока не понял, что он только вредит. Статистика, анализ, моделирование, в частности - имитационное распределенных процессов.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
djamshud
Дата 27.9.2010, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



mes,

>а терь можно узнать пару тройку фактов почему ? 

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


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
A5uKa
  Дата 27.9.2010, 07:36 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 1
Всего: 16



Доброе утро.
Цитата

Помимо того, что детей плохому учат

Про IT в образовании вообще отдельный вопрос, по крайней мере в этой стране.

п.с. Я за процедурное программирование и функциональный подход.
PM   Вверх
Shaggie
Дата 27.9.2010, 10:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: нет
Всего: 72



Цитата(djamshud @  27.9.2010,  01:05 Найти цитируемый пост)
Вас заставили в этом поверить учителя-адепты, из-за чего ООП и занял свою "нишу".

А власти скрывают!

Цитата(djamshud @  27.9.2010,  00:14 Найти цитируемый пост)
сейчас стараюсь самые высокоуровневые вещи <...> реализация основных модулей на С, иногда "С с классами и темплейтами", над этим иногда выстраивается интерфейс из "C с классами и наследованием".

"C с классами и наследованием" реализует все три основополагающих принципа ООП, которые вбивают в мозг студентам айтишных специальностей. Хочешь мастдайнуть собственные приёмы программирования?

Цитата(djamshud @  27.9.2010,  01:30 Найти цитируемый пост)

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

Заносите критерии православности ООП и проблемы нынешних его инкарнаций в студию. Если не против ООП, то что призывает мастдайнуть название темы?

Цитата(djamshud @  27.9.2010,  01:58 Найти цитируемый пост)
Помимо того, что детей плохому учат, есть и вполне практические доводы против. Но опять не всего ООП, а того, как и в каком качестве оно используется.

И что плохого в использовании ООП подхода в программировании?


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
MAKCim
Дата 27.9.2010, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



инкапсуляция, полиморфизм и наследование хороши как концепции
какая разница, какой язык, есть там классы или нет?

пример
ядро linux - сплошное ООП и выглядит это все логично, красиво, расширяемо
мне достаточно


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
djamshud
Дата 27.9.2010, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



Пост был пропатчен. Shaggie, заголовок лишь для провокации флейма. Это ж раздел с холиворами!

Добавлено через 11 минут и 54 секунды
А, забыл. Православный ООП - это тот, что отписан в bluebook (это тот блюбук, который про смолток 80).


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Vex
Дата 28.9.2010, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

Репутация: 2
Всего: 88



Главное, чтобы ООП не лишали здравого смысла как например это сделли в С#. Вот какого фига оттуда убрали локальные функции? Почему они в Делфи есть а в С# нет? В результате приходится подпрограммы выносить на уровни метода, а это логический ###.

Это сообщение отредактировал(а) Vex - 28.9.2010, 10:15


--------------------
Слава Україні.
PM   Вверх
A5uKa
  Дата 28.9.2010, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 1
Всего: 16



Цитата(Vex @ 28.9.2010,  10:15)
Главное, чтобы ООП не лишали здравого смысла как например это сделли в С#. Вот какого фига оттуда убрали локальные функции? Почему они в Делфи есть а в С# нет? В результате приходится подпрограммы выносить на уровни метода, а это логический ###.

Зато в Nemerle есть локальные функции  smile 
PM   Вверх
Vex
Дата 28.9.2010, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

Репутация: 2
Всего: 88



A5uKa
Цитата

Зато в Nemerle есть локальные функции


я про него прочитал это какой-то рак мозга )

Добавлено через 39 секунд
а в джаве тоже нет локальных функций?


--------------------
Слава Україні.
PM   Вверх
A5uKa
  Дата 28.9.2010, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 1
Всего: 16



Цитата(Vex @ 28.9.2010,  10:40)
A5uKa
Цитата

Зато в Nemerle есть локальные функции


я про него прочитал это какой-то рак мозга )

Почему ?
PM   Вверх
Shaggie
Дата 28.9.2010, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: нет
Всего: 72



djamshud, ИМХО, не надо было капитально редактировать первый пост, лучше бы накатал масштабный ответ и дал с первого поста ссылку на него, а то и вправду вся тема поехала.


Цитата(djamshud @  26.9.2010,  23:06 Найти цитируемый пост)
Инкапсуляция без сомнения удобна, но огромная ошибка - страться инкапсулировать все и во всем. При программировании на самом нижнем уровне это стрельба из пушки по воробьям

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

Цитата(djamshud @  26.9.2010,  23:06 Найти цитируемый пост)
на самом высоком - и вовсе бесполезная затея, инкапсуляция высоких материй неестественна.

 smile  А есть ссылочка, где бы можно было про неестественность инкапсуляции высоких материй почитать?
Любой слой приложения имеет в подчинении совокупность интерфейсов низлежащего слоя, владение ими и порядок вызовов имеет смысл инкапсулировать в объекте, предоставив набор методов наружу. Даже будь это самый-самый высокий уровень, всё равно надо спрятать детали в вызове application.execute(), спрятав потроха.

Цитата(djamshud @  26.9.2010,  23:06 Найти цитируемый пост)
Вам что, жалко? Если я что-то сломаю, ССЗБ.

Похоже, в команде программировать не приходилось? Чужой код поддерживать, собственный кому-то на поддержку отдавать? Быть ответственным за большую важную систему? Человеческий фактор нельзя недооценивать, а подход "Вам что, жалко?" не даёт гарантий в разработке.

Цитата(djamshud @  26.9.2010,  23:06 Найти цитируемый пост)
Из-за этого повторное использование кода зачастую становится невозможным: а есть такая же, но с перламутровыми пуговицами?

Можно и без ООП с успехом запороть повторное использование. Лично моё мнение такое, что reuse кода и подход к программированию вообще слабо друг с другом коррелируют.

Цитата(djamshud @  26.9.2010,  23:06 Найти цитируемый пост)
Полиморфизм. Удобен при использовании на низком и среднем увровне. На высоком непригоден в виду того, что взаимодействие, особенно в перспективе дальнейшего развития, между сущностями может быть абсолютно любым. Частично спасают мета-программиорвание и паттерны.

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


Дальше прекрасное:
Цитата(djamshud @  26.9.2010,  23:06 Найти цитируемый пост)
Когда я использую ООП.
1. Когда естественная сущность элегантно представляется в виде объекта и нескольких обрабатывающих его методах. Этакий "С с классами".

Отлично, значит C по умолчанию ООП язык  smile 

Цитата(djamshud @  26.9.2010,  23:06 Найти цитируемый пост)
2. Когда писал (и сейчас хочу сильно пропатчить) библиотеку контейнеров. ООП в данном случае весьма хорош: на низком уровне не используется, а вот в средний - что составляет большую часть задачи - он прекрасно вписывается.

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

Цитата(djamshud @  26.9.2010,  23:06 Найти цитируемый пост)
3. Когда писал ядро компилятора. Опять же в основном программирование происходило на среднем уровне, а вся информация о типах и лексемах гонялась по RTTI. Уже при его программировании я осознал удобность датафлоу и весь синтаксический анализатор приспособил именно для такой обработки последовательностей лексем.

О, таки при работе над крупной задачей преимущество ООП внезапно было осознанно!


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


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
mrbrooks
Дата 28.9.2010, 11:06 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



Цитата(Vex @  28.9.2010,  11:15 Найти цитируемый пост)
Вот какого фига оттуда убрали локальные функции? Почему они в Делфи есть а в С# нет? В результате приходится подпрограммы выносить на уровни метода, а это логический ###.

а каким боком они должны там быть. C# как бэ объектно ориентированный язык (и работа там строится на взаимодействии объектов, в отличие от того же С++ - который только это парадигму поддерживает. полагаю что  с дельфи песня та же.

выходит - что шутка - ООП == объектно ориентированный понос - возрождается из пепла. другое дело не поздно ли пить баржоми?
PM MAIL   Вверх
djamshud
Дата 28.9.2010, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



Shaggie,

>Инкапсуляция на низком уровне - это способ скрыть низкоуровневые детали реализации, предоставив базовый API собственным модулям с тем, чтобы можно было легко менять нужный слой приложения при переходе с одной платформы/библиотеки на другую.

Ну и каким боком тут инкапсуляция вообще? Инкапсуляция != скрытие. Мы написали функцию, в ней низкоуровневая реализация. Что куда и с чем инкапсулировалось? Или мы будем называть инкапсуляцией написание любой процедуры?

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

Это мое имхо. Могу дать ссылку на первый пост:)

>Даже будь это самый-самый высокий уровень, всё равно надо спрятать детали в вызове application.execute(), спрятав потроха.

Какие еще потроха у высоких то материй?! На этом уровне занимаются спариванием сферических коней в вакууме.

>Похоже, в команде программировать не приходилось?

Как раз таки приходилось. И как раз таки убедился в полной непригодности black box-ов. Потому что иногда нужны перламутровые пуговицы. Отныне максимум - защита от дурака, т.е. protected на языке С++ и никаких private.

>Можно и без ООП с успехом запороть повторное использование.

ООП предоставляет куда больше возможностей в этом плане!

>Отлично, значит C по умолчанию ООП язык

Интересный вывод. "C с классами" - это C++, в котором максимум используется class для инкапсуляции.

>Библиотека контейнеров прекрасно пишется труъ-функциональным способом, ни капли не теряя в удобстве использования. К чему лишнее использование ООП, если оно тебе не нравится?

Так как она писалась для использования в C и C++ проектах, использовать труъ-способ - это как вырывать гланды через жопу.

>О, таки при работе над крупной задачей преимущество ООП внезапно было осознанно!

Это вовсе не крупный проект. Пара тысяч строк. И как я писал, ООП там используется в основном для реализации dataflow и интерфейса к нему.

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

Использование ООП излишне в большинстве случаев. Многочисленные адепты упорно пихают его всюду. Различные "кусочки" ООП пригодны во многих случаях, а вот весь комплекс ООП - это прибитый гвоздями сам к себе позор. В отличии от труъ-ООП он черезчур статичен, а динамичность ему придается лишь многочисленными костылями.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 28.9.2010, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(djamshud @  26.9.2010,  23:30 Найти цитируемый пост)
Все, что я видел - так или иначе крутится вокруг ООП. Можно ссылок на большую часть?

 внимательный просмотр паттернов позволит понять, что
1. многие из ООП патернов применимы также и во многих других концепциях. например Делегат, Стратегия, Контроллер, Итератор..
2. некоторые паттерны в ООП реализованы как средства языка и поэтому фактически не могут быть ООП-патернами, например: Полиморфизм, Наследование
3. есть паттерны определяющие архитектуру устройства:
плагин, сервер/клиент 
4. паттерны взаимодействия и обмена данных
точка-точка/ точка-звезда, удаленный вызов, база данных, файловая ситема
.
..
... и т.д.
(возможно в высшесказонном есть мелкие недочеты, но неохото напрягать голову сейчас.. главное суть в том, что паттерн это не технология ООП, а технология, которую можно выделить и описать)

Добавлено через 1 минуту и 30 секунд
Цитата(Vex @  28.9.2010,  09:15 Найти цитируемый пост)
 В результате приходится подпрограммы выносить на уровни метода, а это логический ###.

но статические же методы оставили ?!.. так вроде там и статические классы даже есть..



Это сообщение отредактировал(а) mes - 28.9.2010, 20:20


--------------------
PM MAIL WWW   Вверх
Vex
Дата 28.9.2010, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

Репутация: 2
Всего: 88




Модератор: Сообщение скрыто.



--------------------
Слава Україні.
PM   Вверх
mes
Дата 28.9.2010, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата
Инкапсуляция без сомнения удобна, но огромная ошибка - страться инкапсулировать все и во всем.

Ну так это не проблема инкапсуляции, а кривых рук... 

Цитата(Shaggie @  28.9.2010,  10:02 Найти цитируемый пост)
Любой слой приложения имеет в подчинении совокупность интерфейсов низлежащего слоя, владение ими и порядок вызовов имеет смысл инкапсулировать в объекте, предоставив набор методов наружу.

smile

Цитата(Shaggie @  28.9.2010,  10:02 Найти цитируемый пост)
Можно и без ООП с успехом запороть повторное использование.

имхо повторное использование к этой теме вообще отношения не имеет.. 

Цитата(Shaggie @  28.9.2010,  10:02 Найти цитируемый пост)
Библиотека контейнеров прекрасно пишется труъ-функциональным способом

имелся ввиду процедурный стиль ?

Цитата(Shaggie @  28.9.2010,  10:02 Найти цитируемый пост)
, ни капли не теряя в удобстве использования

некоторое удобство теряется из за незнания контейнера как управлять жизнью объекта и создавать копии..

Цитата(djamshud @  28.9.2010,  10:33 Найти цитируемый пост)
Или мы будем называть инкапсуляцией написание любой процедуры?

нет. Инкапсуляцией прежде всего называется сокрытие данных, а не сокрытие процедур. 
Вобщем для начала неплохо было бы ознакомиться с АТД и понять его суть и преимущества.. 

Цитата(djamshud @  28.9.2010,  10:33 Найти цитируемый пост)
И как раз таки убедился в полной непригодности black box-ов. Потому что иногда нужны перламутровые пуговицы. Отныне максимум - защита от дурака, т.е. protected на языке С++ и никаких private.

нда.. как связаны black box и перламутровые пуговицы.
интересно насколько по Вашему быстрее и удобнее была бы работа, если бы поле m_size  у string было бы public.. 

Цитата(djamshud @  28.9.2010,  10:33 Найти цитируемый пост)
ООП предоставляет куда больше возможностей в этом плане!

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


Цитата(djamshud @  28.9.2010,  10:33 Найти цитируемый пост)
Так как она писалась для использования в C и C++ проектах, использовать труъ-способ - это как вырывать гланды через жопу.

не понятно о чем тут.. 

Цитата(djamshud @  28.9.2010,  10:33 Найти цитируемый пост)
Использование ООП излишне в большинстве случаев

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

Цитата(djamshud @  28.9.2010,  10:33 Найти цитируемый пост)
азличные "кусочки" ООП пригодны во многих случаях, а вот весь комплекс ООП - это прибитый гвоздями сам к себе позор. 

наверно имелся весь комплекс С++ средств, а не ООП ?!
согласен что различные средства нужны для различных задач.
также согласен, что пихать все лишь бы запихнуть, это не дело... 
но не понимаю, когда отказываются от нужного и  обзывают комплекс средств позором, только из за своей религиозности и/или нежелания (не имения возможности) выучить.. 
 smile

Добавлено @ 21:07
Цитата(Vex @  28.9.2010,  19:43 Найти цитируемый пост)
ну и что. я же не могу написать

вот на С++

Код

void f () {

 struct L {
  static void do_1 (int i ) { std::cout << i; }
  static void do_2 ()       { std::cout << ", "; }
 
 };

 for (int i =0; i< 10; ++i ) 
 {
   L::do_1 ( i );
   L::do_2 ();
    
 }
}

int main () { f(); }




Это сообщение отредактировал(а) mes - 28.9.2010, 21:08


--------------------
PM MAIL WWW   Вверх
mrbrooks
Дата 29.9.2010, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



Vex, просто для справки - ты когда писал (или пишешь) на дельфи - ты придерживался процедурного или объектно ориентированного программирования? smile


Цитата(mes @  28.9.2010,  21:58 Найти цитируемый пост)
вот на С++

OMG!
PM MAIL   Вверх
Shaggie
Дата 29.9.2010, 08:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: нет
Всего: 72



Цитата(djamshud @  28.9.2010,  12:33 Найти цитируемый пост)
Инкапсуляция != скрытие.

Согласен, точнее будет "сокрытие <- инкапсуляция"  smile 

Цитата(djamshud @  28.9.2010,  12:33 Найти цитируемый пост)
Мы написали функцию, в ней низкоуровневая реализация. Что куда и с чем инкапсулировалось? Или мы будем называть инкапсуляцией написание любой процедуры?

Давай напиши одну единственную функцию, которая умеет открывать/закрывать системный COM-порт, принимать и посылать через него байтики, всячески им руководить и буферизовать данные, при этом не вываливая наружу сам порт, всё его состояние и вспомогательный функционал. Ну даже совокупность функций, жонглирующих переменными. И внезапно окажется, что всё это может быть удобно (sic!) инкапсулировано в объекте.

Цитата(djamshud @  28.9.2010,  12:33 Найти цитируемый пост)

Какие еще потроха у высоких то материй?! На этом уровне занимаются спариванием сферических коней в вакууме.

Интересная, кстати, работа, я бы на это посмотрел и даже поучаствовал (хинт: смотри поле "где" в окошке информации о пользователе форума). Однако грамотное спаривание подразумевает работу интерфейсами, и при правильно спроектированной архитектуре можно подменить один сервис другим, ни капли не меняя в остальной программе. Это и есть инкапсуляция. Примеры можно нагуглить по словам Dependency Injection Framework и Inversion of Control.

Цитата(djamshud @  28.9.2010,  12:33 Найти цитируемый пост)
Отныне максимум - защита от дурака, т.е. protected на языке С++ и никаких private.

Ну можно же было использовать друзей!  smile 
Ответь, пожалуйста, на один вопрос - а почему тогда не public? Зачем эти странности с правами доступа, если самому же их приходится хитрым противоестественным образом обходить?

Цитата(djamshud @  28.9.2010,  12:33 Найти цитируемый пост)

Использование ООП излишне в большинстве случаев. Многочисленные адепты упорно пихают его всюду. Различные "кусочки" ООП пригодны во многих случаях, а вот весь комплекс ООП - это прибитый гвоздями сам к себе позор. В отличии от труъ-ООП он черезчур статичен, а динамичность ему придается лишь многочисленными костылями. 

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



Цитата(mes @  28.9.2010,  21:58 Найти цитируемый пост)

Цитата(Shaggie @  28.9.2010,  10:02 Найти цитируемый пост)
Библиотека контейнеров прекрасно пишется труъ-функциональным способом

имелся ввиду процедурный стиль ?

Цитата(Shaggie @  28.9.2010,  10:02 Найти цитируемый пост)
, ни капли не теряя в удобстве использования

некоторое удобство теряется из за незнания контейнера как управлять жизнью объекта и создавать копии..

Имеется в виду именно функциональный стиль, примеры реализации контейнеров в OCaml, Haskell, Lisp, Erlang иже с ними. Но там другая среда исполнения, сборщик мусора сам следит за временем жизни хранимых объектов.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
azesmcar
Дата 29.9.2010, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Цитата(Vex @  28.9.2010,  20:43 Найти цитируемый пост)
ну и что. я же не могу написать

Я конечно дико извиняюсь за то, что лезу в столь высокоинтеллектуальные вопросы, не внеся свою лепту в дискуссию (неохота холиварить, мне здесь больше нравиться роль независимого зрителя с попкорном smile ) smile но если речь все еще про C# то я не знаю где Вы его учили
Код

static void Main()
{
    Func<int, int> subprogram = (x) => x * x;
    Console.WriteLine(subprogram(10));
}

и тоже самое на C++ - раз (по старому стандарту)
Код

int main()
{
    struct {
        int operator()(int x) const {
            return x * x;
        }
    } subprogram;
    std::cout << subprogram(10) << std::endl;
}

и два (по новому, смотрите скоро, на первом канале)
Код

auto subprogram = [](int x) -> int { return x * x; };
std::cout << subprogram(10) << std::endl;

разве нужно что-то еще?

Это сообщение отредактировал(а) azesmcar - 29.9.2010, 09:35
PM   Вверх
mrbrooks
Дата 29.9.2010, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



Цитата(azesmcar @  29.9.2010,  10:28 Найти цитируемый пост)
но если речь все еще про C# то я не знаю где Вы его учили

а если дизассемблировать и посмотреть что на самом деле происходит  smile 

хотя прикрутить делегат и заюзать лямбду или анонимный метод - отличный ответ на претензии. smile 
PM MAIL   Вверх
azesmcar
Дата 29.9.2010, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Цитата(mrbrooks @  29.9.2010,  10:02 Найти цитируемый пост)
а если дизассемблировать и посмотреть что на самом деле происходит  smile 

будто не плевать..
тут речь о высоких материях, а ты говоришь дизассемблировать smile 

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

Это сообщение отредактировал(а) azesmcar - 29.9.2010, 10:26
PM   Вверх
Vex
Дата 29.9.2010, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

Репутация: 2
Всего: 88




Модератор: Сообщение скрыто.



--------------------
Слава Україні.
PM   Вверх
azesmcar
Дата 29.9.2010, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Цитата(Vex @  29.9.2010,  10:29 Найти цитируемый пост)
Мы же на ты вроде )  да и мне можно по простому говорить "ты ##### не знаешь" =) я не обижаюсь )

да нет..это я шучу так smile 
на самом деле я предложил это как альтернативу, которая решает твою задачу.

Цитата(Vex @  29.9.2010,  10:29 Найти цитируемый пост)
я знаю что так можно сделать, но это не очень кошерно

а вот тут позволю себе похоливарить ..почему? какую задачу решают локальные функции, которые не решает лямбда? и почему локальные функции решают ее лучше? Я в самом деле не представляю зачем там нужны локальные функции.

Цитата(Vex @  29.9.2010,  10:29 Найти цитируемый пост)
тем более что насколько я знаю в нет 2,0 не было такой возможности. 

ну .NET 2 в прошлом, причем очень далеком. Там вообще много недоделок было, но со временем совершенствуют, раз уж говорим о C# то я полагаю надо говорить о последней версии (4.0).

Это сообщение отредактировал(а) smartov - 4.10.2010, 14:06
PM   Вверх
mrbrooks
Дата 29.9.2010, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



Цитата(Vex @  29.9.2010,  11:29 Найти цитируемый пост)
тем более что насколько я знаю в нет 2,0 не было такой возможности.

в таком случае:
Цитата(mrbrooks @  29.9.2010,  11:02 Найти цитируемый пост)
анонимный метод - отличный ответ на претензии


Цитата(azesmcar @  29.9.2010,  11:26 Найти цитируемый пост)
будто не плевать..

обычно я этим и занимаюсь  smile 
PM MAIL   Вверх
azesmcar
Дата 29.9.2010, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Цитата(mrbrooks @  29.9.2010,  10:36 Найти цитируемый пост)
обычно я этим и занимаюсь  smile  

и это правильно, главное, что за это платят smile 
PM   Вверх
Любитель
Дата 30.9.2010, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(mrbrooks @  29.9.2010,  10:02 Найти цитируемый пост)
а если дизассемблировать и посмотреть что на самом деле происходит

А если дизассемблировать код с дельфи - о, ужас, вообще функций нету smile 

Цитата(Vex @  29.9.2010,  10:29 Найти цитируемый пост)
тем более что насколько я знаю в нет 2,0 не было такой возможности. 

Во-первых, дело не в .Net а в шарпе. Во-вторых, анонимные делегаты были во 2-ом ещё (шарпе). Лямбды и анонимные делегаты и есть "локальные функции".

Цитата(Vex @  28.9.2010,  10:40 Найти цитируемый пост)
а в джаве тоже нет локальных функций? 

Ну что-т тип такого (если что - яверы поправят красивее):
Код

void someMethod()
{
   ISubProgram subProgram = new ISubProgram()
   {
      void run() {
         //
      }
   };

   subProgram();
}


И самое интересное. И шарповские делегаты (неважно откуда они взялись - явный метод, анонимный делегат или лямбда) и даже яверная чисто ООП-шная реализация круче чем то, что в Дельфи, хотя бы потому, что это первоклассные сущности. А в дельфи для вложенных функций это неприменимо (по крайней мере в те времена, когда я это видел). Как написать на дельфи что-то вроде банального collection.Where(x => x > 5)?

А вообще - это полный оффтопик smile 


--------------------
PM MAIL ICQ Skype   Вверх
baldina
Дата 30.9.2010, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



ООП не метод, а методология. Как любая методология для применения требует еще толику мозгов. И понимания, какую именно методологию полезно применять в конкретном случае. ОО это подход, и MAKCim абсолютно прав.
Что касается языков - дело вкуса. С++ поддерживает 3.5 парадигмы (0.5 на функциональное), что позволяет для большинства задач выбрать средство, оставаясь в пространстве языка. Выгода в краткости и читабельности кода.

А главное почти все присутствующие (в т.ч. молчаливо жующие попкорн) все отлично понимают, и просто развлекают друг друга... В надежде что придет серьезный mes и не даст умереть изначально тухлой теме)))

ЗЫ: Мнение А.Степанова насчет объектов/алгоритмов и сравнение с аксиомами/доказательствами имхо весьма слабая позиция. Если интересно, могу развить.
PM MAIL   Вверх
mes
Дата 30.9.2010, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(baldina @  30.9.2010,  10:56 Найти цитируемый пост)
серьезный mes 

 он разве серьезный ?  smile 

Цитата(baldina @  30.9.2010,  10:56 Найти цитируемый пост)
 и не даст умереть изначально 

он всего лишь пытался пресечь неаргументированные выпадки против средств С++,
которые и были сутью темы, не смотря на название..
 smile

Добавлено через 3 минуты и 4 секунды
Цитата(baldina @  30.9.2010,  10:56 Найти цитируемый пост)
Мнение А.Степанова насчет объектов/алгоритмов и сравнение с аксиомами/доказательствами имхо весьма слабая позиция. 

но где то в глубине все ж проглядывает здравая и интересная мысль. smile наверно просто программирование еще не доросло до этого..

Цитата(baldina @  30.9.2010,  10:56 Найти цитируемый пост)
Если интересно, могу развить. 

с удовольствием бы выслушал бы Ваше мнение по этому поводу.
smile



--------------------
PM MAIL WWW   Вверх
baldina
Дата 30.9.2010, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Цитата(mes @  30.9.2010,  12:46 Найти цитируемый пост)
Цитата(baldina @  30.9.2010,  10:56 )
Мнение А.Степанова насчет объектов/алгоритмов и сравнение с аксиомами/доказательствами имхо весьма слабая позиция. 

но где то в глубине все ж проглядывает здравая и интересная мысль.  наверно просто программирование еще не доросло до этого..

Цитата(baldina @  30.9.2010,  10:56 )
Если интересно, могу развить. 

с удовольствием бы выслушал бы Ваше мнение по этому поводу.


Буду краток)))

Начну с тривиального постулата, что универсальных инструментов не бывает.
Помимо ОО подхода есть и множество других. На разных этапах и для разных частей задачи одни будут иметь преимущество перед другими, поэтому вопрос OOP vs Generic vs Functional vs ... вообще не стоит.

Степанов в интервью говорит:
Цитата

I find OOP technically unsound. It attempts to decompose the world in terms of interfaces that vary on a single type. To deal with the real problems you need multisorted algebras - families of interfaces that span multiple types. I find OOP philosophically unsound. It claims that everything is an object. Even if it is true it is not very interesting - saying that everything is an object is saying nothing at all. I find OOP methodologically wrong. It starts with classes. It is as if mathematicians would start with axioms. You do not start with axioms - you start with proofs. Only when you have found a bunch of related proofs, can you come up with axioms. You end with axioms. The same thing is true in programming: you have to start with interesting algorithms. Only when you understand them well, can you come up with an interface that will let them work.

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

2. философски несостоятельным, потому что "все есть объект". "Даже если это правда, это не очень интересно: сказать, что все является объектом значит не сказать ничего."
Я лично ничего против объектной философии не имею, т.к. все действительно можно представить в виде объектов. Кто-нить приведет пример, когда это не так? Степанов тоже не может, иначе он сказал бы об альтернативе и не сказал бы "даже если это правда".
Представление в виде объектов, конечно, не панацея, но в целом вполне удобный прием абстрагирования.
Кстати, сравните с философией Unix "все есть файл". 

3. методологически неправильным, потому что сначала разрабатываются классы (читай - интерфейсы), а потом реализация. В качестве контрпримера приводится математика с аксиомами и доказательствами.
Это обвинение посерьезней, но оно в корне неверно.
Во-первых, наука не проектирование. Если бы в процессе проектирования мы ставили эксперименты и пытались на их основе вывести законы, проект никогда бы не завершился. В основе проектирования - анализ системы. В основе науки - анализ фактов и построение гипотез относительно структуры системы. Чувствуете разницу?
Во-вторых, начинать с реализации уместно только при разработке библиотек. Пропаганда применения разработки снизу вверх? Не верю, для сложных систем это тупиковый путь, т.к. слишком большие затраты на анализ полученных инструментов, их обобщение и интеграцию. Значит основная мысль такая: программа суть реализация алгоритма, а значит с него и надо начинать. Но этот алгоритм на самом деле конгломерат алгоритмов, соединенных причудливым образом. Нельзя объять необъятное. Поэтому начинается все с прецедентов использования, деления на компоненты и т.д. Т.е. применение принципа "разделяй и властвуй". Т.е. того, чему служит ООП.

Вот где-то так. Извините, что длинно, но и здесь не все поместилось))

Я кстати не верю, что Степанов действительно так считает. Скорее истина подавлена хорошим слогом ради красивого интервью.

PM MAIL   Вверх
baldina
Дата 30.9.2010, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Решил еще 5 копеек добавить для ясности.

Естественно, что разработать интерфейс можно лишь после того, как будет понятно, что должен делать алгоритм. Т.к. именно исполнитель диктует, какие исходные данные ему потребуются для решения задачи.
С этой позиции Степанов прав.
Но на самом деле адепты ООП и Степанов говорят об одном, ведь разработка класса (интерфейса класса) суть понимание назначения класса. И отнюдь не означает разработку интерфейса без понимания точки приложения усилий. Это просто игра слов: 
класс, решающий задачу, должен иметь следующий интерфейс... 
алгоритм, решающий задачу, должен получать следующие данные...
PM MAIL   Вверх
mes
Дата 30.9.2010, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



наченем с философии.. 
Цитата(baldina @  30.9.2010,  14:49 Найти цитируемый пост)
 лично ничего против объектной философии не имею, т.к. все действительно можно представить в виде объектов.

можно, но относительно.. 
Выражение "все есть объект"  должно накладывать некие отличительные признаки и обладать некоторыми гарантиями,
иначе ничем не будет отличаться от "не все есть объект" smile
Страуструп в этом вопросе подерживает Степанова, и считает что "все есть void*", ибо делать все объектами несет дополнительные расходы и не согласуется с идеологией C++  smile 

P.S.  некоторые моменты обострил специально для краткости.. 



--------------------
PM MAIL WWW   Вверх
baldina
Дата 30.9.2010, 17:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



э-э... дискутировать не собирался, ток выразить точку зрения. тем боле что зрение походу одинаково...
ну да ладно
а мы про ООП или про С++? причем тут накладные расходы реализации и идеология языка (в целях имеющего совместимость с С и эффективность, что к ООП не относится)?
и вообще, полагаю, что уважаемый mes имеет собственное мнение и ему не нужно прикрываться авторитетами.
Цитата

Выражение "все есть объект"  должно накладывать некие отличительные признаки

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

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

Добавлено через 12 минут и 57 секунд
хотя знаете...
почти с самого начала чтения этого топика, несмотря на мою защитную позицию ООП, сидела во мне одна мысль. об ООП, возведенном в абсурд.
Код

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

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

PM MAIL   Вверх
mes
Дата 30.9.2010, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(baldina @  30.9.2010,  16:33 Найти цитируемый пост)
а мы про ООП или про С++?

учитывая _особенности_ этой темы, я пытался уточнить, правильно ли я понял Вашу точку зрения.

Цитата(baldina @  30.9.2010,  16:33 Найти цитируемый пост)
дискутировать не собирался, ток выразить

Сорри, что для этого была применена попытка втянуть в нежелаемую беседу  smile 

Цитата(baldina @  30.9.2010,  16:33 Найти цитируемый пост)
полагаю, что уважаемый mes имеет собственное мнение и ему не нужно прикрываться авторитетами.

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

Цитата(baldina @  30.9.2010,  16:33 Найти цитируемый пост)
кстати, имхо методология ООП в изложении Г.Буча достаточно стройна и отвечает на все вопросы, которые тут поднимаются.

с его ООА и ООП.. надо будет освежить в памяти о чем он там писал smile в то время когда читал половину даже не понял smile






--------------------
PM MAIL WWW   Вверх
baldina
Дата 30.9.2010, 18:43 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Цитата

ООП вещь хорошая, но ей одной все дыры не прикроешь...

 smile 
освежить полезно... кстати последнее издание, несмотря на некоторые упрощения, имхо проигрывает первому, где примеры на разных ОО языках.
а про ООА (только А) есть отдельная книжица, хорошая, да куда-то задевал...
а, вот: С.Меллор, С.Шлеер. "Объектно-ориентированный анализ: моделирование мира в состояниях"
PM MAIL   Вверх
djamshud
Дата 1.10.2010, 09:40 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



Shaggie,

>И внезапно окажется, что всё это может быть удобно (sic!) инкапсулировано в объекте.

Но излишне. Я не знаю АПИ работы с ком-портами, но в общем это все равно что-то вроде (или же можно привести к этому виду):
Код

int cd=com_open(...);
write(cd,"hello",6);
close(cd);

>Однако грамотное спаривание подразумевает работу интерфейсами, и при правильно спроектированной архитектуре можно подменить один сервис другим, ни капли не меняя в остальной программе.

Окей. Пример почти реальный. Почти, потому что обощенный. У нас на работе случается переодически из-за мудовости одного из... заказчиков, скажем так. Получаем задачу. Месяц ОО-проектируем, рисуем юэмельки и вообще восхищаемся собственной крутостью. Оно и понятно - software designer-ы! В результате выделяем два "модуля": сущности А и Б. Они прекрасно знают интерфейсы друг друга и в целом хорошо ладят. Запрограммировали, все работает. Демонстрируем и узнаем, что было бы очень шикарно присобачить к системе модуль В, разработанный в каком-нибудь далеком сибирском селении в тамошнем НИИ. Пытаемся выделить какие-то общие интерфейсы для работы всех трех модулей - фиг там. Дальше два пути: либо еще раз жестко перехардкодить все три модуля, либо открыть Design Patterns и вхерачить десяток "фасадов", "мостов" или еще чего-нибудь из той же серии. В обоих случаях получается адская каракатица. А все почему? Потому что ОО-проектирование прибивает все сущности гвоздями друк к другу.

>Ответь, пожалуйста, на один вопрос - а почему тогда не public? Зачем эти странности с правами доступа, если самому же их приходится хитрым противоестественным образом обходить?

Защита от дурака - это в целом хорошо. Но из-за того, что частенько нужны перламутровые пуговицы там, где они не задуманы by design, случается, что приходится лезть в потроха реализации. Иначе повторное использование кода сводится почти к нулю.

>В чём проблема "комплексности ООП", почему кусочками оно хорошо, а целиком плохо, можно пример?

В его статичности. Кусочками можно реализовать динамичность, всем сразу - только забить крышку гроба на собственном проекте. Пример выше.

>В чём проблема статичности "не труъ-ООП"? Статика и динамика - это вообще-то вопрос реализации типизации в языке, не более того. 

В том, что мэинстримное ООП (проектирование в первую очередь) статично до усрачки.

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

В приведенном выше примере я бы просто пересоединил источники и назначения части данных, при необходимости динамически (не обязательно в рантайме!) добавил необходимые точки входов и выходов.

>В питоне типизация динамическая, он труъ-ООП язык? В лиспе типизация динамическая, он труъ-ООП язык?

Пистон не знаю. Лисп сам по себе тру, с его реализацеий ООП не знаком, но могу предположить, что труъ.

mes,

>внимательный просмотр паттернов позволит понять, что

Я понял, о чем вы. Цикл - тоже паттерн, да. Я более другие паттерны имею в виду, думаю, вы понимаете это. Их конечно можно применить и вне ООП, но там они нафик никому не нужны.

>Инкапсуляцией прежде всего называется сокрытие данных, а не сокрытие процедур.

RTFM. Это инкапсуляция:
Код

class complex{
public:
int base,i;
complex& addition(int,int);
};

Это не инкапсуляция:
Код

class crazyClown{
private:
int a,b;
};

Сокрытие данных - не свойство инкапсуляции, а ее дополнительная плюшка.

>нда.. как связаны black box и перламутровые пуговицы.

Еще как связаны. Если в классе "блузка" сделать private int color, то блузки с перламутровыми пуговицами не видать!

Это сообщение отредактировал(а) djamshud - 1.10.2010, 10:07


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Любитель
Дата 1.10.2010, 10:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(djamshud @  1.10.2010,  09:40 Найти цитируемый пост)
Сокрытие данных - не свойство инкапсуляции, а ее дополнительная плюшка.

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


--------------------
PM MAIL ICQ Skype   Вверх
mes
Дата 1.10.2010, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(djamshud @  1.10.2010,  08:40 Найти цитируемый пост)
А все почему? Потому что ОО-проектирование прибивает все сущности гвоздями друк к другу.

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

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


Цитата(djamshud @  1.10.2010,  08:40 Найти цитируемый пост)
Я более другие паттерны имею в виду, думаю, вы понимаете это

я понимаю что Вы имеете ввиду ООП-патерны, которые естественно описывают ОО сущности и их взаимодействия с другими. Но все потому что рассматрение ведете с точки зрения ООП. А вот например если посмотреть с точки зрения реляцционных баз, то у них есть свои паттерны, которые описывают реляционные сущности и их связи с другими, например ОО сущностями..
сорри за кучу тавтологии, но иначе не знаю как донести суть 
smile

Цитата(djamshud @  1.10.2010,  08:40 Найти цитируемый пост)
В его статичности. Кусочками можно реализовать динамичность, 

а статичности/динамичности чего идет речь ?

Цитата(djamshud @  1.10.2010,  08:40 Найти цитируемый пост)
Сокрытие данных - не свойство инкапсуляции, а ее дополнительная плюшка.

под сокрытием, подразумевается не запрятывание чего либо непонятно где, а замена прямого доступа на косвенный.
smile

Добавлено @ 12:33
Цитата(baldina @  30.9.2010,  16:33 Найти цитируемый пост)
вот от этого тошнит.

Цитата(baldina @  30.9.2010,  16:33 Найти цитируемый пост)
и возможно потому этот язык не люблю, 

та же история 
smile

Добавлено @ 12:46
Цитата(djamshud @  1.10.2010,  08:40 Найти цитируемый пост)
 Если в классе "блузка" сделать private int color, то блузки с перламутровыми пуговицами не видать!

и в чем тут вина ООП  ?! 


Это сообщение отредактировал(а) mes - 1.10.2010, 14:12


--------------------
PM MAIL WWW   Вверх
baldina
Дата 1.10.2010, 13:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Цитата(mes @  1.10.2010,  12:32 Найти цитируемый пост)
Цитата(djamshud @  1.10.2010,  08:40 )
Сокрытие данных - не свойство инкапсуляции, а ее дополнительная плюшка.

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

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

Добавлено через 3 минуты и 50 секунд
Цитата

В результате выделяем два "модуля": сущности А и Б. Они прекрасно знают интерфейсы друг друга и в целом хорошо ладят. Запрограммировали, все работает. Демонстрируем и узнаем, что было бы очень шикарно присобачить к системе модуль В

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

Добавлено через 5 минут и 20 секунд
ida вас бы поругала за такую организацию работ  smile 
PM MAIL   Вверх
k0rvin
Дата 2.10.2010, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(djamshud @ 1.10.2010,  09:40)
Лисп сам по себе тру, с его реализацеий ООП не знаком, но могу предположить, что труъ.

уж не уступает SmallTalk'у =)

http://ru.wikipedia.org/wiki/CLOS


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Shaggie
Дата 4.10.2010, 12:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: нет
Всего: 72



Цитата(djamshud @  1.10.2010,  10:40 Найти цитируемый пост)
Я не знаю АПИ работы с ком-портами, но в общем это все равно что-то вроде (или же можно привести к этому виду):
Код

int cd=com_open(...);
write(cd,"hello",6);
close(cd);

Окей, допустим, POSIX-style. В функциях write и close хендл порта передаётся первым аргументом - вот тебе и доморощенная реализация объектов в языках, не поддерживающих ООП нативно. Инкапсуляция есть, полиморфизм (даром что реализован только за счёт того, что все устройства в *NIX являются текстовыми файлами) есть, наследование тут не нужно, но прикрутить не проблема. Выглядит как утка, крякает как утка...

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

Цитата(djamshud @  1.10.2010,  10:40 Найти цитируемый пост)
Пример почти реальный. Почти, потому что обощенный. <...>

Во-первых, пример абсолютно реальный и работающий. Во-вторых, несовместимость интерфейсов получилась не от ООП, а из-за организации работы, mes уже привёл хорошую аналогию.

Цитата(djamshud @  1.10.2010,  10:40 Найти цитируемый пост)
Защита от дурака - это в целом хорошо. Но из-за того, что частенько нужны перламутровые пуговицы там, где они не задуманы by design, случается, что приходится лезть в потроха реализации. Иначе повторное использование кода сводится почти к нулю.

Где забыли задумать пуговицы нужного тебе цвета в библиотеке работы с датами, и как часто приходится лезть в недра и править реализацию? Насколько упростится повторное использование кода, если вместо объектного стиля работа с датами будет реализована в процедурном?

Цитата(djamshud @  1.10.2010,  10:40 Найти цитируемый пост)
>В чём проблема "комплексности ООП", почему кусочками оно хорошо, а целиком плохо, можно пример?

В его статичности. Кусочками можно реализовать динамичность, всем сразу - только забить крышку гроба на собственном проекте. Пример выше.

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

Цитата(djamshud @  1.10.2010,  10:40 Найти цитируемый пост)
>В чём проблема статичности "не труъ-ООП"? Статика и динамика - это вообще-то вопрос реализации типизации в языке, не более того. 

В том, что мэинстримное ООП (проектирование в первую очередь) статично до усрачки.

А проблема-то в чём?

Цитата(djamshud @  1.10.2010,  10:40 Найти цитируемый пост)
>Какое несомненное преимущество имеет динамический язык по сранению со статическим, на твой взгляд?

В приведенном выше примере я бы просто пересоединил источники и назначения части данных, при необходимости динамически (не обязательно в рантайме!) добавил необходимые точки входов и выходов.

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

Цитата(djamshud @  1.10.2010,  10:40 Найти цитируемый пост)
>В питоне типизация динамическая, он труъ-ООП язык? В лиспе типизация динамическая, он труъ-ООП язык?

Пистон не знаю. Лисп сам по себе тру, с его реализацеий ООП не знаком, но могу предположить, что труъ.

То есть не "ООП маст дай!", а "статические ЯП маст дай!", это же совсем другой разговор получается  smile 

Цитата(djamshud @  1.10.2010,  10:40 Найти цитируемый пост)
Еще как связаны. Если в классе "блузка" сделать private int color, то блузки с перламутровыми пуговицами не видать!

Сейчас попробую осознать прочитанное в предыдущих постах: то есть, по логике djamshud, надо писать protected int color и наследовать NacreousBlouse от Blouse, чтобы иметь возможность сконструировать блузку с перламутровыми пуговицами? Получаем сразу несколько ошибок проектирования. Неудивительно, что понадобится
Цитата(djamshud @  1.10.2010,  10:40 Найти цитируемый пост)
десяток "фасадов", "мостов" или еще чего-нибудь из той же серии
чтобы эта конструкция хоть как-то заработала.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
djamshud
Дата 6.10.2010, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



Shaggie,

Я знал, что вы увидите в open/write/close ООП. Проблема в том, что вы готовы увидеть его везде. Я согласен, что к ним можно применить термины инкапсуляции и полиморфизма (а в сокетах - так еще и наследования!), но нужно понимать, что это АПИ создавалось без оглядки на сабжевый ООП. Плюс, не знаю, как с этим дела в c# и яве, но на С++ я не видел более удачных АПИ для работы с устройствами ввода-вывода: всюду получается хитрожопая каракатица, "вещь в себе".

>Во-первых, пример абсолютно реальный и работающий. Во-вторых, несовместимость интерфейсов получилась не от ООП, а из-за организации работы, mes уже привёл хорошую аналогию.

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

>Где забыли задумать пуговицы нужного тебе цвета в библиотеке работы с датами, и как часто приходится лезть в недра и править реализацию? Насколько упростится повторное использование кода, если вместо объектного стиля работа с датами будет реализована в процедурном?

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

>Ничего не понял, а почему бы не использовать объектный подход по-необходимости?

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

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

Можно, если далекий сибирский НИИ был обозрим в условиях задачи. В целом же ООП не позволяет выстроить архитектуру так, чтобы в нее элегантно могли вписаться НИИ всего мира.

>Может лучше прямо кодом?

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

>А проблема-то в чём?

Статичность by-design и есть проблема. Проблема, что я не могу добавить объекту или классу еще один метод. Порблема, что я жестко привязываюсь к АПИ используемого объекта. Лишь частично это решается наследованием. В С++ очень многое из этого решается с помощью шаблонов и их спецификации: благодара этому язык хоть и стал намного динамичнее, но корень всех зол - проектирование - так и не сдвинулось с мертвой точки.

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

Я все же попробую конкретизировать без кода. На этапе проектирование все высокоуровневые сущности выделяются в виде не объектов, а обработчиков данных (как в bash - "cat file.txt | grep -ie error | sed ... > out": cat, grep и sed в даном случае и есть те самые обработчики), и соответственно между ними не выстраиваются ОО-связи, а налаживаются каналы передачи данных. В таком случае НИИ уже создает не объект, который фиг знает как подключить, а обработчики, которые мы без проблем вписываем в общую схему движения данных.

>То есть не "ООП маст дай!", а "статические ЯП маст дай!", это же совсем другой разговор получается

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

>Сейчас попробую осознать прочитанное в предыдущих постах: то есть, по логике djamshud, надо писать protected int color и наследовать NacreousBlouse от Blouse, чтобы иметь возможность сконструировать блузку с перламутровыми пуговицами? Получаем сразу несколько ошибок проектирования. Неудивительно, что понадобится

Пример с пуговицами, а потом и блузкой - просто отсыл к бриллиантовой руке, это аллегория; понятно, что можно правильно напроектировать, отделить мух от котлет, а цвета пуговиц - от блузкок. Речь шла в целом о том, что при разработке многие потенциально настраиваемые моменты (добавить пуговцу) остаются захадкожеными, т.к. в рамках решаемой задачи это совершенно излишне, а время, потраченное на выявление и программирование всех этих настраиваемостей, улетит в трубу. И когда через год мне вдруг нужна будет блузка с перламутровыми пуговцами, я предпочту наследоваться от блузки и вкорячить в нее пуговицы нужного мне цвета, а не переписывать десять тысяч строк кода ради того, чтобы еще раз правильно все спроектировать, но все равно не учесть всех нюансов и оставить задел для переписывания в следующем году.

>чтобы эта конструкция хоть как-то заработала.

Дык я и твержу, что паттерны - суть система палок и веревок для ООП.

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


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 6.10.2010, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(djamshud @  6.10.2010,  10:55 Найти цитируемый пост)
... ОО-проектировщики от рождения привыкли, что "все есть объект". 

Не стоит всех под одну гребенку )

Цитата(djamshud @  6.10.2010,  10:55 Найти цитируемый пост)
 Если бы они знали, что "все есть данные и их обработчики" - такой проблемы просто не могло бы возникнуть. 

как оффтоп: ну в листе насколько я знаю только "все есть данные" и никаких обработчиков и никому это не мешает.. smile

ну и что в ООП мешает определить сущности ? есть объект-данные, есть объект-обработчик, есть объект-делегат...  То Вы против паттернов, а сейчас прямым текстом к ним толкаете... Проблема не в ООП а в том как его видит разработчик.. 

Цитата(djamshud @  6.10.2010,  10:55 Найти цитируемый пост)
О чем я и толкую: использовать его по необходимости, а не искать в наркотическом угаре объекты там, где их нет

Это как раз остальные об этом толкуют, а Вы о 
Цитата(djamshud @  6.10.2010,  10:55 Найти цитируемый пост)
 маст дай ООП. 



Цитата(djamshud @  6.10.2010,  10:55 Найти цитируемый пост)
 Проблема, что я не могу добавить объекту или классу еще один метод.

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

Только я Вас опять не пойму.. Вам нужно динамическое поведение , чего  Вы С/С++ выбрали, которые очень слабую поддержку этого имеют.. И опять же значит не против тех языков в которые это умеют ?

Цитата(djamshud @  6.10.2010,  10:55 Найти цитируемый пост)
а этапе проектирование все высокоуровневые сущности выделяются в виде не объектов, а обработчиков данных

если в рамках языка, то в процедурном стиле это функции, а в ооп функторы - ощутите разницу

Цитата(djamshud @  6.10.2010,  10:55 Найти цитируемый пост)
 и соответственно между ними не выстраиваются ОО-связи, а налаживаются каналы передачи данных.

Ну и ? если для определенной задачи устанавливаете другой вид связи, то  все остальное в свалку ?!
 а понял !!  Вы считаете что при ООП объект grep должен знать об объекте sed ?
ну тогда неудивительно что Вы его противник smile я б наверно тогда тож возненавидел бы smile


Цитата(djamshud @  6.10.2010,  10:55 Найти цитируемый пост)
В таком случае НИИ уже создает не объект, который фиг знает как подключить, а обработчики, которые мы без проблем вписываем в общую схему движения данных.

Опять же проблемы понимания... Кстати паттерн называется Цепочка обязанностей smile

.

Цитата(djamshud @  6.10.2010,  10:55 Найти цитируемый пост)
Дык я и твержу, что паттерны - суть система палок и веревок для ООП.

Согласен, но не забывайте, что зависит от того в чьих руках эта система палок и веревок :
 один может повеситься, а другой покоряет Эвересты 
 smile 




--------------------
PM MAIL WWW   Вверх
baldina
Дата 6.10.2010, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Цитата

Я знал, что вы увидите в open/write/close ООП.

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

кстати. поскольку в open/write/close много общей алгоритмистики, обобщенное программирование тоже имеет место быть. потоки в C++ не верх совершенства, там есть что улучшить, но они - совокупность ООП и Generic.

Цитата

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

Исходя из цитаты, проблема в том примере в том, что Вы просто не понимаете ОО методологии. "Эти сущности" не должны ниче знать друг про друга.
А "все есть данные и их обработчики" - краеугольный камень ООП.

Цитата

В целом же ООП не позволяет выстроить архитектуру так, чтобы в нее элегантно могли вписаться НИИ всего мира.

Неправда. Давайте пример, выстроим.

Цитата

Проблема, что я не могу добавить объекту или классу еще один метод.

Классу? Легко.
Код

struct foo : public bar {  void another_method (); };

Объекту? Не нужно. У объекта уже есть задача, он ее решает. Другую задачу должен решать другой объект.
Приходишь домой, а там вместо жены усатый дядька. Это жена изменилась. Под влиянием местных условий. Конфуз...

Все-таки Вы чего-то не понимаете... Возможность "добавить метод" нужна ООЯ с объектами, но без классов. Javascript например. Smalltalk. Хорошо ли это? Нет. Потомучто грабли переносятся с компиляции на рантайм. С++ как раз хорош тем что строго типизирован.
Но... это все особенности реализации и к ОО относится постольку поскольку)))

Цитата

искать в наркотическом угаре объекты там, где их нет

ну нет, так нет. ради бога. а что там есть?


ЗЫ. Гляньте на Graph Boost Library. Там нету классов, но она яркий, хороший пример не только generic, но и ОО подхода.

Добавлено @ 15:04
конечно, ООП не подходит идеально для всех типов задач.
конечно, не каждый язык имеет все желаемые средства. например, нет в С++ мультиметодов
конечно, траншею можно выкопать алюминиевой ложкой.
конечно, изящно смотрится
Код

template <typename T>
T gcd (T m, T n)
{
   while (n != T())
   {
      T t = m % n;
      m = n;
      n = t;
   }
}

однако имхо не менее изящно
Код

discrete gcd (discrete m, discrete n)
{
   while (n != discrete::zero ())
   {
      discrete t = m % n;
      m = n;
      n = t;
   }
}

где discrete один из базовых алгебраических классов

Да, ООП может порождать излишне длинные цепочки наследования, которые можно заменить приемами из других парадигм. Но эта критика ООП совсем не то, о чем говорите Вы

Это сообщение отредактировал(а) baldina - 6.10.2010, 15:05
PM MAIL   Вверх
djamshud
Дата 6.10.2010, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



mes,

>ну и что в ООП мешает определить сущности ? есть объект-данные, есть объект-обработчик, есть объект-делегат...  То Вы против паттернов, а сейчас прямым текстом к ним толкаете... Проблема не в ООП а в том как его видит разработчик.. 

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

>Это как раз остальные об этом толкуют, а Вы о

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

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

Опять вы про гланды через жопу, да еще и с ограничениями. Для этого языку вовсе необязательно быть скриптовому. А в том же скриптовом пхп этого, ЕМНИП, нету. Потому что при прикручивании ОО-части к языку опирались на все те же мэинстримные языки.

>Только я Вас опять не пойму.. Вам нужно динамическое поведение , чего  Вы С/С++ выбрали, которые очень слабую поддержку этого имеют.. И опять же значит не против тех языков в которые это умеют ?

Я не против никаких языков. Я против притягивания ОО-парадигмы (в первую очередь - мэинстримной!) туда, где ей не место. А это... почти везде. Сиси плюсплюс, потому что еще можно на Аде, больше ни на чем нам писать низя. Да и в большинстве случаев "С с классами" более чем хватает.

>>а этапе проектирование все высокоуровневые сущности выделяются в виде не объектов, а обработчиков данных
>если в рамках языка, то в процедурном стиле это функции, а в ооп функторы - ощутите разницу

Нет, это совершенно разные вещи.

>Вы считаете что при ООП объект grep должен знать об объекте sed ?
>Опять же проблемы понимания... Кстати паттерн называется Цепочка обязанностей

Я считаю, что при ООП подобный вид связей (почти) не используется. И я в курсе, что средствами ООП можно реализовать датафлоу, но она получается кривенькой, как и все прочие парадигмы, реализованные поверх ООП. Парадигму нужно реализовывать в синтаксисе и семантике языка. В общем-то именно потому я и считаю С++ ###м, что в него понатаскали кучу бяк, сначала в бусте, теперь и в стандартной библиотеке. "С с классами, множественым наследованием и темплейтами" - это шикарнейший язык (несмотря на то, что ООП, статичный и все прочее - это по задумке мощное развитие С; но пришли теоретики-Александрески и все испортили), а С++ - ахтунг какой-то.

>Согласен, но не забывайте, что зависит от того в чьих руках эта система палок и веревок :
> один может повеситься, а другой покоряет Эвересты 

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


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 6.10.2010, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(djamshud @  6.10.2010,  14:12 Найти цитируемый пост)

Цитата

что в ООП мешает определить сущности
 В ООП это инородно уже с точки зрения идеи. 

Как раз наоборот, в ООП это является (не знаю правильней слова) сутью...

Цитата(djamshud @  6.10.2010,  14:12 Найти цитируемый пост)
Ну и собственно реализация этого в ООП-языках неуклюжа и многословна

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

Цитата(djamshud @  6.10.2010,  14:12 Найти цитируемый пост)
Я против паттернов, которые приводят к использованию языковых средств для решения несвойственных им задач.

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

Цитата(djamshud @  6.10.2010,  14:12 Найти цитируемый пост)
Я против притягивания ОО-парадигмы (в первую очередь - мэинстримной!) туда, где ей не место. А это... почти везде. 

Я согласен, что не следует притягивать куда не надо, но не соглашусь, с почти везде. 

Цитата(djamshud @  6.10.2010,  14:12 Найти цитируемый пост)
Да и в большинстве случаев "С с классами" более чем хватает.

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

Цитата(djamshud @  6.10.2010,  14:12 Найти цитируемый пост)
Нет, это совершенно разные вещи.

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

Цитата(djamshud @  6.10.2010,  14:12 Найти цитируемый пост)
Я считаю, что при ООП подобный вид связей (почти) не используется. 

нда.. А обработка событий в любом ГУИ ? таже цепочка обязаностей smile Или применительно для обработки текста ? Так тут дело скорей всего в двух причинах 1. не сталкивались, 2. для такого выбирают другой язык.. 

Цитата(djamshud @  6.10.2010,  14:12 Найти цитируемый пост)
. Парадигму нужно реализовывать в синтаксисе и семантике языка.

т.е. нужно в языке иметь все возможные средства ?!

Цитата(djamshud @  6.10.2010,  14:12 Найти цитируемый пост)
В общем-то именно потому я и считаю С++ ###м, что в него понатаскали кучу бяк

или наоборот на каждую задачу свой язык ?

Цитата(djamshud @  6.10.2010,  14:12 Найти цитируемый пост)
сначала в бусте, теперь и в стандартной библиотеке.

опять ! при чем тут буст и стл когда они не "призваны" поддерживать ООП ?!

Цитата(djamshud @  6.10.2010,  14:12 Найти цитируемый пост)
 "С с классами, множественым наследованием и темплейтами" - это шикарнейший язык

т.е. как я предполагал, пистолет-форму дали, чего ж еще надо то ! smile

Цитата(djamshud @  6.10.2010,  14:12 Найти цитируемый пост)
теоретики-Александрески

нашли кого причислять ООПешникам ) для него как раз рамки не писаны smile

Цитата(djamshud @  6.10.2010,  14:12 Найти цитируемый пост)
 Но утвержадаю, что из-за вдалбливания ООП появились лемминги - тысячи их! - дружным порядком следующие в пропасть. 


Так может бороться надо с вдалбливанием и леммингами, а не с ООП ?
а то что культура программиропванния еще не сформировалась, я согласен )



--------------------
PM MAIL WWW   Вверх
baldina
Дата 6.10.2010, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



djamshud, понятно, что Вы (теперь) ратуете не против ООП а против его неправильного и неоправданного использования. С этим никто не спорит.
Только доводы Ваши местами странные. Как будто есть обида на коллег, которые используют неправильно и не к месту. Тогда не надо обобщать. И тем боле привлекать "светил", которые говорят не о том, что Вы, а о другом. А понимают, несомненно, много больше, чем говорят...

Цитата

Он походит на того англичанина, который заявил, что все французы рыжие, только  потому,
что, высадившись в Кале, встретил одного  рыжего;  нельзя  судить  о  целом народе по нескольким злодеям

Жюль Верн. "Необыкновенные приключения экспедиции Барсака"
PM MAIL   Вверх
neutrino
Дата 11.11.2010, 14:00 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



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


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Kefir
Дата 29.12.2010, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 4
Всего: 87



Я ща всё скажу.

Джамшуд, пойми, ООП - это такой интерфейс, который имплементируют 99% программистов. И паттерны тоже. Если я общаюсь с таким программистом, то я знаю о чём с ним говорить и знаю, что хотя бы в общих чертах мы будет говорить об одном и том же. ООП и паттерны понятны и просты. Вот поэтому его везде и учат.

Вот наглядная схема:
Код

public interface IOOPProgrammer
{
  void Do(ITask task);
}
public interface IOOPArchitect
{
  ITask GenerateRandomTask();
}
public class ITCompany
{
  IOOPProgrammer programmer;
  IOOPArchitect architect;
  public ITCompany()
  {
    while(true)
    {
      var task = architect.GenerateRandomTask();
      programmer.Do(task);
    }
  }    
}

И таких фирм абсолютное большинство. ООП - это язык общения и принятый стандарт. А уж хорош он, плох он - это совсем другой вопрос. smile
PM MAIL WWW Skype   Вверх
mimik
Дата 29.12.2010, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не Rohoss Я
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 1.11.2010

Репутация: нет
Всего: 2



Цитата(Kefir @  29.12.2010,  18:52 Найти цитируемый пост)
А уж хорош он, плох он - это совсем другой вопрос.

вот именно что этот вопрос ТС и хотел обсудить, а не все его исрользуют, давай и я

Цитата(Kefir @  29.12.2010,  18:52 Найти цитируемый пост)
И паттерны тоже.

покажи мне паттерны без классов(ООП), т.е. не будь классов(ООП), небыло бы и паттернов smile 
PM   Вверх
baldina
Дата 29.12.2010, 19:43 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Цитата(mimik @  29.12.2010,  19:11 Найти цитируемый пост)
покажи мне паттерны без классов(ООП), т.е. не будь классов(ООП), небыло бы и паттернов   

покажи мне паттерн с классами (такой, что без классов не имеет смысла).
подсказка: и программируя на asm можно и нужно использовать паттерны.

PM MAIL   Вверх
mes
Дата 29.12.2010, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(mimik @  29.12.2010,  18:11 Найти цитируемый пост)
покажи мне паттерны без классов(ООП),

паттерн "строка " - актуален в языках с отсутствием встроенной поддержки оного..известен как c-строка.. 



--------------------
PM MAIL WWW   Вверх
Kefir
Дата 29.12.2010, 20:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 4
Всего: 87



Цитата(mimik @  29.12.2010,  19:11 Найти цитируемый пост)
вот именно что этот вопрос ТС и хотел обсудить, а не все его исрользуют, давай и я

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

Цитата(mimik @  29.12.2010,  19:11 Найти цитируемый пост)
покажи мне паттерны без классов(ООП), т.е. не будь классов(ООП), небыло бы и паттернов

Если это тонкий ответ на мою тонкую аналогию, то признаюсь честно - я вообще не понял к чему она. Или это просто вопрос за жизнь?
PM MAIL WWW Skype   Вверх
mes
Дата 1.1.2011, 15:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(Kefir @  29.12.2010,  19:45 Найти цитируемый пост)
Если это тонкий ответ на мою тонкую аналогию, то признаюсь честно - я вообще не понял к чему она. Или это просто вопрос за жизнь? 

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



--------------------
PM MAIL WWW   Вверх
mimik
Дата 12.1.2011, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не Rohoss Я
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 1.11.2010

Репутация: нет
Всего: 2



Цитата(mes @  29.12.2010,  19:51 Найти цитируемый пост)
паттерн \"строка \" - актуален в языках с отсутствием встроенной поддержки оного..известен как c-строка.. 

не нашел smile 
можно ссылку
PM   Вверх
neutrino
Дата 13.1.2011, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Вот уже 4 месяца программирую исключительно Аспектно Ориентированный код. Однако костяк все равно ООП-шний. Сам подход АОП интересен и может быть применен много где. Во многих случаях упрощает код. Правда тут есть свои тараканы.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
baldina
Дата 13.1.2011, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Аспектно Ориентированный Подход упрощает код? Кажется, он упрощает подход, а вот код становится вермишелеобразным  smile 
PM MAIL   Вверх
neutrino
Дата 14.1.2011, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



baldina, Уметь писать АОП - это все равно что уметь писать ООП. Что мало быдлокодеров на Java/C#???


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
mes
Дата 15.1.2011, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(mimik @  12.1.2011,  09:49 Найти цитируемый пост)
не нашел  
можно ссылку 

не нашли что ? описание с-строки ?



--------------------
PM MAIL WWW   Вверх
baldina
Дата 17.1.2011, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Цитата(neutrino @  14.1.2011,  17:23 Найти цитируемый пост)
Уметь писать АОП - это все равно что уметь писать ООП

не согласен. это аналогично утверждению "уметь говорить по-английски все равно что уметь говорить по-немецки"
PM MAIL   Вверх
neutrino
Дата 18.1.2011, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Имелось в виду  то, что умение нужно везде. Нет на клавиатуре кнопки "шыдевр".



--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.3167 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.