Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/187: Рейтинг темы: голосов - 187, средняя оценка - 4.77
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
13.01.2015, 20:39 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от hoggy Посмотреть сообщение
потому что не имеет никакого отношения к ad-hoc полиморфизму.
Что, серьезно? А что имеет?

Цитата Сообщение от hoggy Посмотреть сообщение
Поэтому, как ваш собеседник, я хочу увидеть в действии использование динамического ad-hoc полиморфизма
Я и продемонстрировал — реализации процедуры String выбирается в рантайме в зависимости от типа значения.

Цитата Сообщение от hoggy Посмотреть сообщение
Предложите мне наглядный пример подтверждающий ваши слова на примере решения задачи,
которую нельзя решить в статике.
При чем тут возможность/невозможность решения в статике? При чем тут вообще статика, если ООП — это по определению динамика?

Цитата Сообщение от hoggy Посмотреть сообщение
Если вы не хотите, или не можете ничем подтвердить собственные слова...
Мои слова были: «Удобные средства для использования динамический ad-hoc полиморфизм вполне себе доступны и в более процедурных языках, например Go». Я их подтвердил примером.

Цитата Сообщение от hoggy Посмотреть сообщение
Вы сказали, что RAII не имеет никакого отношения к ООП,
и привели пример-иллюстрацию оо-конструкции на языке, где он есть.
В Ocaml, как и в любом языке с GC, нет RAII.

Цитата Сообщение от hoggy Посмотреть сообщение
В вашем случае ядро не узнает о том, когда начался новый фрейм (что начался вызов вложенной функции).
И никогда не узнает, что он завершился.
И зачем ему об этом знать?

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

Цитата Сообщение от hoggy Посмотреть сообщение
На языке с++ они и не нужны.
Все сделает автоматика.
Автоматические конструкторы.
И автоматические диструкторы.
Лол, а тело конструктора и деструктора компилятор сам сочинит? Не, ну он-то конечно сочинит дефолтные, но от них ни толку, ни отличий от структур С.

Цитата Сообщение от hoggy Посмотреть сообщение
В мире ООП, "логгер" - это механизм. Сущность, наделенная свойствами и умениями.
Пользователю не придется, как то специально за ним ухаживать.
О, понеслись проповеди.

Цитата Сообщение от hoggy Посмотреть сообщение
Однако приведенный пример не будет работать на практике.
Почему же? Будет.

Цитата Сообщение от hoggy Посмотреть сообщение
Я предложил вам продемонстрировать сишную автоматику в действии.
Все, что я пока увидел - макросы,
И чем не автоматика?

Цитата Сообщение от hoggy Посмотреть сообщение
работа "автоматики" по прежнему обеспечивается вручную вызывающей стороной.
Что это вообще за бред?

Цитата Сообщение от hoggy Посмотреть сообщение
Пользователь поставил под контроль логгера достаточно объёмный кусок кода,
который к тому же выполняется в цикле.
За короткий промежуток времени он получил мегабайты мегабайтов лога,
в котором найти что-либо - как иголку в стоге сена.
И? С++ запрещает использовать циклы? Лол.

C++
1
2
3
4
5
6
void bar()
{
    LOGGING_THIS_FUNCTION;
    for(int i = 0; i < 1000000; i++)
        log <<"1111\n";
}
Цитата Сообщение от hoggy Посмотреть сообщение
Пользователь требует для себя возможность самостоятельно влиять на сообщения:
Например, он хочет пометить сообщения тэгами:
INFO/WARNING/ERROR, помечать сообщения датой и временем.

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

Цитата Сообщение от hoggy Посмотреть сообщение
Пользователь хочет иметь возможность самостоятельно изготовить кастомную стратегию владения и администрирования фреймами.
А кто-то выше говорил, что «Пользователю вообще не нужно ничего знать ни о каких ядрах, и ни о каких фреймах.»


Цитата Сообщение от hoggy Посмотреть сообщение
Например: при обратной раскрутке стека, все фреймы, в которых не было зафиксировано сообщений WARNING/ERROR должны быть полностью сброшены (не хочет пользователь сохранять данные "когда все хорошо", хочет что б лог хранил только данные о возникших проблемах).
C
1
2
3
4
void foo(some *obj) LOG(user_frame_strategy,
{
    log("korvin_", "hello");
})
Цитата Сообщение от hoggy Посмотреть сообщение
Но что самое плохое - использование будет полностью ручным.
Что бы это значило? Вызов макроса или создание объекта. Абсолютно одинаково.

