Re[30]: Концептно-ориентированное прораммирование (КОП)
От: savinov Германия https://github.com/asavinov
Дата: 07.08.06 09:52
Оценка:
Здравствуйте, Voblin, Вы писали:

V>Здравствуйте, savinov, Вы писали:


S>>Думаю, что от происхождения идеи ничего не зависит. Важна просто сама идея.

V>В серьёзной научной работе в самом начале всегда прямо или косвенно описывается происхождение идеи. Именно такой preface и позволяет определить контекст, к который нужно поместить описываемую дальше измышлятину. Вне контекста в научном мире ничто не существует.

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

S>>Странно, почему тогда нет примеров, если КОП возникла как раз по первому варианту развития?

V>Тогда нужно просто вспомнить, с чего всё начиналось

Так долго не живут Да и, как уже упомянул, нет смысла, поскольку нет цели придать этой работе "научный" характер в традиционном смысле этого слова (в смысле, это не главная цель).

V>>>Желаю удачи в выдумывании убедительных иллюстративных примеров. Придумаете, заходите ещё.

S>>Спасибо. Если появятся, то обязательно зайду.

V>Подкину идейку. Информационные сущности бывают двух видов:

V>1. Объекты — это то, что может обладать идентичностью (и, следовательно, иметь какой-либо OID).
V>2. Не-объекты — это такие сущности, которые ничем, кроме как своим содержимым, не идентифицируются. Например: размер заработной платы, длина отрезка, наименование товара.

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

V>Такие не-объекты имеют важное свойство: они не умеют существовать самостоятельно. Они всегда существуют в рамках контекста (который, конечно, уже является объектом). Самое смешное, что не-объекты не обязательно принадлежат примитивным типам данных. Например, всякий суммовой показатель, кроме собственно числового значения, как правило, характеризуется валютой. Соответственно, натуральный показатель — единицей измерения. Даже со строками не всё так просто: в принципе, строковое значение может характеризоваться языком, на котором она написана.


Да, ссылки (не-объекты) в КОП имеют любую структуру и функции, поскольку описываются классом. Т.е., изначально предполагается, что есть классы ссылок и классы объектов для описания структуры и функций двух типов сущностей.

V>Пример: увеличить зарплату (поле Salary) сотрудника emp на increase USD. Предполагается, что сотрудники, кроме всего прочего, характеризуются валютой взаиморасчётов (SalaryCurrency)

V>"Обычный" подход, в котором не-объекты не имеют структуры и пассивны:
V>
emp->>Salary += ConvertMoney(increase, new Currency("USD"), emp->SalaryCurrency);
V>

V>Проблема в том, что такой метод не является себя-дурака-устойчивым. Рано или поздно забудется, что денежку нужно конвертнуть, и появится строчка типа:
V>
emp->>Salary += increase;
V>

V>, которая будет исправно работать до тех пор, пока все зарплаты исчисляются в USD. При появлении первой рублёвой зарплаты система заглючит.
V>Можно, конечно, числовое поле Salary завернуть в программный интерфейс, но если таких числовых полей сотни, то это ж будут не классы, а большие коллекции маловразумительных методов. И, в конце концов, кто-нибудь что-нибудь всё равно забудет.

V>А можно было бы и так:

V>
V>emp.Salary += Money(increase, new Currency("USD"));
V>

V>При этом Salary — это, на самом деле не просто числовое поле, а некая обманка, физически состоящая из двух полей (значение и валюта) и принадлежащая к специальному классу Money, на котором определены арифметические операции, которые при необходимости сами конвертят валюты.

Я вижу в этих рассуждениях следующий прокол. Сперва в качестве основного свойства (аксиомы) не-объектов устанавливается их способность представлять самих себя. А далее в качестве желаемого свойства (цели) описывается поведение, которое не имеет особого отношения к способности не-объектов передаваться по значению. Действительно, в данном примере нет ничего, что требовало бы от зарплаты быть не-объектом. Т.е. меня совершенно непонятен переход от данного примера (use case) к выводу о необходимости иметь не-объекты вообще и их способности передаваться по значению в частности. Этот шаг в рассуждениях надо бы описать детально.

V>Что характерно, эти самые не-объекты — это даже не структуры в привычном понимании этого слова. Например, одно "физическое" поле Currency (валюта взаиморасчётов) может обслуживать и размер зарплаты, и премиальную ставку, и баланс лицевого счёта сотрудника.


Я бы выделил в качестве первого свойства, которое необходимо как-то обеспечить, это способность сущностей (пока мы не говорим об объектах или не-объектах) относиться к определенной категории, что может существенно изменить операции с ними. Например, могут быть валютные сущности, что приводит к тому, что операции с определенными полями выполняются с конвертаций в предположении, что где-то можно найти текущую валюту. Заметим, что включение в такую категорию это как раз то, что называется crosscutting concern (пронизываещее свойство), поскольку многим разным классам можно приписать одну категорию. Скажем, в категорию "валютный объект" можно включить классы Account, Customer и др. классы. В результате одни и те же правила пересчета должны быть описаны в одном модуле, но применяться в разных.

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

