«Человек живёт только в настоящее мгновение. Всё остальное или прошло уже, или, неизвестно, будет ли.»
 
Консалтинговая компания Марк Аврелий


Вид, тип, род, сорт, категория, семейство, разновидность [для аналитиков и программистов]

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


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

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

Хотя на первый взгляд приведенный мною ряд понятий может показаться набором синонимов, выделим в нем 4 группы:

  1. Вид, род, категория, семейство, отряд - набор понятий, имеющих целью указать на общность признаков, или сущность. 
  2. тип, сорт, разновидность, разряд, характер,  - набор понятий, имеющих целью указать на вариативность внутри одной (!) сущности.
  3. профиль, образ - набор понятий, вводящий усложненные (агрегатные) признаки вариативности. Если тип можно было бы указать как "красное", "мягкое", "алюминиевое", "русский", то профиль или образ задает несколько признаков одновременно "мужчина, русский, пожилой, среднего роста".
  4. ячейка, кластер, фрейм, таксон, класс - набор понятий, обозначающий отобранные в множество экземпляры реальности (физической реальности, ментальной или виртуальной).

Когда мы употребляем в речи слово "классификация", то как будут связаны приведенные выше понятия? Набор объектов реальности, имеющих одну сущность (или другими словами - относящихся к одному виду), можно разделить по типам или профилям, что приведет к образованию ячеек. Совокупность таких ячеек и есть классификация. А если ячейки могут быть вложены друг в друга однозначно, то они образует таксономию или фреймворк (см. примеры фреймворков у TM FORUM: eTOM, SID, FF). 

В сторону: см. также мерон. Пока не пишем об этом. Чуть позже опишем, где в этом рассуждении место для мерономии.

Каково же назначение первых трех групп: 1)вид... 2)тип... 3)профиль...). Таких предназначений три:

  1. отделить частное (индивидуальное, конкретное) от обобщающего (общего). Например, лошадь - вид четвероного животного, принадлежит к более широкому классу млекопитающих или еще более широкому - живых существ. Частное от общего отделяется по каким-то признакам, свойствам, характеристикам. Четвероногое - более общее, парнокопытное - менее общее. Вид "Лошадь" - наименьшая единица обобщения, ниже только конкретный Буцефал.
  2. указать на общность, не описывая признаков общности: типичная реакция, типичный американец, типичная дача, типичный городишко и т.п. Во всех случаях типичности на самом деле подразумевается некий неявно заданный профиль типичности.
  3. указать, какое явление является прототипом для другого. Фактором, образующим таксон/фрейм/род в таком случае выступает протототип. Например, мысль есть прототип для высказывания. Одну и ту же мысль можно высказать по разному. Или там дом типа "хрущевка" - любой дом, построенный по проекту К-7, 464, 528 (здесь слова "тип" и "проект" употребляются в смысле "прототипа").  Юбка типа миниюбка или указание на другой фасон одежды. Здесь "более общее" возникает во времени раньше, чем его производные (копии или реализации). Хороший пример - штампованные изделия. Можно считать, что все они имеют общий признак - форму, но можно считать, что они все объединяются в один класс формой того штампа, который использовался при производстве. То есть штамп - это прототип для серии изделий.

     На будущее: определить место понятию ПРОТОТИП (понятие дизайн-тайма, радон).