Цитата Сообщение от hoggy Посмотреть сообщение
Нет. Но это не мешает использовать си в проектах на с++.
Это мешает использовать C++ в проектах на C++.

Цитата Сообщение от hoggy Посмотреть сообщение
Лично я полагаю, что если захотелось ООП - проще взять ООПнутый язык.
Конечно. Только это не C++.

Цитата Сообщение от hoggy Посмотреть сообщение
Такой говнокод не избавляет программиста от необходимости мыслить в терминах процедурной парадигмы.
И не сделает разработку ООПнутой.
Мой код решает задачу, а не навязывает пользователю свою религию.

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

Цитата Сообщение от hoggy Посмотреть сообщение
Полагаю технологию не просто "имеющей отношение к ООП", но киллер-фичей ООП.
1) Последний раз: ни в одном ООП-языке, кроме C++, нет RAII.
2) Единственное косвенное отношение RAII к ООП — виртуальность деструктора. Всё. Больше никакого отношения к ООП.

Это фича C++ и только C++, а не ООП.

Цитата Сообщение от hoggy Посмотреть сообщение
которые однако не избавляют от человеческого фактора рядом не стояли.
В каком месте ты там человеческий фактор увидел?

Цитата Сообщение от hoggy Посмотреть сообщение
Покажите
Я тебе показывал, но, похоже ты слеп. При том, что сам же упомянул GTK+. Феерично.

Цитата Сообщение от hoggy Посмотреть сообщение
Например: что такое "формальная математичесекая модель" ?
Тебе так сложно было открыть вики по ссылкам и прочитать хотя бы определения (я уж не надеюсь на беглый просмотр всего текста)? Я тут бессилен. Ладно, убери слова «математическая» и «модель». Формальное описание ООП есть? Не всякая рекламная туфта, а строгое определение, описание необходимых и достаточных критериев, что является ООП? Постулаты и законы ООП?
Или эти словосочетания тебе тоже непонятны?

Добавлено через 2 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
Вот что показывает практика.
Что люди больше ведутся на рекламу? Да, это она показывает.

Цитата Сообщение от hoggy Посмотреть сообщение
Хз к чему ссылка.
К тому, что в этом вашем С++ объекты — такие же просто куски памяти, не более.

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

Добавлено через 2 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
Я не намерен тратить время на чтение букварей,
Зря, это полезно. Тем более там мало букв.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.01.2015, 20:39
Ответы с готовыми решениями:

ООП или функции
Привет форумчанам! Такой вопрос нарисовался, Везде ли стоит применять ООП ? Например сейчас пишу...

ООП или Структурный подход?
Доброго времени суток! Могу ли я использовать процедурный подход программирования в PHP для...

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

Гавнокоддинг или учить ООП?
Здравствуйте, дело такое, я пишу все свои скрипты в гавнокоддинге. Дело в том, что у меня все...

926
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
13.01.2015, 23:08 22
Цитата Сообщение от korvin_ Посмотреть сообщение
Что, серьезно? А что имеет?
Я вроде бы по-русски пишу, не?

Цитата Сообщение от hoggy Посмотреть сообщение
Поэтому, как ваш собеседник, я хочу увидеть в действии использование динамического ad-hoc полиморфизма
Цитата Сообщение от korvin_ Посмотреть сообщение
Я и продемонстрировал — реализации процедуры String выбирается в рантайме в зависимости от типа значения.
Ещё раз повторяю: решение, которое тривиальным образом реализуется в статике мне не интересно.
Потому что я итак знаю, как это можно реализовать в процедурном языке.

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

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

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

Поэтому я попросил у вас предоставить пример использования.

Честно говоря, я уже не рассчитываю получить от вас вразумительного ответа.

Цитата Сообщение от korvin_ Посмотреть сообщение
Мои слова были: «Удобные средства для использования динамический ad-hoc полиморфизм вполне себе доступны и в более процедурных языках, например Go». Я их подтвердил примером.
Ваш пример ничего не объясняет, потому что не иллюстрирует работу динамики.

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

Цитата Сообщение от korvin_ Посмотреть сообщение
А в твоем коде телепатия работает, да?
Вы как то странно демонстрируете эрудицию касательно различных языков и технологий в сочетании с полным незнанием простых вещей.

Это производит на меня впечатление "поверхностных знаний".

Любой новичок в с++ знает, что для автоматических переменных конструкторы/диструкторы отрабатывают автоматически.

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

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

Это так просто, что даже скучно.

