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)
Главная
|
Материалы
|
Справочник
|
Гостевая книга
|
Форум
|
Ссылки
|
О сайте
Вопросы и замечания направляйте нам по
Copyright © 2001-2022, www.gotai.net