Помогите реализовать в объектах
От: Time Россия  
Дата: 04.06.07 18:14
Оценка:
Всем привет.
Необоходимо реализовать условие логического выражения:
В общем выглятит так
П -> К -> Д
П — предусловие
К — условие
Д — действие.

Так вот если для предусловия П истино условие Д тогда действие. Вся сложность в реалзиации К условия: хотелось чтобы оно было максимльно гибким (если так можно выразиться). Объясню подробнее.
Условие должно состоять из группы или одного объектов. Объекты должны связываться между собой по связи И, ИЛИ, ну и может отрицание условия. Т.е.

         |--- k1 --- k2 --- ... --- kn ---|
         |                                  |
    К = ---|--- k4 --- k6 --- ... --- ky ---|---
           |                                |
                 |----k25--- k2 --- ... --- km ---|


На данной схеме объект k это объект условия, причем связь по горизонтали это логическое И а по вертикали логическое ИЛИ. Включив ещё и отрицание можно будет из объектов конструировать услвия любой сложности. И ещё было бы классно еслиб любой объект ki мог быть созатвным из k1...kz, например


                     |-k1 - k2 - ... - ke -|
         |--- k1 ----|-k3 - ..............-|--- kn ---|
         |             |- ..................-|          |
    К = ---|--- k4 --- k6 --- ............... --- ky ---|---
           |                                            |
                 |----k25--- k2 --- ............... --- km ---|


Причём релизовать это надо в таких объектах которые было бы легко хранить в СУБД и удобно работать в программе.

Идеи?

Спасибо.

З.Ы.: Травы я сегодня не курил
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Помогите реализовать в объектах
От: Jax Россия  
Дата: 04.06.07 18:55
Оценка: 2 (1)
Класс Word — условие k.
Класс Sentence — массив Word, логически соединенных по И.
Класс Condition — Массив Sentence, логически соединенных по ИЛИ.

У всех классов будет метод match(), который будет возвращать логический результат true/false.

Word::match(object initialСondition)
{
  if (... если удачно скрестили initialСondition и m_word (условие k))
    return true;
  else
    return false;
}

Sentence::match()
{
  bool result;
  foreach(Word word in m_words)
  {
    result |= word.match();
  }
}

Condition::match()
{
  bool result;
  foreach(Sentence sentence in m_sentence)
  {
    result &= sentence.match();
  }
}


Названия классов и сам код условны. Еще можно оптимизировать, например, если result в цикле Condition станет равен 0, то сразу возвращаем false. Тоже самое в и Sentence.

Похоже на то что нужно?
Re[2]: Помогите реализовать в объектах
От: Time Россия  
Дата: 04.06.07 20:48
Оценка:
Здравствуйте, Jax

Хотелось бы иметь один объект k который мог представлять как одно простое выражение так и все ветки что я рисовал. И я что то не понял как предложеные Вами объекты уложить в одну таблицу СУБД (я, конечно, не говорил ранее что хотелось бы в одну таблицу, извините).

А вообще с единым методом match это хорошо.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Помогите реализовать в объектах
От: Jax Россия  
Дата: 05.06.07 05:47
Оценка: 2 (1)
Здравствуйте, Time, Вы писали:

T>Здравствуйте, Jax


T>Хотелось бы иметь один объект k который мог представлять как одно простое выражение так и все ветки что я рисовал. И я что то не понял как предложеные Вами объекты уложить в одну таблицу СУБД (я, конечно, не говорил ранее что хотелось бы в одну таблицу, извините).


Вроде так и есть, т.е. K — это Condition, а kij — это Word.

Храниться это будет так: столбцы — элементы массива Sentence, строки — элементы массива Condition (ячейка — это Word).
Если предусловие изменяемо и требует хранения, то не могу ничего полезного придумать. Если же предусловие не требует хранения, то все Word расчитываются и после уже записываются в БД.

Ошибся в коде немного
Sentence::match()
{
  bool result;
  foreach(Word word in m_words)
  {
    result &= word.match();
  }
}

Condition::match()
{
  bool result;
  foreach(Sentence sentence in m_sentence)
  {
    result |= sentence.match();
  }
}


Не надо ко мне на Вы, я один, меня не много. Не люблю формальности, по крайней мере не к месту, а тут не место
Re: Помогите реализовать в объектах
От: GlebZ Россия  
Дата: 05.06.07 11:13
Оценка:
Здравствуйте, Time, Вы писали:

Платформа-то какая?
Re[2]: Помогите реализовать в объектах
От: Time Россия  
Дата: 05.06.07 17:09
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, Time, Вы писали:


GZ>Платформа-то какая?


.Net 3.5, SQL Server 2005 SP2
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Помогите реализовать в объектах
От: GlebZ Россия  
Дата: 06.06.07 05:55
Оценка: +1
Здравствуйте, Time, Вы писали:

GZ>>Платформа-то какая?


T>.Net 3.5, SQL Server 2005 SP2

Тогда в чем проблема. В Linq есть получение AST дерева, точно также там можно его восстановить. Условия писать на основе лямбд. Там же все это уже есть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.