Ваши познания языков меня разочаровывают.

Цитата Сообщение от korvin_ Посмотреть сообщение
Лол, а тело конструктора и деструктора компилятор сам сочинит? Не, ну он-то конечно сочинит дефолтные, но от них ни толку, ни отличий от структур С.
О дизайне механизма позаботился изготовитель.
Вам не нужно знать внутреннего устройства, что бы пользоваться.

В клиентском коде ничего лишнего, никаких open/close.
Никаких "кишков реализации".

Это - главное, что вы должны уяснить.

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

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

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

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

Разделяй и Властвуй(ц) Гай Юлий Цезарь.
Самый первый в истории человечества человек, применивший оо-парадигму на практике.


Цитата Сообщение от korvin_ Посмотреть сообщение
Что это вообще за бред?
Бред - это тот макрос который вы написали.
Копипаста через одно место.

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

Одна ошибка, и все, приехали - потом сами отлаживайте в таком макросе ошибки.

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


Цитата Сообщение от korvin_ Посмотреть сообщение
К тому, что в этом вашем С++ объекты — такие же просто куски памяти, не более.
В нашем с++ мульти-парадигма.
Восприятие зависит от точки зрения, а точка зрения зависит от задачи.

Когда я пишу аллокатор памяти, я смотрю на вещи сквозь призму "низкого уровня".

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

Вам стоит понять одну вещь: парадигма это система взглядов. Это способ абстрагирования.
И не более того.

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


Цитата Сообщение от korvin_ Посмотреть сообщение
Я тебе показывал, но, похоже ты слеп. При том, что сам же упомянул GTK+. Феерично.
Единственное, что вы мне показали - это макрос "развидеть меня это".
С такими друзьями - враги не нужны.

Больше я ничего от вас не увидел.

Остальные ваши сообщения не комментирую.
Лень.

Вы меня разочаровали.
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
13.01.2015, 23:26 23
Цитата Сообщение от korvin_ Посмотреть сообщение
А формальная мат.модель ООП уже есть? Ну как λ-исчисление для функционального или π-исчисление для конкурентного программирования?
Цитата Сообщение от hoggy Посмотреть сообщение
Мне не понятен вопрос. Перефразируйте.
Ну так это всё объясняет. Вопрос однозначный и вполне понятный более или менее образованному специалисту. Просто надо знать. А если не знаете, то не надо с пеной у рта кидаться на адекватную критику.
Цитата Сообщение от hoggy Посмотреть сообщение
error parser: "формальная мат.модель ООП"
error parser: "λ-исчисление"
error parser: "π-исчисление"
error parser: "конкурентного программирования"
---> "конкурентное" <----> "программирование"
---> error: an association has not been established
Это еще раз подтверждает сказанное мной выше. Синдром утенка.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
13.01.2015, 23:41 24
Цитата Сообщение от castorsky Посмотреть сообщение
Просто надо знать. А если не знаете, то не надо с пеной у рта кидаться на адекватную критику.
Не заметил никакой критики. И не помню, что бы я на кого то кидался.

Если вам известно о чем тут речь - вы можете рассказать об этом своими простыми словами.

Цитата Сообщение от castorsky Посмотреть сообщение
Синдром утенка.
Я не кидаюсь поверхностными знаниями, и не боюсь чего то не знать.
Если я что-то не знаю - не боюсь спросить.

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

Предпочитаю знать мало, но основательно, чем много, но везде по чуть-чуть.
И у меня нет так уж много времени, что бы тратить его непойми на что, непойми зачем.
0
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
14.01.2015, 00:25 25
Цитата Сообщение от mporro Посмотреть сообщение
И это главная цель ООП -- создать систему типов, выражающую предметно-ориентированный язык программирования.
Полная ерунда. Система типов не может выразить предметную область (возможно лишь какую-то небольшую часть) и ООП нет таких средств.