V>-------------------

V>Короче, дарю этот иллюстративный пример. Если, конечно, он окажется КОПу по зубам.

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

V>Саму же идею не-объектов не дарю. Если эта нива ещё никем не вспахана, то пусть она будет моей


Хотя разделение на объекты и не-объекты это правильный ход, но конечно, само по себе это имеет мало смысла. Нужен какой-то механизм, какая-то операционная семантика. Иначе всегда можно сказать, что это уже существовало. Например, всегда была передача по значению. Например, в КОП конкретно описывается как работают ссылки и объекты в рамках единого механизма.
Re[8]: Концептно-ориентированное прораммирование (КОП)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 07.08.06 10:07
Оценка: +2
Здравствуйте, savinov, Вы писали:

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


S>Демагогия в отсутствии точных критериев оценки (эффективности и простоты).


Демагогия не может в этом состоять. Демагогия тем и отличается, что использует приемы, не относящиеся к существу спора. Ты же задаешь вопросы именно что по существу.
Возвращаясь к твоим вопросам — во-первых точные критерии таки есть и немало. Во-вторых в большинстве случаев квалификация приличного программиста позволяет оценить эффект не применяя формальных оценок. Было бы что оценивать.

S> Слова "можно реализовать" или даже "можно реализовать лучше, проще и эффективнее" имеют весьма общий характер.


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

S> И спорить в такими утверждениями нельзя.


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

S> Например, Ява в 10 раз медленнее, чем С++, ну и что?


Например вы не знакомы с предметом и говорите глупости.

S> Там существенно меньше возможностей, ну и что?


И это тоже неправда.

S> Простота и красотва — вот единственный критерий, но он неформальный.


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

AVK>>Нет, не все. Это значительно сложнее и код получается менее качественным. Так что вперед, показывать, что КОП может выразить то или иное полезное решение лучше, чем любое из существующих средств.


S>Про виртуальные методы я как раз понимаю,

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

Демагогия off, примеры в студию.

AVK>>А это уж точно демагогия. Объяснять почему?


Видимо объяснять не надо. И то хлеб.

S>Это как раз Ваша логика, которую я привел для иллюстрации демагогии.


Демагогия — переход на личности, попытка оправдать свою демагогию поведением собеседника.

S> Я уже как-то опоминал, что проблема состоит в том, что один конкретный человек обычно имеет свою излюбленную область, где он действительно является экспертом.


Демагогия — переход с объекта на субъекта.

S>Если взять пример с реляционной моделью, то знаете скольким людям она действительно не нужна,


Демагогия — доказательство на аналогиях.

S>На этом (и большинстве других) форумах обсуждение как раз и сводится к религиозным боям не на жизнь а на смерть, где главным аргументом является "я сам с помощью метода А сделаю все лучше, чем ты предлагаешь с помощью метода Б".


Демагогия — факты, не относящиеся к предмету спора.

S>Что касается меня, то я в таких спорах не участвую ввиду их бессмысленности (поскольку это демагогия).


Просто вранье. В ваших постах даже для этого форума демагогии более чем.

S>Если Вы хотите дискуссии по существу, то задавайте вопросы по существу.


Демагогия — полное игнорирование всех заданных вопросов. По существу. Списочек вопросов привести?

S> Вопрос по существу отличается от пустого вопроса наличием хотя бы одного-двух терминов, специфичных для обсуждаемого вопроса.


Демагогия — собственное определение, не имеющее ничего общего с реальностью. По сути перевод на спор о терминах.

S> Вопсро типа "докажите мне, что это лучше" таких терминов не содержит.


Тем не менее это вопрос по существу. Но для тебя я его переформулирую, чтобы спятаться за собственными терминами нельзя было:

Докажи, что твоя парадигма, лучше парадигм, которые широко распространены (ООП, ФП, ЛП) в плане:
а) Скорости написания кода
б) Сложности поддержки кода
в) Читаемости кода

Термины, "специфичные для обсуждаемого вопроса" я жирненьким выделил.

S> Кроме того, это претензия, а не вопрос.


Это вопрос, даже не сомневайся. Народ тут с нетерпением ждет на него ответа.

S> Так что я могу только еще раз попросить: задавайте вопросы по существу предлагаемого механизма.


Ну ты понял.

S> Если у Вас нет времени и/или желания вникать в детали, то просто не завайте вопросов и все.


Демагогия — попытка остаться в споре с последним словом.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[31]: Концептно-ориентированное прораммирование (КОП)
От: Voblin Россия http://maslyaew.narod.ru/
Дата: 07.08.06 14:19
Оценка:
Здравствуйте, savinov, Вы писали:

S>...поскольку нет цели придать этой работе "научный" характер в традиционном смысле этого слова (в смысле, это не главная цель).

Тогда нужно забыть слово "диссертация". Кстати, и для продвижения идеи вне рамок научного мира тоже неплохо определиться с контекстом. Чисто для того, чтобы быстрее народ втыкался.

V>>2. Не-объекты — это такие сущности, которые ничем, кроме как своим содержимым, не идентифицируются. Например: размер заработной платы, длина отрезка, наименование товара.


S>Сразу скажу, что разделение на объекты и не-объекты очень сильное предположение, и оно мне очень нравится. Хотя бы потому, что именно так делается в КОП. Правда в КОП не-объекты это в первую очередь ссылки, задача которых состоит в представлении объектов


В моей трактовке не-объекты нужны совсем не для того, чтобы представлять объекты. Например, не-объект Адрес не даёт доступ к объекту Клиент, на котором он паразитирует. Он даёт доступ к своим полям (которые, кстати, одновременно являются также полями класса Клиент) и реализует всякий вкусный программный сервис (например, формирует адресную строку для Веб2.0-сервиса, отображающего кусок карты). А ведь адрес может сидеть в объекте Клиент несколько раз (поля ГородЮр, ГородФакт, УлицаЮр, УлицаФакт и т.д.). В таких случаях, конечно, хочется не копиблочить программные куски, а реализовать объект Адрес один раз, и просто "подключать" его к разным полям.

И речь идёт не о том, что нам хочется передавать не по ссылке, а по значению. Совсем наоборот! Нам хочется организовывать доступ по ссылке к информационной сущности ("не-объекту"), которая сама по себе какой-то единой ссылки не имеет (по причине пожизненного паразитизма), но внутреннюю структуру и программный интерфейс таки имеет.

S>Да, ссылки (не-объекты) в КОП имеют любую структуру и функции, поскольку описываются классом. Т.е., изначально предполагается, что есть классы ссылок и классы объектов для описания структуры и функций двух типов сущностей.


Вот, собственно, это меня и заинтересовало — возможность создавать и использовать ссылки на то, на что обычных ссылок в принципе не может быть создано (не-объект ни на каком этапе своей жизнедеятельности не должен превращаться в объект). Почему обычная ссылка не может быть создана? Да потому, что создание обычной ссылки — это придание OID, а придание OID не-объекту — это уже принципиально некорректная операция.

S>Действительно, в данном примере нет ничего, что требовало бы от зарплаты быть не-объектом. Т.е. меня совершенно непонятен переход от данного примера (use case) к выводу о необходимости иметь не-объекты вообще и их способности передаваться по значению в частности. Этот шаг в рассуждениях надо бы описать детально.


Зарплата, не обладает свойством идентичности. Две зарплаты равны, если у них равны размер и валюта. Что не скажешь, например, о людях. Два человека являются всё-таки двумя разными человеками, даже если у них совпадают фамилии, имена, отчества, и даже цвет глаз. И всё потому, что люди обладают свойством идентичности, а их зарплаты — нет. За более подробным описанием того, что такое идентичность, вынужден отослать к классике жанра: Гради Буч, Объектно-ориентированный анализ и проектирование с примерами приложений на С++. Конкретно, глава 3.1 "Природа объекта".

V>>Что характерно, эти самые не-объекты — это даже не структуры в привычном понимании этого слова. Например, одно "физическое" поле Currency (валюта взаиморасчётов) может обслуживать и размер зарплаты, и премиальную ставку, и баланс лицевого счёта сотрудника.


S>...Скажем, в категорию "валютный объект" можно включить классы Account, Customer и др. классы. В результате одни и те же правила пересчета должны быть описаны в одном модуле, но применяться в разных.

Не всё так просто. Если Account действительно может быть валютным, то Customer или Employee валютным быть не может! Это ж фигня какая-то — валютный сотрудник. То, что у класса есть свойство Currency, не означает, что этот класс является "валютным". Это просто означает, что некоторые из его числовых атрибутов могут быть выражены в валюте.

S>Хотя разделение на объекты и не-объекты это правильный ход, но конечно, само по себе это имеет мало смысла. Нужен какой-то механизм, какая-то операционная семантика. Иначе всегда можно сказать, что это уже существовало. Например, всегда была передача по значению. Например, в КОП конкретно описывается как работают ссылки и объекты в рамках единого механизма.


Короче, я понял, что КОП ориентирован только на переопределение встроенного механизма доступа по ссылке к объектам (что, впрочем, мало интересует, т.к. существующий механизм устраивает, а кому хочется извращений, тот юзает smart pointers), а в случае не-объектов пасует. Или всё-таки не пасует?
Re[32]: Концептно-ориентированное прораммирование (КОП)
От: savinov Германия https://github.com/asavinov
Дата: 07.08.06 21:00
Оценка: -1
Здравствуйте, Voblin, Вы писали:

V>Короче, я понял, что КОП ориентирован только на переопределение встроенного механизма доступа по ссылке к объектам (что, впрочем, мало интересует, т.к. существующий механизм устраивает, а кому хочется извращений, тот юзает smart pointers), а в случае не-объектов пасует. Или всё-таки не пасует?


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

А умные указатели имеют целый список проблем (за полноту не ручаюсь):
Re[9]: Концептно-ориентированное прораммирование (КОП)
От: savinov Германия https://github.com/asavinov
Дата: 07.08.06 22:10
Оценка:
Здравствуйте, AndrewVK, Вы писали:

S>> Простота и красотва — вот единственный критерий, но он неформальный.


AVK>Единственный критерий это ресурсы. Потраченные и полученные. Остальное от лукавого. Впрочем, красоты и простоты вы тоже не продемонстрировали. Никто пока что в ваших словах никакой красоты не увидел. И, сдается мне, проблема не в тех, кто не увидел, а в ваших идеях.


У меня такое ощущение, что я общаюсь с новым русским. И по форме и по содержанию.

AVK> Докажи, что твоя парадигма, лучше парадигм, которые широко распространены (ООП, ФП, ЛП) в плане:


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

AVK>а) Скорости написания кода

AVK>б) Сложности поддержки кода
AVK>в) Читаемости кода[/q]

Ты хоть примерно представляешь, как может быть оформлен ответ на твои вопросы? Если нет, я подскажу: это может занять 10 лет и тома текстов (книги, статьи и т.п.) Или тебя сертификат истинности интересует?

AVK>Термины, "специфичные для обсуждаемого вопроса" я жирненьким выделил.


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

S>> Кроме того, это претензия, а не вопрос.


AVK>Это вопрос, даже не сомневайся. Народ тут с нетерпением ждет на него ответа.


Говори, пожалуйста, от себя. А кому эта ветка не интересна, тот сюда просто не заходит. А в твоем случае мне вспоминается поговорка: "Мыши плакали, кололись, но продолжали жрать кактус." Если КОП тебе не нравится, то просто игнорируй эту ветку и не мучай себя и не разводи демагогию. Как говорится, не нравится — не ешь. Ну а если хочется все-таки понять, так читай текст и задавай вопросы по существу работы предложенного подхода.
Re: Концептно-ориентированное прораммирование (КОП)
От: exp_1  
Дата: 08.08.06 01:20
Оценка:
Я сейчас приведу несколько тривиальных утверждений, которые мог бы написать несколько лет назад, без всякого отношения к теме, но которые мне кажутся здесь весьма уместными.

Кратко, как я понял (спроецировал на понятное мне) про КОП:

Есть объекты, и есть ссылки на них и есть пространства их жизни. На один объект возможны разные ссылки, реализующие разные его представления и разное поведение, которые валидны в разных (каждая в своём), возможно пересекающихся слоях и контекстах.

Естественно, теоретически, всё можно реализовать имеющимися средствами, но:

Результатом новой парадигмы может оказаться появление практической возможности для создания программных решений действительно сложных и объёмных проблем человеком, или коллективом людей. Это весьма достойная цель, и очевидно, что преимущества метода, ещё довольно сырого, предназначенного для серьёзных проектов — весьма не просто (на мой взгляд, так элементарно, но мне лень ) продемонстрировать на простых примерах.

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

Подчеркну, что речь не идёт об ускорении и упрощении для разработки и поддержки кода. Речь не идёт о качестве, переносимости и масштабируемости кода. Речь идёт о создании возможности, которой сейчас не существует вовсе, как например практически не существует возможности для написания современной RPG на ассемблере, по сравнению с каким-нибудь скриптовым языком для специального движка.
Re[10]: Концептно-ориентированное прораммирование (КОП)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 08.08.06 07:51
Оценка: 1 (1) +1
Здравствуйте, savinov, Вы писали:

S>У меня такое ощущение, что я общаюсь с новым русским. И по форме и по содержанию.


Демагогия — переход на личности, игнорирование аргументов.

S>Стучать по столу и требовать ты у заказчика можешь, когда заплатишь, а здесь ты можешь вежливо попросить что-то втолковать, если не можешь разобраться самостоятельно.


Демагогия — попытка перевести спор в плоскость личных разборок.

AVK>>а) Скорости написания кода

AVK>>б) Сложности поддержки кода
AVK>>в) Читаемости кода[/q]

S>Ты хоть примерно представляешь, как может быть оформлен ответ на твои вопросы?


Да.

S> Если нет, я подскажу: это может занять 10 лет и тома текстов (книги, статьи и т.п.) Или тебя сертификат истинности интересует?


Меня интересует хоть что нибудь. Пока что полезной информации ты выдал ровно 0.

AVK>>Термины, "специфичные для обсуждаемого вопроса" я жирненьким выделил.


