Re[8]: C++ way
От: Alexander Poluektov Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 29.08.11 07:02
Оценка:
Здравствуйте, ollv, Вы писали:

AP>>Приведите, пожалуйста, определение ООП, которое Вы сейчас использовали.


O>

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


Смотрите мой ответ Abyx здесь
Автор: Alexander Poluektov
Дата: 29.08.11
.

O> Да сейчас многое, что было сказано у Александреску видится иначе, но ..кто же сказал "Гаффф.." ?


Не совсем понятно, почему Вы задаете этот вопрос после

O> Какая разница, кто первый, важнее куда все это двинется.


Но давайте восстановим исторический контекст.

O> А именно о тайплистах, и именно они и являются по сути стартапом для метапрограмминга в С++ (отличное идея использования рекурсивной инстанциации шаблонов)


Template Metaprogramms. По ссылке Todd Veldhuizen (автор библиотеки Blitz++). Описал отличную идею использования рекурсивной инстанциации шаблонов. "Гаффф" прозвучало в 1995 году. Я не утверждаю, что он был первым, однако это было значительно раньше выхода в свет "Современного проектирования". А до него еще был Erwin Unruh, который написал первую метапрограмму, и т.п.

O> А затем туплы


Про кортежи в C++ впервые писал Jaakko Jarvi в 1999 году. Он же и развил свои идеи в Boost.Tuple.

O> которые затем заимствуются и другими языками


Это оффтопик, но какие языки Вы имеете в виду? Java с C#? Потому что в других "других языках" кортежи, если они вообще есть, в основном являются first class objects.

O> А почему не мы должны отдавать Александреску должное?


Мы должны -- за списки типов, популяризацию метапрограммирования и, возможно, идеи разложения на стратегии. Это и будет "должным". Все, что сверх этого, я и называю "переоцениванием".
Надеюсь, теперь объяснил понятно.
Re[9]: C++ way
От: ollv СССР https://youtu.be/DQDoYs6wHoo
Дата: 29.08.11 14:50
Оценка:
Здравствуйте, Alexander Poluektov, Вы писали:

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


AP>>>Приведите, пожалуйста, определение ООП, которое Вы сейчас использовали.


O>>

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


AP>Смотрите мой ответ Abyx здесь
Автор: Alexander Poluektov
Дата: 29.08.11
.

Мне тяжело отследить этимологию появления dynamic dispatch в разговоре о статическом и динамическом полиморфизмах, как по мне, так за описанием можно сходить сюда.
О статическом полиморфизме:

Templates in C++ provide a sophisticated mechanism for writing generic, polymorphic code. In particular, through the Curiously Recurring Template Pattern, it's possible to implement a form of static polymorphism that closely mimics the syntax for overriding virtual functions. Since C++ templates are type-aware and Turing-complete, they can also be used to let the compiler resolve recursive conditionals and generate substantial programs through template metaprogramming. Contrary to some opinion, template code will not generate a bulk code after compilation with the proper compiler settings.

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


O>> Да сейчас многое, что было сказано у Александреску видится иначе, но ..кто же сказал "Гаффф.." ?


AP>Не совсем понятно, почему Вы задаете этот вопрос после

Потому, что идея тайплистов расширяет и туплы. Т.к кортежи бустов имеют вынужденное (зависимое от компилятора) ограничение в глубину, реализовав же кортежи в идиоме
 template <typename type, typename tail> struct dual { typedef type type; typedef tail tail; type m_val; };


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

O>> Какая разница, кто первый, важнее куда все это двинется.


AP>Но давайте восстановим исторический контекст.


O>> А именно о тайплистах, и именно они и являются по сути стартапом для метапрограмминга в С++ (отличное идея использования рекурсивной инстанциации шаблонов)


AP>Template Metaprogramms. По ссылке Todd Veldhuizen (автор библиотеки Blitz++). Описал отличную идею использования рекурсивной инстанциации шаблонов. "Гаффф" прозвучало в 1995 году. Я не утверждаю, что он был первым, однако это было значительно раньше выхода в свет "Современного проектирования". А до него еще был Erwin Unruh, который написал первую метапрограмму, и т.п.

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

O>> А затем туплы


AP>Про кортежи в C++ впервые писал Jaakko Jarvi в 1999 году. Он же и развил свои идеи в Boost.Tuple.

