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

Поиск:

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


Шустрый
*


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

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



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

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


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


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

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



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

atomicxp, чувствуется знакомый слог.
особенно, учитывая это
Цитата

Удмуртия, Ижевск

возникает вопрос, а Вы случаем с unicuum не братья-близнецы  smile 
если нет, то  напрашивается следующий : a зачем стоило заводить то новый ник ?!  smile 


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


--------------------
PM MAIL WWW   Вверх
Любитель
Дата 3.5.2009, 01:02 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



mes,
Цитата(unicuum @  3.5.2009,  00:46 Найти цитируемый пост)
Для единообразия публикаций поменял свой ник, во всяком случае для размышления об абстракциях буду использовать его; 




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


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка

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



Цитата(mes @  3.5.2009,  00:57 Найти цитируемый пост)
если нет, то  напрашивается следующий : a зачем стоило заводить то новый ник ?!  smile 

вот же всё написал


--------------------
user posted image
обычный день на винграде
PM   Вверх
atomicxp
  Дата 3.5.2009, 02:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

Возникает вопрос, почему такие алгоритмы как MD5, SHA1, TTH и другие имеют право называться сущностью, тогда как арифметические операции: сложение, вычитание, умножение, деление, или тригонометрические: синус, тангенс, косинус и прочие, лишены возможности иметь собственную сущность и обречены находится в одном классе.

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


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


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

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



Цитата(unicuum @  3.5.2009,  00:03 Найти цитируемый пост)
вот же всё написал 

 smile сорри не видел.. Я подумал это какой то новый ход конем smile

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

 Как понял Вы в качестве объектной модели программирования рассматриваете модель примененную в Cpp.
Во первых не забывайте, что это далеко не чистое воплощение принципов ООП. 
Во вторых -  что принципом  Cpp является : не добавлять ничего лишнего, чего не было затребовано/использовано.
В третьих - что полиморфизм бывает времени рантайма и времени компиляции.
Посредством плюса мы легко складываем как и простые типы, так и строчки и другие более сложные объекты - чем Вам не абстракция ?
Посмотрите как работают шаблоны, применяя алгоритмы, к объектам разных типов, имеющих нужные методы. 
В четвертых кто Вам мешает описать на Cpp свой класс, в котором нужные операции будут виртуальными  (как Вы это представляете), и использовать их ?


Цитата(atomicxp @  3.5.2009,  01:56 Найти цитируемый пост)
Возникает вопрос, почему такие алгоритмы как MD5, SHA1, TTH и другие имеют право называться сущностью, тогда как арифметические операции: сложение, вычитание, умножение, деление, или тригонометрические: синус, тангенс, косинус и прочие, лишены возможности иметь собственную сущность и обречены находится в одном классе.

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

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

Двойной ужас : "В классе"  "7 сущностей" ! 
Правило гласит: Каждый объект   должен представлять одну сущность.

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

А вы считаете, что ООП это верх совершенства ?



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


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


Шустрый
*


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

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



Цитата(mes @  3.5.2009,  09:52 Найти цитируемый пост)
Двойной ужас : "В классе"  "7 сущностей" ! 
Правило гласит: Каждый объект   должен представлять одну сущность.

Понятно же что это относится к включению или наследованию, смотри предыдущий флудовый топик. Класс сущность и содержит сущности, то есть классы посредством включения или наследования. Плюс методы тоже можно по разному рассматривать.

Цитата(mes @  3.5.2009,  09:52 Найти цитируемый пост)
В третьих - что полиморфизм бывает времени рантайма и времени компиляции.

Это не полиморфизм, а приведение типов.

Цитата(mes @  3.5.2009,  09:52 Найти цитируемый пост)
А вы считаете, что ООП это верх совершенства ?

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


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


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

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



Цитата(atomicxp @  3.5.2009,  14:05 Найти цитируемый пост)
Понятно же что это относится к включению или наследованию, смотри предыдущий флудовый топик. Класс сущность и содержит сущности, то есть классы посредством включения или наследования. Плюс методы тоже можно по разному рассматривать.

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

