Пользователь
0,0
рейтинг
29 января 2015 в 11:53

Разработка → Особенности моделирование предметной области при помощи ООП



Введение


Хочу заметить, что тем, кто пользуется терминами ООП, будет очень трудно понять меня. Дело в том, что ООП подменил понятия. В ООП под классом понимается не множество, как обычно принято в математике, или лингвистике. В ООП классом называют тип объектов, как у Аристотеля. Было бы правильно в ООП вместо термина класс объектов использовать термин тип объекта. Однажды, съехав с правильной терминологии, вернуться в лоно правильных терминов оказывается очень трудно. В данной статье я попробую помочь тем, кто желает разобраться с терминологической кашей, заваренной ООП. В своих рассуждениях я буду использовать термины в их первоначальном смысле, а не в смысле ООП. Термин класс будет взят из логической парадигмы моделирования предметных областей, которая, в свою очередь, заимствовала этот термин из теории множеств. Термины тип и экземпляр будет взят из теории типов, построенной на парадигме Аристотеля о существовании типов.

Адепту ООП очень трудно понять, что термин экземпляр класса в русском языке указывает на класс объектов, а не на созвучный этому термину элемент класса – объект класса. Для многих, кто изучал ООП, термины экземпляр и элемент – неразличимы. Давайте разберемся с этими терминами внимательно.

Определения терминов


Термин экземпляр


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



Следуя логике, экземпляр класса – это объект из ряда себе подобных классов. Таким образом, в русском языке термин экземпляр класса указывает нам на класс.



Машина относится с классом машин так: машина есть объект класса машин.



Поэтому, если сказать, как это принято в ООП, что машина – есть экземпляр класса машин, то получится, что машина – есть класс машин. Коллизия!

В ООП под термином класс понимается термин тип. Поэтому термин экземпляр класса в ООП надо читать так: экземпляр типа объектов. Тогда наша картинка будет выглядеть так:



Поэтому, если Вы встречаете термин экземпляр класса, то знайте, что скорее всего, этот термин порожден ООП и значит он тип объекта. Вне ООП класс значит множество объектов.

Термин элемент


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



или связью классификация (элемент класса колес – колесо).



Другие пары некорректных терминов:


Кроме того, в бизнес-анализе сейчас распространены другие некорректные пары терминов: событие и экземпляр этого события, процесс и экземпляр этого процесса, договор и экземпляр этого договора. В русском языке нет такого понятия как объект и экземпляр этого объекта. Есть термины тип объекта и экземпляр этого типа объекта.

Возможно, ошибочное употребление терминов возникло из-за неверного перевода термина instance с английского языка. Instance переводится как пример, или как случай, но он не переводится как экземпляр.

Как бы то ни было, давайте посмотрим правильное употребление термина экземпляр:

  • Экземпляр электрона — это электрон, экземпляр частицы типа электрон, или экземпляр данного типа электронов (но не экземпляр этого электрона).
  • Экземпляр процесса – это процесс, экземпляр объекта типа процесс, или экземпляр данного типа процессов (но не экземпляр этого процесса).
  • Экземпляр события — есть событие, экземпляр объекта типа событие, или экземпляр данного типа событий (но не экземпляр этого события).
  • Экземпляр класса – это класс, экземпляр объекта типа класс, или экземпляр данного типа классов (Но не экземпляр этого класса)

Данные высказывания сделаны в парадигме Аристотеля, где есть типы объектов и экземпляры этих типов, но не объекты и экземпляры этих объектов. О парадигме Аристотеля я писал в статье: Знакомство с парадигмами построения моделей предметной области.

Аналогия с наукой


Надо заметить один очень интересный факт. Напрашивается аналогия между религией и наукой. Научный подход возник к противовес религиозному описанию мира. Если Вы описываете мир с точки зрения религии, то надо понимать, что наличие Бога проверить нельзя. В основу веры кладется вера. Научный подход, в противовес вере ставит главенство эксперимента. То есть, если эксперимент подтверждает существование Рая, то Рай существует. Если не подтверждает, то – неизвестно, существует он или нет. Термины, употребляемые в одном концепте не смешиваются с терминами, употребляемыми в другом. Например, можно слышать иногда тезис о том, что кто-то доказал существования Бога. Но как только кто-то это докажет, Бог перестанет быть Богом и станет очередным концептом. Поэтому доказать существование Бога невозможно и потому в религии невозможно ввести термин доказательство. Также как в религии неуместно говорить о доказательствах, в науке бессмысленно говорить о вере, кроме как в разрезе: мне эта вера помогает мыслить, но как только она станет мешать, я ее поменяю.
Точно также в онтологии существует два подхода: один придумал Аристотель. Это теория типов. Второй был придуман в противовес Аристотелевским типам. Этот подход называется логическая парадигма и использует термин класс. Эти две парадигмы несмешиваемы, как наука и религия. Поэтому в теории типов нельзя употреблять термин класс, а в теории классов нельзя употреблять термин тип. Однако, ООП нарушило этот запрет. За это ему надо сказать фу.

В своих изложениях я опираюсь на логическую парадигму, в которой есть объект и есть множество объектов, называемое классом объектов, но нет терминов экземпляр, тип и термина класс в смысле ООП. Для знакомства с логической парадигмой я могу посоветовать почитать книги Chris Partridgе Business Objects: Re-Engineering for Re-Use, Matthew West Developing High Quality Data Models.

Основа логической парадигмы: связи классификация и специализация


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



В ООП нет такой связи, и вы не сможете указать ее на диаграмме UML.

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



В ООП такая связь между классами называется наследование. Говорится, что Класс 2 наследуется от Класса 1.



Но в природе Класс 2 есть подмножество Класса 1. Видимо, имеется ввиду, что наследуются признаки, или параметры. Но параметры есть только в описании типа! И опять мы упираемся в смешение терминов. Классы не могут ничего наследовать. А вот типы – могут.

О связях специализация и классификация можно прочитать тут: Информационные объекты или причина одного заблуждения (В параграфе «Решение в логической парадигме» я показал, как можно моделировать предметную область с использованием этих терминов).

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

Напомню: класс в логической парадигме и класс в ООП – разные вещи. Описание класса в логической парадигме – перечисление объектов этого класса, а не свойств этих объектов. В ООП же под описанием класса понимается описание свойств объектов, что, фактически, означает описание типа объектов. Те, кто преподают ООП, не скрывают, что класс в ООП – это тип объектов. Но вот почему тип был назван классом, не раскрывают.

Пример
Чтобы понять, почему определение класса в ООП не работает в реальном мире, попробуйте выполнить простейшую операцию над классом: создайте класс всех подклассов данного класса. И попробуйте к каждому созданному вами подклассу применить определение класса, которое действует в ООП.

Пример: пусть у нас есть три яблони {1;2;3}. Это класс. ООП требует наличие у объектов этого класса общих признаков. Пусть это будет признак «наличие яблок». Создадим класс, состоящий из всех подклассов класса этих яблонь. Этот класс состоит из классов: {{пусто};{1};{2};{3};{1;2};{1;3};{2;3};{1;2;3}}.