Да, и вследствии чего часть МПЛ , вектор в частности, реализован как multi-parametric template после инсерта же он может преспокойно выродиться в dual based, с моей точки зрения такая смешанная стратегия может оказаться неудобной (и оказывается в алгоритмике, если базироваться на бустовых тайплистах).

O>> которые затем заимствуются и другими языками


AP>Это оффтопик, но какие языки Вы имеете в виду? Java с C#? Потому что в других "других языках" кортежи, если они вообще есть, в основном являются first class objects.

В данном случае я говорил на основе слухов по принципу "сишарпники с соседнего проекта сказали..."

O>> А почему не мы должны отдавать Александреску должное?


AP>Мы должны -- за списки типов, популяризацию метапрограммирования и, возможно, идеи разложения на стратегии. Это и будет "должным". Все, что сверх этого, я и называю "переоцениванием".

AP>Надеюсь, теперь объяснил понятно.
В принципе да, я так изначальо и понимал. Для меня тайлисты — именно прорыв, и это уже именно метапрограмма, где под
typedef TT(struct Begin, typename for_ <int_<60>, predicat<int, not_equal_<0> >, >::do_, struct End) run_loop; можно подразумевать что угодно. Запустить по почте, отправить в космос тут переоценить сложно, это эпохальное, собственно Не умаляя заслуг остальных товарищей всетаки я бы согласился с этим сообщением
Автор: Gleb Alexeev
Дата: 07.09.05
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Re[9]: C++ way
От: Abyx Россия  
Дата: 29.08.11 17:39
Оценка:
Здравствуйте, Alexander Poluektov, Вы писали:

AP>В Fundametal concepts and features указаны dynamic dispatch и suptype polymorphism.


AP>Конечно, можно расширить понятие "subtype polymorphism", чтобы оно работало с concepts, но я считаю это жонглированием определениями. Ну а dynamic dispatch к статике уже никак не прикрутишь


Да, я тоже заметил это "subtype".
Однако, я сразу же вспомнил ООП в Си и работу с COM в Си.
Для реализации динамического полиморфизма в Си достаточно собрать таблицу виртуальных функций. При этом никаких subtype в строгом значении этого слова в Си можно и не использовать — наследование интерфейсов будет только "в уме". Но все же это будет ООП и это будет динамический полиморфизм.

Мне кажется что ООП как парадигма не может ограничиваться рамками языка, и смотреть надо только на то, соответствует архитектура "духу ООП" или нет. И если с помощью статического полиморфизма я могу реализовать паттерны GoF, если при этом объекты выглядят как объекты, а методы ведут себя полиморфно — я говорю "это ООП".

AP>Отрывок из википедии я уже привел. Вот что говорит Бьярни Стровструп (*) насчет ООП в контексте C++: (...)

AP>Далее по этой же ссылке Бьярни проводит различие между generic programming (в контексте которого им упоминается static polymorphism), и object-oriented programming.

Но это не отменяет того, что static polymorphism можно использовать в целях ООП.
In Zen We Trust
Re[10]: C++ way
От: Слесарь с завода  
Дата: 29.08.11 18:26
Оценка: :))
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, Alexander Poluektov, Вы писали:


AP>>В Fundametal concepts and features указаны dynamic dispatch и suptype polymorphism.


AP>>Конечно, можно расширить понятие "subtype polymorphism", чтобы оно работало с concepts, но я считаю это жонглированием определениями. Ну а dynamic dispatch к статике уже никак не прикрутишь


A>Да, я тоже заметил это "subtype".

A>Однако, я сразу же вспомнил ООП в Си и работу с COM в Си.
A>Для реализации динамического полиморфизма в Си достаточно собрать таблицу виртуальных функций. При этом никаких subtype в строгом значении этого слова в Си можно и не использовать — наследование интерфейсов будет только "в уме". Но все же это будет ООП и это будет динамический полиморфизм.

A>Мне кажется что ООП как парадигма не может ограничиваться рамками языка, и смотреть надо только на то, соответствует архитектура "духу ООП" или нет. И если с помощью статического полиморфизма я могу реализовать паттерны GoF, если при этом объекты выглядят как объекты, а методы ведут себя полиморфно — я говорю "это ООП".


AP>>Отрывок из википедии я уже привел. Вот что говорит Бьярни Стровструп (*) насчет ООП в контексте C++: (...)

AP>>Далее по этой же ссылке Бьярни проводит различие между generic programming (в контексте которого им упоминается static polymorphism), и object-oriented programming.

