?

Log in

No account? Create an account

Previous Entry | Next Entry

grafiti
Программировать надо не так.

Надо сначала составить списочек всех состояний, в которых объект теоретически может существовать. Например, дверь. Дверь может быть открытой или закрытой, но не открытой и закрытой одновременно, ибо "так не бывает".

Если возникает ситуация, в которой объект может существовать в двух состояниях одновременно, это логическая ошибка. Например, Чел лежащий на нарах в тюрьме - он не "лежит, а сам сидит", но "сидит лежа", это одно состояние а не два.

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

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

Там будут образовывацца циклы: например, если состояние двери изначально было закрытым, после открытия она может перейти токо обратно в закрытое состояние. Цикл: О-З-О.

Некоторые состояния не имеют продолжения. Например, у двери может сломацца ручка. В таком состоянии она не может перейти ни в О, ни в З. Это можно закодировать так:

О - может перейти в З или С
З - может перейти в О или С
С - вечное состояние

Допустим, дверь можно починить. Тогда:

О: З,С
З: О,С
С: П
П: О,З,С

Видите, эта модель не дает возможности починить дверь, у которой ручка еще не сломалась. "Иначе б было смешно". Зато вполне можно дверь починить и сразу сломать.

Но. Мы не можем перевести дверь из состояния П в С без того, чтобы она была О или З. А два состояния не могут существовать одновременно, это будет опять логическая ошибка как с Челом в тюряге. Как быть?

А просто. Вместо П делаем два новых состояния: ПЗ и ПО (починенная открытая, починенная закрытая). Теперь все будет правильно:

О: З,С
З: О,С
С: ПО, ПЗ
ПО: З, С
ПЗ: О, С

Но нам пришлось продублировать состояния З и О в ПЗ и ПО. Это плохо, потому что допустим дверь может быть не в двух не сломанных состояниях, а в 500. Нам бы пришлось добавить 1000 состояний, чтоб это решить.

Тогда так. На фундаментальном уровне дверь может быть токо или сломанной, или починенной. Значит, меняем нашу схему:

С: П
П: С

И делаем списочек суб-состояний для каждого подходящего фундаментального состояния:

С: (П: О, З)
П: С

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

Но наша модель не показывает, сломали дверь в открытом состоянии, или в закрытом.

А и не надо. Мы это и так уже знаем, ибо суб-состояния П нам это скажут. Нам нужно токо указать, что состояние "сломатости" не менят состояния открытости или закрытости. В каком суб-состоянии дверь сломали, в таком она и останецца.

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

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

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

При этом починенная дверь идентична по своим свойствам двери, которую еще не сломали, т.е. "нормальному" состоянию.

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

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

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


Comments

( 11 comments — Leave a comment )
tempika wrote:
22nd May, 2011 14:08 (UTC)
изящная попытка описать блок-схему словами :-)
nasha_sasha wrote:
22nd May, 2011 14:46 (UTC)
Это не то чтобы блок-схема. Скорее state machine.
gostya wrote:
22nd May, 2011 14:13 (UTC)
Саша, тебя несет:)
Не забывай, что ты нежный цветок.
nasha_sasha wrote:
22nd May, 2011 14:45 (UTC)
А одно другому не мешает )
blanqi wrote:
22nd May, 2011 14:31 (UTC)
Чрезвычайно умно для девужки. Прелесть.

При этом нельзя закрыть открытую сломанную дверь

Неверно. Закрыть дверь можно и без ручки. Можно и открыть дверь без ручки - со стороны, противоположной той, откуда дверь закрывается.

состояние зависит от результата смены суб-состояний, а результат суб-состояния зависит от результата смены суб-суб-состояний, "и так до бесконечности".

Что свидетельствует об умозрительности математической модели = ограниченности логических приёмов к реальности = "состояние" вещного мира не подвластно анализу, существует независимо от человеческого субъекта до тех пор, пока вместо анализа к вещи (двери) не будет приложена ВОЛЯ (на закрытие или открытие двери).

Без воления разум (анализ) пуст.
nasha_sasha wrote:
22nd May, 2011 14:44 (UTC)
Я лишь показала *принцип* рассматрения проблемы двери, на простом примере. В реальной жизни конечно много всяких тонкостей - напр, дверь может быть наполовину открыта, наполовину закрыта - если это sliding door, или дверь может быть вращающейся, или состоять из двух половинок, или опускацца и поднимацца, или как двери в метро где обе половинки разъезжаюцца в разные стороны, но это все можно смоделировать описанным выше образом.
blanqi wrote:
22nd May, 2011 14:46 (UTC)
Лишь повторю, что *в принципе" - прелесть.
krysochka wrote:
22nd May, 2011 14:42 (UTC)
Во даёшь, ангел! Нифига не поняла своим филологическим умишком :)
nasha_sasha wrote:
22nd May, 2011 14:47 (UTC)
Ум не бывает "филологическим" )
krysochka wrote:
22nd May, 2011 15:07 (UTC)
Э?
nasha_sasha wrote:
22nd May, 2011 16:13 (UTC)
Я к тому, что "ум один", я не думаю что у него есть жанры.
( 11 comments — Leave a comment )