LINUX.ORG.RU

В чём суть ООП?


3

5

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

★★★★★

Последнее исправление: ados (всего исправлений: 1)

Ответ на: комментарий от jtootf

а... ты-бы сразу не по-русски писал. А то что-то туплю...

drBatty ★★
()
Ответ на: комментарий от korvin_

Не так.

так. Если посмотреть, что C++ компилятор делает с твоим шаблоном.

Он вроде имел в виду макросы препроцессора

нет. cpp тут не причём.

drBatty ★★
()
Ответ на: комментарий от Deleted

кто сказал что язык без утиной типизации хорош?

я сказал. НЁХ под именем «утиная типизация» не нужна (а это-то что такое? эффект утёнка что-ли?)

drBatty ★★
()
Ответ на: комментарий от korvin_

Simula появилась раньше, но в Smalltalk более расово верное ООП.

ringill
()
Ответ на: комментарий от drBatty

я сказал. НЁХ

понятно

а это-то что такое? эффект утёнка что-ли?

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

Deleted
()
Ответ на: комментарий от Deleted

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

ознакомился: http://en.wikipedia.org/wiki/Duck_typing

я считаю, за такое надо вешать. Ну или хотя-бы кастрировать...

drBatty ★★
()

Вот интересные рассуждения на данную тему http://habrahabr.ru/post/147927/

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

special-k ★★★
()
Ответ на: комментарий от Deleted

Говоря подмешивание я подразумеваю ruby. Где я подмешиваю в класс сколько угодно модулей (а еще в модуль сколько угодно модулей). При этом меняю метод в модуле - он меняется в объекте (уже созданном).

Цепь прототипов - обычное наследование, не то что бы «не хочется», просто это не примешивание, и это не гибко. И я периодически ломаю голову над тем как получить гибкость в js аналогичную ruby... пока не очень (

special-k ★★★
()
Ответ на: комментарий от Deleted

а если аргументированно высказать свое мнение?

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

В коде утиной типизации я вижу типичное разименование void*, которое обычно ни к чему хорошему не приводит

И кстати, в C++ такой быдлокод тоже допустим, правда записывается длиннее - компилятор верещит как резанный, и отказывается собирать ТАКОЕ. Но при желании его можно заставить. Если есть хороший дебагер, и много свободного времени на отладку.

drBatty ★★
()
Ответ на: комментарий от Deleted

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

special-k ★★★
()

Жавоскрипты-Руби... Держи на фортране ооп.

anonymous
()
Ответ на: комментарий от drBatty

В коде утиной типизации я вижу типичное разименование void*

ты ошибаешься

jtootf ★★★★★
()
Ответ на: комментарий от drBatty

НЁХ под именем «утиная типизация» не нужна (а это-то что такое? эффект утёнка что-ли?)

«Это не нужно, хотя я понятия не имею, что это такое».

Классический эксперт LOR'а.

ak372771
()
Ответ на: комментарий от drBatty

я считаю, за такое надо вешать. Ну или хотя-бы кастрировать...

Для определенных ситуаций это очень простое и удобное решение. Решений, эффективных во всех ситуациях, не существует.

ak372771
()
Ответ на: комментарий от ritsufag

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

Да, да. И это только в ООП, в других парадигмах программирования этого однозначно нет.

ak372771
()
Ответ на: комментарий от ak372771

Да, да. И это только в ООП, в других парадигмах программирования этого однозначно нет.

Я, кажется, понял. О существовании других парадигм программирования Вы, вероятно, просто не знаете.

ak372771
()
Ответ на: комментарий от ak372771

Для определенных ситуаций это очень простое и удобное решение. Решений, эффективных во всех ситуациях, не существует.

Дело не в том, что оно неэффективно или сложно. Дело в том, что

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

«Это не нужно, хотя я понятия не имею, что это такое».

ну почитал - узнал. Теперь могу аргументировать, почему это действительно не нужно. Как не нужна например ссылка на метод класса (да, что это такое - я тоже не знаю. И тем не менее, оно не нужно)

drBatty ★★
()
Ответ на: комментарий от ritsufag

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

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

drBatty ★★
()
Ответ на: комментарий от drBatty

Плохой у вас детектор школоты. Наверное из-за постоянного рефакторинга:3 Но фанатику что-то объяснять бессмысленно.

ritsufag ★★★★★
()
Ответ на: комментарий от ritsufag

Потому что они мне не нужны.

Понял, вопросов больше нет. :)

ak372771
()
Ответ на: комментарий от drBatty

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

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

Как не нужна например ссылка на метод класса (да, что это такое - я тоже не знаю. И тем не менее, оно не нужно)