Т.е класс "человек" не удовлетворяет правилам хорошего тона ООП, потому что  включает в себя более семи сущностей ?!  smile 
Так а если включены три противоречиворечивые сущности, то все в порядке?! ведь три менее семи !

Цитата(atomicxp @  3.5.2009,  14:05 Найти цитируемый пост)
Это не полиморфизм, а приведение типов.

а нельзя ли поподробней где Вы там приведение типов увидели ?  smile 

Цитата(atomicxp @  3.5.2009,  14:05 Найти цитируемый пост)
Я пытаюсь найти такой способ "дёргать компьютер за ниточки", чтобы это было удобно хотя бы лично мне, вот и всё. 

успехов в этом нелегком деле smile



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


Шустрый
*


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

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



Цитата(mes @  3.5.2009,  15:45 Найти цитируемый пост)
а нельзя ли поподробней где Вы там приведение типов увидели ?  smile 

Я так понял речь идёт о static_cast и dynamic_cast, при невозможности приведения типов в одном случае получаем крах системы, во втором нулевой указатель. Или сам поясняй, что тобой подразумевалось.

Цитата(mes @  3.5.2009,  15:45 Найти цитируемый пост)
Т.е класс "человек" не удовлетворяет правилам хорошего тона ООП, потому что  включает в себя более семи сущностей ?!  

То есть как пишут в книге "Совершенный код" автор С. Макконнелл, сам человек не может охватить больше семи сущностей за раз. Потому рекомендовано делить всё на логические группы не более семи.

Цитата(mes @  3.5.2009,  15:45 Найти цитируемый пост)
Так а если включены три противоречиворечивые сущности, то все в порядке?! ведь три менее семи !

Насчёт противоречий, прочти "Совершенный код", та это тоже описано, да и много чего ещё.
PM MAIL WWW Skype GTalk Jabber   Вверх
Lazin
Дата 3.5.2009, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



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

ужастокакой...
Цитата(atomicxp @  3.5.2009,  16:03 Найти цитируемый пост)
Я так понял речь идёт о static_cast и dynamic_cast, при невозможности приведения типов в одном случае получаем крах системы, во втором нулевой указатель. Или сам поясняй, что тобой подразумевалось.

я думаю подразумевалась идиома CRTP

Добавлено через 3 минуты и 30 секунд
Код

template<class T, class Derived>
struct Addable
{
    T operator + (T t)
    {
        return static_cast<Derived*>(this)->add(t);
    }
};

struct Value : Addable<int, Value>
{
    int value;
    int add(int i) {return i + value;}
};





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


Шустрый
*


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

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



Цитата(Lazin @  3.5.2009,  16:18 Найти цитируемый пост)
я думаю подразумевалась идиома CRTP

Ну вот твоя идиома со статическим приведением типов.
Код
template <typename Derived>
class Base
{
public:
  void Func() const
  {
    Derived const* const derived( static_cast<Derived const* const>(this) );
    derived->PolymorphicFunc();
  }
} ;

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


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


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

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



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

Насчёт противоречий, прочти "Совершенный код", та это тоже описано, да и много чего ещё

Читал, но дело не в том что написано в книге, а как Вы это поняли smile

Цитата(atomicxp @  3.5.2009,  15:03 Найти цитируемый пост)
Я так понял речь идёт о static_cast и dynamic_cast, при невозможности приведения типов в одном случае получаем крах системы, во втором нулевой указатель. Или сам поясняй, что тобой подразумевалось.

где там такое можно было увидеть :
Цитата(mes @  3.5.2009,  08:52 Найти цитируемый пост)
полиморфизм бывает времени рантайма и времени компиляции.

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

Я лучше отпишусь кодом 
Код

class A
{
    void f1 ();
    void f2 ();
};

class B
{
    void f1 ();
    void f2 ();
};
// typedef A N;  
// typedef B N;

N n; n.f1(); n.f2();