Добавлено через 5 минут
Цитата Сообщение от hoggy Посмотреть сообщение
Объектно ориентированная парадигма в целом - это такой способ абстрагирования,когда конструкцию на языке можно рассматривать, как "сущность наделенную свойствами и умениями".
Не очень понял. О каких конструкциях идёт речь (применительно к С++)?
Цитата Сообщение от hoggy Посмотреть сообщение
Что делает программирование выразительнее.
ООП делает, но не намного.
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
14.01.2015, 00:27 26
Цитата Сообщение от hoggy Посмотреть сообщение
И у меня нет так уж много времени, что бы тратить его непойми на что, непойми зачем.
Я не понимаю Вас. Это имеет прямое отношение к Вашей специальности. Вы отстаиваете ооп, а на поверку ничего кроме ооп не знаете (процедурное я имею ввиду как знание по умолчанию), да и в ооп знаете только с++, который является чуть ли не худшим (и я подозреваю что худший) из примеров. Киллер-фичи? GC "was invented by John McCarthy around 1959" (c).
0
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
14.01.2015, 00:42 27
Цитата Сообщение от gng Посмотреть сообщение
В случае использования функций все параметры записываются в скобках после имени, что ограничивает простор мысли программиста, а в ООП, если функцию обозвать методом, то один из них пишется впереди и без скобок. Это новый уровень мышления.
Это старый уровень кретинизма недокрестьян. <object>.<method> всего лишь синтаксический сахар, от которого больше вреда чем пользы: ведь нужно выдумывать какой-то дополнительный механизм для частичного применения и мультиметоды не реализовать.
Цитата Сообщение от gng Посмотреть сообщение
за плюсанутых программистов препроцессор сам делает всё обилие копипастов
Что за препроцессор там такой?

Добавлено через 4 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
В оо-языках существует и RAII, и техники контроля за временем жизни объектов.
RAII к ООП не имеет никакого отношения. Разве что конкретно в C++ за счёт формализованной семантики вызова конструкторов и деструкторов.

Добавлено через 5 минут
Цитата Сообщение от hoggy Посмотреть сообщение
В первую очередь имеет к самой оо-парадигме: если есть объект, значит его может и не быть.
Убийственная логика
Блин, чё-то я опоздал. korvin_, всё уже сказал и я остался голодным
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
14.01.2015, 00:47 28
Цитата Сообщение от hoggy Посмотреть сообщение
Я вроде бы по-русски пишу, не?
Ты написал, что мой пример не имеет отношения к ad-hoc полиморфизму. Обоснуй.

Цитата Сообщение от hoggy Посмотреть сообщение
Ещё раз повторяю: решение, которое тривиальным образом реализуется в статике мне не интересно.
Потому что я итак знаю, как это можно реализовать в процедурном языке.
Я не увидел в этом примере "динамики".
Ваш пример не отражает принципа действия "динамического ad-hoc полиморфизма",
поскольку ни с точки зрения дизайна,
ни с точки зрения реализации ничем не отличается от обычного статического аналога.
Какая разница, как оно решается? Речь шла о наличии средств. Ты заикнулся, что одна из фич ООП — полиморфизм. Я тебе показал, что он существует не только в ООП. Точка. Сочинять «правильные» задачи — не моя забота.

Цитата Сообщение от hoggy Посмотреть сообщение
Вы наверное забыли, но изначальный ваш посыл был о процедурных языках.
На языке, которому неведомы объекты, полиморфизм, и тп.
Теперь вы спрашиваете, при чем тут ООП?
Полиморфизм есть в процедурных языках, что я и показал своим примером.
И я спрашивал не при чем тут ООП, а какое отношение статика имеет к ООП?

Цитата Сообщение от hoggy Посмотреть сообщение
и как она вообще может работать в условиях отсутствия поддержки ООПнутого полиморфизма - для меня загадка.
Чел, покури мат.часть. Динамический полиморфизм вполне себе самостоятельная техника, которая может существовать без ООП.

Цитата Сообщение от hoggy Посмотреть сообщение
Ваш пример ничего не объясняет, потому что не иллюстрирует работу динамики.
Реализация функции String выбирается в рантайме в зависимости от типа значения. Я об этом уже писал.

Цитата Сообщение от hoggy Посмотреть сообщение
О дизайне механизма позаботился изготовитель.
Вам не нужно знать внутреннего устройства, что бы пользоваться.
В клиентском коде ничего лишнего, никаких open/close.
Никаких "кишков реализации".
Это - главное, что вы должны уяснить.
Вам в руки дают инструмент.
Для того, что бы пользоваться, знать устройство не обязательно.
В отличие от примера с вашим макросом,
подробности реализации инструмента не будут засорять ваш клиентский код.
О боже... Какие подробности? Считай, что макрос и прочее — такой же механизм, о «котором позаботился изготовитель». Вот один в один с твоим плюсовым примером. И в клиентском коде (foo, bar, main) ничего лишнего.

Цитата Сообщение от hoggy Посмотреть сообщение
Разделяй и Властвуй(ц) Гай Юлий Цезарь.
Самый первый в истории человечества человек, применивший оо-парадигму на практике.
Это называется модульность, ООП лишь позаимствовало эту терминологию.

