Полиморфизм, одна из трех кондиций ООП

интернет Компьютеры программирование математика ООП

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

Вопрос такой: почему выделяют полиморфизм именно? Как исторически это сложилось?

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

Почему так сложилось? Почему вместо "полиморфизма" нельзя использовать в ООП другие структуры: гомоморфизм, изоморфизм и др., что вполне реально...

Заранее спасибо!

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

Вообще все структуры основанные на морфизме - абстрактны, это к слову...

ООП вообще, по истории разрабатывалось, чтобы отойти от спагетти-кода... И хоть как-то структурировать программу, а не просто для КРУПНЫХ проектов.

В те времена в 70ые годы, компы вообще были редкостью и на многих фирмах их просто не было... Собственно какие крупные проекты тогда могли быть в 70ые? Ну это другой вопрос уже...

Собственно про другие структуры , основанные на морфизме - Вы не ответили.... Так, что не в счет... Общение между объектами, классами и их структурами можно не менее удобно и круче расписать, основаясь на модели изморфизма того же...
Ответы:
Потому что полиморфизм создаёт очень неплохие абстракции. ООП вообще разрабатывалось для крупных проектов, чтобы программист держал в голове как можно меньшую часть информации, и чтобы даже эта часть человеком понималась легко.
Потому что изоморфизм и гомоморфизм предполагают некоторое равенство в отношениях или соответствие одного множества другому.Грубо говоря "один к одному".
Полиморфизм как раз говорит,что нет однозначного соответствия.Есть множественное(поли-) соответствие."Многие к одному".
Полиморфизм является следствием наследования.Так как много объектов имеют свойства одного родителя.Наследование не предпологает моно- или изо-.Наследников много и у них могут быть свои наследники.Полиморфизм освобождает прикладных программистов от перебора всех наследников и поиска нужного в момент выполнения.И возлагает эту задачу на разработчиков компиляторов.Прикладной программист описывает только интерфейс вызова нужного объекта.На этапе компиляции не известно точно(моно-),какой вызовется объект на этапе выполнения.Вариантов может быть много(поли-).Отсюда и полиморфизм.
Ты так и не ответил.Если всё таки интересно,то изоморфизм и мономорфизм тоже широко применяются в современной разработке,но только как технические реализации.Это значит,что разработчики компиляторов не обязаны их реализовать.А вот разработчики каких то систем их реализуют.
Покажу на пальцах различия.
ПОЛИМОРФИЗМ.
Через ссылку на объект базового класса может вызываться любой объект из всей иерархии наследования.Объекты все разные,общий у них только родитель на верху иерархии.так как они разные,то это ПОЛИ.Такой механизм обязаны реализовать на уровне компилятора.Везде он реализуется по разному.В С++ для этого создаётся таблица виртуальных методов.В Java загрузчик классов на лету загружает нужную реализацию класса с готовыми откомпиленными "своими" методами.Принцип один,но работает по-разному.Если в С++ привести объект к типу родителя,то вызовется родительский вариант виртуального метода.В Java приведение не сработает,и вызовется всё равно метод потомка.Сам полиморфизм работает и там и  там,но работает по разному.Как его реализовали разработчики компиляторов.Но главное,что они были обязаны его реализовать.
ИЗОМОРФИЗМ.
Через ссылку на объект базового класса должен вызваться объект из группы совершенно одинаковых объектов производного класса.Часто такая задача решается в реальной жизни?Нет.По-этому эта концепция не положена в основу ООП.А может есть всё таки ситуации,где такой вариант применим?Конечно есть.Например оптимизация.Можно заранее создать группу нужных,готовых к использованию,одинаковых объектов. И по первому требованию исполняющая среда предоставит их в распоряжение приложению.При этом во время выполнения не будет расходываться время и ресурсы на создание объектов.Примерами могут быть различные пулы.Это и пулы потоков операционной системы,и пулы соединений с базами данных,и пулы сессионных бинов в джавовских серверах приложений.Примеров много.Ты только указываешь ссылку на нужный интерфейс,а тебе моментально подсовывается уже готовый объект.Это сейчас в высоконагруженых системах применяется повсеместно,но это не обязаны решать производители компиляторов,по-тому что это нужно не всем.Эта задача возложена на разработчиков среды выполнения(ОС,сервера,виртуальные машины и т.д.).
МОНОМОРФИЗМ.
Через ссылку на объект базового класса,ты получаешь всегда один и тот же физический объект.Например,твоё приложение работает с БД MySQL.Для коннекта к базе нужно,чтоб вызывался всё время её драйвер.Драйверов может быть много,если на компе запущено несколько СУБД.Чтоб не было путаницы,нужно реализовать механизм,который бы вызывал всё время один и тот же объект.Бо-большому счёту мы пришли к паттерну Singleton.Не к тому,что называют антипаттерном,а именно к тому варианту,когда нам действительно нужен вариант "один-к-одному".Опять же,это часто нужная фишка,но она опять же нужна не всем.А по-этому она тоже не реализуется на уровне компилятора,а чаще реализуется на уровне библиотеки классов языка или самостоятельной реализацией singleton-а.
В-общем вот такие особенности у всех этих трёх концепций.
Чего тут развели философию? Ну-ка марш работать! )


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

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

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.