S>Это термины, которые "специфичны" для любого подхода, причем не только в программировании. Так что видимо у тебя есть серьезные проблемы с пониманием, что есть специфичное и что есть общее.


Демагогия — перевод на спор о терминах, переход на личности.

AVK>>Это вопрос, даже не сомневайся. Народ тут с нетерпением ждет на него ответа.


S>Говори, пожалуйста, от себя. А кому эта ветка не интересна, тот сюда просто не заходит. А в твоем случае мне вспоминается поговорка: "Мыши плакали, кололись, но продолжали жрать кактус." Если КОП тебе не нравится, то просто игнорируй эту ветку и не мучай себя и не разводи демагогию.


Демагогия — переход на личности.

S> Как говорится, не нравится — не ешь. Ну а если хочется все-таки понять, так читай текст и задавай вопросы по существу работы предложенного подхода.


Я вопросы задал. Ты ни на один не ответил

Итого — ты полностью перешел на демагогию, так и не ответив ни на один вопрос и не приведя ни одного аргумента. Из чего я делаю вывод — ничего твои выкладки не стоят, очередная попытка высосать из пальца неизвестно что, не обладая ни знаниями в области теории языков, ни какими то действительно интересными идеями.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[10]: Концептно-ориентированное прораммирование (КОП)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 08.08.06 07:57
Оценка: +1 :)
Здравствуйте, savinov, Вы писали:

S>Стучать по столу и требовать ты у заказчика можешь, когда заплатишь


Требовать у заказчика, да еще и платить заказчику...
Это вообще как?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Концептно-ориентированное прораммирование (КОП)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 08.08.06 08:01
Оценка:
Здравствуйте, exp_1, Вы писали:

Я тоже так могу.

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

Кратко, как я понял (спроецировал на понятное мне) про СОП:

Есть субъекты, и есть связи между ними и есть сообщества. С одним субъектом возможны разные связи, реализующие разные его представления и разное поведение, которые валидны в разных (каждая в своём), возможно пересекающихся слоях и контекстах.

Естественно, теоретически, всё можно реализовать имеющимися средствами, но:

Результатом новой парадигмы может оказаться появление практической возможности для создания программных решений действительно сложных и объёмных проблем человеком, или коллективом людей. Это весьма достойная цель, и очевидно, что преимущества метода, ещё довольно сырого, предназначенного для серьёзных проектов — весьма не просто (на мой взгляд, так элементарно, но мне лень ) продемонстрировать на простых примерах.

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

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

... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[11]: Концептно-ориентированное прораммирование (КОП)
От: savinov Германия https://github.com/asavinov
Дата: 08.08.06 08:27
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, savinov, Вы писали:


S>>Стучать по столу и требовать ты у заказчика можешь, когда заплатишь


E>Требовать у заказчика, да еще и платить заказчику...

E>Это вообще как?

Пардон, очепатка. (Ну смысл, надеюсь, не окончательно потерялся.)
Re[11]: Концептно-ориентированное прораммирование (КОП)
От: savinov Германия https://github.com/asavinov
Дата: 08.08.06 08:31
Оценка:
Здравствуйте, AndrewVK, Вы писали:

[Контекст вырезан. Субъективно.]

AVK>Я вопросы задал. Ты ни на один не ответил


AVK>Итого — ты полностью перешел на демагогию, так и не ответив ни на один вопрос и не приведя ни одного аргумента. Из чего я делаю вывод — ничего твои выкладки не стоят, очередная попытка высосать из пальца неизвестно что, не обладая ни знаниями в области теории языков, ни какими то действительно интересными идеями.


Ок. Пусть будет так. В любом случае, спасибо за высказанные оценки.
Re[33]: Концептно-ориентированное прораммирование (КОП)
От: Voblin Россия http://maslyaew.narod.ru/
Дата: 08.08.06 08:32
Оценка:
Здравствуйте, savinov, Вы писали:

S>По поводу не-объектов не могу сказать с определенностью, поскольку не понимаю до конца идею, а особенно актуальность проблемы. Если что придет в голову, то поделюсь.

Идея проста до неприличия. Существуют объекты, которые обладают свойством идентичности, характеристиками и поведением. Характеристики объектов тоже могут быть не примитивными (число, строка, ссылка на другой объект*), а тоже иметь внутреннюю структуру (характеристики) и поведение. В конце концов, стандарт SQL99 уже опсывает user-defined datatypes, имеющие внутреннюю структуру. Пример со значением и единицей измерения (в частности, валютой) — далеко не единственный. Ради интереса я взял первую попавшуюся базу данных (Northwind из комплекта поставки MSSQL), поискал там не-объекты, имеющие чётко выраженную внутреннюю структуру, и выяснил, что в состав не-объектов входит порядка 25% полей базы данных. Двадцать пять процентов — это уже не экзотика! Так что, актуальность, думаю, можно считать доказанной.
------
*Ссылку на объект я тоже обозвал примитивным типом, поскольку это всего лишь число, вся мудрость и навороченность которой проявляется только после "пролезания" по ней (операция разыменования). Понимаю, что это утверждение грубо противоречит КОП, но речь сейчас не об этом, т.к. в контексте разговора про не-объекты ссылка на объекты интереса не представляет.
------

