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


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

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

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

Каково назначение всех эти понятий. Их три:

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

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

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

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

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

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

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

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