Все мы хорошо понимаем о чем речь, когда произносится слово "объект". А тем из нас, кто имеет отношение к программированию приходят на ум слова "свойства", "методы", "класс". Но вот придумать "правильное", энциклопедическое определение слову объект крайне сложно. не верите? попробуйте! Вот для примера цитата из википедии:
Объект (objectum — предмет) — то, на что направлена та или иная деятельность (или то, что создано этой деятельностью); в более широком значении — любой предмет вообще.
Объект (в философии) — нечто, существующее в реальной действительности (то есть независимо от сознания): предмет, явление или процесс, на которые направлена предметно-практическая и познавательная деятельность субъекта (наблюдателя).
Та же самая беда с термином "свойство":
Сво́йство (в философии, математике и логике) — атрибут предмета (объекта).
На первый взгляд, вроде ничего так определение. Посмотрим, что такое атрибут?
Атрибут — в философии — необходимое, существенное, неотъемлемое свойство предмета или явления (в отличие от преходящих, случайных его состояний).
Чудесно, свойство это атрибут, а атрибут - это свойство, словами мы ничего объяснить не можем, но все равно все понимаем, и понимаем, что другие имеют в виду, когда мы это произносим. Кстати о слове "понимаем", т.е. "имеем понятие".
Поня́тие — отображенное в мышлении единство существенных свойств, связей и отношений предметов или явлений; мысль или система мыслей, выделяющая и обобщающая предметы некоторого класса по определённым общим и в совокупности специфическим для них признакам.
Итак, понятие сведено к мысли и мышлению. Только не надо сейчас лезть в википедию за определением слова "мышление"..... Слазили? А я говорил, что не надо?
Когда энциклопедическое определение не помогает, приходится обращаться к интуитивному, бытовому толкованию. Если рассмотреть термин "понятие" с точки зрения программиста ИИ - должно получиться что-то вроде "то, чем оперирует разум/интеллект". Некая единица смысла(не факт, что элементарная), которой можно оперировать.
Возвращаемся к термину "объект"... Хотя почему только к нему, то же самое происходит и со словами типа "процесс", "событие", "состояние".
Состоя́ние — абстрактный многозначный термин, в общем, обозначающий множество стабильных значений переменных параметров объекта.
Проце́сс (от лат. processus — продвижение), — последовательная смена состояний объекта во времени.
Собы́тие — то, что имеет место, происходит, наступает в произвольной точке пространства-времени; значительное происшествие, явление или иная деятельность как факт общественной или личной жизни; множество исходов эксперимента.
Что же общего в этих понятиях? Что их объединяет? Что мешает дать словесное определение, но позволяет оперировать любым другим способом?
Может быть то, что эти понятия СЛИШКОМ АБСТРАКТНЫЕ? мы привыкли давать определения, как указание класса-предка в общей системе классификации с выделением отличительных признаков, характерных для данного понятия. Селедка, это рыба, которая выглядит так-то и так-то, обычно имеет такие-то размеры, вес, место обитания, внутри селедок различают такие-то сорта и.т.д. Но В ПЕРВУЮ ОЧЕРЕДЬ, СЕЛЕДКА - ЭТО РЫБА. Если необходимо более точное определение - селедка, это белковое существо со следующим генотипом (далее должно следовать химическое описание генотипа на пару терабайт). Мы легко приводим примеры объектов, но не можем сказать, чем является сам объект. Термин "философская категория" не предлагать! в отличие от "объекта" и "процесса" это понятие абсолютно синтетическое. им невозможно оперировать на уровне здравого смысла. можно разве что перечислить эти самые категории, как в математике множество задается перечислением.
Ну что ж, некая зацепка есть. Мы имеем понятия, как единицы смысла, и некоторые операции над ними:
- приведение примера (конкретизация)
- сравнение (выделение сходств и различий).
- дача определения (поиск или создание более абстрактного понятия).
отношение "конкретный-абстрактный" заставляет вспомнить о системе классификации, т.е. таксономии(см. статью "Множественные таксономии средствами ОС"), и всех тех механизмах наследования атрибутов и построения классов которые мы напридумывали в статье "ООП vs таксономия". При рассмотрении методов построения становится похоже, что "проблемные" термины упомянутые выше были получены не уточнением более абстрактного класса (за его отсутствием), а собраны, как перечислимое множество элементов, имеющих хоть какой-то общий интуитивно-бытовой признак. понятие "философская категория", напротив, было собрано, как перечислимое множество элементов ничего общего не имеющих.
Теперь обратимся к самому детализированному, богатому на связи термину "событие". "Событие" увязывает "явление", положение в пространстве и времени.
Простра́нство — понятие, используемое (непосредственно или в составе сложных терминов) в естественных языках, а также в таких разделах знания, как философия, математика, физика и т. п.
На уровне повседневного восприятия пространство интуитивно понимается как арена действий, общий контейнер для рассматриваемых объектов, сущность некоторой системы.
Время(В философии) — необратимое течение (протекающее лишь в одном направлении — из прошлого, через настоящее в будущее)[1], внутри которого происходят все существующие в бытии процессы, являющиеся фактами.
По данному вопросу энциклопедические определения никакого ключа к действию не дают, поэтому придется обратиться к здравому смыслу.
В 12 часов дня на ул. Ленина автомобиль сбил фонарный столб. Это - событие. Его описание дает ответы на вопросы КОГДА, ГДЕ, КТО/ЧТО и С ЧЕМ, что СДЕЛАЛ, то есть фиксирует
- положение во времени (12 часов дня)
- положение в пространстве (ул. Ленина)
- объект(ы) и субъект(ы) (конкретный автомобиль и конкретный столб)
- действие (сбить)
Если опустить любой из перечисленных аспектов - получится не событие, а что-то другое. Например, уберем действие (вместе с субъектом) - останется "автомобиль [находился] в 12 часов дня на ул. Ленина". Это скорее можно назвать фактом. Уберем время - "автомобиль сбил столб на ул. Ленина". Вроде бы и событие, но какое-то, неполное, недоопределенное. Непонятно, как с ним работать, соотносить с другими событиями - что было раньше, что позже, что одновременно. То же самое будет если убирать другие аспекты "в 12 дня автомобиль сбил столб", "в 12 дня на ул. Ленина кто-то что-то сбил". Можно убрать время и поменять действие "автомобиль едет по ул. Ленина". Получился явный такой процесс, в бытовом, интуитивном его понимании. Впрочем сбитие столба можно тоже рассмотреть, как процесс, например смены состояния столба со стоячего на лежачее. Если выразиться точнее - изменение значения свойства "ориентация" со "стоячее" на "лежачее".
Надеюсь, эта словесная ахинея вас достаточно утомила, чтобы вы задались вопросом "чем мы тут занимаемся"? А занимаемся мы формализованным выражением связей между наиболее общими понятиями, применяемыми в описании любой предметной области. В научном словаре это называется страшным словом "онтология". Честно.
Онтология в словаре ru.science.wikia.com
Обычно под онтологией подразумевается эксплицитная, то есть явная, спецификация концептуализации, где в качестве концептуализации выступает описание множества объектов и связей между ними. Формально онтология состоит из понятий терминов, организованных в таксономию, их описаний и правил вывода. Основной вопрос онтологии: что существует?
Наукообразные словечки типа "онтология" и "таксономия" уже достаточно емки и тяжелы для понимания, так что пока мы окончательно не вывихнули мозг "эксплицитной спецификацией концептуализации", нужно побыстрее понять, зачем это все нужно, и спуститься к конкретным примерам. Последнее усилие:
Формально онтология определяется как O = <X,R,F>, где
- X — конечное множество понятий предметной области,
- R — конечное множество отношений между понятиями,
- F — конечное множество функций интерпретации.
Итак, именно онтология, как система понятий, отношений между ними и их интерпретации, даст нам возможность адекватно описывать предметную область и оперировать понятиями (если угодно - исчислять понятия), что необходимо для любого, хоть и искусственного, но мало-мальского интеллекта.
Лобовое решение - описать всё и вся (а именно такова философская интерпретация онтологии - наука о бытии, т.е. описание всего сущего), бесконечно трудоемко, поэтому возникает вопрос об автоматическом или хотя бы автоматизированном построении онтологий. Но для того чтобы машина могла
Парадигмы объектно-ориентированного программирования для адекватного моделирования предметной области недостаточно, поскольку