Главная технологическая проблема не-объектов заключается в том, что их характеристики не принадлежат им эксклюзивно. То есть поле Currency не-объекта Employee.Salary также принадлежит не-объекту Employee.Balance и, конечно же, объекту Employee. И если мы делаем перехватчик события, изменяющего Employee.Salary.Currency, то оно должно вызываться также и при изменении Employee.Balance.Currency! Реально ведь поле одно и то же! То есть мало того, что нам не очень понятно, как нам хранить ссылки на не-объекты, но и введение в обращение не-объектов может вызвать изменение вычислительной модели. В плане придания ей свойств транзакционности.

Пример:
emp.Balance.Currency = Currency("RUR");

Что при этом должно произойти?
Вопрос: в какой последовательности? Ответ: в любой. Т.е. ХЗ в какой.
Ещё вопрос: если произойдёт облом в коде, обрабатывающем Salary.Currency, то все изменения должны откатиться. В том числе, флаг модифицированности объекта emp должен вернуться в прежнее положение.

Всё же, всё же... Даже не смотря на то, что появление не-объектов поднимает эти вопросы, думаю, игра стоит свечь. Просто в силу актуальности (см. выше).

S>А умные указатели имеют целый список проблем (за полноту не ручаюсь):

Не надо меня агитировать против smart pointers. Лично для меня достаточно вот этого:
Так как в своей практике я использую C++ весьма эпизодически, вопрос использования этого чуда отпадает сам собой.
Re[2]: Концептно-ориентированное прораммирование (КОП)
От: savinov Германия https://github.com/asavinov
Дата: 08.08.06 08:55
Оценка:
Здравствуйте, exp_1, Вы писали:

_>Я сейчас приведу несколько тривиальных утверждений, которые мог бы написать несколько лет назад, без всякого отношения к теме, но которые мне кажутся здесь весьма уместными.


_>Кратко, как я понял (спроецировал на понятное мне) про КОП:


_>Есть объекты, и есть ссылки на них и есть пространства их жизни. На один объект возможны разные ссылки, реализующие разные его представления и разное поведение, которые валидны в разных (каждая в своём), возможно пересекающихся слоях и контекстах.


Я бы добавил, что объекты не могут существовать без ссылок (нет ссылки — нет объекта), а вот ссылки могут существовать без объекта. В частности, можно создать сложную программу вообще без объектов, а манипулирующую только ссылками. Другая крайность, это когда все функции сосредоточены в объектах, а ссылки примитивны (это ООП).

Одна проблема формализации идеи об объектах и ссылках в том, что объект может (и всегда имеет) множество ссылок. Например, запись в БД имеет положение на диске, физический адрес в памяти, первичный ключ и м.б. еще что-то, выдуманное программистом для ее идентификации. Компьютер имеет имя, IP-адрес, MAC-адрес и м.б. еще что-то выдуманное программистом для данной системы. В КОП предлагается конкретные средства, как работать с такой системой адресации объектов.

_>Естественно, теоретически, всё можно реализовать имеющимися средствами, но:


_>Результатом новой парадигмы может оказаться появление практической возможности для создания программных решений действительно сложных и объёмных проблем человеком, или коллективом людей. Это весьма достойная цель, и очевидно, что преимущества метода, ещё довольно сырого, предназначенного для серьёзных проектов — весьма не просто (на мой взгляд, так элементарно, но мне лень ) продемонстрировать на простых примерах.


_>Сейчас такие задачи, которые не решаются из-за своей сложности (многоплановости) и ограниченности имеющихся интеллектуальных и временных ресурсов встают всё чаще и повсеместнее.


Здесь уместно вспомнить про термин глобализация, который применяется к социальным аспектам жизни, но редко к архитектуре систем. Например, мы пишем простое веб-приложение. Но оно покрывает огромное жизненное пространство объектов. Так, интерфейс пишется на PHP и JavaScript, которые взаимодействуют с сервером приложения, который берет данные из БД, а также др. систем как платежные системы. Так в чем же проблема таких глобальных систем? Предположение: проблемы возникают на стыке пространств, где собственно концентрируется большая часть функций. В КОП это предположение формулируется в виде исходного принципа (неформального конечно, но весьма важно для всего дальнейшего развития). А далее формально описывается что такое пространство, что такое граница, что такое объекты, ссылки и др. элементы. Но главное, это как все это вместе работает.