Все-таки, это как-то нехорошо - так аргументировать. IMHO, конечно. «Не читал, но против». Даже уже не смешно.

ak372771
()
Ответ на: комментарий от Deleted

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

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

slackwarrior ★★★★★
()
Ответ на: комментарий от ak372771

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

ключевое слово «мелкие». в мелких я и так всех своих уток помню, утиная типизация не нужна. К.О.

А вот в крупных - может и нужна, не спорю. Да, мне часто хочется написать type1* -> void* -> type2 и не париться. Но я себя сдерживаю, ибо это == быдлокод. И выбирать объект по тому, как он крякает - точно такой-же быдлокод. И ИМХО хорошо, что компилятор меня называет быдлокодером и ламером, если я пытаюсь такое сделать. Ваш компилятор такое переваривает? Чтож, всем известны поделия на php & C#, и то, как они обычно «работают».

Все-таки, это как-то нехорошо - так аргументировать. IMHO, конечно. «Не читал, но против».

ладно-ладно. Прочитал. Осмыслил. Тем более против. На самом деле, я знал, что утиная типизация допустима в php, я просто не знал, что эта идиома имеет своё название. И названия не знал. Каюсь.

ЗЫЖ и да, строгая типизация таки ускоряет разработку в целом - всегда знаешь, что и как будет крякать. Во всяком случае, если от моего class Утка наследуют class Свинья, и Утка начинает хрюкать - это уже проблемы того, кто наследует, а не мои.

drBatty ★★
()
Ответ на: комментарий от ritsufag

Почему бы вам не начать с аргументации за ООП?

она всем известна, и описана даже в вике. Даже в русской. ИЧСХ - это одна из лучших статей у википедиков (обычно в русской вике написан полный бред, продукт машинного перевода, прилизанный каким-то ГСМ).

Иди и почитай что-ли. Если тебе интересно лично моё мнение - ООП экономит время там, где это уместно. И время разработки, и время выполнения.

drBatty ★★
()
Ответ на: комментарий от drBatty

выбирать объект по тому, как он крякает - точно такой-же быдлокод

ты когда-нибудь пользовался STL? знаешь, как там итераторы проверяются на соответствие контракту?

jtootf ★★★★★
()
Ответ на: комментарий от buddhist

Не нужно.

Эм... Ты совсем наркоман? Инкапсуляция - это из основ программирования вообще. Возможно не в Си++ трактовке, но тем не менее.

Dudraug ★★★★★
()
Ответ на: комментарий от anonymous

Никогда не мог понять, почему для этого нужно прибивать фун^Wметоды к данным.

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

Dudraug ★★★★★
()
Ответ на: комментарий от ivanzoid

потому что инкапсуляция это оно и есть (прибивание)?

4.2 вообще говоря.

Dudraug ★★★★★
()
Ответ на: комментарий от korvin_

Карделли не согласен с тобой

я знаю. потому и написал, что это лично моё мнение. Может Каделли и не экономит время, может ему вообще деньги не за код платят, а за такие статьи и лекции. Даже наверняка. А мне, за мои лекции на ЛОРе денег не платят.

drBatty ★★
()
Ответ на: комментарий от jtootf

ты когда-нибудь пользовался STL? знаешь, как там итераторы проверяются на соответствие контракту?

дык это STL, такое STL... (:

drBatty ★★
()
Ответ на: комментарий от Dudraug

Ты совсем наркоман? Инкапсуляция - это из основ программирования вообще.

для хелловорлда инкапсуляция не нужна. Я гарантирую это!

drBatty ★★
()
Ответ на: комментарий от drBatty

для хелловорлда инкапсуляция не нужна. Я гарантирую это!

Ты используешь функцию printf например. Как она работает не знаешь, а знаешь ее интерфейс. В какой-то степени - это инкапсуляция.

Dudraug ★★★★★
()
Ответ на: комментарий от Dudraug

Ты используешь функцию printf например. Как она работает не знаешь, а знаешь ее интерфейс. В какой-то степени - это инкапсуляция.

но то ты или я. А для твоего оппонента printf, это часть ЯП.

drBatty ★★
()
Ответ на: комментарий от Dudraug

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

да, но этого мало. полиморфизм тоже нужен. Когда ты пишешь printf(«%..., тебе надо ломать голову, что тут ставить вместо многоточия. Используя полиморфизм тебе не нужно задумываться также о типе данных, просто пишешь cout << x, и оно самом разбирается, что делать с этим x. ИМХО этого необходимо и достаточно. Остальное - подробности реализации.

drBatty ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.