Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В поисках совершенных абстракций 
:(
    Опции темы
Lazin
Дата 3.5.2009, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(atomicxp @  3.5.2009,  16:31 Найти цитируемый пост)
И мы с тобой говорим об одном и том же. Но я воспринимаю достижение полиморфизма посредством приведения типов как два отдельных понятия, приведение типов и полиморфизм.

а что такое полиморфизм? =))))
хочу узнать!!
PM MAIL Skype GTalk   Вверх
mes
Дата 3.5.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Lazin @  3.5.2009,  15:35 Найти цитируемый пост)
а что такое полиморфизм? =))))
хочу узнать!! 

да да, и мне было бы интересно услышать определение этого тернмина из уст atomicxp smile


Это сообщение отредактировал(а) mes - 3.5.2009, 16:37


--------------------
PM MAIL WWW   Вверх
atomicxp
  Дата 3.5.2009, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 2.5.2009
Где: Удмуртия, Ижевск

Репутация: нет
Всего: 1



Цитата(mes @  3.5.2009,  16:37 Найти цитируемый пост)
Цитата(Lazin @  3.5.2009,  15:35 Найти цитируемый пост)
а что такое полиморфизм? =))))
хочу узнать!! 

да да, и мне было бы интересно услышать определение этого тернмина из уст atomicxp smile

Использование множества разных сущностей единым интерфейсом. Если кто-то написал одинаковые имена, то лично для меня это не полиморфизм. А вот если независимо от имён и прочего можно брать разные сущности и применять к ним полиморфные алгоритмы, тогда это полиморфизм.
PM MAIL WWW Skype GTalk Jabber   Вверх
mes
Дата 3.5.2009, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(atomicxp @  3.5.2009,  15:41 Найти цитируемый пост)
Если кто-то написал одинаковые имена, то лично для меня это не полиморфизм. А вот если независимо от имён и прочего можно брать разные сущности и применять к ним полиморфные алгоритмы, тогда это полиморфизм.

ну тогда, пожалуйста, пример к выделенному smile



--------------------
PM MAIL WWW   Вверх
Lazin
Дата 3.5.2009, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(atomicxp @  3.5.2009,  16:41 Найти цитируемый пост)
Использование множества разных сущностей единым интерфейсом. Если кто-то написал одинаковые имена, то лично для меня это не полиморфизм

ну мало-ли для кого что не полиморфизм, для меня например это полиморфизм)

Код

template<class Callable>
void visit(const Callable& c)
{
    c(data);
}
 smile 
PM MAIL Skype GTalk   Вверх
atomicxp
  Дата 3.5.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 2.5.2009
Где: Удмуртия, Ижевск

Репутация: нет
Всего: 1



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

Добавлено через 4 минуты и 57 секунд
Цитата(Lazin @  3.5.2009,  16:50 Найти цитируемый пост)
ну мало-ли для кого что не полиморфизм, для меня например это полиморфизм)

template<class Callable>
void visit(const Callable& c)
{
    c(data);
}

Да, это полиморфизм, но это обобщённое функциональное программирование, а не обобщённое объектно-ориентированное. Иными словами полиморфизм проявляется по разному в разных парадигмах.
PM MAIL WWW Skype GTalk Jabber   Вверх
mes
Дата 3.5.2009, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(atomicxp @  3.5.2009,  15:52 Найти цитируемый пост)
у них есть единые операции, на вроде добавления, удаления и так далее.

А в языке который мы рассматриваем интерфейс объектов описывается именами их методов, так что 
Цитата(atomicxp @  3.5.2009,  15:41 Найти цитируемый пост)
независимо от имён и прочего

Применить не получится.  smile 

Цитата(atomicxp @  3.5.2009,  15:52 Найти цитируемый пост)
Иными словами полиморфизм проявляется по разному в разных парадигмах.

И может иметь несколько проявлений в одной и той же парадигме smile

Цитата(atomicxp @  3.5.2009,  15:52 Найти цитируемый пост)
Да, это полиморфизм, но это обобщённое функциональное программирование, а не обобщённое объектно-ориентированное.

для данного вопроса это неразличимо smile



--------------------
PM MAIL WWW   Вверх
Lazin
Дата 3.5.2009, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(atomicxp @  3.5.2009,  16:52 Найти цитируемый пост)
Ну, например, последовательности. С ними же можно много что делать, проходить в каком-то порядке, сортировать, у них есть единые операции, на вроде добавления, удаления и так далее. На основе этих действий пишутся полиморфные алгоритмы, и потом применяются к любым сущностям, которые так можно представить. Например, к файловой системе, элементов в списке, содержимому в файле, к xml и так далее.

ну так это и есть compile time полиморфизм, ведь эти алгоритмы работают и с голыми указателями, и с классами указателей, не имеющими ничего общего между собой smile 
PM MAIL Skype GTalk   Вверх
atomicxp
  Дата 3.5.2009, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 2.5.2009
Где: Удмуртия, Ижевск

Репутация: нет
Всего: 1



Цитата(mes @  3.5.2009,  17:03 Найти цитируемый пост)
А в языке который мы рассматриваем интерфейс объектов описывается именами их методов, так что 