_>Подчеркну, что речь не идёт об ускорении и упрощении для разработки и поддержки кода. Речь не идёт о качестве, переносимости и масштабируемости кода. Речь идёт о создании возможности, которой сейчас не существует вовсе, как например практически не существует возможности для написания современной RPG на ассемблере, по сравнению с каким-нибудь скриптовым языком для специального движка.


В долгосрочной перспективе конечно простота и эффективность будут играть первостепенную роль. Но на начальном этапе оценивать их было бы преждевременно, поскольку не все для этого готово. Сперва надо (во многом интуитивно) прикинуть, а является ли этот подход просто жизнеспособным. Существует много дизайн-альтернатив для дальнейшего развития и тем более для реализации, так что до зрелости еще очень и очень далеко.
Re[28]: Концептно-ориентированное прораммирование (КОП)
От: Дарней Россия  
Дата: 08.08.06 09:03
Оценка:
Здравствуйте, Voblin, Вы писали:

V>Например, у меня вот это родилось из размышлений о том, почему в серьёзных бизнес-системах (всякое там ERP, CRM, бухгалтерия, склад и т.д.) полноценный ОО-подход при проектировании бизнес-логики не применяется.


Выглядит очень похоже на множественную динамическую классификацию, которая описывается в UML. Правда, ни одной реализации этой идеи на практике я пока не встречал. Ты не видел чего-нибудь еще на эту тему?
... << RSDN@Home 1.1.4 stable rev. 510>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[29]: Концептно-ориентированное прораммирование (КОП)
От: Voblin Россия http://maslyaew.narod.ru/
Дата: 08.08.06 09:16
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Выглядит очень похоже на множественную динамическую классификацию, которая описывается в UML. Правда, ни одной реализации этой идеи на практике я пока не встречал. Ты не видел чего-нибудь еще на эту тему?


Где-то проскакивало, что в Haskell есть что-то на эту тему, но моё изучение этого зверя до темы тамошней типизации не дошло
Re[34]: Концептно-ориентированное прораммирование (КОП)
От: savinov Германия https://github.com/asavinov
Дата: 08.08.06 09:30
Оценка:
Здравствуйте, Voblin, Вы писали:

V>Всё же, всё же... Даже не смотря на то, что появление не-объектов поднимает эти вопросы, думаю, игра стоит свечь. Просто в силу актуальности (см. выше).


А почему нельзя просто определить геттеры и сеттеры, которые бы собственно учитывали специфику поведения не-объектов?

Если же эту логику надо отделить от класса (поскольку она применяется во многих классах), то можно применить АОП. В этом случае в аспекте указывается, что при доступе к нужным полям нужных классов будет отрабатываться какая-то дополнительная логика.

Впрочем, интуитивно, я понимаю, что это не то, что нужно... Основная проблема состоит в том, что не-объекту для правильного поведения необходимо выйти за свои пределы в контекст содержащего его объекта (например, для доступа к полю единицы измерения, которое необходимо для правильной интерпретации числа). В этом случае, помещая не-объект в разные объекты, мы можем получить разное поведение. Хм, интересная идея, поскольку мы приходим к понятию контекста объекта (как двойственному к понятию контекста контейнера). В КОП развито понятие контекста контейнера, т.е. объект живет в контейнере, который является его контекстом и может влиять на поведение. А здесь мы приходим к механизму контекста, в котором могут жить поля (не-объекты в общем случае). Сразу можно предложить использование аналогичного механизма, а именно, ключевого слова objectContext, которое применяется к не-объекту и позволяет получить объект, в котором он находится. Например, salary.objectContext.currency даст валюту. Получаем контекстно зависимое поведение аналогичное зависимости от среды или контейнера. Интересная идея, надо будет подумать, как это можно развить дальше...

S>>А умные указатели имеют целый список проблем (за полноту не ручаюсь):

V>Не надо меня агитировать против smart pointers. Лично для меня достаточно вот этого:
V> V>Так как в своей практике я использую C++ весьма эпизодически, вопрос использования этого чуда отпадает сам собой.

Несмотря на специфичность и ограниченность механизма умных указателей, мотивация, которая за ними стоит, имеет весьма высокую общность. Я бы сказал, что аргументы в пользу необходимости умных ссылок могут быть на 90% применены к КОП. Т.е. проще говоря, чтобы понять для чего нужен КОП, можно начать чтение с умных ссылок. (Преимущество в том, что там эта сказка уже гладко изложена, а в КОП есть только фрагменты.)
Re[35]: Концептно-ориентированное прораммирование (КОП)
От: Voblin Россия http://maslyaew.narod.ru/
Дата: 08.08.06 10:15
Оценка:
Здравствуйте, savinov, Вы писали:

V>>Всё же, всё же... Даже не смотря на то, что появление не-объектов поднимает эти вопросы, думаю, игра стоит свечь. Просто в силу актуальности (см. выше).


S>А почему нельзя просто определить геттеры и сеттеры, которые бы собственно учитывали специфику поведения не-объектов?

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