Весьма полезно сейчас открыть интернет и посмотреть, какие определения понятий ВИД, РОД, ТИП, КАТЕГОРИЯ, дает нам всемирная сеть. Мои полезные находки:

  • вид может переводиться как species, а латинское species на греческий язык иногда переводят как эйдос - платоновский термин для обозначения идеального или есть еще один примечательный перевод, где species - это форма. Здесь под формой следует понимать греческое значение формы, то есть нечто, что в комбинации с субстанцией образует предмет. Стоит обратить внимание, что ВИД обычно трактуется как наименьшая единица обобщения.
  • род - всегда более общее, чем вид. Это было заложено еще Платоном и Аристотелем. Тянется до сих пор.
  • род по английски есть genos - очевидно, здесь кроется происхождение слова ГЕН, где ген - прототип некой части живого организма.
  • тип - попытка выразить подмножество через нечеткий, явно не заданный, но казалось бы всем очевидный паттерн выделения/соотнесения. Например, тип характера - весельчак, лентяй, демагог. Тип фильма - популярный, кассовый. Тип времени - беспокойное. Характер города - мещанский, бандитский, "культурная столица". Американец, как поется в одной песенке: виски, сода, рок-н-ролл - не очень четко, но совершенно понятно, каким образом была попытка выделить типаж.

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

Когда мы рассуждаем о видах-типах-профилях (первые три группы) нужно отличать их от ячеек (группа 4: множества, кластеры, классы, таксоны, фреймы). Такое различие есть и оно очевидно. Множество - это способ указать на совокупность каких-то отобранных из реальности объектов  (конкретных вещей или явлений, или даже высказываний). Конкретные объекты отбираются в множество по какому-то набору характеристик или свойств, характерных для всех отобранных объектов. Этот набор свойств (характеристик, признаков, связей) есть то, что образует сущность и ее вариации. Следует заметить, что этой сущности при формировании множества может и не быть. В некотором смысле это означает бессмысленность созданного множества. Если такая бессмысленность присутствует, то скорее всего такое множество не будет представлять интереса. Чаще всего мы формируем множество как раз по той причине, что с отобранными объектами (элементами множества) можно производить какие-то операции. Например, молоток, пакет молока, лампочка, ковер - казалось бы не имеют ничего общего, но если признать, что все они есть товары (их сущность - объекты для продажи) - то общим у них является возможность "назначить им цену", "расположить их на полке", "положить их в корзину".


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

Рода, виды, типы, классы при создании моделей данных

Вид - наименьшая единица сущностного анализа. Вид строго "указывает" или, точнее, полностью определяет сущность. Можно даже сказать, что вид и есть сущность или ее сигнификат. То есть когда мы говорим, что Буцефал - это лошадь, мы соотносим наблюдаемое конкретное животное с видом ЛОШАДЬ и Буцефал обретает свое четкое место в нашем ментальном мире. Возможно сам Буцефал не считает себя лошадью (не относит себя к виду лошадей), а Александр Македонский мог бы назвать его другом (то есть отнести Буцефала к виду друзей). Понятие вида соответствует понятию прототипа, а прототип в свою очередь есть конструктор класса.

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

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

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


Зачем объекты (экземпляры класса) делить на какие-то подмножества? Есть разные основания или следствия:

  • Такое деление есть просто побочный эффект от того факта, что свойства/состояния/связи определены через конечные наборы значений, а значит по этим значениям можно вести группировку, сортировку или фильтрацию экземпляров класса. Так например, продавец магазина может установить фильтр на отбор в классе ОБУВЬ в значение "женская", если перед ним стоит покупатель-женщина. 
  • Если экземпляров в классе много (обычно так и есть, если сущность класса весьма широка, например, живое существо), то непременно возникают задачи сужения этого множества или разделения его на подмножества, потому что каждое подмножество может требовать определенного порядка его обработки в программном коде. Так, если в одном классе, например, классе "СОТРУДНИК", объединены женщины и мужчины, то поле "девичья фамилия" для мужчины заполнять не нужно, а для женщины не очень актуально поле "военнообязанный". Точно также будут спроектированы разные методы начисления зарплаты для сотрудников, имеющих признак "штатный" или "совместитель".
  • Задача разделения экземпляров класса на подмножества может преследовать цели навигации и систематизации экземпляров класса. Это могут быть какие-то таксономии, которые чаще всего создаются по акцидентным или темпоральным признакам. Например, отнесение фильма к категории 18+ или ЛГБТ тематике. Или разделение процессов на основные, обеспечивающие и процессы развития. Или выделение процессов уровня 1, 2, 3... 7. Или отнесение продукта/лекарства к товарам первой необходимости, дефицитным, социальным и т.п..   

