Is-a
От: igna Россия  
Дата: 02.11.07 10:46
Оценка:
Верно ли следующее?:

Если классы B и D связаны отношением D Is-a B; то любое утверждение истинное для B, является истинным для D.
Re: Is-a
От: Hobot Bobot США  
Дата: 02.11.07 11:01
Оценка: +3
Здравствуйте, igna, Вы писали:

I>Верно ли следующее?:


I>Если классы B и D связаны отношением D Is-a B; то любое утверждение истинное для B, является истинным для D.


Насколько я понимаю, нет.
What a piece of work is a man! how noble in reason! how infinite in faculty! in form and moving how express and admirable! in action how like an angel! in apprehension how like a god! the beauty of the world! the paragon of animals!
Re: Is-a
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 02.11.07 11:22
Оценка:
Здравствуйте, igna, Вы писали:

...полиморфизм.
Re[2]: Is-a
От: igna Россия  
Дата: 02.11.07 11:25
Оценка:
Здравствуйте, rsn81, Вы писали:

R>...полиморфизм.


И? Ты голову не морочь, ответ давай.
Re[3]: Is-a
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 02.11.07 11:34
Оценка:
Здравствуйте, igna, Вы писали:

I>И? Ты голову не морочь, ответ давай.

здесь
Re[3]: Is-a
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 02.11.07 11:36
Оценка: +1
Здравствуйте, igna, Вы писали:

I>И? Ты голову не морочь, ответ давай.

А... то есть надо было сказать: "конечно, нет"?
Re: Is-a
От: deniok Россия  
Дата: 02.11.07 16:32
Оценка: 2 (1)
Здравствуйте, igna, Вы писали:

I>Верно ли следующее?:


I>Если классы B и D связаны отношением D Is-a B; то любое утверждение истинное для B, является истинным для D.


Что понимается под термином класс? Это понятие, имхо, не поддается универсальной формализации, оставаясь специфичным для каждой группы языков.

Если говорить о типах, а тип в свою очередь рассматривать как множество объектов, обладающих определенными свойствами, то да. В нотации теории множеств:
B ={x | PB(x)}
D ={x | PD(x) /\ PB(x)}

Подразумевается, что x берутся из большого универсума, и PB(x), PD(x) — предикаты над элементами универсума. Чтобы D было подмножеством (subtype) B необходимо, чтобы для любого его элемента выполнялся предикат PB(x).
Re: Is-a
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 02.11.07 21:06
Оценка: 2 (1)
http://en.wikipedia.org/wiki/Liskov_substitution_principle
Re[2]: Is-a
От: igna Россия  
Дата: 03.11.07 10:05
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>http://en.wikipedia.org/wiki/Liskov_substitution_principle


Это да или нет?
Re[3]: Is-a
От: GarryIV  
Дата: 03.11.07 20:00
Оценка: 1 (1)
Здравствуйте, igna, Вы писали:

I>Здравствуйте, D. Mon, Вы писали:


DM>>http://en.wikipedia.org/wiki/Liskov_substitution_principle


I>Это да или нет?

Это ни то ни другое. Могут быть утверждения истинные для B но ложные для D но при этом LSP строго соблюдается.
WBR, Igor Evgrafov
Re[4]: Is-a
От: igna Россия  
Дата: 04.11.07 08:03
Оценка:
Здравствуйте, GarryIV, Вы писали:

GIV>Это ни то ни другое. Могут быть утверждения истинные для B но ложные для D но при этом LSP строго соблюдается.


Спасибо, только это и есть "нет".
Re[5]: Is-a
От: GarryIV  
Дата: 04.11.07 10:09
Оценка:
Здравствуйте, igna, Вы писали:

GIV>>Это ни то ни другое. Могут быть утверждения истинные для B но ложные для D но при этом LSP строго соблюдается.


I>Спасибо, только это и есть "нет".


Нет это не есть "нет" как ответ на изначальный вопрос

Ответ "нет" тут на утверждение:
Если классы B и D связаны отношением D подкласс B и соблюдается LSP; то любое утверждение истинное для B, является истинным для D.

А это таки другой вопрос

Интуитвно понятно, что и на оригинальный вопрос ответ "нет" но формального доказательства я не могу привести
WBR, Igor Evgrafov
Re: Is-a
От: Кодёнок  
Дата: 06.11.07 11:37
Оценка: 6 (1)
Здравствуйте, igna, Вы писали:

I>Верно ли следующее?:

I>Если классы B и D связаны отношением D Is-a B; то любое утверждение истинное для B, является истинным для D.

Неверно, утверждение «x is not D» в общем случае не удовлетворяет условию.
Re[2]: Is-a
От: matcode Беларусь  
Дата: 06.11.07 14:32
Оценка:
Здравствуйте, deniok, Вы писали:

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