A>Но это не отменяет того, что static polymorphism можно использовать в целях ООП.


Общеизвестно, что ООП стоит на 3-х китах:
1. Инкапсуляция;
2. Полиморфизм;
3. Наследование;

Дальше я аппелирую к C++ (хотя Вы можете апеллировать и к другим ОО языкам).
Инкапсуляция это private, public.
Полиморфизм – это «позднее» связывание и виртуальные функции
Наследование — … Ну это понятно, когда просто повторно не описываешь то, что уже описано в базовом классе.

А к чему тогда относится наличие конструкторов и их автоматический вызов? Разве это ООП?

А статические члены класса? Тоже ООП?

А константные методы? Неужели тоже ООП?

Я таких «фич» могу насчитать в C++ до сотни. И их в книгах по C++ почему то упоминают в разделах, описывающих ООП, хотя к ООП они никакого отношения не имеют. Это не более, чем «костыли», создающие определенные удобства.

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


Кто в каком языке знает какие есть такие фичи?

И ещё хотелось бы обсудить РЕАЛИЗАЦИЮ ООП (и идущих в комплекте с ним «костылей») в разных языках и компиляторах разных фирм.
Re[11]: C++ way
От: Alexander Poluektov Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 30.08.11 06:35
Оценка: :))
Здравствуйте, Слесарь с завода, Вы писали:

ССЗ>Общеизвестно, что ООП стоит на 3-х китах:

ССЗ>1. Инкапсуляция;
ССЗ>2. Полиморфизм;
ССЗ>3. Наследование;

А почему не на пяти слонах и большой черепахе? И кому это общеизвестно? Вы это в учебнике Герберта Шилдта прочитали?

ССЗ>Дальше я аппелирую к C++ (хотя Вы можете апеллировать и к другим ОО языкам).

ССЗ>Инкапсуляция это private, public.
ССЗ>Полиморфизм – это «позднее» связывание и виртуальные функции
ССЗ>Наследование — … Ну это понятно, когда просто повторно не описываешь то, что уже описано в базовом классе.

Т.е. если мы используем private тут и там, наследуем где не попадя, и все функции у нас виртуальные -- мы магически получаем объектно-ориентированную программу?
Садитесь, два.
Re[10]: C++ way
От: Alexander Poluektov Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 30.08.11 07:04
Оценка:
Здравствуйте, ollv, Вы писали:

AP>>>>Приведите, пожалуйста, определение ООП, которое Вы сейчас использовали.


O>>>

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


AP>>Смотрите мой ответ Abyx здесь
Автор: Alexander Poluektov
Дата: 29.08.11
.


O> Мне тяжело отследить этимологию появления dynamic dispatch в разговоре о статическом и динамическом полиморфизмах,


Просто Вы поменяли тему (было про объектно-ориентированное программирование, стало про статический и динамический полиморфизмы), а я нет.
Надеюсь понятно, как в разговоре об ООП вдруг всплыл dynamic dispatch?

O> Под "Гафф ..." я подразумевал именно списки типов


Я согласен с тем, что Александреску (вместе с Джоном Влиссидессом) является пионером в области метапрограммирования на списках типов.

Мои возражения Abyx'у касались только весьма сильных слов "понимание того что всё что написал Александреску — потом реализовали в бусте" (выделено мной).
Контрпримеры со ссылками я привел. Прорывы и запуски в космос мной не поднимались, и (вне зависимости от моего к ним отношения) обуждать их далее я не буду.
Re[12]: C++ way
От: minorlogic Украина  
Дата: 30.08.11 19:37
Оценка: :)
Здравствуйте, Alexander Poluektov, Вы писали:

...
AP>Садитесь, два.

Александр, мне показалось что ВЫ адски троллите ?
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[13]: C++ way
От: Alexander Poluektov Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 31.08.11 06:29
Оценка:
Приветствую, Михаил!

M>...

AP>>Садитесь, два.

M>Александр, мне показалось что ВЫ адски троллите ?


Да нет, и в мыслях не было. Меня просто, хм, удивляют эти детсадовские заявления типа "ООП = инкапсуляция+наследование+полиморфизм" и "инкапсуляция = private".

Учитывая, что ты уже второй, кто делает предположение о троллинге, постараюсь сделать выводы о стиле ведения диалога

P.S. Если ты насчет "Вы", то я начал "выкать" в первом посте, а переключаться на "ты" посреди треда мне показалось странным.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.