Просто в твоём примере надо было наследовать два класса от одного класса, потом проводить приведение типов к базовому классу и через него уже использовать нужную функциональность. Если необходимо базовый класс тоже может иметь множество его базовых классов. Полиморфизм не через наследование, а через обобщение тоже полиморфизм. Но я же нахожусь в поисках абстракций реализованных по принципу обобщённого объектно-ориентированного программирования, следовательно алгоритмы написанные по другим принципам лишь кусочки для сборки системы.
PM MAIL WWW Skype GTalk Jabber   Вверх
Любитель
Дата 3.5.2009, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



Цитата(atomicxp @  3.5.2009,  16:52 Найти цитируемый пост)
обобщённое функциональное программирование

А какое отношение данный пример имеет к ФП?!


--------------------
PM MAIL ICQ Skype   Вверх
mes
Дата 3.5.2009, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(atomicxp @  3.5.2009,  16:14 Найти цитируемый пост)

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

не в моем.  smile 

Цитата(atomicxp @  3.5.2009,  16:14 Найти цитируемый пост)
Полиморфизм не через наследование, а через обобщение тоже полиморфизм

"Полиморфизм через наследование" - динамический полиморфизм.
"Полиморфизм относительно его интерфейса" - статический (он же compile time) полиморфизм.

Цитата(atomicxp @  3.5.2009,  16:14 Найти цитируемый пост)
Но я же нахожусь в поисках абстракций реализованных по принципу обобщённого объектно-ориентированного программирования, следовательно алгоритмы написанные по другим принципам лишь кусочки для сборки системы. 

Тут я сути не уловил smile

Добавлено @ 17:30
Цитата(Любитель @  3.5.2009,  16:21 Найти цитируемый пост)

А какое отношение данный пример имеет к ФП?! 

то что в шаблоне была описана функция, а не класс  smile (Ведь в ООП не должно быть ни одной функции !  smile )

Это сообщение отредактировал(а) mes - 3.5.2009, 17:31


--------------------
PM MAIL WWW   Вверх
atomicxp
  Дата 3.5.2009, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 2.5.2009
Где: Удмуртия, Ижевск

Репутация: нет
Всего: 1



Цитата(mes @  3.5.2009,  17:28 Найти цитируемый пост)
то что в шаблоне была описана функция, а не класс  smile (Ведь в ООП не должно быть ни одной функции !  smile )

Lazin уже привёл пример. Вот как-то так и надо делать функции, то есть они должны быть не глобальными, а принадлежать классу и являться полиморфными, что опять же не исключает их обобщающую суть, которая состоит в подмене типов и генерации новых классов.
PM MAIL WWW Skype GTalk Jabber   Вверх
mes
Дата 3.5.2009, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(atomicxp @  3.5.2009,  16:39 Найти цитируемый пост)
они должны принадлежать классу

Во первых, зачем ?
А во вторых, Вы слышали о "минимизации интерфейса" ?
Ну а в третьих, как сторонику чистого ООП, некрасиво употреблять слово "класс".  smile 

Это сообщение отредактировал(а) mes - 3.5.2009, 17:53


--------------------
PM MAIL WWW   Вверх
atomicxp
  Дата 3.5.2009, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 2.5.2009
Где: Удмуртия, Ижевск

Репутация: нет
Всего: 1



Предположим у нас есть операция сложения. Вопрос как лучше её воспринимать, функцией, следуя парадигме функционального программирования или как сущность в объектно-ориентированном переопределяя однотипные методы.

В языке C++ существуют операторы, благодаря им есть возможность записывать последовательность определённых видов операций в кратком виде выражением, однако сути это не меняет. Для начала можно написать что-либо наподобие этого, все равно в последствии оно будет оптимизировано исключив повторные определения, потому что Addition и operator+ одно и тоже, а static Addition почти.

Код
namespace Arithmetic
{
    // Операция сложения
    template<typename TSequence> class IAddition
    {
    public:
        // Сложение (объектное)
        // arg addend="добавляемое"
        // return "сумма"
        virtual TSequence& Addition(const TSequence& addend) const = 0;
        // Оператор сложения
        // arg addend="добавляемое"
        // return "сумма"
        virtual TSequence& operator+(const TSequence& addend) const = 0;
        // Сложение (статическое)
        // arg augend="увеличиваемое"
        // arg addend="добавляемое"
        // return "сумма"
        static TSequence& Addition(const TSequence& augend, const TSequence& addend);
    };
}


Интересен тот факт, что данный интерфейс работает прежде всего с последовательностями. Иными словами используются ли числа для полиморфного интерфейса или последовательности, но воспринимается он как единое понятие.
PM MAIL WWW Skype GTalk Jabber   Вверх
mes
Дата 3.5.2009, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(atomicxp @  3.5.2009,  17:21 Найти цитируемый пост)
т. Для начала можно написать что-либо наподобие этого, все равно в последствии оно будет оптимизировано исключив повторные определения

Во первых подобная оптимизация не относится к виртуальным функциям 
Во вторых зачем вообще там виртуальные функции  ? Для решения задачи хватает статического полиморфизма.


Цитата(atomicxp @  3.5.2009,  17:21 Найти цитируемый пост)
Интересен тот факт, что данный интерфейс работает прежде всего с последовательностями. Иными словами используются ли числа для полиморфного интерфейса или последовательности, но воспринимается он как единое понятие. 

Я опять не уловил сути,  что доказывает Ваш пример ?


--------------------
PM MAIL WWW   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1085 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.