Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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