S>Если же эту логику надо отделить от класса (поскольку она применяется во многих классах), то можно применить АОП. В этом случае в аспекте указывается, что при доступе к нужным полям нужных классов будет отрабатываться какая-то дополнительная логика.


АОП мне в принципе не нравится. В самой концепции АОПа есть очень хитро спрятанный логический баг.

S>Впрочем, интуитивно, я понимаю, что это не то, что нужно... Основная проблема состоит в том, что не-объекту для правильного поведения необходимо выйти за свои пределы в контекст содержащего его объекта...


А вот и нет! Не-объектный класс Money не должен лазить в своего хозяина (Employee, OrderDetails и т.д.). Его область деятельности ограничивается его полями (вернее, не-только-его полями) Value и Currency.

А о своём контексте он ничего не знает. Что называется, куда воткнули, там и сидит. То есть нельзя сказать, что
S>... salary.objectContext.currency даст валюту.
Класс Money, которому принадлежит Salary, не в курсе, что у его "контекста" есть поле Currency. Например, для orderdetails.Price валюта может сидеть в objectContext.Order.Customer.Country.Currency (о как всё запущено!).
Re[10]: Концептно-ориентированное прораммирование (КОП)
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.08.06 01:49
Оценка:
Здравствуйте, savinov, Вы писали:

S>У меня такое ощущение, что я общаюсь с новым русским. И по форме и по содержанию.

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

S>Стучать по столу и требовать ты у заказчика можешь, когда заплатишь, а здесь ты можешь вежливо попросить что-то втолковать, если не можешь разобраться самостоятельно.

Пока что у меня (и не только) есть подозрение, что это как раз ты не можешь разобраться самостоятельно.
AVK>>а) Скорости написания кода
AVK>>б) Сложности поддержки кода
AVK>>в) Читаемости кода[/q]

S>Ты хоть примерно представляешь, как может быть оформлен ответ на твои вопросы?

Естественно, может. И я могу.
S>Если нет, я подскажу: это может занять 10 лет и тома текстов (книги, статьи и т.п.)
Да ничего подобного. Если ты сам понимаешь, какие у твоей идеи преимущества, то тебе не составит труда изложить их в двух-трех абзацах. Вот, к примеру, вся суть квантовой механики укладывается в главу "введение" третьего тома Ландау-Лифшица.

S>Это термины, которые "специфичны" для любого подхода,

Совершенно верно. А ты что, полагаешь, что твой подход какой-то особенный, и к нему нельзя подходить с тем же аршином, что и, к примеру, к функциональному программированию?
S>причем не только в программировании.
Серьехно? Ну-ка, расскажи мне, для каких областей, кроме программирования, специфичен термин "сложность поддержки кода". Мне очень интересно расширить свой кругозор.
S>Так что видимо у тебя есть серьезные проблемы с пониманием, что есть специфичное и что есть общее.
Пока что мое понимание совпадает с пониманием Андрея. А вот твое понимание вызывает у меня обоснованные сомнения.
AVK>>Это вопрос, даже не сомневайся. Народ тут с нетерпением ждет на него ответа.
S>Говори, пожалуйста, от себя.
Ждет-ждет. Не сомневайся.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[15]: Концептно-ориентированное прораммирование (КОП)
От: fmiracle  
Дата: 10.08.06 17:20
Оценка: +2 :)
Здравствуйте, savinov, Вы писали:

C>>Тогда это называется "графоманство".


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


S>В общем, все свелось к обсуждению как это называется и не преследует ли автор каких-то корыстных целей.


Да нет же, прямо наоборот — это читатели преследуют корыстные цели — они хотят найти как это можно применить на практике.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Концептно-ориентированное прораммирование (КОП)
От: fmiracle  
Дата: 10.08.06 17:20
Оценка: 2 (2)
Здравствуйте, savinov, Вы писали:

S>Это все равно, что сравнивать принципы архитектуры с лопатой. Я буду говорить, как надо строить дом, а ты будешь говорить, что все это можно и лопатой сделать. Причем самое интересное, что ты будешь прав, но я к этому мог бы добавить, что кроме лопаты есть еще экскаватор, отбойный молоток и др. средства. Но все это не имеет отношения к предмету разговора.


Некорректная аналогия.
Правильная будет такая: ты предлагаешь для строительных работ создать биоробота, у которого вместо рук — лопаты, чотбы копать землю. Поскольку одних лопат мало, этот боробот будет поддерживать возможность трансворирования конечностей в экскаваторные ковши, отбойные молотки, метлы и "все прочее". На это тебе возражают, что в этом мало смысла — проще взять обычного человека и набор инструментов, которыми он сможет воспользоваться. Ты же отвечаешь "ну вот, вы ничего не понимаете в биороботах, а предлагаете использовать сменные инструменты. Ваша проблема в том, что за 40000 лет все привыкли к использованию инструментов и не могут понять идею биоробота."
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.