Цитата Сообщение от hoggy Посмотреть сообщение
Вам стоит понять одну вещь: парадигма это система взглядов. Это способ абстрагирования.
И не более того.
Эту вещь как раз стоит понять тебе, тогда перестанешь писать глупости, о велосипедостроении.

Цитата Сообщение от hoggy Посмотреть сообщение
И на случай, вдруг вы не в курсе:
как сишник, открою вам страшную тайну - любые объекты, на любых языках всего лишь куски памяти.
Как человек, хоть сколько-нибудь знающий эти самые «любые языки», открою еще более страшную тайну: нет. Ибо семантика этих языков не позволяет вытворять подобные финты с приведением типа и нарушением целостности объекта.

Цитата Сообщение от hoggy Посмотреть сообщение
Вы меня разочаровали.
Держи нас в курсе.

Добавлено через 1 минуту
Цитата Сообщение от castorsky Посмотреть сообщение
Это еще раз подтверждает сказанное мной выше. Синдром утенка.
Забавно, что он сломался уже на парсинге, а до собственно компиляции/интерпретации даже не дошел. Ну хоть не на лексическом анализе. =))
0
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
14.01.2015, 01:30 29
Цитата Сообщение от hoggy Посмотреть сообщение
Бред - это тот макрос который вы написали.
Копипаста через одно место.
Вроде макросы для того и нужны что бы не пастить со всеми вытекающими, не?

Добавлено через 16 минут
Цитата Сообщение от hoggy Посмотреть сообщение
Без RAII объекты не смогут быть самостоятельными.
Ещё раз: RAII и ООП не связанные вещи.
Хоп, короче, без ООП:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
(defparameter *log-prefix* "common")
 
(defun log% (message)
  (format t "~&[~a]: ~a~%" *log-prefix* message))
 
