GotAI.NET

Форум: Проблемы искусственного интеллекта

 

Регистрация | Вход

 Все темы | Новая тема Стр.1 (1)   Поиск:  
 Автор Тема: Проблема треугольника наследования
shuklin
Сообщений: 2053
Проблема треугольника наследования
Добавлено: 10 май 10 21:50
допустим:

interface I_A
{
void Fun_A();
}

interface I_B
{
void Fun_B();
}

interface I_C
{
void Fun_C();
}

interface I_AB : I_A, I_B;
interface I_BC : I_B, I_C;
interface I_AC : I_A, I_C;

проблема:
реализовать interface I_ABС : I_AB, I_BC, I_AC; без денормализации (повтора в vtbl) указателей на Fun_A, Fun_B, Fun_C

согласно 3NF дублирования быть не должно.

[Ответ][Цитата]
NO.
Сообщений: 10700
На: Проблема треугольника наследования
Добавлено: 11 май 10 2:50
Если при обращении к функции нужно указывать промежуточный интерфейс то придется хранить всё дерево.
[Ответ][Цитата]
shuklin
Сообщений: 2053
На: Проблема треугольника наследования
Добавлено: 11 май 10 15:19
задача проще: не хранить дубли указателей на функции в vtbl
возможно ли? не вижу способа ((

дубли плохо - потенциальная возможность парадоксов, когда разные реализации одного и того же семантического слота vtbl ведут к разным реализациям функции. появляется возможность неоднозначного приведения типов, когда ((I_A)(I_AB)i_abc) != ((I_A)(I_AC)i_abc)
[Ответ][Цитата]
NO.
Сообщений: 10700
На: Проблема треугольника наследования
Добавлено: 11 май 10 17:01
А они и не равны, это и есть разная семантика.
Нужно две операции сравнения, одна даст ==, другая !=.

Как называется язык где это давно сделано и вылизано до совершенства?
[Ответ][Цитата]
shuklin
Сообщений: 2053
На: Проблема треугольника наследования
Добавлено: 11 май 10 17:07
речь идет о функциональном равенстве а не о сранвении указателей

совершенству нет предела
[Ответ][Цитата]
NO.
Сообщений: 10700
На: Проблема треугольника наследования
Добавлено: 11 май 10 17:48
субханаллах, что значит "функциональное равенство"?
[Ответ][Цитата]
shuklin
Сообщений: 2053
На: Проблема треугольника наследования
Добавлено: 11 май 10 18:09
в данном примере: выполнение обоими I_A идентичного контракта.
[Ответ][Цитата]
NO.
Сообщений: 10700
На: Проблема треугольника наследования
Добавлено: 11 май 10 18:24
3NF не означает что все запросы тоже будут в 3NF
[Ответ][Цитата]
shuklin
Сообщений: 2053
На: Проблема треугольника наследования
Добавлено: 11 май 10 18:33
3НФ на уровне бай дизайн обеспечивает невозможность возникновения парадоксов.
допуская дубли указателей в втбл перекладываем ответственность на добрую волю компилятора.
[Ответ][Цитата]
kcrotor
Сообщений: 402
На: Проблема треугольника наследования
Добавлено: 11 май 10 22:37
В с++ есть "виртуальное наследование". Как раз для этих целей.

В вашем случае будет выглядеть примерно так:
interface I_A
{
void Fun_A();
};

interface I_B
{
void Fun_B();
};

interface I_C
{
void Fun_C();
};

interface I_AB : virtual I_A, virtual I_B {};
interface I_BC : virtual I_B, virtual I_C {};
interface I_AC : virtual I_A, virtual I_C {};

тогда в interface I_ABС : I_AB, I_BC, I_AC {}; не будет дублитования
[Ответ][Цитата]
NO.
Сообщений: 10700
На: Проблема треугольника наследования
Добавлено: 11 май 10 22:50
3НФ исключает парадоксы в каждой конкретной таблице, а в запросах может быть что угодно.
Если система про семантику и предполагается активый рефлекшн то нужно хранить все, что было в исходниках. Если нужно только выполнить побыстрее то все лишнее можно выбросить.

Можно подумать какие тут могут быть ошибки, потом как с ними можно поступать. Потом либо сделать это фиксированной особенностью системы либо оставить под контроль программисту/юзеру. Для выбора при наличии вариантов нужна информация, вот нужно разбираться откуда она берется и меняется ли.
[Ответ][Цитата]
 Стр.1 (1)