Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7 сем / 4 / мисприс-2.4_1374_Наволоцкий_Зырянов_Харитонов.docx
Скачиваний:
4
Добавлен:
29.03.2025
Размер:
698.87 Кб
Скачать

3. Разработка проектной модели классов

Расширенная модель классов для прецедента Ведение спецификации изделий представлена на рис. 3.

Рис. 3. Модель классов для прецедента Ведение спецификации изделий

В модель включен класс Функция конфигурации и ассоциация с ролью Подключение.

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

Модель классов для прецедента Описание правил управления конфигурации представлена на рис. 4.

Рис. 4. Модель классов для описания функций конфигурирования

Функция конфигурации представляется в виде конъюнкции. Класс Предикат позволяет описывать простые предикаты с указанием тройки (Параметр, Оператор, Допустимое значение).

Каждый элемент конъюнкции описывается как список предикатов (класс Конъюнкция, ассоциативная сущность Элемент конъюнкции). Каждая функция описывается в виде списка элементов конъюнкции (класс Конъюнкция).

4. Разработка модели хранения

Рис. 5. ERD для прецедента Формирование правил управления конфигурацией

5. Реализация

Скрипт для создания таблицы функций:

def create_func_table():

cursor.execute("""

CREATE TABLE IF NOT EXISTS func (

id INTEGER PRIMARY KEY AUTOINCREMENT,

class_id INTEGER NOT NULL,

name TEXT NOT NULL,

FOREIGN KEY (class_id) REFERENCES terminal_classifier(id) ON UPDATE CASCADE ON DELETE CASCADE

);

""")

conn.commit()

Скрипт для создания таблицы предикатов:

def create_predicate_table():

cursor.execute("""

CREATE TABLE IF NOT EXISTS predicate (

id INTEGER PRIMARY KEY AUTOINCREMENT,

operator_id INTEGER NOT NULL,

param_id INTEGER NOT NULL,

enum_pos_id INTEGER NOT NULL,

FOREIGN KEY (param_id) REFERENCES param(id) ON UPDATE CASCADE ON DELETE RESTRICT,

FOREIGN KEY (enum_pos_id) REFERENCES enum(id) ON UPDATE CASCADE ON DELETE RESTRICT,

FOREIGN KEY (operator_id) REFERENCES enum(id) ON UPDATE CASCADE ON DELETE RESTRICT

);

""")

conn.commit()

Скрипт для создания таблицы тела функции, которая описывается в виде конъюнкции:

def create_func_body_table():

cursor.execute("""

CREATE TABLE IF NOT EXISTS func_body (

func_id INTEGER NOT NULL,

conjunction_num INTEGER NOT NULL CHECK (conjunction_num >= 0),

predicate_id INTEGER NOT NULL,

inversio BOOLEAN NOT NULL DEFAULT FALSE,

PRIMARY KEY (func_id, conjunction_num, predicate_id),

FOREIGN KEY (func_id) REFERENCES func(id) ON UPDATE CASCADE ON DELETE CASCADE,

FOREIGN KEY (predicate_id) REFERENCES predicate(id) ON UPDATE CASCADE ON DELETE RESTRICT

);

""")

conn.commit()

Скрипт для создания таблицы, связывающей объект с функциями:

def create_prod_spec_table():

cursor.execute("""

CREATE TABLE IF NOT EXISTS prod_spec (

prod_id INTEGER NOT NULL,

func_id INTEGER NOT NULL,

PRIMARY KEY (prod_id, func_id),

FOREIGN KEY (func_id) REFERENCES func(id) ON UPDATE CASCADE ON DELETE RESTRICT,

FOREIGN KEY (prod_id) REFERENCES product(id) ON UPDATE CASCADE ON DELETE CASCADE

);

""")

conn.commit()

Соседние файлы в папке 4