То есть в этом классе классов 8 элементов. Попробуйте, если вы следуете определению класса ООП, дать дифференцированное описание этих классов (другое бессмысленно). И это цветочки – всего три элемента в классе. А если их 1000, а если счетное множество, а если континуум? Поэтому в ООП нет даже простейших операций над классами (сложение и вычитание множеств).
Марк Мельник @maxstroy
карма
15,2
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (555)

  • +3
    Перечень схожих черт Аристотель назвал типом. А объект, обладающий этими чертами, — экземпляром данного типа.

    Вы можете дать конкретную цитату из Аристотеля, где вводятся эти термины?
  • 0
    Да, в книгах, что я привел, есть ссылки на Аристотеля.
    • +1
      Ну то есть вы не можете отвечать за собственное утверждение «Аристотель сказал» и «Аристотель назвал». Ок.
  • 0
    Сколько проблем только из-за того, что в джаве/плюсах/шарпе классы не являются объектами.
    • +2
      Да, к сожалению, да. и в UML нет возможности моделировать классы и объекты этих классов на одной диаграмме. А в природе встречаются такие связи. Получается, что часть связей предметной области в UML не находят своего отражения
  • 0
    Какая-то сумбурная статья получилось. Видно, что у автора накипело :) Но в статье как-то очень мало описано о «надеждах и разочарованиях» ООП, ожидал увидеть больше конкретики, а не то, что термины употребляются не правильно.
    Если автор предлагает использовать в качестве классов теорию множеств, то спешу его предупредить, что она довольно ограничена Парадокс Рассела и попытки решить ее привели к созданию теории категорий.
    Поэтому в ООП нет даже простейших операций над классами (сложение и вычитание множеств)
    Эту задачу в терминах ООП можно решить при помощи костылей, но если хочется красивого решения, то почитайте про ADT. Они позволяют то, что вы хотите: создавать типы из других типов используя операции логического сложения и произведения. О том как это реазиловать в ООП можно почитать тут
    • +1
      Спасибо за ссылки! Вопрос не в том, как решать эти задачи. Их решить можно. Вопрос в том, что ООП плохо подходит для моделирования предметной области, куда его пытаются запихнуть. А. если и подходит, то с терминами тип, а не класс.

      Теперь про парадокс Рассела. Термин Класс отличается от термина Множество тем, что класс определяется в аксиоматике фон Неймана. И эта аксиоматика была создана для разрешения этого парадокса. Однако, в нашем случае до парадоксов Рассела как до звезды)).
  • 0
    Кроме того, в бизнес-анализе сейчас распространены другие некорректные пары терминов: событие и экземпляр этого события, процесс и экземпляр этого процесса, договор и экземпляр этого договора. В русском языке нет такого понятия как объект и экземпляр этого объекта. Есть термины тип объекта и экземпляр этого типа объекта.

    Возможно, ошибочное употребление терминов возникло из-за неверного перевода термина instance с английского языка. Instance переводится как пример, или как случай, но он не переводится как экземпляр.

    Простите, но кому и зачем нужно использовать в программировании термины на русском языке? 1C'нишков не берем, у них своя песочница. Я НИКОГДА не встречал использование русскоязычных переводов instance и event, это не имеет никакого смысла.

    Деление на классы и объекты классов позволяет мне рассматривать любые объекты исследуемого класса, например, класса слонов (изучать продолжительность жизни любого из слонов, длину его бивней на различных этапах его жизни), а также — класс слонов (изучать среднюю длительность жизни слонов, средний рост и средний вес). Понятно, что любой слон класса не может «знать» информацию о средней длительности жизни всех слонов. Эту информацию «знает» только класс слонов. Попробуйте в парадигме Аристотеля придумать тот объект, который «знает» о среднем количестве событий в год, не используя при этом термин множество! Навряд ли у вас это получится.

    Возможно вы удивитесь, но это называется статические поля и методы класса. При создании класса слонов сохраняем кол-во всех слонов, сумму длительности жизни, роста, веса всех слонов в статические поля и после получаем все средние величины. Вывод класс в ООП это одновременно и класс множеств и тип.
    • +1
      Простите, но кому и зачем нужно использовать в программировании термины на русском языке


      Я не говорил про программирование. Я говорил про моделирование предметной области.

      Возможно вы удивитесь, но это называется статические поля и методы класса

      В предметной области нет переменных
      • –1
        Я не говорил про программирование. Я говорил про моделирование предметной области.

        Если вы говорите про моделирование предметной области как часть аналитической деятельности, то ООП к ней неприменимо, следовательно вся ваша статья написана на пустом месте.
        А если вы говорите о моделировании предметной области как части деятельности по разработке, то это как раз программирование, и вы о нем и говорите.
        • 0
          Я разделяю код и реальность. В реальности есть слоны и классы слонов. Есть классы в программе. Классы слонов описываются при помощи логической парадигмы. Типы слонов описываются при помощи типов. Но код описывается при помощи классов ООП, Классы ООП не имеют прямой связи с классами реальных объектов. Эта связь только у аналитика в голове. Поэтому в природе нет переменных, нет классов ООП, но есть классы объектов, объектов из атомов. А те объекты, которые создаются в системе — они из электромагнитных полей. Это разные объекты
          • –1
            … и как все это связано с тезисом «Простите, но кому и зачем нужно использовать в программировании термины на русском языке»?
            • +1
              Мы не в программировании находимся. Программисты пользуются исследованиями, сделанными аналитиком. А аналитик работает в предметной области и его модели в идеале не должны зависеть от той платформы, на которой будет писаться код. Есть две модели: концептуальная, (она вообще не про программирование) и физическая (вот она про код). Между ними (моделями) есть связь, о которой говорят много и много ее изучают, но эти модели разные
              • –2
                Если вы находитесь не в программировании, не говорите об ООП.
                • +2
                  Я думаю вы не понимаете, о чем говорит maxstroy. Он рассматривает описание сущностей мира и их взаимосвязей с аналитической точки зрения, что дает основания для постановки задач программисту, который описывает кодом отражение этих сущностей в программе.

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

                  Я знаю что ООП для многих пользователей этого сайта является священной коровой, которую трогать нельзя. Не уподобляйтесь таким людям.
                  • 0
                    В ООП концепции не спутаны, в ООП концепции отличаются от тех, которые нужны maxstroy.

                    И да, я прекрасно понимаю, что такое «логическая модель сущностей», и какая от нее польза. И ее прелесть как раз в том, что она не зависит от реализации — в том числе, ее можно реализовывать в рамках функциональной парадигмы, и не думать о каких-то там проблемах ООП.
                    • +3
                      Мне, как программисту, было бы проще работать, если бы концепции программирования были возможно ближе к концепциям описания модели. Если этого нет начинается попытки натянуть жабу на глобус и прочие костыли
                      • –1
                        Мне тоже. Но тут проблема возникает в том, что это двунаправленное движение — концепции программирования движутся к описанию, но и описание движется к программированию. Это внезапно приводит к тому, что описание не удается сохранить независимым от реализации, и она начинает влиять сначала на описание, а потом и на бизнес-процесс.

                        А сделать такую концепцию описания, чтобы она идеально подходила для любой задачи, при этом не была избыточно абстрактной, но и не пахла реализацией — это и правда Святой Грааль. Прекрасный и недостижимый.
                      • 0
                        Мне, как программисту, было бы проще работать, если бы концепции программирования были возможно ближе к концепциям описания модели.

                        Вот и я об этом же habrahabr.ru/post/249193/

                        Мне кажется, в такой постановке вопроса и с спорить не о чем.
                        Мы же не пишем 100% кода на ассемблере или на процедурном C,
                        а используем объектные C++, Java, C# и т.д.

                        Почему бы не продвинуться вперед, и концепции и средства разработки не поднять на уровень еще выше — чтобы они соответствовали концепциям и средствам описания модели предметной области.
                • 0
                  Программист просит меня описать нечто. Я даю ему описание. А потом он приходит ко мне и говорит: я создал класс такой-то. Я должен уметь перевести на язык русский: он создал тип объектов, которые будут созданы в системе, и выглядеть эти объекты будут так.
                  • –1
                    Плохой программист, негодный. Зачем он вам это говорит?
                  • 0
                    А по мне, так создание класса(ов) без двусторонней связи разработки с аналитикой, вообще порочный путь.
                    в процессе проектирования\разработки (проектирование > разработка > анализ > проектирование и т.д.) нужно признать несколько вещей:

                    • Идеал недостижим (о чем уже было сказано в этом трэде), надо сосредоточиться на выборе и использовании наиболее эффективных инструментов в вашей задаче
                    • Один программист\команда разработки в силу субъективности своего мышления в процессе работы как правило пишет ущербный код, который непрерывно дописывается и улучшается


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

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

              Конкретно с ООП все вообще очень неопределенно: тот же метод — фактически функция.
              Обозвать это методом мог только человек, который слабо понимает разницу между алгоритмом, методом и принципом.
              Применительно к программированию, вероятно, вина переводчика. Метод надо было переводить совершенно по-другому, так как то, что в русском языке понимается под методом — совершенно не отражает то, что понимается под этим программистами ООП.

              • 0
                Дело не в русском языке.

                Как же «не в русском языке», если и автор поста пишет «Адепту ООП очень трудно понять, что термин экземпляр класса в русском языке указывает на класс объектов», и вы пишете «надо было переводить совершенно по-другому, так как то, что в русском языке понимается под методом»?

                Это одна и та же совершенно не новая проблема «эти идиоты в своей области используют терминологию, которая в моей области/в общем употреблении/в другом языке обозначает совсем другое».
                • 0
                  Надо мне было добавить слово «конкретно» или «именно» в русском.
                  Тут, думаю, все равно, в каком языке.
                  Вы правы, проблема не новая, но есть общеупотребительные термины, собственно, — это даже не термины, а какие-то глубоко устоявшиеся понятия. Я не зря привел как пример именно «метод», так как это что-то более широкое в восприятии любого человека независимо от специальности.
                  • 0
                    Вы правы, проблема не новая, но есть общеупотребительные термины, собственно, — это даже не термины, а какие-то глубоко устоявшиеся понятия.

                    Многие «глубоко устоявшиеся понятия» со временем, как ни странно, меняются. Или, скажем, приобретают другие значения в специальных областях (вот, например, милое слово «рубашка»).

                    Я не зря привел как пример именно «метод», так как это что-то более широкое в восприятии любого человека независимо от специальности.

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

                    Вы никогда не задумывались, что, скажем, общеупотребительное значение слова «нота» — неправильное с точки зрения музыкальной теории (и при этом музыкальная теория «более права», потому что в ней этот термин появился раньше, а общее употребление его оттуда позаимствовало)? Но это никому не мешает, включая самих музыкантов.
                    • 0
                      Вы слишком уж углубились.
                      Мы часто, когда говорим об ООП, употребляем слово «модель», что в принципе — извините за такую поэзию — есть застывший метод, и, кстати, (наоборот тоже — модель — метод в динамике). Т.е. в общем и целом мы в праве говорить и говорим, что ООП — это метод программирования.
                      И теперь конкретный пример: человек открывает учебник по ООП и видит функцию обёрнутую в класс, а ему говорят, что это метод. А почему метод?
                      Почему не функция класса? Зачем так сужать понятие метода?
                      • 0
                        Мы часто, когда говорим об ООП, употребляем слово «модель»

                        Кто «мы»? И уверены ли вы в том, что эти «мы», употребляя слово «модель» применительно к ООП, действительно имеют в виду «застывший метод»?

                        Т.е. в общем и целом мы в праве говорить и говорим, что ООП — это метод программирования.

                        В каком-то смысле — да, однако доминирующая формулировка звучит так: ООП — это парадигма программирования.

                        И теперь конкретный пример: человек открывает учебник по ООП и видит функцию обёрнутую в класс, а ему говорят, что это метод. А почему метод?

                        Потому что это так называется в уже устоявшейся терминологии.

                        Почему не функция класса?

                        Во-первых, потому, что под функцией в программировании чаще понимают иное, нежели метод (и поэтому сторонники, скажем, функционального программирования на предложенный вами термин могут несколько расстроиться). А во-вторых, потому что придут математики и тоже скажут «какая же это функция?» — и чем их мнение отличается от вашего?
                        • 0
                          Математики не скажут, кстати. Потому что все же это функция.
                          • 0
                            Это, очевидно, зависит от математика, и от того конкретного метода, который вы ему покажете. Какое, бишь, определение функции лично вы используете в своем утверждении?
                            • 0
                              Определение в одно слово — преобразова́ние.
                              И оно кратко и полно отражает то, что происходит с переменной или экземпляром класса.
                              • 0
                                Определение в одно слово — преобразова́ние.

                                Любое преобразование является математической функцией? Я не уверен, что математик с вами согласится.

                                Но допустим, что преобразование. Чего во что?
                                • 0
                                  Если быть строгим, то функция — отображение одного множества на другое. Но вариант с преобразованием тоже валиден с некоторыми оговорками.
                                  • 0
                                    Да я в курсе. Дело как раз в оговорках.
                        • 0
                          А во-вторых, потому что придут математики и тоже скажут «какая же это функция?» — и чем их мнение отличается от вашего?

                          Для полноты картины: придут музыковеды, и скажут, что с точки зрения Римановской теории функций то, что и математики, и программисты называют функциями, к функциям никакого отношения не имеет.
                          • 0
                            С момента написания статьи прошло много времени. Есть очень хорошая статья, которая подвела итог моим исследованиям на тот момент: www.ritba.ru/#!modeling/c64i Но и это еще не все. На текущий момент разработаны модели на основе данного подхода. И теперь разрабатываются соответствующие фреймворки для создания такого рода моделей. Так что вопрос о терминологии для нас уже пройден и закрыт. Да, терминология ООП вредна, она вводит в заблуждение.
                            • 0
                              Так что вопрос о терминологии для нас уже пройден и закрыт.

                              Поздравляю вас.

                              Да, терминология ООП вредна, она вводит в заблуждение.

                              Для кого вредна? Кого вводит в заблуждение?
                              • 0
                                Она вредна для использования в анализе предметной области. Вводит в заблуждение всех участвующих в этом процессе участников. И в конце концов она вредна для самих программистов, потому что через некоторое время у них возникает деформация, в которой они начинают в реальном мире видеть «инстансы» вместо объектов.
                                • 0
                                  И в конце концов она вредна для самих программистов, потому что через некоторое время у них возникает деформация, в которой они начинают в реальном мире видеть «инстансы» вместо объектов.

                                  … но нет. Для программистов (если, конечно, это ОО-программисты) терминология их доминирующей отрасли не вредна.

                                  А про использование программистской терминологии в анализе (это касается любой терминологии, не только ОО-, я вот чаще всего следы от БД вижу) уже давно все сказано.
                                  • 0
                                    Называть объекты инстансами, искать, к какому объекту приторочить «метод», — это очень глубокие изменения в сознании, которые трудно выветриваются. Если программист знает, что в реальном мире нет объектов, обладающих методами, то я рад за него. Но сколько таких программистов мы знаем?
                                    • +1
                                      Но сколько таких программистов мы знаем?

                                      Я не знаю, как вы, а я вот не знаю ни одного программиста, который бы считал, что в «реальном мире» есть объекты, обладающие методами.

                                      Нет, серьезно: путать модель и объект моделирования — это профнепригодность.
    • +1
      Класс слонов существует в поле, в Африке, мы его создать не можем, разве только путем специального разведения. В системе мы создаем объекты, моделирующие слонов. Я же в своей статье пишу про класс реальных слонов, а не тех, которые создаются в системе
      • 0
        Не существует класса реальных слонов. Класс это абстракция, которая возможна только в модели/системе, моделирующей реальный мир. В реальном мире есть некоторые реальные объекты, которые люди называют слонами и которые группируют по каким-то своим признакам. Например, в Китае класс медведь для большинства людей это панды. Класс и тип это исключительно человеческие абстракции по группировке реальных объектов и в реальном мире их нет. И тип и класс далеко не единственные и далеко не бесспорные критерии группировки объектов.
        • 0
          Думаю, что логическая парадигма с Вами не согласна. В природе существуют группы объектов. Эти группы называются множествами и обладают какими-то признаками, отличными от объектов этих множеств. Тип — это Аристотель придумал и его нет в природе, а вот с классом поосторожнее — они ровно такие же объекты, как и объекты. В логической парадигме у них даже название одинаковое — Thing. Рисунок из стандарта ИСО 15926:
          • 0
            Это лишь одна из систем абстракции, придуманных человеком. В другой системе все будет принципиально другим. Пока вы этого не поймете, будите так же ограничены, как программисты использующие чужие паттерны во всех случаях.
            • +1
              Да, но непротиворечивая абстракция. Это важно. ее придумали не случайно, а потому что она непротиворечива
              • 0
                Чему непротиворечива? Если бы она была наилучшей и единственно возможной системой придставления знаний, логики и мышления, ИИ уже был бы создан (по определению).
                • 0
                  Она на сегодняшний день единственная непротиворечивая модель представления нашего мира. над ней работали 200 лет математики и философы. Интересно, что может быть круче?
                  • –1
                    Я не ослышался, над ISO 15926 (начат в 1991, работы ведутся) 200 лет работали математики и философы?
                    • 0
                      Над теорией игр работали сколько? неужто 2 года? нет, конечно, к ней шли много веков
                      • 0
                        Я, если честно, не понимаю, почему для ISO 15926 вы считаете возможным считать опыт предшественников в плюс, а для остальных парадигм — нет. Они не опираются на предыдущий опыт?
                        • 0
                          Опираются, конечно! ООП на Аристотеля, например. Я об этом и пишу
                          • 0
                            Любопытно.

                            Таким образом, можно сказать, что над ООП две с лишним тысячи лет работали математики и философы. Как какая-то там логическая модель, с ее всего-то двумястами годами, может быть круче?
                            • 0
                              Да, Аристотель круче)), Я не пользуюсь терминами круче)). Есть термин более или менее подходящий для данного класса задач
                              • 0
                                Я не пользуюсь терминами круче

                                vs
                                над ней работали 200 лет математики и философы. Интересно, что может быть круче?
                                • 0
                                  Я не пользуюсь термином круче, потому что в моем мире круче всех яйца вкрутую
                                  • 0
                                    maxstroy: Я не пользуюсь термином круче, потому что в моем мире круче всех яйца вкрутую

                                    vs
                                    maxstroy: над ней работали 200 лет математики и философы. Интересно, что может быть круче?
                                    • 0
                                      Поймали, спасибо! Я иногда сваливаюсь в сленг! Не, правда спасибо!
                  • 0
                    Советую поизучайте теории создания ИИ и все те системы, которые на их основе созданы. Там самых различных моделей представления нашего мира более чем достаточно. А «круче» от математика, которым мы себя называете, вообще смотрится абсурдом. Как и считать что система должна оцениваться возрастом или считать что математическая модель или система может быть идеальной или абсолютной.
                    • 0
                      создание ИИ, теория ИИ и теория создания ИИ — это разные вещи?
                    • 0
                      Смысл в том, чтобы с ростом сложности совершенствовать и свое понимание и свой язык. Если Вы делаете ошибки подобного рода, значит вы еще недостаточно много поработали в области онтологии. Язык становится такой же частью вооружения онтолога, как и модели, которые он строит.
    • +1
      Давайте еще раз по-порядку. Мы говорили не про программирование, не про код, а про реальные объекты в реальном мире. Я говорил про ту машину, что стоит у меня под окнами. У нее есть колеса, у нее есть класс колес, и это не имеет отношения к программированию никакого. Мы говорим только о предметной области и только о ней. В ООП есть конструкции, которые моделируют эти объекты предметной области. И я утверждаю в статье, что классы реальных объектов в ООП моделируются при помощи типов. Но не при помощи классов. Это беда, потому что целое поколение программистов выросло, не различая эти понятия. Например, кто-то даже написал, что мы используем типизированные классы, или что-то в этом роде. К сожалению, это нам в институте не преподают.

      И надо просто понять, что есть классы в природе. Класс слонов — он тот класс, объектов, который состоит из слонов, пасущихся в Африке. И этот класс был задолго до появления компьютеров. Его (класс) тогда изучали биологи.
      • 0
        Я говорил про ту машину, что стоит у меня под окнами. У нее есть колеса, у нее есть класс колес,

        Нет у неё класса колес, у неё есть 4 реальных предмета, которые люди называют колеса. Группировать по видам, классам, типам, родам, материалам и прочему можно только при построении абстрактной системы, частично моделирующей реальный мир, но к самому реальному мире она прямо не относится.
        • 0
          У машины 5 предметов, которые мы классифицируем, то есть относим к классу колес. Этот класс именованных объектов, из чего мы можем именовать объект данного класса. Есть неименованные классы, здесь нам приходится как-то выкручиваться
          .
          • 0
            мы классифицируем, то есть относим к классу колес.

            вот именно, что ВЫ классифицируете, то есть строите абстрактную СИСТЕМУ лишь частично моделирующую реальный мир. Для существа без зрения, а только с нюхом, там есть сильный металический запах, с запахом резины. Для системы искуственного интеллекта, для существ с другими органами чувств или мышления, мышина и колеса будут совсем другими абстрактными объектами. Надо понимать, что как только вы переходите к АБСТРАКЦИЯМ вы уже не в реальном мире, вы в своей собственной сугубо СУБЪЕКТИВНОЙ системе, которая не имеет 100% достоверности с реальностью, вплоть до того что то что вы называете слоном, может оказаться мухой в реальности.
            • 0
              Стоп! А как Вы получаете объекты в мире? Или Вы думаете, что они существуют вне вашего сознания? Ровно также существуют и классы
              • 0
                Объект это тоже абстракция, реальность только сырая информация которую вы получаем от органов чувств. Классы это уже попытка человека группировки и классификации, для ребенка и животного понятия классов и типов не существует, максимум у них есть возможность определять «похожесть» двух объектов.
                • 0
                  Мы классифицируем предметы по схожим признакам. И создаем классы объектов
    • +1
      Не хотелось бы показаться резким и некорректным, но из таких советов:
      При создании класса слонов сохраняем кол-во всех слонов, сумму длительности жизни, роста, веса всех слонов в статические поля и после получаем все средние величины.

      можно в любой книжке по ООП составлять главу «Примеры, как не надо делать».

      Если у нас есть тип данных (класс в понятиях ООП) «Слон», то для полноценной реализации сущности предметной области нам нужно реализовать типы данных «Список слонов» и «Слоны», которые и будут разруливать общее кол-во слонов, их средний вес и т.д.

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

      Есть впечатление, что при том, что ООП сейчас явно находится в кризисе, если не в конце жизненного цикла (тут и от функциональных языков какие-то ожидания, и чуть ли не скриптовый Golang, по моему мнению, являющийся одним из кандидатов на новый мейнстрим),
      так вот при этом, к сожалению, ООП за этот период так и не «взлетел», т.е. не использовался так, чтобы получить отдачу, от того, что вообще заложено в ОО-концепцию.
      А жаль — инструмент очень красивый и мощный.
      • 0
        В случае, если мы заводим в одном типе данных «Слон» статические поля «общее кол-во», какие-то средние величины, то даже говорить не хочется что будет с вашими этими полями при работе с многопотоком, с сопровождением кода двумя-тремя и более «поколениями» программистов, и т.д.

        Ничего не будет, если поля потокобезопасные и приватные. AtomicInteger в java, например.

        private static AtomicInteger sumWidth = new AtomicInteger();
        private static AtomicInteger countWidth = new AtomicInteger();
        private Integer width;
        
        public setWidth(int width) {
            this.width = width;
            sumWidth.addAndGet(width);
            countWidth.incrementAndGet();
        }
        
        public double static synchronized getAverageWidth(){
            double sumWidth  = this.sumWidth.get();
            double countWidth = this.countWidth.get();
            return sumWidth / countWidth;
        }
        
        • 0
          Ответил разом на другой ваш комментарий.
        • 0
          И все же, не могу удержаться, напишу еще.
          Вот вы пишите
          Ничего не будет, если поля потокобезопасные и приватные.

          Вы молодец, но в моей практике вы входите буквально в единицы программистов, которые заботятся о «потокобезопасности и приватности».
          А уж кто там будет копаться, что там использовать — AtomicInteger в java, или какой аналог этого есть в C#, вообще сложно представить.
          Полагаю, все-таки, с учетом назревших задач, рано или поздно назреют и новые парадигмы программирования.
    • +1
      Кажется, только сейчас я понял, почему программисты так злоупотребляют статическими полями — видимо, они действительно думают, что статические поля это общие данные класса (т.е. всего множества объектов — экземпляров данного класса).
      Но ведь в любой (любой!) хорошей книжке по ООП написано, что класс это всего лишь тип данных, а не множество объектов!
      Соответственно, если мы заводим статическое поле класса — характеристику именно типа данных, то если мы пытаемся использовать это поле как общие данные множества объектов, то мы используем инструмент не по назначению (пытаемся завивать гвозди кусачками) => куча проблем.
      • 0
        И тип и множество. Объясните зачем тогда вообще нужны статические поля, если не для хранение общих для всех классов данных?
        • 0
          Объясните зачем тогда вообще нужны статические поля, если не для хранение общих для всех классов данных?

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

          Статические элементы класса вообще к чистому ООП не имеют отношения.
          Если их и использовать то для описания именно типа данных.
          В этом случае статические поля должны быть readonly и immutable.
          Например, поле (константу) Int32.MaxValue я отношу к описанию типа данных, а не к общим данным для всех экземпляров данного класса.

          В соседнем посте вы привели пример, как сделать статические поля потокобезопасными — все это технические меры, в одном языке сработает, в другом нет. Вы напишите потокобезопасный код корректно — другой программист нет.
          То, что вы написали для вычисления средних значений, суммы, все это можно реализовать и с помощью другого класса, статического хелпера или других конструкций (например, если есть класс «Машина», то вычислением этих величин могут заняться классы «Список машин» или «Машины»).

          Поймите, статические поля не имеют отношения к концепции ООП.
          А то, что вы пытаетесь с помощью них решить некие задачи, говорит только о том, что концепция ООП неполна/противоречива, и есть задачи, которые не имеют «нативного» решения с помощью ООП.
          Конечно, использовать статические поля самое простое, проще, чем предложенные в отдельном посте сущности «Машина»/«Список Машин»/«Машины», которые образуют «метасущность».

          Поскольку не хочется делать ни того, ни другого, поэтому я и пишу — хотелось бы новой парадигмы/платформы программирования, которая устраняла бы противоречивость ООП и соответствовала (маппилась) на теорию множеств.
          • 0
            Действительно, есть задачи, которые с помощью ООП решать неудобно. Это не значит, что концепция ООП неполна или противоречива, это просто значит что этот инструмент не универсален. No silver bullet there either.
          • 0
            На самом деле я рассказал про статические поля в своей статье. Если есть статическое поле «средний рост слона», то относится это поле не к слону, Слон понятия не имеет о среднем по слонам? Однако, в реализации статических переменных слон знает о среднем по слонам. С точки зрения логики — коллизия.
            • 0
              Неверно, конкретный слон ничего не знает о среднем по слонам. Возвращать статические полям должны только у статические функции, то есть функции, априори работающие со всеми слонами класса. Функцию
              «public double static getAverageWidth()» нельзя (точнее можно, но неправильно) вызывать у конкретного объекта класса слон, только для всей группы слонов.
              • 0
                Отдельно взятый слон ничего не должен знать об агрегирующих данных, относящихся к «слонам».
                А в вашем примере он может это сделать, просто обратившись с приватному статическому полю своего класса.
                • 0
                  (А как же эгрегор и родовая память?)

                  А если серьезно, то идея о том, что конкретный экземпляр не должен ничего знать об общих для типа данных — неоднозначна. Вас, вероятно смущает не то, что он «знает», а то, что он может туда что-то записать?
                  • 0
                    И знать тоже не должен.
                    Если мы моделируем войсковое соединение, то при таком подходе программист может так запрограммировать бойца (любого экземпляра типа данных «боец»), что тот будет знать о всем количестве войск.
                    Это, очевидно, неправильно.

                    Идея ООП в том, что есть данные, которые вот нельзя знать (и уже тем более изменить) — абстрагирование, инкапсуляция. Иначе бы мы спокойно программировали процедурно.
                    • 0
                      Это, очевидно, неправильно.

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

                      Программист может запрограммировать так чтобы по рефлексии обратиться к любому приватному полю любого класса в системе (говорю в терминах Java, но подозреваю в других языках есть аналогичные мехонизмы), но от кривого программиста, пишущего кривой класс, не спасет ничего кроме code review.
                      • 0
                        То есть в ООП объект класса НЕ МОЖЕТ знать о значении статической переменной? Если МОЖЕТ, то ООП нарушает логику. Если НЕ МОЖЕТ, тогда можно продолжать обсуждение. Но по моим сведениям, — МОЖЕТ. В логической же парадигме — не может.
                        • 0
                          Объясните простую вещь про вашу логическую парадигму:
                          Есть онлайн магазин, скажем, продающий мобильные телефоны. Главным объектом у него товары, у которых под сотню параметров (производители, размер, цена, цвет, вес, емкость аккумалятора и т.п.). В атрибутной-типовой моделе, тут все просто: сотня аттрибутов разных типов. В вашей логической парадигме где все класс, я правильно понимаю, что у вас будет несколько тысяч классов с разной ценой, сотни классов с разным весом, сотни классов с разными размерами длины и высоты телефона, десятки тысяч классов даты создания объявления и его модификации и т.п. То есть кол-во классов будет измеряться как все_параметры_товара * все_возможные_значения.

                          Во-первых, непонятно как при этом делать поиск на сайте, дата_обнавления > такой-то_даты, цена в диапазоне от столько_рублей до столько_рублей. Во-вторых, непонятно каким образом реализовывать миллионы классов, как строить отчеты и как получать средние суммы. В-третьих, при каждой продаже товара его нужно будет перемещать из класса товары с продажами в 32 штуки в классы с продажами с 33 штуки.

                          Можете на пальцах построить модель такого онлайн магазина в логической парадигме?

                          Кстати, заодно обясните как модель в логической парадигме должны будут реализовать программисты? Потому что, если нет нормального и понятного способа реализовать в коде модель в логической парадигме, программисты просто выкинут модель и все реализуют через ООП.
                          • 0
                            Я не занимаюсь реализацией парадигмы в коде. Это надо понимать. Я занимаюсь построением моделей. И в этих моделях реально очень много классов. Вопрос в том, что не все из них нужно выносить на бумагу в момент проектирования систем. Достаточно лишь тех, о которых мы в данный момент ведем речь. Как решаются задачи построения промышленных моделей, надо спросить у Агроскина. Он знает, потому что работает именно над этим. Я же не строю эти модели, потому что в той области, в которой я работаю, ИСО не дает мне нужных классов сущностей. Их приходится думать самому. Вот о процессе выделения в сущем таких классов я и веду речь на хабре.
                            • 0
                              Я занимаюсь построением моделей.

                              Для кого и чего? Модель бессмысленна сама по себе, она всегда нужна для чего-либо, либо для реализации в системе, либо для упрощение понимания бизнес процессов. И в том и в другом случае нет проблемы описать модель интернет магазина с одни единственным типом товара.

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

                              Зачем вы киваете на других людей? ВЫ лично НЕ УМЕЕТЕ использовать ВАШУ парадигму для построения ЭЛЕМЕНТАРНОЙ бизнес модели?

                              Хотя бы модели ПОИСКА товара на сайте по разным параметрам или ПОКУПКИ этого товара.

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

                              Так какие модели вы строите и что выделяете? И почему вы ЛИЧНО не можете построить модель простейшего бизнес процесса по вашей парадигме?
                              • 0
                                Модель, если быть точным, существует в голове. На бумаге мы строим представление этой модели при помощи известной нам нотации. Мы можем представлять модели не только на бумаге, мы это делаем ртом, когда говорим на языке, мы делаем это, когда пишем, мы делаем это, когда рисуем. Но все эти представления — суть представление одной модели. Мы делаем представление модели каждый раз, когда открываем рот. Зачем? чтобы передать информацию о модели от одного субъекта другому. Вопрос — зачем строить представления моделей можно переформулировать в зачем мы разговариваем? Затем же мы пишем, затем же мы рисуем. У Вас очень ограниченное представление о целях этого процесса. Мы можем обмениваться моделями с разными, совершенно неожиданными целями. Я даже боюсь взяться классифицировать эти цели. Пуст этим занимаются психологи. Моя задача не объяснять цели моделирования, а рассуждать о конкретном способе представления моделей.

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

                                Я не могу построить модель примитивного процесса, потому что, чтобы объяснить Вам что я построил, понадобится еще 10 статей на хабре.
                                • 0
                                  У Вас очень ограниченное представление о целях этого процесса. Мы можем обмениваться моделями с разными, совершенно неожиданными целями. Я даже боюсь взяться классифицировать эти цели.

                                  Модель строится чтобы либо упростить понимание предметной области, либо упростить практическую реализацию. Какие ещё цели вы можете представить?

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

                                  Простите, но получается так что вы сами не понимаете как строить модели. Очень уж похоже на адептов заряженной воды Петрика и прочей лженауки. Или построение примитивной модели настолько сложно, что бесмысленно, или вы пишете о том чего совсем сами не понимаете. То вы говорите, что сами разработали свою версию модели, то говорите что не умете строить модели и отправляете к гуру. То говорите что она построена на логике Аристотеля, то что она напрочь её отрицает. То говорите что 200 лет её строят все ученые и математики, то оказывается что строят всего 10 лет два ГУРУ в России, которые только и знают как правильно. То вы говорите что дока в этой парадигме, то не можете построить простейший пример и обяснить его своими словами. Что-то тут не сходится.

                                  Я не могу построить модель примитивного процесса, потому что, чтобы объяснить Вам что я построил, понадобится еще 10 статей на хабре.

                                  Зачем нужна модель для понимания примитивного примера, которой нужно прочитать тонну книг? У любой модели есть назначение облегчить понимание для других людей предметной области(программистов, заказчика, аналитика).
                                  Если клиент приходит к вам с задачей, вы тоже скажете «я не могу построить вам модель, так как вы её вообще не поймете без тысячи часов у ГУРУ»? Или всех программистов для понимаения что вы там намоделировали вы тоже отправляете на месяц к ГУРУ в монастырь?

                                  P.S. Как говорил мой учитель высшей математики, если ученый не может доступно обяснить, чем он занимается, семилетнему ребенку — он шарлатан.
                                  • 0
                                    Я не объясняю, как строить модели. Это объясняет Агроскин, Я пытаюсь понять, как получить непротиворечивый язык для построения моделей. Такой, чтобы он удовлетворил мои потребности и делюсь этим с другими. Если Вас устраивает Ваш язык, я не пытаюсь Вас научить другому. Пользуйтесь им. Вопрос в том, что не у одного меня есть вопросы к существующим терминам ООП. Для решения этой задачи я пытаюсь разобраться с тем, что они значат и как построить модель без использования их.
                          • 0
                            Я уже пробовал пойти по этому пути (на другом примере). Конкретных ответов мне не дали, к сожалению.
                        • 0
                          Если МОЖЕТ, то ООП нарушает логику.

                          Нет. ООП не нарушает логику, в рамках которой построено ООП. Иными словами, внутренних противоречий в ООП в этом месте нет.
                        • +1
                          Не удержался и написал, это код на C# с комментариями.

                          // Класс «Слон»
                          class Elephant
                          {

                          // Общее число слонов — в рамках класса «Слон» эмулируем класс «Слоны»
                          private static int totalElephantCount;

                          // Имя слона — характеристика экземпляра
                          private string name;

                          // Конструктор экземпляра
                          public Elephant(
                          string name // имя слона — входной параметр
                          )
                          {
                          this.name = name;
                          }

                          // Имя слона — открытое экземплярное свойство только для чтения
                          public string Name
                          {
                          get { return this.name; }
                          }

                          // Экземплярный метод «Бежать» — заставляет слона бежать
                          public void Run()
                          {
                          // Здесь пишем код, который как-то обозначает, что слон бежит

                          // А вот тут зачем то мы обратились к данным, общим для всего множества слонов (класса «Слоны»)
                          // — читаем.
                          // Слон не должен знать эту информацию, если мы не не разрешили ему это через специальные конструкции
                          // Но прочитать статическое поле нам компилятор в любом случае разрешит
                          int count = totalElephantCount;

                          // А теперь отдельно взятый слон возьмет и вообще перезапишет число слонов в стаде
                          // (вопросы потокобезопасности вынесем пока за скобки — это схематичный пример)
                          totalElephantCount = 0;
                          }

                          }
                          • 0
                            !!! спасибо, супер!
                        • 0
                          А теперь правильный пример (упрощенный, код реального проекта будет сложнее):

                              // Класс "Слон"
                              class Elephant
                              {
                          
                                  // Имя слона - характеристика экземпляра
                                  private string name;
                          
                                  // Конструктор экземпляра
                                  public Elephant(
                                      string name // имя слона - входной параметр
                                  )
                                  {
                                      this.name = name;
                                  }
                          
                                  // Имя слона - открытое экземплярное свойство только для чтения
                                  public string Name
                                  {
                                      get { return this.name; }
                                  }
                                  
                                  // Экземплярный метод "Бежать" - заставляет слона бежать
                                  public void Run(
                                      int speed // скорость
                                  )
                                  {
                                      // Здесь пишем код, который как-то обозначает, что слон бежит
                                  }
                              }
                          
                              // Класс "Слоны" (фабрика слонов)
                              class Elephants
                              {
                                  // "Список слонов" - для упрощения его реализации используем готовый класс List<T>:
                                  private System.Collections.Generic.List<Elephant> elephantList;
                          
                                  // Конструктор класса
                                  public Elephants()
                                  {
                                      this.elephantList = new List<Elephant>();
                                  }
                          
                                  // Добавить нового слона в множество слонов
                                  public void AddNewElephant(
                                      string name // Имя слона
                                  )
                                  {
                                      this.elephantList.Add(new Elephant(name));
                                  }
                          
                                  // Общее число слонов
                                  public int TotalElephantCount
                                  {
                                      get { return this.elephantList.Count; }
                                  }
                          
                                  // Метод Run - завставляет бежать слона с индексом "elephantIndex" со скоростью "speed"
                                  public void Run(int elephantIndex, int speed)
                                  {
                                      this.elephantList[elephantIndex].Run(speed);
                                  }
                          
                              }
                          • 0
                            … и этот код прекрасно демонстрирует, что непротиворечиво реализовать задачу в терминах ООП можно.

                            QED.

                            PS Хотите, я этот ваш «правильный» код сломаю с точки зрения логики?
                            • 0
                              В моем понимании, должно быть не можно, а должно.
                              Т.е., в идеальной парадигме/платформе разработке первый пример не должен компилироваться, а второй должен.
                              И еще второй пример должен реализоваться проще, короче, «нативнее», чтобы не пришлось каждый раз плодить такой паттерн.
                              • 0
                                Т.е., в идеальной парадигме/платформе разработке первый пример не должен компилироваться

                                Аргументы? Должно быть запрещено любое обращение к статикам?

                                И еще второй пример должен реализоваться проще, короче, «нативнее», чтобы не пришлось каждый раз плодить такой паттерн.

                                Какой именно?

                                (ну а вообще, второй пример в .net нативно реализуется через Set. Причем с семантикой множества.)
                                • 0
                                  Аргументы? Должно быть запрещено любое обращение к статикам?

                                  Про аргументы я уже не раз писал,
                                  а вот насчет статиков, на мой взгляд, статик-поля должны быть разрешены только в таком качестве:
                                  readonly & immmutable.
                                  В этом случае в таких статиках можно будет реализовать только характеристики типа данных, не данные, общие для множества,
                                  и в этом случае, естественно, экземпляр должен иметь возможность их прочитать (как и сейчас экземпляр имеет информацию о своем типе — в C# это делается через this.GetType; да и про другие типы данных он экземпляр знает через typeof(T) — и это нормально).

                                  Какой именно?

                                  О котором не раз писал, и который сейчас привел — назовем его Метасущность (Объект — Список Объектов — Объекты).

                                  (ну а вообще, второй пример в .net нативно реализуется через Set. Причем с семантикой множества.)

                                  Вы про HashSet(T)?
                                  Здорово, что вы знаете про это.
                                  Однако, тут та же проблема: можно и должно.

                                  Один из участников дискуссии, насколько я понял, сторонник первого приведенного мною примера со статиками.
                                  Если мы с вами дадим ему задание, сильно нам поможет наличие в стандартной библиотеке класса HashSet(T)>?

                                  Поэтому хотелось бы решения проблемы можно и должно, и реализации парадигмы множества не через класс HashSet (пусть и стандартный), а через синтаксис языка.
                                  • 0
                                    Про аргументы я уже не раз писал,

                                    Я имел в виду «на основании каких формальных признаков компилятор должен дать ошибку». Но вы, в принципе, ответили — запись в статическое поле.

                                    а вот насчет статиков, на мой взгляд, статик-поля должны быть разрешены только в таком качестве: readonly & immmutable.

                                    Во-первых, вы только что запретили стандартную реализацию синглтона (и всех произвольных от него паттернов навроде Ambient Context). А во-вторых, каждый раз, когда вы хотите в ОО-языке сделать что-то immutable, задумайтесь — а вам точно не пора уйти в ФП?

                                    О котором не раз писал, и который сейчас привел — назовем его Метасущность (Объект — Список Объектов — Объекты).

                                    А вот неправда, у вас сейчас есть только объект и список объектов, причем для второй части паттерн встроен в любую разумную библиотеку — следовательно, поддержка уже есть.

                                    Вы про HashSet(T)?

                                    Да.

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

                                    И сильно вам это поможет от программиста, которого не устроит то, что предоставляет синтакисис языка, и который реализует собственный класс?

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

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

                                      О синглтоне я думал, но ведь вокруг него всегда столько споров, про него говорят даже «антипаттерн».

                                      А вот неправда, у вас сейчас есть только объект и список объектов, причем для второй части паттерн встроен в любую разумную библиотеку — следовательно, поддержка уже есть.

                                      А вот за это замечание спасибо.
                                      Пример простой очень.

                                      Сейчас — да, класс Elephants является всего лишь wrapper'ом (оболочкой) вокруг списка (List).
                                      Однако, добавьте в класс Elephants поля вида:
                                      — хозяин этого стада (множества) слонов;
                                      — место жительства этого стада;
                                      — да что угодно, в общем случая от предметной области зависит.

                                      И вы получите класс, вполне подпадающей под определение «Слоны» («Стадо слонов»).
                                      А в качестве «списка» (или «множества»?), кстати, действительно можно использовать не только List(T), но и тот же HashSet(T).

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

                                      Изначально речь шла о недостатках моделирования предметной области с помощью ООП.
                                      Считаю, что недостатки ООП здесь очевидны.
                                      Вполне можно подправить и существующую парадигму (тем более не такая уж она и догматичная — посмотрите на различия Delphi, C++, C++/CLI, Java, C#, VB.NET).
                                      В целом, конечно, речь идет о новой парадигме. От ООП мы лишь отталкиваемся.
                                      • 0
                                        О синглтоне я думал, но ведь вокруг него всегда столько споров, про него говорят даже «антипаттерн».

                                        Он, конечно, антипаттерн, но иногда он нужен в том или ином виде; а уж тем более — аналогично решаемые вещи типа наивного кэша.

                                        И вы получите класс, вполне подпадающей под определение «Слоны» («Стадо слонов»).

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

                                        А в качестве «списка» (или «множества»?), кстати, действительно можно использовать не только List(T), но и тот же HashSet(T).

                                        List(T) нельзя использовать в качестве множества, потому что он позволяет многократное включение одного и того же элемента.

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

                                        Нет, не очевидны. Есть недостатки вашей реализации неизвестной задачи. А по мере конкретизации задачи (как можно видеть буквально в вашем примере) ООП обратно отыгрывает свои позиции.
                                        • 0
                                          Очевидно, дискуссия подходит к логическому концу, т.к. очевидно, что мы говорим об один и тех же вещах, но с разных сторон:

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

                                          Об этом я говорил с самого начала: необходимость строить такую (мета)сущность считаю недостатком парадигм ООП и E-R.
                                          Слишком большой соблазн прямо в классе «Слон» начать плодить статик-поля, относящиеся к классу «Слоны» («Стадо слонов»). Со всеми вытекающими — об этом мы тоже говорили.

                                          List(T) нельзя использовать в качестве множества, потому что он позволяет многократное включение одного и того же элемента.

                                          Хотя в приведенном примере и не будет повторения (каждый раз добавляется в список новый «Слон»), то все верно:
                                          система должна быть масштабируемой, следует ожидать в будущем добавления метода, который будет не просто добавлять нового слона в список, а добавлять уже имеющегося слона, переданного вызывающей стороной;
                                          и здесь, чтобы не делать проверки самим на наличие экземпляра в списке (с потенциальными ошибками и уменьшением производительности), в случае использования стандартных классов, нужно использовать именно HashSet(T)
                                          (если же проверка все равно нужна — для отслеживания повторных попыток добавления, то HashSet это позволит сделать).
                                          • 0
                                            Об этом я говорил с самого начала: необходимость строить такую (мета)сущность считаю недостатком парадигм ООП и E-R.

                                            Это не метасущность! У нее есть свои собственные атрибуты, собственная идентичность.

                                            классу «Слоны» («Стадо слонов»).

                                            Слоны и стадо слонов — это две разные вещи.
                                            • 0
                                              Это не метасущность! У нее есть свои собственные атрибуты, собственная идентичность.
                                              С точки зрения теории множеств — да.
                                              С точки зрения ООП и E-R моделирования — формально и вне контекста обсуждаемой статьи — тоже да.

                                              Я уже писал, почему в контексте «моделируем сущность средствами ООП и реляционной модели непротиворечивым образом» мы получаем конструкцию, которую можно назвать (мета)сущностью.
                                              Хотите, берите в кавычки: создаем сущность с помощью паттерна «метасущность».

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

                                              Слоны и стадо слонов — это две разные вещи.
                                              У нас есть три сущности: «Слон», «Список слонов» (точнее, множество слонов — Set) и «Стадо слонов».
                                              По вашему, какую роль выполняет сущность «Слоны»?
                                              • 0
                                                Наличие самой метасущности — есть как раз тот камень, на который натыкаешься при проектировании данных при помощи ООП. Это то, обо что разбивается желание строить непротиворечивые модели. В лекции Агроскин упомянул тот факт, что структура метасущностей — не есть дерево. Если бы это было дерево, то ООП нам подходило для проектирования как нельзя лучше.Но на самом деле классификация устроена по другому принципу и описать ее при помощи метасущностей невозможно, разве что самые простые классификации. ООП не учит правильно классифицировать сущности и разруливать коллизии, при этом неизбежно возникающие. Как будто специально обходя этот острый угол стороной. Не думаю, что создатели ООП были настолько заторможены, что не увидели этот угол. Но тем не менее о нем не сказали).
                                                • 0
                                                  Наличие самой метасущности — есть как раз тот камень, на который натыкаешься при проектировании данных при помощи ООП.

                                                  Ну нет.

                                                  «Метасущность» в ООП может возникнуть в одном из двух вариантов. Либо речь идет о метапрограммировании, и тогда это детали реализации, которые аналитика не касаются, либо речь идет о требованиях, и тогда это проблема не ООП, а требований.
                                              • 0
                                                С точки зрения теории множеств — да.
                                                С точки зрения ООП и E-R моделирования — формально и вне контекста обсуждаемой статьи — тоже да.

                                                Вот видите? Никаких противоречий кроме тех, которые вы придумали.

                                                Я уже писал, почему в контексте «моделируем сущность средствами ООП и реляционной модели непротиворечивым образом» мы получаем конструкцию, которую можно назвать (мета)сущностью.

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

                                                достаточно сложной реализации в текущей парадигме непротиворечивой модели

                                                Один дженерик — это для вас сложно?

                                                самой возможности реализации противоречивой модели

                                                Вы не можете оставить инструмент достаточно мощным и одновременно не позволяющим сделать противоречивую модель.

                                                У нас есть три сущности: «Слон», «Список слонов» (точнее, множество слонов — Set) и «Стадо слонов».

                                                Есть две сущности — слон и стадо слонов. Список слонов — это не сущность вообще, это реализация связи между слонами и стадами.

                                                По вашему, какую роль выполняет сущность «Слоны»?

                                                Никакой. Ее тоже нет.
                    • 0
                      И знать тоже не должен.
                      Если мы моделируем войсковое соединение, то при таком подходе программист может так запрограммировать бойца (любого экземпляра типа данных «боец»), что тот будет знать о всем количестве войск.
                      Это, очевидно, неправильно

                      Не очевидно. Вы тут смешиваете «знать» в терминах программы и «знать» в терминах задачи. Не стоит моделировать бизнес-ограничения доступа в виде ограничений видимости в языке.

                      Ну и да, если задуматься, то в решении с множествами проблема приблизительно аналогичная.
                • 0
                  Вообще вы путаете «отдельно взятого слона» и «класс слонов». Класс слонов может работать со статическим полем, но вот «отдельно взятый слон», то есть через объект класса слонов нельзя работать со значением статического поля, если мы явно не пропишем ему эту логику. То есть класс слонов со всеми статическими и обычными методами это тип и множество всех слонов этого типа. А вот объект класса слон это уже «отдельно взятый слон», который не будет иметь знания об агрегирующих данных, если мы ему это не позволим.

            • 0
              Слон понятия не имеет о среднем по слонам?

              Не должен знать, с т.ч. зрения современных архитектур и шаблонов проектирования (паттернов).
              Однако, при наличии соответствующего статического поля у ООП-класса — знает.
              Именно поэтому я пишу, что статические поля у ООП-класса следует заводить только для описания типа данных, но никак не для определения данных, характеризующих множество объектов (средние значения, количество и прочие агрегирующие функции).
              И потому статические поля — только readonly и immutable должны быть.
              • 0
                Однако, при наличии соответствующего статического поля у ООП-класса — знает.

                Нее, он знает только в том случае если у него есть публичный не статический метод, позволяющий работать со статическим полем. Иначе объект класса слон не знает ничего о агрегатных функциях класса слон.
              • 0
                Статическое поле — это поле, назначение которого заключается в обеспечении наличия единого значения для всех экземпляров класса. Но стоит заметить, что статическое поле — это тоже свойство экземпляра класса, что следует из определения класса (совокупность объектов, которым присущи некоторые описанные классом характеристики). Отсюда, статическое поле «среднее по слонам» в классе Слон не должно быть, так как не является свойством экземпляра класса (среднее по слонам логически не может быть свойством объекта слон).

                В ООП все понятия четко определены:
                Класс — множество объектов, которым присущи свойства, описанные этим классом.
                Экземпляр — сущность, которая обладает свойствами, описанными классом.

                P.S. прошу прощения, не в ту ветку ответил
                • 0
                  Да вроде в ту ветку…

                  Отсюда, статическое поле «среднее по слонам» в классе Слон не должно быть, так как не является свойством экземпляра класса (среднее по слонам логически не может быть свойством объекта слон).

                  Смотрите, здесь на уровне семантики мы понимаем, что такое статического поле не должно быть у класса «Слон»?
                  То, что компилятор это допускает, это как раз и является одним из противоречий текущей парадигмы ООП.

                  Статическое поле — это поле, назначение которого заключается в обеспечении наличия единого значения для всех экземпляров класса.

                  А вот отсюда на первый взгляд следует, что у класса «Слон» можно завести поле «Общее число слонов»?
                  На мой взгляд — нет.
                  Если отвлечься от путаного термина «класс», и исходить из того, что класс в ООП — всего лишь тип данных, то…
                  А что описывает тип данных? — Набор атрибутов (свойств) и, в ООП это еще и поведение, экземпляров этого типа данных.
                  Свойство «Общее число слонов» не является свойством «Слона».
                  Очевидно, что это атрибут «Стада слонов», и для этой сущности в ООП нам нужно завести отдельный класс (тип данных).

                  Таким образом, в классе ООП не нужны статические поля, а значит, если мы хотим непротиворечивой модели, то их не должно быть, т.е. компилятор их не должен допускать
                  Единственное исключение, на мой взгляд, я уже писал — полагаю, допустимы readonly & immutable поля (а также константы), т.к. с помощью них можно задать дополнительные характеристики типа данных (не экземпляра и не «стада экземпляров»).
                  • 0
                    Таким образом, в классе ООП не нужны статические поля, а значит, если мы хотим непротиворечивой модели, то их не должно быть, т.е. компилятор их не должен допускать

                    Вам не приходило в голову, что классы в ОО-программе — не только сущности из модели?
                  • 0
                    Задача правильно выделить свойства абстракции кладется на девелопера. Конечно, было бы неплохо, чтобы компилятор проверял корректность отношения свойства к некотор сущности… Никаких противоречий в ООП нет. То, что компилятор не запрещает ситуации из серии «а создам-ка я статическое поле Общее по слонам в классе Слон» — не есть проблема ООП. Если противоречие и возникает, то это скорее всего неверно выделены свойства сущности при абстрагировании.

                    А вот отсюда на первый взгляд следует, что у класса «Слон» можно завести поле «Общее число слонов»?
                    На мой взгляд — нет.

                    Да, это я имел ввиду — нельзя завести такое поля. Точнее выражаясь, технически завести-то можно, а логически нет.
                    Для класса Слон статического поля общее по слонам не должно быть, так как просто-напросто такого свойства у слона быть не может.
                    • 0
                      Да, это я имел ввиду — нельзя завести такое поля. Точнее выражаясь, технически завести-то можно, а логически нет.

                      Можно пойти дальше и отменить private секции…
                      • 0
                        Private секции дат гарантию того, что клиент класса будет пользоваться интерфейсом абстрактно от внутреннего представления этого класса. А это дает определенные преимущества, например гарантию проверки всех инвариантов + адаптация к изменениям. Зачем же их отменять?
    • +1
      И ведь пишут в книжках и мануалах, что тот же статический конструктор класса инициализирует _тип данных_ (читай, не используйте его, например, для подгрузки данных из БД — инфы, характерной больше для множества уже созданных объектов, чем для самого типа).
      А потом удивляются, почему в случае ошибки чтения из БД (да еще в многопотоке) получаем ошибку «type initialization error» и программа вообще не может двигаться дальше.
      Правильно, у нас же ошибка связана не с, например, наполнением множества объектов, а с инициализацией типа данных, т.е. мы не имеем описания типа данных => не можем создать ни одного экземпляра (объекта). И именно поэтому среда исполнения не дает повторной возможности (попытки) проинициализировать тип — очевидно, что инициализация типа данных это вещь детерминированная, поэтому возможен только перезапуск программы (подавлять исключение бесполезно, как это любят делать неквалифицированные и неответственные программисты, => все равно не одного экземпляра не создадим, все равно перезапускать программу).
  • +2
    Аристотель считал, что у субъекта есть идея существования машин. Эта идея выражена в виде абстрактного типа объектов (машин), существующего в сознании у субъектов. Когда субъект смотрит на объект, он сравнивает то, что он видит, с тем образом, который есть у него в воображении (с типом машин), и, если находит схожие черты, то объект называет машиной, или экземпляром машины. Перечень схожих черт Аристотель назвал типом.

    Простите, но после Аристотеля было over миллион философов и ученых, почему вы считаете что теория созданная несколько тысяч лет назад единственная правильная на все времена? Возможно Аристотель считал что земля покоится на спине черепахи, а солнце вращается вокруг неё, мы должны также считать? Тут вы мне кажется просто используете знакомое всем имя, чтобы объявить некую теорию и терминологию априори единственной и верной.
    • 0
      Я вам больше того скажу: Аристотель не говорил того, что ему приписывает maxstroy.
      • 0
        Хм, достаточные ли у вас основания это утверждать? Для того чтобы утверждать такое нужно прочитать и понять всего Аристотеля, так что прошу подтверждения, действительно ли Вами прочитан весь Аристотель
        • 0
          Чтобы это опровергнуть, достаточно привести цитату, где Аристотель такое утверждает.

          (а я да, я еще витка два назад просмотрел «Категории», к которым, собственно, и отсылает maxstroy, и там Аристотель говорит о первых и вторых сущностях, а не о типах и экземплярах. Аристотель вообще не мог использовать слово «экземпляр», потому что оно латинского происхождения, а Аристотель писал по-гречески. Более того, Партридж, на которого ссылается maxstroy, тоже, говоря об Аристотелевской парадигме, использует термины «первичная и вторичная субстанция» (primary and secondary substance))
          • 0
            Аристотель, конечно, не говорил про типы. Термины тип и экземпляр типа родились позже под действием логики Аристотеля. И они стали отражением способа мышления. Если мы говорим экземпляр, то сразу надо искать тип этого экземпляра. Потому что экземпляр предполагает объект из ряда себе подобных. Что значит подобных? Это значит, что существует субъект, у которого в сознании эти объекты выглядят похожими. Похожими их делает с точки зрения Аристотеля тип объектов, или первичная сущность, как он ее называл.

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

            Если речь идет о классах, то в класс входят объекты. Класс описывается только одним способом — перечислением объектов, в него входящих. Почему? Если сказать. что признаками, то получится что никто и никогда не может сделать ошибку. И положить помидор вместе с яблоками в одну корзину. Но такое случается и тогда объекты класса, который лежит в корзине, будут обладать разными свойствами, но тем не менее, образовывать классом. Для рассуждений мы часто используем способы описания объектов одного класса. Это некий признак, который говорит нам о том, чем отличаются объекты данного класса от всех остальных объектов.

            Мы можем обратить внимание, что объекты внутри класса чем-то похожи друг на друга. Мы можем определить это свойство и создать класс объектов с таким свойством. Но фокус в том, что в этот класс войдут все объекты с таким свойством, ВСЕ! В этом фундаментальное отличие логической парадигмы от ООП и Аристотелевских типов.
            • +1
              Аристотель, конечно, не говорил про типы. Термины тип и экземпляр типа родились позже

              QED.
          • 0
            По причине того, что в современных представлениях под типом понимается модель, под объектам — объекты, а под классами — классы, я не вижу смысла тащить термины тип и экземпляр в современные модели. А. если тащить, то помнить, откуда ноги растут: если употребляешь термин экземпляр, то будь добр сообщить нам о типе объектов. В итоге аналитик, который использует термины тип и экземпляр начнет сам себе противоречить, потому что типы противоречивы по своей природе. И тогда надо будет отбрасывать все эти термины и переходить на термины объекты и классы. При этом мы можем говорить об описаниях объектов класса или об описании класса объектов, Но термин экземпляр исчезнет как туман. Останутся объекты и классы объектов
            • 0
              я не вижу смысла тащить термины тип и экземпляр в современные модели.

              Тут ситуация двоякая. Тащить термины «тип» и «экземпляр» в инструментарий моделирования я смысла не вижу (термин «экземпляр» там вообще низачем не сдался, термин «тип» слишком неоднозначен). Но при этом если в бизнесе есть «тип» (например, «тип документа» как его простой атрибут) или «экземпляр» (например, «экземпляр договора» как тот конкретный комплект бумажек, который остается у каждой стороны), то в модели они оказаться должны.
              • 0
                Я, когда разговариваю с заказчиком, имею ввиду все смыслы, которые могут быть вложены в любой из терминов, но в модели термин тип не будет участвовать никогда. Потому что он из той логики, которая дает сбой. Вместо термина тип документа я использую термин класс документов и это будет равносильное утверждение. Тип документов «договор», экземпляр этого типа документов — конкретный документ, у меня будет звучать так: данный объект относится к классу информационных объектов, подклассу — договора, И мне понятно, и нет противоречий
                • 0
                  но в модели термин тип не будет участвовать никогда

                  Даже если им пользуется заказчик?

                  Потому что он из той логики, которая дает сбой

                  Он не из логики, он из бизнесовой системы терминов.

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

                  Нет, не будет. «Письмо» или «распоряжение» — это не класс документа в документообороте, это тип документа. Так уж устроен конкретный регламент. А классы там, внезапно — первый, второй и третий.

                  Пожалуйста, посмотрите на мои примеры еще раз, они как раз об этом.

                  • 0
                    Я говорю не о том, как нам хотелось бы, а о том, как будет непротиворечиво. Если Вы строите модели которые не подлежат расширению, то нет и проблем — стройте себе типы. Но как только мы строим сложные расширяемые конструкции, мы переходим к классам. Это доказано математиками и неизбежно как воздух
                    • 0
                      Это доказано математиками и неизбежно как воздух

                      Дайте ссылку на твердое доказательство математиками, что моделирование реального мира возможно только с помощью классов. Если вы математик, вы должны знать, что говорить ДОКАЗАНО, можно только тогда когда у вас есть ТОЧНОЕ МАТЕМАТИЧЕСКОЕ доказательства того или иного факта. Иначе это только ваша собственная ТЕОРИЯ.
                      • 0
                        Я привел две книги, в одной из них — доказательство, а в другой — решение и построение
                        • 0
                          Я говорил о МАТЕМАТИЧЕСКОМ доказательства. Вы не понимаете что это такое?
                          • 0
                            У криса строгое математическое доказательство от противного. Его, кстати, мой сын рассказывал на докладе по математике и получил первое место. так что математики проверили.
                            • 0
                              Какие математики? В школе учители математики? Не сомневаюсь, если бы вы сказали что защитили диссертацию доктора наук и вам поверили, это худо бедно могло сойти за вашу точку зрения.
                              • 0
                                Ну хорошо, тогда мы возвращаемся к истокам. Если Вы пожелаете, Вы найдете доказательство, благо ссылки я дал. Если не хотите искать, то даже указание на страницу Вам не поможет. Вы все равно будете ревностно защищать свою позицию. Это, к сожалению, я из своего опыта говорю. Нет смысла убеждать человека в том, в чем он не хочет быть убежден
                            • 0
                              Можете дать точную ссылку?
                              • 0
                                www.youtube.com/watch?v=Ioi68tNLmYw Это сегодня Виктор оставил.
                                • 0
                                  Ну нет, так не пойдет.

                                  Вы пишете:
                                  У криса строгое математическое доказательство от противного. Его, кстати, мой сын рассказывал на докладе по математике и получил первое место. так что математики проверили.
                                  ответить


                                  Я так понимаю, речь идет о Партридже. И я так понимаю, что если ваш сын это рассказывал, то вы не сегодня про это узнали. Так можно точную ссылку, где у Партриджа строго математическое доказательство от противного?
                                  • 0
                                    В том месте, где Крис показывает, как атрибутная модель схлопывает иерархию типов. И получается, что часть типов остается типами, а часть превращается в атрибуты. Это и Агроскин приводит в пример.
                                    • 0
                                      Пожалуйста, скажите страницу или хотя бы главу. У меня второе издание, 2005, BORO Center
                          • 0
                            Агроскин приводит одно из таких в своей лекции.
                    • 0
                      Я говорю не о том, как нам хотелось бы, а о том, как будет непротиворечиво.

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

                      Если Вы строите модели которые не подлежат расширению, то нет и проблем — стройте себе типы.

                      Все-таки, вы не понимаете, о чем я. Я не «строю тип», я фиксирую в модели тот факт, что заказчик в своем бизнес процессе разделяет документы в документообороте на типы — и это используемая им терминология — и этот «тип» является просто справочным атрибутом сущности «документ», не влияющим ни на что (ни на атрибутивный состав, ни на бизнес-процесс, ни на модель доступа).

                      Это доказано математиками

                      Так же, как Аристотель говорил о типах и экземплярах?
                      • 0
                        Если Вы фиксируете типы документов, то может наступить момент. когда модель станет противоречивой. Об этом в лекции Агроскина есть (ссылку он дал). Типы не обеспечивают непротиворечивость модели при ее расширении
                        • 0
                          То есть тот факт, что я фиксирую, что у документа может быть красная обложка или синяя обложка, может привести к тому, что модель станет противоречивой?
                          • 0
                            Посмотрите Агроскина. Он об этом говорит очень доходчиво
                            • 0
                              Я дискутирую с вами, а не Агроскиным. Вы за собственные утверждения не отвечаете?
                              • 0
                                Вы просите доказать теорему Ферма. Есть математики, которые знают. как ее доказать. Их человек пять — десять. Они проверили. Мы им доверяем. Вы просите докажи! Или отвечай за свое слово. Я отсылаю Вас к источнику, у которого я почерпнул эти знания. Это на мой взгляд — достаточно.
                                • 0
                                  Тогда хотя бы приведите конкретную атрибутированную цитату, подтверждающую ваши слова.
                                  • 0
                                    Это требует обдумывания. Сходу я не могу сейчас придумать кейс. Поэтому предложил Вам посмотреть лекцию и подумать самостоятельно. Это хорошее упражнение.
                                    • 0
                                      Ээээ, стоп. Зачем мне кейс? Я попросил конкретную цитату, где авторитет на которого вы ссылаетесь, утверждает то же, что и вы сейчас.
                                      • 0
                                        Про красные обложки он не говорит)). Он говорит про аналогичные проблемы
                                        • 0
                                          Какие «аналогичные проблемы»? Ссылку, ссылку.
                                          • 0
                                            • 0
                                              С какого момента (с точностью до пяти минут хотя бы)?
                                              • 0
                                                смотреть все! Теорема Ферма за одну минуту?
                                                • 0
                                                  Я прошу не доказательство, а утверждение (не ваше, а человека, на которого вы ссылаетесь). Доказательство, если оно меня заинтересует, я потом найду сам.
                                                  • 0
                                                    Определения класса, типа, атрибута 19 минута. парадокс на 23 минуте
                                                    • 0
                                                      Забавно, насколько объяснение один в один совпадает с Партриджем. Включая проблему, которая у Партриджа описана в главе 5.1, Staff Example. Как это решается, описано там же. Противоречия в модели возникают из-за ошибок анализа и снимаются при консолидации моделей.
                                                      • 0
                                                        решать их можно. Вопрос в том, что вопрос возник. А не должен был, если бы парадигма была непротиворечивой
                                                        • 0
                                                          Вы думаете, парадигма, основанная на множествах вместо атрибутов, не может породить противоречий, когда разные люди независимо строят модели одной и той же задачи? Может и породит. И их тоже придется снимать.
                                                          • 0
                                                            Я не математик настолько, чтобы глубоко анализировать эти задачи. Я просто доверяю тем математикам, что думали над этой задачей довольно долго.
                                                            • 0
                                                              А я не доверяю. Потому что, с одной стороны, проблема, которая описана в докладе, имеет решение (описанное даже у Партриджа), а с другогой стороны, подход с множествами имеет аналогичную проблему (легко демонстрируемую).
                                                              • 0
                                                                Я не нашел проблемы с множествами.
                                                                • 0
                                                                  Самый простой пример: два независимых разработчика модели вводят два множества «цвет» с конкретными подмножествами «красный» и «зеленый». Однако почему-то один и тот же объект в одном множестве «цвет» принадлежит к подмножеству «красный», а в другом — к «зеленый». Внезапно, противоречие.
                                                                  • 0
                                                                    Они не могут ввести два множества «цвет» — это невозможно.Если это сделать — то получится задвоение данных. Это все равно, что в таблице сделать две записи об одном факте. Можно создать класс цвет, класс красный и класс зеленый. Один предмет может принадлежать классу цвет, классу зеленый, но не принадлежать классу красный. Это вроде очевидно
                                                                    • 0
                                                                      Они не могут ввести два множества «цвет» — это невозможно.

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

                                                                      (да, формальное определение взаимоисключающих классов тоже обещает быть веселым)
                                                                      • 0
                                                                        Два разработчика независимо ввели информацию об одном факте в систему. Я правильно понял проблему? кто им позволил? Кто позволит двум независимым операторам внести информацию об одном договоре? Тот и позволит внести два независимых класса с одним смыслом. От дураков не застрахован никто
                                                                        • 0
                                                                          Ну то есть ограничение лежит не в самой модели, а за ее пределами. Вот вам и источник противоречий.

                                                                          Повторюсь, я могу к примеру из доклада сказать то же самое: «кто позволил трем студентам нарисовать несовпадающие модели данных для одной сущности?»
                                                                          • 0
                                                                            Ограничений нет, потому что системы нет. Я повелся и тоже склеил мозги)). Нет класса красный в системе. Он есть в природе. А в системе есть объект, его моделирующий. А модель не всегда бывает корректна. Она может содержать ошибки оператора, например, но класс в природе не содержит ошибок — он- вот и я показываю на него пальцем
                                                                            • 0
                                                                              Термин «красный» — это уже модель. Соответственно, все наше обсуждение — это всего лишь спор о том, какая модель, атрибутивная («машина красная») или множеств («машина принадлежит ко красному множеству») менее противоречива.
                                                                      • 0
                                                                        Кстати, а при чем тут система? Класс красный не существует в системе. он существует в природе. В системе мы моделируем этот класс, но не создаем его. Это надо помнить!
                                                                        • 0
                                                                          (Оооо, вы хотите поговорить со мной о том, какие цвета существуют в природе? Вот есть предмет, русский называет его красным, англичанин — red. Какой цвет существует в природе — красный или red?)

                                                                          А я и говорю про модель: два разработчика независимо строят модель. И в модели возникает противоречие.
                                                                          • 0
                                                                            Об этом Агроскин говорит в начале лекции — лб общем глоссарии. Без него вы ничего не построите))
                                                                            • 0
                                                                              Если есть общий словарь, то описанной для атрибутивного подхода проблемы возникнуть не может, поскольку общий словарь описывает общий набор атрибутов. Все, нет противоречий (потому что они как раз общим словарем и снимаются).
                                                                              • 0
                                                                                Ой, как же! У кого-то атрибуты, у кого-то типы и все это указывает на один объект в природе. Было бы легко, если был атрибут у всех атрибутом. Но в том и загвоздка, что вы одной системе — это атрибут, а в другой — тип, а в третьей — значение, а в четвертой — связь. И еще бог знает как и чего! Ведь модель не в логической парадигме неоднозначна!
                                                                                • 0
                                                                                  Общий словарь существует как раз для того, чтобы не было «у кого-то». У всех как в общем словаре.
                                                                                  • 0
                                                                                    Я, извините, не способен отследить вашу дискуссию, немотря на неоднократные упоминания моей фамилии.

                                                                                    Однако я, разумеется, согласен с тем, что логическая методология не может гарантировать одинаковости моделей.

                                                                                    Модели в логической парадигме будут, тем не менее, более схожи, чем модели людей, не знакомых с ней вовсе, и работающих исключительно на знании Аристотеля, знакомстве с листом бумаги, экселем, или даже стандартным курсом СУБД, начинающимся с рассказа про декартово произведение.

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

                                                                                      Насколько я понимаю, именно поэтому тот же 15926 — это не только описание логики, но и — сразу же — предоставление базового набора классификаций, и изначально заложенная цель создать единый набор классификаций (vs независимый у каждого провайдера). Таким образом, имея униформную логику и предопределенный набор классификаций, мы радикально уменьшаем пространство возможных вариантов моделирования конкретной области (что тоже бонус).
                                                                                      • 0
                                                                                        Именно так. Только используется термин онтология, а не классификации (и не общий словарь) — так как унифицируются не только деревья понятий, но и многообразие отношений тоже выстраивается в деревья, хотя и менее развесистые.
                                                                                        • 0
                                                                                          Я стараюсь в этом посте не использовать термин «онтология», чтобы избежать путаницы из как минимум трех разных понятий. А так — да, я и предполагал, что унифицируются все части модели.
                                                                                • 0
                                                                                  сорри, модель в логической парадигме однозначна. А вот в других — нет
                                                                                  • 0
                                                                                    Это утверждение ничем не подтверждено. Я показал вам, как создать неоднозначность в модели, основанной на множествах.
                                                                                    • 0
                                                                                      Вы думаете, что она неоднозначна. Это я понял, но сам не увидел. Как может быть неоднозначна предметная область? Она либо либо. Мы не рассматриваем вероятностные пространства, конечно. Хотя и это укладывается в множество моделей, но с разной вероятностью
                                                                                      • 0
                                                                                        Так, стоп.

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

                                                                                        При чем тут вообще предметная область?

                                                                                        (впрочем, предметная область тоже бывает неоднозначной, если уж совсем честно)
                                                                                        • 0
                                                                                          Спасибо большое за вопрос о модели! Мы сегодня только его разбирали! У нас в сознании есть модель мира. Эта модель для нас и есть мир. Удивительно, но для большинства людей мир — это сумма их представлений и не больше. Представление этой модели в натуре, или частей этой модели происходит путем применения к модели нотации. В своей статье, посвященной информационным объектам, я это рассмотрел подробно. habrahabr.ru/post/246313/. Поэтому Вы должны различать модель и ее представление. ИМХО, Вы называете представление модели моделью модели
                                                                                          • 0
                                                                                            Я называю моделью то же, что и большая часть остальных людей. Это помогает мне быть понятым и понимать их.

                                                                                            А вот что вы называете моделью, когда пишете «Если Вы строите модели которые не подлежат расширению, то нет и проблем — стройте себе типы» — это к вам вопрос.
                                                                • 0
                                                                  Кстати, вот любопытный вопрос. Как в подходе с множествами описывать количественные характеристики (например, стоимость)? Тоже через множества? Эта книга принадлежит к множеству книг, стоящих 15 рублей? Как, в таком случае, просуммировать стоимость всех книг на складе?
                                                                  • 0
                                                                    Эти конструкции описаны во второй книге. Как строить температурные шкалы, денежные и так далее. На сегодняшний день описаны много сущностей)). Я не знаю сколько, потому что три года назад их было 50000 а сейчас — затрудняюсь сказать. Это библиотека сущностей, она пополняется.
                                                                    • 0
                                                                      В какой «второй книге»?
                                                                      • 0
                                                                        Мэтью Веста. Он рассказывает некоторые принципы, заложенные в ИСО 15926, и критикует некоторые из них. Но на самом деле я лишь проводник к тем гуру, которые в России являются адептами этого направления моделирования: Агроскину и Левенчуку. На этом можно остановиться и рекомендовать их статьи и их видеоматериалы. А при погружении, и курсы, которые они читают
                                                                        • 0
                                                                          В какой именно? У него 43 публикации.
                                                                          • 0
                                                                            Я в статье давал ссылки Вы читали статью?
                                                                            • 0
                                                                              Читал. Извините, не смог вычленить корректную ссылку сразу, смешалась с Партриджем.
                                                                              • +1
                                                                                К сожалению, в Safari Books Online эта книжка битая. Можете объяснить своими словами или дать ссылку на публичную статью?
                                                                                • 0
                                                                                  Сорри, что не ответил. Я сейчас далеко от рабочего места. Итак, если ссылка битая, то могу выслать. Но смысл построений такой. Берется предмет. Все остальные предметы сравниваются с ним на предмет больше-меньше. И делятся на два класса объектов: больше и меньше образца. Это примитивное разделение на два класса. Если мы пользуемся более точными шкалами, то предметы разбиваются на большее количество классов. Каждый класс при этом больше какого-то предмета, но меньше другого. так образуются шкалы
                                                                                  • 0
                                                                                    То есть единственный способ, которым модель, построенная на множествах, может сказать, что у какого-то объекта, скажем, цена — 15 рублей, это (при точности измерения 0.01 рубля) создать два дополнительных объекта, о которых мы знаем, что их цена — 14.99 и 15.01, и включить наш предмет в класс «больше одного образца и меньше другого образца» (ну или включить в два класса, один «меньше образца», другой «больше образца», смысла это радикально не меняет). Так? Или я неправильно понял?
                                                                                    • 0
                                                                                      вопросом будет то, что субъект вкладывает в понятие 15 рублей. Он может создать класс объектов, стоимость которых 15 рублей и это будет более правильным решением. Все-таки оценка объектов происходит с точностью до копейки. Этот принцип построения шкалы отличается от построения шкалы пространственных размеров, времени и температуры. Однако, если в нашей модели мира мы исчисляем стоимость пропорционально весу золота, то картина резко меняется. Поэтому надо исходить из того, что в данном обществе понимается под ценностью
                                                                                      • 0
                                                                                        (Ээээ… мы же, вроде бы, говорили, что логическая модель позволяет моделировать бизнес ровно одним способом, и этот способ правильный?)

                                                                                        Окей, три способа (X — интересующий нас объект, A — образец со стоимостью 14.99, Б — образец со стоимостью 15.01):
                                                                                        — X принадлежит классу «стоимость 15 рублей»
                                                                                        — X принадлежит классу «больше А и меньше Б
                                                                                        — X приналежит классу „больше А“ и классу „меньше Б“

                                                                                        Все правильно? Какие-то фундаментально отличающиеся способы есть?
                                                                                        • 0
                                                                                          Денежная шкала в конкретных единицах (рулях, например) разбивает объекты на два класса: те, которые можно оценить и те, которые оценивать бессмысленно. Далее, денежная шкала разбивает объекты на классы одинаковой стоимости. Таких классов очень много. В каждом из них находятся много объектов. В зависимости от точности денежной шкалы мы получаем разные классы объектов.
                                                                                          • 0
                                                                                            То, что вы описываете, сводится к первому описанному мной случаю — «X принадлежит классу „стоимость Y“» (понятно, что таких классов много). Я правильно понимаю, что это правильный способ описывать стоимости (и аналогичные им количественные характеристики объектов) в предлагаемой вами логической парадигме?
                                                                                            • 0
                                                                                              Если не считать того, что сам термин стоимость тоже имеет описание, то да — этол верный способ классификации объектов. Вопрос лишь в том, что он имеет отличия в зависимости от сообществ. Это надо добавить в модель. Мы берем сообщество, в нем описываем классы объектов, но в другом сообществе мы получим другие классы, но с тем же рублем
                                                                                              • 0
                                                                                                (Примем за данность, что сообщество в рамках задачи ровно одно.)

                                                                                                Следующий вопрос: вот есть два класса, «стоимость Y» и «стоимость Z». Чем они отличаются друг от друга? Только идентификатором или чем-то еще?
                                                                                                • 0
                                                                                                  Они отличаются объектами, их составляющими. Если найдется объект, который принадлежит и тому и другому классу — это коллизия. Такого быть не может
                                                                                                  • 0
                                                                                                    Они отличаются объектами, их составляющими.

                                                                                                    Это рекурсия. Стоимость объекта определяется по классу, к которому он принадлежит, но класс определяется объектами в него входящими. Нет, что-то не так.

                                                                                                    Все-таки, вот у меня есть объект. Вероятно, я могу, имея объект, получить информацию о всех классах, в которые этот объект входит (иначе я не узнаю, что машина красная). Предположим, что объект, который у меня есть, относится к некоему классу, входящему в иерархию классов стоимостей (т.е., утверждающему, что стоимость равна x). Как мне понять, чему равна его стоимость — 15 или 20? Как мне отличить друг от друга два класса?
                                                                                                    • 0
                                                                                                      Стоимость объекта определяется по классу. Верно. Класс определяется объектом. Тоже верно, и это понятно: книга лежит на столе, а стол держит книгу. У них отношения такие. Класс содержит объект, объект содержится в классе. Следуя Вашей логике, все объекты, которые имеют отношения (выше-ниже, толще, тоньше) — это рекурсивные определения? ИМХО, — это не рекурсия. Это отношения между объектами.
                                                                                                      • 0
                                                                                                        Так, тогда конкретизируем задачу до прикладной. Есть объект учета (здание, помещение или земельный участок, если интересно). У объекта есть учетная стоимость (чтобы не было вопросов о ее однозначности — это та стоимость, которая указана в документах, которые сейчас внесены в бумажный реестр). Заказчик хочет видеть печатную форму, где будет написано следующее:

                                                                                                        «Здание — 15 млн руб» (дальше по одной строчке на каждый объект)

                                                                                                        Как именно строится модель для решения этой задачи? Какие классы и объекты она содержит?
                                                                                                        • 0
                                                                                                          надо понимать, что мы имеем дело не с моделью в системе? я много раз об этом говорил. Это понятно? Мы берем класс объектов стоимостью 15. Этот класс не в системе! Он в натуре! То, как мы замоделируем этот факт в системе зависит от тех средства, которые мы используем. Мы можем создать табличку, в которую будем помешать названия объектов( зданий, полей, заводов), стоимостью 15, можем создать таблички для каждого класса объектов: зданий, полей, и заводов и писать в этих табличках строки с цифрой 15. реализовать эту модель в БД можно многими способами. Но в реальности мы будем иметь всего один класс объектов — стоимостью 15
                                                                                                          • 0
                                                                                                            надо понимать, что мы имеем дело не с моделью в системе? я много раз об этом говорил. Это понятно?

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

                                                                                                            (речь пока идет об аналитической модели, т.е. о том, что пишется в требованиях)
                                                                                                            • 0
                                                                                                              Модель существует у нас в голове. В натуре мы создаем описание этой модели при помощи нотации. Мы берем нотацию, которая используется в логической парадигме (их две, насколько я помню. одна — это express-g, а название второй я не помню, но выглядит она, как в стандарте ИСО 15926) Я не на рабочем месте и у меня нет под рукой этого стандарта. Модель, построенная в этой нотации и указывается в требованиях к системе.
                                                                                                              • 0
                                                                                                                То есть описать эту модель в требованиях обычным русским языком невозможно?
                                                                                                                • 0
                                                                                                                  Она описывается языком, она описывается в виде рисунка, она описывается языком RDF.
                                                                                                                  • 0
                                                                                                                    Если она описывается русским языком, то опишите, пожалуйста, модель для данного случая русским языком. Я специально выбрал самый простой возможный случай.
                                                                                                                    • 0
                                                                                                                      я сказал самый простой кейс, без развертки его на всю страницу. Объект Х принадлежит классу объекктов стоимостью 15
                                                                                                                      • 0
                                                                                                                        Ладно, подойдем с другой стороны.

                                                                                                                        Та же самая задача, заказчику интересна табличка «объект — стоимость», внизу которой указан итог — т.е. общая стоимость всех объектов в таблице. Как выразить это требование заказчика в терминах логической парадигмы?
                                                                                                                        • 0
                                                                                                                          существует класс объектов, каждый из которых связан со своим классом стоимостей. Полученный класс объектов тоже можно отнести к классу объектов, имеющих стоимость. Получится, что можно оценить не только объекты, но и классы объектов
                                                                                                                          • 0
                                                                                                                            Как получить сумму стоимостей из объектов, входящих в множество?
                                                                                                                            • 0
                                                                                                                              В предметной области нельзя получить стоимость множества предметов. Множество предметов оценивается не как сумма стоимостей его предметов. Стоимость множества — есть стоимость множества. И точка. Вы можете построить табличку, связывающую стоимость любого подмножества множества товаров со стоимостью этого множества. И эту зависимость оформить в виде формулы, но в любой формуле есть область определения и область значения. Область определения будет все подмножества данного множества, а область значений — элементы множества стоимостей
                                                                                                                              • 0
                                                                                                                                Не, не так. В предметной области, есть объекты учета, для каждого известна стоимость, общая стоимость всех учтенных объектов равна сумме стоимостей каждого из объектов. Так это в предметной области, так это понятно заказчику и разработчику.

                                                                                                                                Теперь, собственно, вопрос: как же это непротиворечиво и единственным образом выразить в терминах логической парадигмы? Не тот факт, что для каждого объекта известна стоимость, а тот факт, что стоимость множества объектов равна сумме их стоимостей?
                                                                                                                                • 0
                                                                                                                                  Общая стоимость не равна сумме стоимостей! Это частный случай. В реальности скорее исключение. Если Вы проектируете свою модель исходя из этого, Вы априори получаете проблемы при расширении, когда столкнетесь с реальным положением вещей (оптовой ценой и прочими ништяками)
                                                                                                                                  • 0
                                                                                                                                    В заданной предметной области это универсальное правило, которое используется для вычисления общей стоимости для определенного класса множеств. Иными словами в этой предметной области общая стоимость (для множеств класса «учтенные объекты») всегда равна сумме стоимостей.
                                                                                                                                    • 0
                                                                                                                                      Вы помните определение функции? это множество объектов: область определения, область значения и пары соответствий между элементами области определений и элементами области значений.Вот ровно в соответствии с этим определением и строится модель
                                                                                                                                      • 0
                                                                                                                                        Вот я и хочу увидеть такую функцию, которая бы выражала описанное выше правило. Область определения — множество множеств «учтенные объекты», область значений — множество стоимостей (whatever they are), а вот как описать алгоритм, переводящий одно в другое?
                                                                                                                                        • 0
                                                                                                                                          Функция может иметь ассоциацию с правилом, а может и не иметь. Наличие правила — не есть определение функции, а есть доп опция, которая может быть, а может и не быть. В предметной области мы можем указать связи между элементами множеств, а то, что эти связи подчиняются аналитическому закону, мы отобразим связью ассоциация между связями и законом.
                                                                                                                                          • 0
                                                                                                                                            Еще раз. Моделирование предметной области в ИТ нужно для того, чтобы решать задачи. Есть конкретная задача — заказчик хочет видеть общую стоимость всех учтенных объектов. Задача, будем честными, тривиальная. Как ее описать, скажем, используя модель, опирающуюся на атрибутивный подход — понятно и прозрачно.

                                                                                                                                            Как эту же задачу описать в терминах логической парадигмы? Как именно в требованиях, опирающихся на логическую парадигму описания предметной области, формулируются конкретные правила, оперирующие этими объектами?
                                                                                                                                            • 0
                                                                                                                                              Я бы рекомендовал Вам обратиться с этим вопросом к Агроскину Виктору. Или пройти курсы обучения, которые он проводит.
                                                                                                                                              • 0
                                                                                                                                                То есть вы не способны это показать?
                                                                                                                                • +1
                                                                                                                                  Кажется, я вклиниваюсь в чужую дискуссию, но хочется высказаться.
                                                                                                                                  Не могу найти в дискуссии о какой предметной области идет речь, но от слов есть объекты учета как-то повеяло скучными вещами типа ERP-систем.

                                                                                                                                  Штука в том, о какой стоимости вы говорите.
                                                                                                                                  Предположим, вы торгуете спортивными товарами в розницу, вам в августе дистрибутор поставил 100500 единиц учета, каждой единице вы прописали у себя в 1С розничную стоимость,
                                                                                                                                  и предполагаете, что сумма стоимостей единиц и есть стоимость всего множеств единиц.

                                                                                                                                  Т.е., вы рассчитываете, что к концу сезона вы все это добро продадите по назначенной вами цене, и получите искомую, заранее вычисленную сумму.

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

                                                                                                                                  Чуть более сложное:
                                                                                                                                  продолжаете торговать в розницу, а уже в декабре нужно делать скидки, т.е. вводить поправку с той сумме, которую вы высчитали изначально.
                                                                                                                                  даже если вы скажете, что скидки и тот объем товара, который пойдет со скидками, заранее прогнозируется, и цены единиц (из которых складывается общая сумма заранее разбиваются на группы (первым 100 шт. номенклатуры XXX в ERP назначена цена Y руб, а следующим 100 шт. номенклатуры XXX — Y-Z руб.),
                                                                                                                                  то точно вы это все равно не спрогнозируете, тем более, что в декабре внезапно изменился курс, и вы думаете, что делать то — повышать цены, чтобы с летнему сезону закупить летние коллекции по новой цене, или наоборот, резко снижать цены, т.к. продать бы то, что уже есть, т.к. часть покупателей вдруг потеряла интерес к покупкам.

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

                                                                                                                                    Нет, это еще более скучная вещь типа реестрового учета.

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

                                                                                                                                    Я специально брал максимально простой сценарий, основной особенностью которого было то, что он оперирует количественными, а не качественными признаками.
                                                                                                                                    • 0
                                                                                                                                      Т.е., у вас несколько стоимостей множества, таких видов?:
                                                                                                                                      — «идеальная стоимость», исходя из рекомендованной розничной цены;
                                                                                                                                      — «прогнозируемая стоимость», исходя из оценки, какая часть товара будет продана со скидкой в конце сезона;
                                                                                                                                      — «форс-мажорные стоимости», исходя из оценки, за сколько весь товар можно продать оптом (в начале, в середине и конце сезона",
                                                                                                                                      — «форс-мажорная стоимость», исходя из оценки, если курс резко измениться в X, X, Z раз.

                                                                                                                                      И для каждого случая вы высчитываете среднюю стоимость единицы номенклатуры, умножаете на кол-во единиц номенклатуры, суммируете полученные суммы по всем номенклатурам, и получаете стоимость множества. Так?
                                                                                                                                      • 0
                                                                                                                                        Нет. У меня нет продаж, у меня есть имущество, принадлежащее конкретному владельцу, и владелец хочет знать его суммарные характеристики, в том числе — общую стоимость (как вообще, так и в разбиении по тем или иным группам).

                                                                                                                                        И с точки зрения владельца (и пока мы так и не обнаружили ни одного противоречащего этой точке зрения случая) общая стоимость для множества равна сумме стоимостей всех элементов множества (хотя, конечно, владелец не оперирует терминами «множество» и «элемент»).

                                                                                                                                        Не нравится этот пример, могу другой привести. Когда в адрес некоего получателя осуществляются платежи, то общая сумма, которая должна быть получена получателем, равна сумме осуществленных платежей (да, я опускаю комиссии и прочие подобные вещи, но к ним как раз применима та же логика, поэтому они не влияют на аргументацию).
                                                                                                        • +1
                                                                                                          Вот подробная модель стоимости индивида, сделанная по стfylfhne ШЫЩ 15926 15926.org/templatespecs/IN-INDPTY-03.xml
                                                                                                          • 0
                                                                                                            Я правильно понимаю, что в этой модели ExpressReal — это как раз литерал, конкретное представление числа?
                                                                                                    • 0
                                                                                                      объект может не входить ни в один из классов, кроме одного — класса объектов, иначе мы не поймем, что это объект. Далее каждое свойство объекта — это в логической модели есть вхождение данного объекта в какое-то множество. Классы стоимостей линейны для любой шкалы. Мы выбираем шкалу и она определяет разбиение объектов на классы. На одном классе написано: 15, на другом 20. Мы смотрим, какому классу принадлежит объект и понимаем, что он относится к классу 15. ок.
                                                                                                      • 0
                                                                                                        На одном классе написано: 15, на другом 20.

                                                                                                        Вот, вот это место меня интересует. «На классе написано» — имеется в виду некий идентификатор класса, или что-то иное?
                                                                                                        • 0
                                                                                                          Этот класс входит в класс классов с одинаковыми обозначениями: 15
                                                                                                          • 0
                                                                                                            А как отличить класс классов с обозначениями 15 от класса классов с обозначениями 20?
                                                                                                            • 0
                                                                                                              Благодаря связи этого класса с классом нумерованных классов. Я почему рекомендовал посмотреть модель в книге? потому что таких связей там много. Чтобы построить всю конструкцию, необходимо много классов. Сколько — не помню, но больше 4-х.
                                                                                                              • 0
                                                                                                                Что такое «нумерованный класс»?
                                                                                                                • 0
                                                                                                                  Это класс, имеющий связь с какой-то цифрой
                                                                                                                  • 0
                                                                                                                    А что такое цифра? Очередной объект?
                                                                                                                    • 0
                                                                                                                      цифр а- это класс объектов. Но эдак мы пойдем по всем структурам всех данных))) Лучше остановиться и начать читать книги
                                                                                                                      • 0
                                                                                                                        Нумерованный класс связан с классом объектов «цифра» или с конкретным объектом (например, 15), входящим в этот класс?
                                                                                                                        • 0
                                                                                                                          цифра 15 — это класс, но на этом остановимся, иначе нам придется пересказать Matthew West Developing High Quality Data Models.
                                                                                                                          • 0
                                                                                                                            А я вас уже давно попросил дать ссылку на публично доступную статью, где описана эта методика (своми словами, как можно видеть, не удается).
                                                                                                                            • 0
                                                                                                                              Я не могу давать ссылки на пиратские ресурсы, это очевидно, нарушение прав
                                                                                                                              В свое время я поехал к Левенчуку в гости из другого города, чтобы у него почитать эту книгу. Потом нашел ее в электронном виде, но это не помешало мне заказать ее на Амазоне. Труд, потраченный мной на ее поиски был не напрасным. Хотите учиться — приложите усилия
                                                                                                                              Только в ней есть ошибки)), так что будьте внимательны
                                                                                                                              • 0
                                                                                                                                А я не прошу ссылку на пиратский ресурс, я прошу публично доступную статью, описывающую инструмент в рамках логической парадигмы. Или вы хотите сказать, что вам не известна ни одна общедоступная статья, которая описывает жизненно важный аспект парадигмы?
                                                                                                                                • 0
                                                                                                                                  Обратитесь с этим вопросом к Левенчуку. Он и Виктор Агроскин Вам помогут разобраться в материале
                                                                                                                                  • 0
                                                                                                                                    Ну то есть (а) вам не известна такая статья и (б) вы не можете своими словами объяснить, как это работает. Более того, (ц) вы пока так и не построили модель для указанной простой предметной области.

                                                                                                                                    Ок. So much for «непротиворечивая и однозначная парадигма».
                                                                                                                                    • 0
                                                                                                                                      проблема в том, что мы начали с одной задачи, перешли на другую и так мы не закончим до тех пор, пока не перескажем всю книгу, или весь стандарт. Нет смысла писать то, что уже описано. Читайте стандарт, он переведен на русский. Но без Левенчука как проводника, или Анроскина, Вам будет крайне трудно разобраться в этом. Поверьте мне, я знаю. Поэтому идите к ним, читайте, что они пишут, смотрите видео и постепенно Вы начнете понимать. Мне понадобилось полтора года для этого.
                                                                                                                                      • 0
                                                                                                                                        Читайте стандарт, он переведен на русский.

                                                                                                                                        Я могу и по-английски. Дадите ссылку на публично доступную версию?

                                                                                                                                        Нет смысла писать то, что уже описано [...] Поэтому идите к ним, читайте, что они пишут, смотрите видео и постепенно Вы начнете понимать.

                                                                                                                                        Знаете, я очень не хотел прибегать к этому аргументу, но пожалуй, придется.

                                                                                                                                        Нет смысла писать вам то, что описано у Вигерса и Эванса. Идите к ним, читайте, что они пишут, и постепенно вы начнете понимать.
                                                                                                                                        • 0
                                                                                                                                          Оригинальная английская версия стандарта — платная. На сайте ISO.

                                                                                                                                          Части 1 и 2 перведены на русский и явлются ГОСТ Р. То есть могут быть найдены в интернете в более или менее уродских форматах. Переводы первой части (официальный ужасный и наш хороший) залинкованы на techinvestlab.ru/ISO15926

                                                                                                                                          Официальный перевод второй части неожиданно не очень ужасен — vsegost.com/Catalog/52/52414.shtml

                                                                                                                                          Из стандарта, разумеется, далеко идущие философские обобщения надо делать самому. В тексте их нет.
                                                                                                                                          • 0
                                                                                                                                            Спасибо за ссылки.
                                                                                                                                          • 0
                                                                                                                                            Проблема с далеко идущими философскими обобщениями в том, что каждый их делает по-своему. В данном случае maxstroy делает какие-то свои обобщения, на основании которых и пишет статьи. В итоге обсуждаем мы не 15926, который можно хоть как-то достать и читать, а постоянно меняющуюся точку зрения.
                                                                                                                                            • 0
                                                                                                                                              Ну это всё же не совсем так. Книжки Партриджа и Веста содержат примерно одинаковые философские обобщения.
                                                                                                                                              • 0
                                                                                                                                                Беда в том, что я уже видел, как maxstroy приписывает Партриджу то, что тот не пишет — иными словами, делает выводы, если не прямо противоречащие книге, то, по крайней мере, не совпадающие с теми, которые делаю я. Поэтому я предпочитаю обсуждать конкретные написанные слова.
                                                                                                                                      • 0
                                                                                                                                        Кстати. Правильно ли я понимаю из вашего комментария, что ISO 15926 полностью описывает пропагандируемую вами логическую парадигму, и в нем нет ничего, что ей бы противоречило?
                                                                                                                                        • 0
                                                                                                                                          Текст стандарта мне дали давно, года 4 или 5 назад. Поэтому я не знаю, где его взять сейчас. Давайте спросим Виктора. Я попрошу его ответить на этот вопрос. Ок?
                                                                                                                                          • 0
                                                                                                                                            Не ок. Автор статьи не Виктор, а вы. Дискутирую я не с Виктором, а с вами.
                                                                                                                                            • 0
                                                                                                                                              Виктор знает на порядки больше меня. Я так, слышал звон… Я работаю над созданием своего онтологического базиса. Потом буду маппить его на ИСО. Сейчас я не знаток ИСО, поэтому меня лучше не спрашивать.
                                                                                                                                              • 0
                                                                                                                                                Ага, то есть ваш базис, о котором вы в статье пишете — он ваш собственный, а не ISO-шный? Таким образом, преимущества ISO к нему не обязательно относятся?

                                                                                                                                                Тогда тем более вы не можете отсылать к «в книгах пишут так», потому что у вас свой собственный базис, а не книжный. Придется вам его объяснять самому.
                                                                                                                                                • 0
                                                                                                                                                  Я неоднократно писал, что я не использую ИСО в своих построениях. Я использую постулаты логической парадигмы, чтобы строить свой базис. Это моя цель. Вы можете ознакомиться с ИСО, но задавать мне вопросы про ИСО бессмысленно, если есть тот, кто может рассказать про это много лучше.
                                                                                                                                                  • 0
                                                                                                                                                    Прекрасно. Где описана «логическая парадигма», на которую вы ссылаетесь? Какой публично доступный источник является основой для ваших построений, чтобы я мог найти в нем ответы на те вопросы, на которые вы не считаете нужным отвечать?
                                                                                                                                                    • 0
                                                                                                                                                      Я использую книги, перечисленные в статье. И лекции Агроскина. Кроме того, периодически появляются видео лекции на эту тему. Возможно, Виктор подскажет другие источники
                                                                                                                                        • 0
                                                                                                                                          Любой современный стандарт содержит ошибки. Вспомните то количество неточностей, которые есть в стандарте BPMN! Однако, это не мешает использовать эти стандарты там, под что они заточены. ИСО 15926 — это не просто стандарт, это — способ мышления. И он, способ, универсален. Сам стандарт в той части, где нужен мне лично, проработан плохо и скажем прямо с ошибками. Поэтому я разрабатываю тот подход, который бы позволил исключить эти ошибки и сделать стандарт лучше. Стандарт декларирует опору на логическую парадигму, но соответствует ли он ей полностью, или нет, я бы сказал, что пока есть шероховатости.
                                                                                                                                          • 0
                                                                                                                                            Так, все интереснее и интереснеее. Внезапно, в ISO 15926 есть ошибки. Значит, мы не можем его использовать как общую базу для изучения ваших предложений, потому что любой пассаж оттуда, на который я сошлюсь, может оказаться ошибочным. Любопытно.

                                                                                                                                            Вопрос «есть ли хотя бы один общедоступный источник в котором можно ознакомиться с предлагаемой вами парадигмой» остается открытым.
                                                                                                                                            • 0
                                                                                                                                              Я не знаю чего-то, что не содержало бы ошибок. Я читаю монографии выдающихся ученых, но и там есть ошибки. Ошибки на языке программиста — это баги. Вы видели код без багов? Конечно, их вычищают. Но раньше к этому относились более тщательно. Стандарт ИСО 9000 не прошел бы проверку
                                                                                                                                            • 0
                                                                                                                                              Насчет парадигмы — Вы общаетесь с Виктором Агроскиным. ИМХО, лучше источника для ответов не найти.
                                                                                                                                    • 0
                                                                                                                                      Я использую логическую модель для той предметной области, в которой я работаю. Это не продажи. Это описание активности. Довольно сложная тема и ее разбором я занимаюсь вот уже на протяжении 11 статей. Это только начало. Чтобы довести разбор до конца нужно еще статей… много. Поэтому, если Вы хотите дойти до конкретных примеров, то придется еще много потрудиться. Так что желаю терпения. Если Вы желаете разобраться в этом самостоятельно, то обратитесь к корифеям. Левенчук и Агроскин — великие мастера, которые смогут Вам помочь.
                                                                                                                                      • 0
                                                                                                                                        То есть вы не можете применить логическую парадигму для другой предметной области? Это ограничение парадигмы или ваших навыков?

                                                                                                                                        И еще. Когда вы говорите «я работаю в области» — какую деятельность вы имеете в виду? Работаете в качестве кого?
                                                                                                                                        • 0
                                                                                                                                          Нет, я не могу применить логическую парадигму к другой отрасли. Я работаю в отрасли.ю которая описывает активность. Любую. Предприятий, механизмов, топора и валенка. Работаю аналитиком
                                                                                                                                          • 0
                                                                                                                                            Нет, я не могу применить логическую парадигму к другой отрасли

                                                                                                                                            Не можете потому, что парадигма неприменима, или потому что ваши навыки недостаточны?

                                                                                                                                            Я работаю в отрасли.ю которая описывает активность.

                                                                                                                                            Что это за отрасль? Она как-то связана с IT-индустрией?
                                                                                                                                            • 0
                                                                                                                                              Да, отрасль описания активности связана с ИТ, потому что описание предметной области служит для создания описаний данных в системе.
                                                                                                                                              • 0
                                                                                                                                                Что это за отрасль?

                                                                                                                                                Если упростить ваше высказывание, то правильно ли я понимаю, что вы работаете аналитиком, результат работы которого используется для описания данных в некой информационной системе?
                                                                                                                                                • 0
                                                                                                                                                  в разных информационных системах. Не в одной. Но о том, в каких и почему я пока не говорю специально. Я пока описываю теоретические основы.
                                                                                                                                                  • 0
                                                                                                                                                    Что это за отрасль?

                                                                                                                                                    Ваши теоретические основы, как мы уже видим, имеют ограниченную область применения (хотя вы утверждаете, что это универсальная парадигма).
                                                                                                                                                    • 0
                                                                                                                                                      Про отрасль узнаем чуть позже, когда выйдем на отраслевые задачи.
                                                                                                                                                      • 0
                                                                                                                                                        «У нас есть такие приборы, но мы вам про них не расскажем». Ок.
                                                                                                                                                        • 0
                                                                                                                                                          Дело в том, что для рассмотрения отраслевых задач надо ознакомиться с теоретической базой. Я давал тексты, исходя из отрасли, наткнулся на странное желание людей заменять одни тезисы на другие. Поэтому сейчас двигаемся от одного тезиса к другому. Без отвлечений по сторонам
                                                                                                                                                          • 0
                                                                                                                                                            Только неплохо бы тезисы, от которых мы движемся, доказывать, а не просто выдавать за данность, особенно учитывая, что в вашем изложении никогда нельзя понять, на чем они основываются.

                                                                                                                                                            Ну а пока — с ваших же слов — приходится считать, что предлагаемая вами методика работает не для всех отраслей, но для каких именно отраслей она работает, мы не знаем.
                                                                                                                            • 0
                                                                                                                              В лекции Агроскина есть намек на решение Вашей задачи на 49 минуте
                                                                                                                              • 0
                                                                                                                                То, что описывает Агроскин, противоречит тому, что говорите вы. Агроскин вводит новое понятие «литерал», которое не является классом (это понятие, кстати, есть в RDF, но вот в 15926 его нет). Кому верить, вам или ему?
                                                                                                                                • 0
                                                                                                                                  Литерал RDF, как и тип string, в онтологии ISO 15926 отмэплен на класс индвидов.
                                                                                                                                  • 0
                                                                                                                                    Класс индивидов — это class_of_individual?

                                                                                                                                    Вообще, странно.

                                                                                                                                    Возьмем целое число. Целое число ведь литерал?

                                                                                                                                    ENTITY integer_number
                                                                                                                                    SUBTYPE OF(arithmetic_number)

                                                                                                                                    Логично, целое число — это всего лишь один из видов числа вообще.

                                                                                                                                    Но:
                                                                                                                                    ENTITY arithmetic_number
                                                                                                                                    SUPERTYPE OF (ONEOF(real_number, integer_number,
                                                                                                                                    multidimensional_number))
                                                                                                                                    SUBTYPE OF(class_of_class);

                                                                                                                                    Иными словами: arithmetic_number — это class_of_class, класс классов.

                                                                                                                                    Либо я чего-то фундаментально не понимаю в этой нотации, либо целое число — это класс классов.
                                                                                                                                    • 0
                                                                                                                                      Сорри, я слишком упростил. Там хитро. Целое число в этом стандарте — это не литерал.

                                                                                                                                      Для литералов в стандарте есть тип class_of_information_representation и его подтипы, среди которых есть строка EXPRESS.

                                                                                                                                      A class_of_information_representation is a class_of_arranged_individual that defines a pattern that represents information.
                                                                                                                                      EXAMPLE The texts formed with the pattern of characters 's' concatenated with 'u' concatenated with 'n' are members of the 'sun' сlass_of_information_representation.

                                                                                                                                      То есть конкретная символьная информация — это класс всех тех материальных 4D объектов, на которых она написана.

                                                                                                                                      А число arithmetic_number — это как в теории множеств, класс эквивалентности, то есть класс классов. 15 — это множество всех множеств с 15 элементами. Только не надо меня спрашивать, что такое Пи, боюсь, что тут онтологический процесс продолжен по аналогии :-)

                                                                                                                                      Далее между числом 15 и литералом «15» есть специальное отношение, относящееся к типу class_of_representation_of_thing. Такое же отношение между числом 15 и литералом «XV».

                                                                                                                                      То есть в этой онтологии числа и информация — понятия существенно разные, число как абстрактная идея может быть по разному представлена.
                                                                                                                                      • 0
                                                                                                                                        A class_of_information_representation is a class_of_arranged_individual that defines a pattern that represents information.
                                                                                                                                        EXAMPLE The texts formed with the pattern of characters 's' concatenated with 'u' concatenated with 'n' are members of the 'sun' сlass_of_information_representation.

                                                                                                                                        Ээээ, то есть символ — это individual, конкретный экстент?

                                                                                                                                        То есть в этой онтологии числа и информация — понятия существенно разные, число как абстрактная иде