Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 21:14 22.05.24 
Клубове / Наука / Природни науки / Математика Пълен преглед*
Информация за клуба
Тема Re: Квадратът правоъгълник ли е? [re: Питaщ]
Автор josarjan ()
Публикувано04.10.02 17:46  



Предполагам че, повечето отговори в този клуб (ще) са: Да, квадрата е правоъгълник.

Виж, ако питаш в клуб "Програмисти" могат и да ти дадат друг отговор, че не е.

Надолу това, което съм писал е малко Офф-Топик, щото е насочено към програмирането, а не пряко към математиката.


Значи какво имам предвид (това е подобно на класическата дилема "Окръжността елипса ли е" в обектно-ориентираното моделиране).
Идеята, е там е да се покаже как наследяването понякога уж очевидно всъщност трябва да се внимава с него. Т.е. целта е да се покаже какво точно означава връзката между два класа да е "is-a" (наследяването трябва да показва точно това). Тоест - същия въпрос, ама в друг контекст.

И така:
Имаме клас:
class Rect
{
void setWidth(int widht);
void setHeight(int height);

int getWidth();
int getHeight();

int calcArea();
// others mathematical functions
}

Въпросът е - може ли да използваме този клас за да направим квадрат, използвайки наследяване (което трябва да се използва за да покаже, че единия тип/клас *е* (is-a връзка) от другия тип/клас. Т.е. нещо от сорта на:

class Square extens Rect
{
void setWidth(int width) { setSize(width); }
void setHeight(int height) { setSize(height); }

void setSize(int size) { this.size = size; }
}
Ами оказва се, че това не е много добра идея. Защо? Ами много просто - ако имаш някакъв клиент на класа Rect, той трябва да работи (в този случай) и с класа Square. Да ама ако имаме следния код:

void f(Rect r)
{
r.setWidth(5);
r.setHeight(4);
System.out.println("calcArea() of " + r.getWidth() + "x" + r.getHeight() + "rectangle = " + r.calcArea());
}

Това нещо трябва да изкара:
calcArea() of 5x4 rectangle = 20

Да ама в случая с квадрат това няма да сработи както трябва. Защо няма да сработи - ами защото сме предположили, че за класа Rect имаме следния инвариант: ако извикаш setWidth() и после getWidth() трябва да получиш същия резултат. Същото и за getHeight(). За да може клас да наследи друг такъв, той трябва да запазва условията (инвариантите, предусловията и следусловията на методите и т.н.), валидни за базовия. В нашия случай няма такова нещо. Ето защо подобна реализация не е удачна. Разбира се, всичко това зависи от това как си си дефинирал базовия клас (най-често интерфейс) и по-точно условията на които трябва да се подчинява той (и съответно тези дето го наследяват/реализират).

Така де - идеята ми беше, че примерно в програмирането подобен модел не е много удачен - да представяш квадрата като правоъгълник. Разбира се, за да се използва функционалността на правоъгълника (тъй като същите формули за валидни и за квадрата - формули за лице, периметър и т.н.) най-правилното решение (според мене) е да се направи клас Square, който да си aggregate-не един обект Rect и да delegate-ва всички извиквания към него. Или нещо такова.
Но не е добре външните клиенти да виждат квадрата като правоъгълник.

Още веднъж - извинявайте за off-topic-а.



Цялата тема
ТемаАвторПубликувано
* Квадратът правоъгълник ли е? Питaщ   03.10.02 09:19
. * Re: Квадратът правоъгълник ли е? Питaщ   03.10.02 09:22
. * какво ли е квадрата... Пaлячo   03.10.02 09:41
. * Re: какво ли е квадрата... Питaщ   03.10.02 11:10
. * Re: какво ли е квадрата... edno momiche   16.10.02 20:35
. * естествено Dakota   03.10.02 11:40
. * Re: естествено Питaщ   03.10.02 14:05
. * Re: естествено Dakota   03.10.02 17:10
. * Re: естествено Boian   03.10.02 18:54
. * Re: естествено edno momiche   16.10.02 20:38
. * Re: естествено Boian   16.10.02 21:50
. * Re: естествено edno momiche   16.10.02 22:23
. * Re: естествено Boian   17.10.02 04:23
. * Re: Квадратът правоъгълник ли е? geri   03.10.02 12:51
. * Re: Квадратът правоъгълник ли е? Heдeв   03.10.02 14:18
. * Re: Квадратът правоъгълник ли е? Питaщ   03.10.02 15:02
. * Re: Квадратът правоъгълник ли е? Питaщ   03.10.02 15:06
. * Re: Квадратът правоъгълник ли е? Heдeв   03.10.02 15:12
. * Re: Квадратът правоъгълник ли е? Питaщ   03.10.02 16:17
. * Re: Квадратът правоъгълник ли е? Heдeв   03.10.02 16:37
. * Re: Квадратът правоъгълник ли е? edno momiche   16.10.02 20:41
. * Re: Квадратът правоъгълник ли е? perlin noice   03.10.02 18:17
. * Re: Квадратът правоъгълник ли е? Boian   03.10.02 18:58
. * Re: Квадратът правоъгълник ли е? josarjan   04.10.02 17:46
. * Re: Квадратът правоъгълник ли е? Питaщ   16.10.02 13:29
. * Re: Квадратът правоъгълник ли е? edno momiche   16.10.02 20:48
. * Re: Квадратът правоъгълник ли е? josarjan   17.10.02 11:04
. * Re: Квадратът правоъгълник ли е? edno momiche   17.10.02 17:58
. * Re: Квадратът правоъгълник ли е? josarjan   18.10.02 11:18
. * Re: Квадратът правоъгълник ли е? edno momiche   18.10.02 18:57
. * Re: Квадратът правоъгълник ли е? josarjan   20.10.02 10:44
. * Re: Квадратът правоъгълник ли е? edno momiche   20.10.02 17:09
. * Re: Квадратът правоъгълник ли е? webkid   20.10.02 11:54
. * Re: Квадратът правоъгълник ли е? Питaщ   21.10.02 11:08
. * Re: Квадратът правоъгълник ли е? webkid   21.10.02 23:17
. * Re: Квадратът правоъгълник ли е? VooDooMaN   07.11.02 00:42
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.