Попытаемся подвести какую-то основу под выделение классификационных ячеек для класса (таксонов, кластеров, фреймов, подклассов), чтобы конструирование этих ячеек происходило более осознанно:

  1. в основе классифицирующей ячейки может стоять одно свойство, один статус или одна связь, имеющиеся у сущности. Например, живой организм. Здесь есть только одно свойство: быть живым.
  2. если в основе классифицирующей ячейки стоит более одного свойства, статуса или связи или любая их комбинация, то такая ячейка будет менее абстрактной (или, выразимся оппозитно - более конкретной). А значит наличие четырех признаков для ячейки порождает менее абстрактную (более детальную) ячейку, чем та, у которой этих признаков 3, 2 или 1.
  3. обычно на плохую практику систематизации указывает использование в одном проектируемом классе разных слов: тип, подвид, разряд, категория. Лучше делать так: тип №1, тип №2, тип №3  или категория №1, категория №2, категория №3 - такое аналитическое построение обычно называют таксономия или фреймирование.
  4. для начала выделения ячеек следует использовать категории в том смысле, как их преподнес нам Аристотель: категория принадлежности, количества, времени, пространства, действия или претерпевания. За категориями Аристотеля стоят виды предикатов сущности, их конечно же может быть гораздо больше, чем 10. К концу 19 века философы насчитывали уже более 200 предикатов.
  5. если у экземпляров спроектированного класса будет много "дырок" (незаполенных атрибутов или связей), то следует перепродумать сущность класса. Возможно мы спроектировали его слишком широко или общё.
  6. самое сложное для понимания - это то, что любая ячейка, даже самая абстрактная, может стать прототипом сущности, что потребует ее отдельную дефиницию (определение). Например, мы говорим, что Шарик - это домашнее животное. Домашнее животное - это широкий класс (род), но в ряде случаев этого достаточно, чтобы остановиться и не опускаться ниже, указывая, что Шарик - это узкий класс, то есть собака.

Стоит обратить внимание, что абстрактное-конкретное следует применять в большей степени именно к родам, типам, категориям и т.п., а не к видам или сущностям.  Так как сами сущности не должны быть абстрактными. В этом смысле иногда сложно различать определенные слова, относятся ли они к сущностям или к типам/родам/категориям. Например:

  • мебель - это скорее род/мегакласс объектов, к которым относятся предметы интерьера (все предметы интерьера образуют мега-мегакласс).
  • кресло - это скорее всего наименьшая ячейка классификации,  т.е. вид мебели, предназначенный для комфортного сидения. Можно считать сущностью.
  • кресло-реклайнер или кресло-качала - это тип (иногда говорят - подвид) внутри вида "кресло". То есть это классификационная ячейка, выделенная по определенному функциональному свойству, которое может проявляться у кресел.
  • кресло на хромированных колесиках с красной обивкой и кожаными вставками с инвентарным номером 455 - это уже конкретный экземпляр сущности/класса (то есть объект), так как здесь явно указаны определенные свойства экземпляра/объекта.

Взаимосвязь терминов, упоминаемых в моей статье, изображена ниже (согласно версии глоссария ИПУ РАН (Институт Проблем Управления)). На схеме зеленым цветом и красными линиями отображено то, что наиболее релевантно к данной статье.

Рода, виды, типы, классы при создании моделей данных

Схема терминов ИПУ РАН доступна в СиММА, начиная с версии 2.6, включая формулировки самих терминов. Вы можете достраивать ее внутрифирменными глоссами, изменять базовые определения или наследовать от них новые согласно терминологии, устоявшейся на вашем предприятии.


Полезные статьи для продолжения чтения по теме: