Здравствуйте, Аноним, Вы писали:
А>Собственно т.н. обобщенное программирование — в чем его глубокий смысл если тот самый
А><some_type> который используется в шаблонах по сути есть базовый класс в ООП.
Хороший вопрос. Далеко не каждый задумывается об этом.
Обычно принято говорить, что ООП — программирование в терминах обьектов их состояния и поведения. Обобщённое же программирование, к примеру, оперирует алгоритмами как элементами программы если мы говорим о сортировке. И это ортогональные подходы. Скажем так, это могут быть как два способа которыми можно решить такую задачу в терминах С++, так и методики используемые для решения задачи совместно.
От части ты прав, в твоём понимании обобщённое программирование реализует статический полиморфизм, в этом дейстивтельно присутствует сходство с ООП. Но как бы полиморфизм хоть и является одним из столпов ООП, не является его синонимом, но лишь одной из сотавляющих.
Каков глубокий смысл? А фиг его знает
Это один из инструментов позволяющий удобно писать хороший код. Удобная идеома программирования. Подход вдохнувший в C++ вторую жизнь, хотя появившийся далеко не в C++. На самом деле знания одного С++ для понимания обобщённого программирования недостаточно. Это надязыковая идеома и для хорошего её понимания желательно знать и другие языки пользующие её. Что впрочем с таким же успехом относится и к ООП.
А>например непонятно зачем ломать голову как сделать сортировку один раз для всех типов поддерживающих это понятие когда можно выделить некий интерфейс ICompare у которого будут методы сравнения и все типы которые можно сравнивать и все типы которые можно сравнивать и соотв-но сортировать должны поддерживать этот интерфейс
Честно говоря не понял что ты этим хотел сказать. В С++ есть такой интерфейс, называется operator <. Для большей гибкости обобщённый алгоритм сортировки имеет возможность задать специальный компоратор знающий как сравнивать обекты. Однако сам алгоритм сортировки к ООП отношения не имеет. Это просто алгоритм. В терминах ООП он мог бы быть реализован в базовом классе всех контейнеров и работать с элементами этих контейнеров через виртуальную операцию <, но это просто было бы медленно.
Обобщённое программирование, конечно, иногда похоже на ООП, как минимум использованием полиморфизма, но таковым не является.