четверг, 22 ноября 2012 г.

Немного об абстракции

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

 Разнообразие объектов в зависимости от уровня абстракции   
Сложность задачи в зависимости от уровня абстракции

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