Так как классы обладают одним и тем же интерфейсом, то типы А и B статически полиморфны.
Это может проявляться как на уровне типов, так и функций или библиотек.
 smile 


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


Эксперт
****


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

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



Цитата(atomicxp @  3.5.2009,  16:23 Найти цитируемый пост)
Ну вот твоя идиома со статическим приведением типов.

И? smile 
PM MAIL Skype GTalk   Вверх
mes
Дата 3.5.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Lazin @  3.5.2009,  15:18 Найти цитируемый пост)
я думаю подразумевалась идиома CRTP

неa, слишком глубoко копнули. smile Все проще smile Хотя она и построена на этом принципе. 

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


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


Шустрый
*


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

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



Цитата(Lazin @  3.5.2009,  16:26 Найти цитируемый пост)
И? smile 

И мы с тобой говорим об одном и том же. Но я воспринимаю достижение полиморфизма посредством приведения типов как два отдельных понятия, приведение типов и полиморфизм.

Как сказал mes:
Цитата(mes @  3.5.2009,  16:24 Найти цитируемый пост)
дело не в том что написано в книге, а как Вы это поняли smile

А вот сам mes похоже говорит о чём-то другом.
PM MAIL WWW Skype GTalk Jabber   Вверх
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   Вверх
atomicxp
  Дата 3.5.2009, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(mes @  3.5.2009,  18:43 Найти цитируемый пост)
Я опять не уловил сути,  что доказывает Ваш пример ? 

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


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


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

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



Цитата(atomicxp @  3.5.2009,  17:48 Найти цитируемый пост)
Да ничего он не доказывает. Просто можно программировать так, а можно иначе. Мне надо иначе. 

То что ищете иной путь, я понял. Но не уловил в чем именно преимущества и отличия вашего подхода в отличие к примеру от стл, которой Вы, как я понял, недовольны.
Прошу объяснить на пальцах, вот два кода :

Цитата("atomicxp")

Код

    template<typename TSequence> class IAddition
    {
    public:
     
        virtual TSequence& Addition(const TSequence& addend) const = 0;
        virtual TSequence& operator+(const TSequence& addend) const = 0;
        static TSequence& Addition(const TSequence& augend, const TSequence& addend);
    };


Цитата("stl")

 
Код

 template <class _Tp>
    struct plus : public binary_function<_Tp, _Tp, _Tp>
    {
      _Tp
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x + __y; }
    };



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


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


Шустрый
*


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

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



Цитата(mes @  3.5.2009,  18:56 Найти цитируемый пост)
Прошу объяснить на пальцах, вот два кода :

На таких примитивных примерах почти не о чём говорить. Кардинальные различия будут видны при построении системы из множества понятий. Пока можешь принять как факт, что STL это обобщённое функциональное программирование, так же как и Boost.
PM MAIL WWW Skype GTalk Jabber   Вверх
mes
Дата 3.5.2009, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(atomicxp @  3.5.2009,  18:05 Найти цитируемый пост)
Кардинальные различия будут видны при построении системы из множества понятий. Пока можешь принять как факт, что STL это обобщённое функциональное программирование, так же как и Boost. 

Тогда  хотелось бы услышать от Вас трактовку двух понятий :
1. обобщённое функциональное программирование
2. обобщённое объективное программирование


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


Шустрый
*


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

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



Цитата(mes @  3.5.2009,  19:12 Найти цитируемый пост)
Тогда  хотелось бы услышать от Вас трактовку двух понятий :
1. обобщённое функциональное программирование
2. обобщённое объективное программирование 

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


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


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

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



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

Вот я о том и говорю, ты называешь обобщённое объектно-ориентированное программирование - объективным, как будь-то тебе даже все равно как оно называется. 

ну предположим, так как вначале надо разобраться как мыслит автор. 
Цитата(atomicxp @  3.5.2009,  18:31 Найти цитируемый пост)
А для того, чтобы понять ООП надо мыслить по другому и ориентироваться на объекты, а не на функции.

могу я спросить, Вы будете нас просвещать ? или ограничетесь лишь абстрактными высказываниями ?  smile 
и в чaстности :

Цитата(mes @  3.5.2009,  18:12 Найти цитируемый пост)
хотелось бы услышать от Вас трактовку двух понятий :
1. обобщённое функциональное программирование
2. обобщённое объективное программирование 


Добавлено через 1 минуту и 41 секунду
а также , если можно
Цитата(mes @  3.5.2009,  16:51 Найти цитируемый пост)
Цитата

они должны принадлежать классу

зачем ?




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


Шустрый
*


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

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



Цитата(mes @  3.5.2009,  19:43 Найти цитируемый пост)
могу я спросить, Вы будете нас просвещать ? или ограничетесь лишь абстрактными высказываниями ?  smile

А я здесь вовсе не для того, чтобы кого-то чему-либо учить. Просто мысли вслух о создании абстрактного ядра.

Определение:
1. Функциональное программирование
2. Обобщённое объективное программирование - не знаю такого

Это сообщение отредактировал(а) atomicxp - 3.5.2009, 20:06
PM MAIL WWW Skype GTalk Jabber   Вверх
mes
Дата 3.5.2009, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(atomicxp @  3.5.2009,  18:50 Найти цитируемый пост)
1. Функциональное программирование 

Ну и где общее между приведенной по ссылке парадигмой и воплощением стл ?!
Цитата(atomicxp @  3.5.2009,  18:50 Найти цитируемый пост)
2. Обобщённое объективное программирование - не знаю такого

Ну так сами же писали про обобщенное объектноориентирование программирование ОООП smile

Цитата(atomicxp @  3.5.2009,  18:50 Найти цитируемый пост)
Просто мысли вслух о создании абстрактного ядра.

Понятно. Просто высказываетесь, а я то думал Вы ради дискуссии открыли тему. 




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


Шустрый
*


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

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



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

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

namespace Arithmetic
{
    // Операция вычитания
    template<typename TSequence> class Subtraction
    {
    public:
        // Разность (объектная)
        // arg subtrahend="вычитаемое"
        // return "???"
        virtual TSequence& Difference(const TSequence& subtrahend) const = 0;
        // Оператор вычитания
        // arg subtrahend="вычитаемое"
        // return "разность"
        virtual TSequence& operator-(const TSequence& subtrahend) const = 0;
        // Разность (статическая)
        // arg minuend="уменьшаемое"
        // arg subtrahend="вычитаемое"
        // return "разность"
        static TSequence& Difference(const TSequence& minuend, const TSequence& subtrahend);
    };
}


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

Добавлено через 2 минуты и 3 секунды
Цитата(mes @  3.5.2009,  20:32 Найти цитируемый пост)
Понятно. Просто высказываетесь, а я то думал Вы ради дискуссии открыли тему. 

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


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


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

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



Цитата(atomicxp @  3.5.2009,  19:36 Найти цитируемый пост)
Ну скажем так, если меня будут поправлять, когда буду ошибаться насчёт ООП, я совсем не буду против. Однако если кто-то хочет программировать в функциональном стиле, я не хочу им мешать.

Чтоб поправлять, надо понять что Вы подразумеваете, а Вы пока не очень ясны в объяснениях.
А насчет поправки : то, что Вы называетe функциональным стилем программированием, называется - процедурным. 
 smile

Добавлено @ 20:45
Цитата(atomicxp @  3.5.2009,  19:36 Найти цитируемый пост)
Однако если кто-то хочет программировать в функциональном стиле, я не хочу им мешать

Может я и не хочу, и хотел бы применить Ваш подход, но Вы к сожалению не пытаетесь донести отличие от стандартного.

Добавлено @ 20:45
Цитата(atomicxp @  3.5.2009,  19:36 Найти цитируемый пост)
Однако если кто-то хочет программировать в ...тиле, я не хочу им мешать

Может я и не хочу по старому, и хотел бы применить Ваш подход, но Вы, к сожалению, не пытаетесь донести отличие от стандартного.


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


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


Шустрый
*


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

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



Цитата(mes @  3.5.2009,  20:41 Найти цитируемый пост)
А насчет поправки : то, что Вы называетe функциональным стилем программированием, называется - процедурным.

Очевидно ты не читал топик из которого пришла эта тема. Там я уже рассказал, что процедурное программирование оно же функциональное. Сейчас я употребляю функциональное, потому что в C++ отсутствует понятие процедура, вместо этого в возвращаемом значении применяется пустой тип - void.

Ну и второе объяснение, почему весь тот топик я именовал программирование процедурным, а сейчас называют функциональным, потому что я целиком и полностью сосредоточился на C++. И есть такая книга "Язык программирования C++" автор Бьерн Страуструп, так вот он называет этот вид программирования функциональным, а не процедурным.

Пока что от тебя вижу не обсуждения, а придирки, и это довольно скучно. Прочитай с 10 по 15 главу только что упомянутой книги, раздел называется "Механизмы абстракции". А то так мы попросту ни о чём говорим.
PM MAIL WWW Skype GTalk Jabber   Вверх
mes
Дата 3.5.2009, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(atomicxp @  3.5.2009,  19:51 Найти цитируемый пост)
Пока что от тебя вижу не обсуждения, а придирки, и это довольно скучно.

Перед тем как поправить, я спросил, что Вы подразумеваете под этими терминами .
Однако Вы ответили не :
Цитата(atomicxp @  3.5.2009,  19:51 Найти цитируемый пост)
ам я уже рассказал, что процедурное программирование оно же функциональное.

a :

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



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


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


Шустрый
*


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

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



Цитата(mes @  3.5.2009,  20:59 Найти цитируемый пост)
Если для Вас это одно и то же, то тогда я не вижу смысла в поправках, да и в дальнейшем участии в этой теме. Еще раз успехов в этом нелегком деле. 

Я не хочу возвращаться к теме как корпорации нас имеют подменяя понятия на те которые им выгодны. Хочешь воспринимать функциональное программирование по другому, не как процедурное, твоё право. Лишь логическое и объектно-ориентированное программирование имеют реальное, а не выдуманное пиарщиками отличие.

Добавлено через 9 минут и 4 секунды
А вообще всё это печально, люди якобы понимают разницу между функциональным и процедурным программированием, но ничего не смыслят в ООП. smile 
PM MAIL WWW Skype GTalk Jabber   Вверх
mes
Дата 3.5.2009, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Не смог удержаться чтоб не ответить.

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

Я не хочу возвращаться к теме как корпорации нас имеют подменяя понятия на те которые им выгодны.

Однако переняли их традицию, по крайней мере в этой теме. 

Цитата(atomicxp @  3.5.2009,  20:12 Найти цитируемый пост)
Хочешь воспринимать функциональное программирование по другому, не как процедурное, твоё право.

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

Цитата(atomicxp @  3.5.2009,  20:12 Найти цитируемый пост)
Лишь логическое и объектно-ориентированное программирование имеют реальное, а не выдуманное пиарщиками отличие.

Откуда такая уверенность  ?! 

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

А вот это в самую точку. Как в зеркало в  воду глядите ! smile


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


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


Шустрый
*


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

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



Какой ты mes неугомонный  smile Кончай уже флуд разводить, а то опять мой топик во флейм уедет. Пока по теме высказался только Lazin.

PM MAIL WWW Skype GTalk Jabber   Вверх
Любитель
Дата 3.5.2009, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(atomicxp @  3.5.2009,  20:51 Найти цитируемый пост)
Очевидно ты не читал топик из которого пришла эта тема. Там я уже рассказал, что процедурное программирование оно же функциональное.

Перед этим приводишь ссылку на вики... ТЫ это.. читать не пробовал, что по ссылке? smile 

Цитата(atomicxp @  3.5.2009,  21:12 Найти цитируемый пост)
Хочешь воспринимать функциональное программирование по другому, не как процедурное, твоё право. Лишь логическое и объектно-ориентированное программирование имеют реальное, а не выдуманное пиарщиками отличие.

Как там принято в таких случаях? Во, нашёл - smile 


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


Эксперт
****


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

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



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

в ООП нет методов, опомнись smile 
методы, это такая штука, которую придумали для того, что-бы всякие so-called programmers, привыкшие мыслить категориями процедурного программирования, не заблудились в мире чистого ООП smile 
впрочем, классы придумали для того-же)
Цитата(atomicxp @  3.5.2009,  20:36 Найти цитируемый пост)
В функциональном у тебя бы не было сущности операции, была бы только функция возвращающее по какому-либо алгоритму значение.

В функциональном программировании у тебя бы была операция, которая бы являлась объектом сама по себе, и возможно была-бы полиморфной, и применяя ее к входным параметрам ты бы получал не значение, а другую ф-ю, но только без параметров ))
Цитата(atomicxp @  3.5.2009,  20:51 Найти цитируемый пост)
Очевидно ты не читал топик из которого пришла эта тема. Там я уже рассказал, что процедурное программирование оно же функциональное.

давай будем называть вещи своими именами, есть ФП, а есть процедурное программирование
ту тему не читал, так как не располагаю бесконечным количеством свободного вермени...
PM MAIL Skype GTalk   Вверх
atomicxp
  Дата 3.5.2009, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Lazin @  3.5.2009,  22:19 Найти цитируемый пост)
давай будем называть вещи своими именами, есть ФП, а есть процедурное программирование

В том то и дело, что я хочу называть вещи своими именами, иначе хавал бы что дают и радовался. Размытые абстракции меня не устраивают, когда одна немножечко A и B, а другая немножечко B и C. А написано буквально следующее, си подобные языки (значит и C++) ведут себя как процедурные, но с указателем на функцию получается уже функциональные, а если ещё учесть механизмы абстракций, то C++ ещё и объектно-ориентированный, но это не всё, он так же позволяет работать в обобщённом стиле подставляя типы.

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

Добавлено через 1 минуту и 49 секунд
Цитата(Lazin @  3.5.2009,  22:19 Найти цитируемый пост)
в ООП нет методов, опомнись smile 

Что-то новенькое, в C++ классе есть элементы - поля и методы.
PM MAIL WWW Skype GTalk Jabber   Вверх
Lazin
Дата 3.5.2009, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(atomicxp @  3.5.2009,  22:42 Найти цитируемый пост)
Что-то новенькое, в C++ классе есть элементы - поля и методы.

ну и что? smile 
PM MAIL Skype GTalk   Вверх
mes
Дата 3.5.2009, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(atomicxp @  3.5.2009,  21:42 Найти цитируемый пост)
Что-то новенькое, в C++ классе есть элементы - поля и методы.

Ну Вам уже выше говорилось, что Cpp только издали напоминает чистое ООП, а Вы все туда же  smile 

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

А вы считайте что в C++ нет функций, только процедуры. И называются они именно функциями по той случайности, что на тот момент было принято условное деление, что подпрограмма возвращающая результат называется функцией, а не возвращающая процедурой.

Цитата(atomicxp @  3.5.2009,  21:42 Найти цитируемый пост)
Prolog обозвали функционально-логическим, то есть девушка немножко беременна

А вот то что человек может быть одновременно (к примеру) : и внук, и дед, и сын, и отец, и муж, и брат, и друг, и работник и т.д. Вас не смущает ?

Цитата(atomicxp @  3.5.2009,  21:42 Найти цитируемый пост)
но лично я не хочу жить в мире размытых абстракций

Ну так тогда может начать действовать. Для начала определить термины, от которых можно было б отталкиваться,
а то пока кроме наведения мрака и выкрика несколько неясно-абстрактных фраз, которые вполне можно отнести ко флуда, ничего в теме нет.
Но я все ж надеюсь, что это была разминка, и Вы в конце сможете объяснить свои взгляды, и показать нам наши ошибки и заблуждения.
Как говорится, назвался груздем, полезай в кузов. Мы в Вас верим, не обманите наши надежды smile




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


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


Шустрый
*


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

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



Цитата(mes @  3.5.2009,  23:01 Найти цитируемый пост)
Для начала определить термины, от которых можно было б отталкиваться

1. процедурное - данные как аргументы
2. функциональное - функции как аргументы
3. обобщённое - типы как аргументы

4. объектно-ориентированное - создание типов

Если кому не нравятся мои определения, поправляйте. Первые три грубо для себя обзываю пробросом, они меня мало волнуют поскольку в них нет ничего особенного. Причём первое и второе изложены до десятой главы книги "Язык программирования C++", то есть не относятся к механизмам абстракций о которых идёт речь.

Четвёртое является способом группировки и использования сущностей. Оно не отменяет первое, второе и третье, наоборот переводит на новый уровень.
PM MAIL WWW Skype GTalk Jabber   Вверх
mes
Дата 4.5.2009, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Позволил себе написать свою трактовку, и заодно изменить порядок.

1. процедурное   - вид структурного программирования, при котором выделяются подпрограммы, выраженные как действие над данным.
2. функциональное  -  ..., выраженные, как действие над действием.
3 . объектно-ориентированное - ..., выраженные как законченный объект.

4. обобщенное -  описание общих действий для сущностей разных типов.
При этом
Цитата(atomicxp @  3.5.2009,  22:34 Найти цитируемый пост)
Четвёртое является способом группировки и использования сущностей. 

smile



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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



atomicxp, не понимаю, чего ты добиваешься.

Цитата

Создаётся для увеличения уровня абстракций, поскольку обычные библиотеки не соответствую принципам обобщённого объектно-ориентированного программирования.


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

Итак, чего?
Абстракция ради абстракции? Бессмысленно.
Борешься за чистоту ООП? Возьми чистый ООП язык. С++ тоньше и сложнее. Но судя по примерам достигать целей ты намерен используя всю мощь С++. Видимо для того, что бы пользователь ограничился одной парадигмой.  smile 

Базар (именно так, простите) о терминологии показался смешным: есть общепринятые разумные определения. Почему бы не пользоваться ими? Некоторые, возможно, стоит сначала изучить. Тогда не будет казусов с ФП из-за того, что Страуструп написал "functional" (он то это сделал лишь потому, что в С и С++ "functions").
Если нужны новые термины - вводите, определяйте, но не путайте с тем что уже есть.

Я не вижу никаких преимуществ class IAddition. Я не вижу преимуществ делать синус и косинус объектами. Тяга к прекрасному? Возможно, и то только потому, что о вкусах не спорят. 
Кстати заметь: и арифметические операции, и синусы с косинусами таки являются объектами, только в метамодели, т.е. это экземпляры предопределенных (компилятором, языком, Создателем) классов. Пожалуйста, можешь мыслить так, и ничего писать не придется.

В общем по-моему ты пытаешься мыслить сложно для того, что бы мыслить просто.

Еще одно. Инженерные решения (а это именно то, созданием чего мы все занимаемся) это компромиссные решения. Сложная инженерия как правило использует синтез методов, это эффективно. Именно поддержкой ряда мощных методов (парадигм) и силен С++. Зачем же от этого отказываться?
Возьмем пресловутый boost: поглядите хотя бы на Spirit, это отличный пример удачного сочетания различных парадигм. И ООП там, что бы ты не говорил, используется, и используется грамотно - в нужных местах, в нужном объеме, в полном соответствии с принципами ООП.

ЗЫ: меня лично трясет, когда я вижу
Код

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}


Ну какой тут к черту класс! Но зато ООП: инкапсуляция, да.
ЗЗЫ: был один политический деятель, ему в америке достижения выращивания кормов показали, так мы потом кукурузу на завтрак обед и ужин
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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