I>>Верно ли следующее?:


I>>Если классы B и D связаны отношением D Is-a B; то любое утверждение истинное для B, является истинным для D.


D>Что понимается под термином класс? Это понятие, имхо, не поддается универсальной формализации, оставаясь специфичным для каждой группы языков.


D>Если говорить о типах, а тип в свою очередь рассматривать как множество объектов, обладающих определенными свойствами, то да. В нотации теории множеств:

D>
D>B ={x | PB(x)}
D>D ={x | PD(x) /\ PB(x)}
D>

D>Подразумевается, что x берутся из большого универсума, и PB(x), PD(x) — предикаты над элементами универсума. Чтобы D было подмножеством (subtype) B необходимо, чтобы для любого его элемента выполнялся предикат PB(x).

Подмножество и подтип не тождественные понятия.
Простой пример: квадрат является подмножеством прямоугольника но не являеться его подтипом.
Или например в С/С++ типы short и long.
Re[2]: Is-a
От: matcode Беларусь  
Дата: 06.11.07 14:37
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё>Здравствуйте, igna, Вы писали:


I>>Верно ли следующее?:

I>>Если классы B и D связаны отношением D Is-a B; то любое утверждение истинное для B, является истинным для D.

Кё>Неверно, утверждение «x is not D» в общем случае не удовлетворяет условию.


Ваше утверждение не удовлетворяет условию см. выделенное
Вы доказываете обратное, что B не всегда D.
Re[3]: Is-a
От: deniok Россия  
Дата: 06.11.07 14:40
Оценка:
Здравствуйте, matcode, Вы писали:

D>>Если говорить о типах, а тип в свою очередь рассматривать как множество объектов, обладающих определенными свойствами, то да. В нотации теории множеств:

D>>
D>>B ={x | PB(x)}
D>>D ={x | PD(x) /\ PB(x)}
D>>

D>>Подразумевается, что x берутся из большого универсума, и PB(x), PD(x) — предикаты над элементами универсума. Чтобы D было подмножеством (subtype) B необходимо, чтобы для любого его элемента выполнялся предикат PB(x).

M>Подмножество и подтип не тождественные понятия.

M>Простой пример: квадрат является подмножеством прямоугольника но не являеться его подтипом.
M>Или например в С/С++ типы short и long.

Запиши определения того, что есть квадрат и что есть прямоугольник, на языке множеств c выделением по предикатам
Re: Is-a
От: matcode Беларусь  
Дата: 06.11.07 14:50
Оценка:
Здравствуйте, igna, Вы писали:

I>Верно ли следующее?:


I>Если классы B и D связаны отношением D Is-a B; то любое утверждение истинное для B, является истинным для D.


Неверно. Во всяком случае для C++

Доказательство:

Дано:

struct B { ... };

struct D: B { ... };

D d;

B& b = d;

if (b.predicate()) 
    assert(d.predicate());  // 1


Надо определить такой predicate, что бы утверждение (1) было ложно.
Легко:

struct B {
   bool predicate() { return true;}
 };

struct D: B {
   bool predicate() { return false;}
 };
Re[3]: Is-a
От: Кодёнок  
Дата: 06.11.07 15:15
Оценка:
Здравствуйте, matcode, Вы писали:

M>Ваше утверждение не удовлетворяет условию см. выделенное


Верно ли, что «любое утверждение истинное для B, является истинным для D»

Моё утверждение: x is not D.

B is not D = true when B != D
D is not D = false

=> не любое

При этом наличие или отсутствие связи Is-a не играет никакой роли, потому что само условие логически противоречиво. Нет таких различимых объектов (в философском смысле — любой объект) B и D, чтобы для них выполнилось это условие, это нарушает философский принцип A=A.
Re: Is-a
От: Андрей Коростелев Голландия http://www.korostelev.net/
Дата: 06.11.07 15:54
Оценка: +1
Здравствуйте, igna, Вы писали:

I>Верно ли следующее?:

I>Если классы B и D связаны отношением D Is-a B; то любое утверждение истинное для B, является истинным для D.

Если утверждение является инвариантом B, то верно.
Если утверждение является предусловием B, то верно (для подтипов требуется контрвариантность предусловий).
Если утверждение является постусловием B, то верно (для подтипов требуется ковариантность постусловий).
В ином случае, вообще говоря, неверно.
-- Андрей
Re[2]: Is-a
От: igna Россия  
Дата: 06.11.07 21:08
Оценка:
Здравствуйте, matcode, Вы писали:

M>Неверно. Во всяком случае для C++


В твоем примере D и B не связаны отношением IsA.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.