(defmacro with-log-prefix (prefix &body body)
  (once-only (prefix)
    `(let ((*log-prefix* ,prefix))
       (unwind-protect
            (progn
              ,@body)
         (format t "~&free: ~a~%" ,prefix)))))
 
 
(defun bar ()
  (with-log-prefix "bar"
    (log% "1111")))
 
(defun foo ()
  (with-log-prefix "foo"
    (log% "kokoko")))
 
(defun main ()
  (with-log-prefix "main"
    (log% "ololo")))
 
(progn
  (foo)
  (bar)
  (main))
 
;; [foo]: kokoko
;; free: foo
;; [bar]: 1111
;; free: bar
;; [main]: ololo
;; free: main
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.01.2015, 08:28 30
Цитата Сообщение от AlukardX Посмотреть сообщение
Чем лучше структуры и классы по сравнению с функцией?
А чем лучше кирпичи по сравнению с подъёмным краном? ООП функций не отменяет.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2015, 09:10 31
Цитата Сообщение от nullxdth Посмотреть сообщение
Не очень понял. О каких конструкциях идёт речь (применительно к С++)?
Имеется ввиду синтаксис самого языка.
Любые конструкции на языке.

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

Цитата Сообщение от nullxdth Посмотреть сообщение
Вроде макросы для того и нужны что бы не пастить со всеми вытекающими, не?
Да. Но их готовить нужно по уму, а не уродовать весь клиентский код повсеместным использованием.
Они не предназначены для того, что бы менять синтаксис самого языка.

Цитата Сообщение от nullxdth Посмотреть сообщение
Ещё раз: RAII и ООП не связанные вещи.
Здесь такая же проблема, как и в сишке.


Цитата Сообщение от castorsky Посмотреть сообщение
Это имеет прямое отношение к Вашей специальности.
Во-первых.
Не помню, что бы мы с вами пили вино и рассказывали друг другу о жизни.
Вы не можете знать, какова моя специальность.

Во-вторых, что именно "это"?
"формальная мат.модель ООП"?
"λ-исчисление"?
"π-исчисление"?
"конкурентное программирование"?

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

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

Возможно, что-то из этих пунктов и попадалось мне на пути.
Но при этом сами формулировки были другими.
(есть подозрение, что "λ-исчисление" есть ни что иное, как "лямбда выражения", например)
А возможно, пункты не знакомы, просто потому что без надобности.

Цитата Сообщение от castorsky Посмотреть сообщение
да и в ооп знаете только с++, который является чуть ли не худшим (и я подозреваю что худший) из примеров.
Сматалк - только на уровне концепции. Звучит интересно.
Реализация... в общем посмотрел, поплевался, закрыл тему.
Не осилил в общем.

Объектный-си. Нужно было портировать фреймворк с плюсов на объектный-си.
Работали в паре со специалистом по этому языку.
Как средство выражения язык мне очень не понравился.
Не хотелось бы ещё раз с ним соприкоснуться.

Жава/сишарп/Д/с++
Эти языки я знаю поверхностно. На уровне беглого чтения.
Не заметил никаких принципиальных различий между плюсовой оо-моделью.

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

В целом, моих познаний ооп мне хватает.
У меня нет потребности изучать ооп ради ооп.
Мне не очевидно, по каким критериям вы определяете: "лучший"/"худший".

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

В этом смысле ваша оценка несколько наивная, ну да ладно.


Цитата Сообщение от nullxdth Посмотреть сообщение
Это старый уровень кретинизма недокрестьян. <object>.<method> всего лишь синтаксический сахар,
Вы ошибаетесь.
Динамический полиморфизм невозможно реализовать в виде одного лишь синтаксического сахара.
Это - целая технология, которую с рядом серьёзных ограничений сишники велосипедят вручную.

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

Цитата Сообщение от nullxdth Посмотреть сообщение
RAII к ООП не имеет никакого отношения. Разве что конкретно в C++ за счёт формализованной семантики вызова конструкторов и деструкторов.
Таки имеет.
Если есть объект, который при создании умеет захватить ресурсы, значит есть RAII.

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

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

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

Цитата Сообщение от korvin_ Посмотреть сообщение
Какая разница, как оно решается? Речь шла о наличии средств. Ты заикнулся, что одна из фич ООП — полиморфизм. Я тебе показал, что он существует не только в ООП. Точка.
Голословные утверждения мне не интересны.
На протяжении всего диалога вы не смогли привести ни одного примера-иллюстрации процедурного полиморфизма на языке.

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

Цитата Сообщение от korvin_ Посмотреть сообщение
Чел, покури мат.часть. Динамический полиморфизм вполне себе самостоятельная техника, которая может существовать без ООП.
Не уверен, что мне это настолько интересно, что бы это курить.
Хотя любопытно. Я ожидал от вас хотя бы одно примера техники.

Поскольку сделать это вы оказались не в состоянии,
то не вижу смысла обсуждать это с вами дальше.

Цитата Сообщение от korvin_ Посмотреть сообщение
Реализация функции String выбирается в рантайме в зависимости от типа значения. Я об этом уже писал.
Не нужно повторяться.

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

Динамика, которая реализуется через статику не интересна.
И к динамике на самом языке отношения не имеет.



Цитата Сообщение от korvin_ Посмотреть сообщение
Считай, что макрос и прочее — такой же механизм, о «котором позаботился изготовитель». Вот один в один с твоим плюсовым примером. И в клиентском коде (foo, bar, main) ничего лишнего.
Нет, не буду считать. Макрос засирает код, приводя его в нечитабельное состояние.
И вынуждает клиентов следовать неким синтаксическим правилам.

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

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

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

Цитата Сообщение от korvin_ Посмотреть сообщение
Как человек, хоть сколько-нибудь знающий эти самые «любые языки», открою еще более страшную тайну: нет. Ибо семантика этих языков не позволяет вытворять подобные финты с приведением типа и нарушением целостности объекта.
Вы ошибаетесь. И "Приведения типов" к этому не имеет никакого отношения.
Говорю вам это, как человек, который сколько-нибудь знает,
что примерно находится у трансляторов этих самых языков под капотом.
0
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
14.01.2015, 09:41 32
Цитата Сообщение от hoggy Посмотреть сообщение
Имеется ввиду синтаксис самого языка.
Любые конструкции на языке.
Так а ООП-то причём тут? Сам по себе они не позволяет менять/расширять синтаксис. Максимум семантику некоторых операторов на объектах определить. А это сущие пустяки, ad-hoc мелочёвка. Тут нужные другие средства и в С++ они есть (к ООП отношения не имеющие), правда очень не удобные и сильно ограниченные.

Добавлено через 8 минут
Цитата Сообщение от hoggy Посмотреть сообщение
Они не предназначены для того, что бы менять синтаксис самого языка.
Верно. Макросы Си-препроцессора и не могут этого сделать и не безопасны (ведь они просто с текстом работают и ничего не знают о Си). Но иногда вполне себе применимы, как раз для борьбы с boilerplate-ом не сложным.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
14.01.2015, 09:47 33
Цитата Сообщение от hoggy Посмотреть сообщение
Значительнее в сравнении с функциональной или процедурной парадигмой.
(это - не личное мнение)
Может быть менее значительно в сравнении с декларативной парадигмой.
(это - личное мнение)
функциональная парадигма это часть декларативной. теперь расшифруйте свои противоречивые утверждения.
0
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
14.01.2015, 10:04 34
Цитата Сообщение от hoggy Посмотреть сообщение
Здесь такая же проблема, как и в сишке.
Где здесь? В приведенном коде на CL? Приведен идиоматический вид макроса -- "with" макрос генерирующий unwind-protect. Используй, пожалуйста. Всё автоматически и надёжно. RAII и никакого ООП. Какие-же там проблемы?

Добавлено через 5 минут
Цитата Сообщение от hoggy Посмотреть сообщение
Вы ошибаетесь.
Динамический полиморфизм невозможно реализовать в виде одного лишь синтаксического сахара.
Конечно не возможно, ведь полиморфизм это семантика. Я же говорил исключительно про синтаксис вызова метода.
То есть принципиальной разницы между синтаксисом object.method(a, b, ...) и method(object, a, b, ...) нет; кроме того, второй вариант более общий и гибкий.

Добавлено через 1 минуту
Цитата Сообщение от hoggy Посмотреть сообщение
А отсюда прямиком следует, что невозможно в виде сахара реализовать работу с исключениями, например.
Конечно не возможно. Exceptions - это семантика. Очевидные вещи, Капитан.

Добавлено через 7 минут
Цитата Сообщение от hoggy Посмотреть сообщение
Таки имеет.
Если есть объект, который при создании умеет захватить ресурсы, значит есть RAII.
Такие нет.
Ведь захватить ресурсы это одно, надо ведь ещё и освободить их планируемым образом (лексически описанным, как правило). А в большинстве ООП языках нет такой семантики вызова деструкторов, как в C++, но тем не менее RAII реализовано и, в связи с этим, совершенно очевидно должно быть, что сам по себе RAII к ООП отношения не имеет.

Добавлено через 2 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
Питон.
Его я использую в повседневной практике.
Ну вот, если Python действительно знаешь, то должен понимать, что RAII механизмы в языке к ООП отношения не имеют: try/finally & context managers (with).
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
14.01.2015, 10:08 35
Цитата Сообщение от hoggy Посмотреть сообщение
Значительнее в сравнении с функциональной
О, вот это вброс. Ты не смог «распарсить» λ-исчисление, но имеешь что-то сказать про ФП? Как обычно, пруфов не будет, и Солнце продолжает вращаться вокруг Земли?

Цитата Сообщение от hoggy Посмотреть сообщение
Динамический полиморфизм невозможно реализовать в виде одного лишь синтаксического сахара.
Возможно. В любом Лиспе он реализуется в несколько десятков строк.

Цитата Сообщение от hoggy Посмотреть сообщение
Если есть объект, который при создании умеет захватить ресурсы, значит есть RAII.
Объекты, которые при создании ничего не умеют... такое ООП я себе представить не в состоянии.
Захват ресурсов — один из множества способов использовать объекты, которым они не ограничиваются. А не можешь представить, возьми любой другой язык и посмотри.

Цитата Сообщение от hoggy Посмотреть сообщение
Кстати, вот такие повороты сюжета заставляют меня усомниться в умственных способностях собеседника.
Твои посты, к сожалению, не заставляют меня сомневаться в твоих умственных способностях.

Цитата Сообщение от hoggy Посмотреть сообщение
На протяжении всего диалога вы не смогли привести ни одного примера-иллюстрации процедурного полиморфизма на языке.
Последняя попытка.

Цитата Сообщение от hoggy Посмотреть сообщение
Статическая перегрузка - продукт процедурной парадигмы.
Серьёзно? То-то ни в Си, ни в Паскале её нет.

Цитата Сообщение от hoggy Посмотреть сообщение
Хотя любопытно. Я ожидал от вас хотя бы одно примера техники.
Пример был, но ты слишком слеп.

Цитата Сообщение от hoggy Посмотреть сообщение
Я могу построить интерпритатор для процедурного языка,
в котором будет доступна перегрузка функций.
От того факта, что все работает в рантайме, в самом языке динамика не появится.
Динамика, которая реализуется через статику не интересна.
И к динамике на самом языке отношения не имеет.


Цитата Сообщение от hoggy Посмотреть сообщение
Макрос засирает код, приводя его в нечитабельное состояние.
Твои личные половые трудности не интересны.

Цитата Сообщение от hoggy Посмотреть сообщение
И вынуждает клиентов следовать неким синтаксическим правилам.
Стандартные правила Си.

Цитата Сообщение от hoggy Посмотреть сообщение
Любой более менее опытный сишник сразу же откажется от использования такой мерзости.
Пока что все пользуются.

Цитата Сообщение от hoggy Посмотреть сообщение
Вы ошибаетесь. И "Приведения типов" к этому не имеет никакого отношения.
«Голословные утверждения мне не интересны.»

Лол, а как тогда называется вот это: ((char*)&foo)[6] = 'a'; ? Уж не приведением ли типа foo* к типу char*?

Цитата Сообщение от hoggy Посмотреть сообщение
Говорю вам это, как человек, который сколько-нибудь знает,
что примерно находится у трансляторов этих самых языков под капотом.
Пока что ты говоришь как человек, который не знает ничего, кроме чуть-чуть C++, и из-за отсутствия знаний не способный понять элементарных вещей, которых ему говорят.
0
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
14.01.2015, 10:09 36
Цитата Сообщение от pycture Посмотреть сообщение
функциональная парадигма это часть декларативной. теперь расшифруйте свои противоречивые утверждения.
Ага. Я вообще когда слышу слово "парадигма", меня начинает подташнивать. А когда слышу "деклагхъативная парадигма", то всё - бегу к унитазу. Вообще ХЗ что за этим имеет ввиду говорящий. Всё что угодно может быть.
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
14.01.2015, 10:52 37
Цитата Сообщение от nullxdth Посмотреть сообщение
Ага. Я вообще когда слышу слово "парадигма", меня начинает подташнивать. А когда слышу "деклагхъативная парадигма", то всё - бегу к унитазу. Вообще ХЗ что за этим имеет ввиду говорящий. Всё что угодно может быть.

Не по теме:

Очевидно же!

organization called the New Paradigm, another major survivalist organisation, which is more advanced than the player's forces. Later however, it is discovered that a self-aware computer virus named 'Nexus' is actually controlling the New Paradigm.
=)

0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2015, 11:22 38
Цитата Сообщение от pycture Посмотреть сообщение
функциональная парадигма это часть декларативной. теперь расшифруйте свои противоречивые утверждения.
Не, конечно если опускаться до маразма, то конечно можно посчитать, что вообще любая парадигма - часть декларативной.

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

декларативщина:
Код
[TABLE] kokoko
[ INT][      DATE          ][TROLOLO]
[num][день рождения  ][ лололо  ]
  10  , AUTO,   ляляля

и ещё 100500 возможных записей.

select num from kokoko where "день_рождения" == сегодня
функциональщина: можете глянуть какой нибудь лисп,
или шаблоны с++
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.01.2015, 11:26 39
Цитата Сообщение от hoggy Посмотреть сообщение
Не, конечно если опускаться до маразма, то конечно можно посчитать, что вообще любая парадигма - часть декларативной.
Это если до анацефалии. Но функциональная действительно входит в декларативную.

Добавлено через 43 секунды
Цитата Сообщение от hoggy Посмотреть сообщение
функциональщина: можете глянуть какой нибудь лисп,
или шаблоны с++
c++ не поддерживает функциональную парадигму.
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
14.01.2015, 11:26 40
Цитата Сообщение от hoggy Посмотреть сообщение
Не, конечно если опускаться до маразма, то конечно можно посчитать, что вообще любая парадигма - часть декларативной.
Вот только я таким не страдаю.
In computer science, functional programming is a programming paradigm, a style of building the structure and elements of computer programs, that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data. It is a declarative programming paradigm, which means programming is done with expressions.
http://en.wikipedia.org/wiki/F... rogramming
0
14.01.2015, 11:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2015, 11:26
Помогаю со студенческими работами здесь

прога или игра ооп
Здравствуйте)Помогите пожалуйста)Нужно в ближайшее время сдать курсовую работу.Требуется сдать...

Mysqli ООП или процедурный подход
Вот интересно, услышать мнение специалистов, что лучшие использовать при работе с mysqli ООП или...

Определить, программа с ооп или нет
Здравствуйте)Помогите пожалуйста разобраться с программой)Мне нужно сдать курсовую по...

Изучаю ООП можно или нет так?
Это index: &lt;?php include('classes/database.class.php'); $object = new DB; $nick = &quot;Alex&quot;;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru