Re: Обобщенное программирование - частный случай ООП ?
От: Alexey Chen Чили  
Дата: 22.07.05 18:46
Оценка: 19 (5) +3
Здравствуйте, Аноним, Вы писали:

А>Собственно т.н. обобщенное программирование — в чем его глубокий смысл если тот самый

А><some_type> который используется в шаблонах по сути есть базовый класс в ООП.

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

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

Каков глубокий смысл? А фиг его знает Это один из инструментов позволяющий удобно писать хороший код. Удобная идеома программирования. Подход вдохнувший в C++ вторую жизнь, хотя появившийся далеко не в C++. На самом деле знания одного С++ для понимания обобщённого программирования недостаточно. Это надязыковая идеома и для хорошего её понимания желательно знать и другие языки пользующие её. Что впрочем с таким же успехом относится и к ООП.

А>например непонятно зачем ломать голову как сделать сортировку один раз для всех типов поддерживающих это понятие когда можно выделить некий интерфейс ICompare у которого будут методы сравнения и все типы которые можно сравнивать и все типы которые можно сравнивать и соотв-но сортировать должны поддерживать этот интерфейс


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

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