|
|
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
Ступор философский... Стандартное понимание: наследование новых типов это описание более частных случаев с более конкретной спецификой. Например Животное может передвигаться(метод) и иметь вес (свойство). Слон как наследуемый от него может тоже самое, унаследовано от него, но при этом передвигаться по-своему(полиморфизм) и иметь дополнительно длину хобота и размер копыт (свойства). Все привычно, более частное можно описать более подробно со своей спецификой. Теперь возьмем прямоугольник. Он имеет ширину и длину (2 свойства), методы Сдвинуть, Повернуть. Его частный случай квадрат, но... что толку от его наследования? все описано уже в прямоугольнике. Вся специфика в уменьшении свойств длина и ширина до одного. Так это наследование или нет? С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 08:40:23 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
Я так понимаю, что здесь затрагивается некая интегральная характеристика (соотношение между свойствами, может быть очень простое - как у квадрата, а может и очень сложное). Эти вещи вообще к ООП никакого отношение не имеют - на мой ламерский взгляд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 08:56:02 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
я так понимаю: квадрат таки наследуется от прямоугольника, но инкрементность делает ширину и длину всегда одинаковой С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 09:01:22 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
+ Я не сторонник ООП, но как я понял из ebooks, вся концепция ООП подразумевает 1. Сохранение свойств у новых объектов 2. Добавление и модификация новых. И нигде не говорится о взимоотношениях между ними - понятия просто такого нет. Вывод напрашивается такой (а точнее подтверждается моё скептическое отношение к ООП) - не всё программирование сошлось клином на нём, не следует всё и вся рассматривать через призму ООП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 09:08:35 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
Nafя так понимаю: квадрат таки наследуется от прямоугольника, но инкрементность делает ширину и длину всегда одинаковой С уважением, Naf В чем наследование заключается? И что такое инкрементность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 09:10:00 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
NafСтупор философский... Стандартное понимание: наследование новых типов это описание более частных случаев с более конкретной спецификой. Например Животное может передвигаться(метод) и иметь вес (свойство). Слон как наследуемый от него может тоже самое, унаследовано от него, но при этом передвигаться по-своему(полиморфизм) и иметь дополнительно длину хобота и размер копыт (свойства). Все привычно, более частное можно описать более подробно со своей спецификой. Теперь возьмем прямоугольник. Он имеет ширину и длину (2 свойства), методы Сдвинуть, Повернуть. Его частный случай квадрат, но... что толку от его наследования? все описано уже в прямоугольнике. Вся специфика в уменьшении свойств длина и ширина до одного. Так это наследование или нет? С уважением, Naf теоритечески - наследование, так как квадраты - подмножество прямоугольников. к сообщению приложена статья, с примером, что наследование квадратов из прямоугольников нарушает достаточно очевидный принцип Барбары Лисков Liskov Substitution Principle (LSP) http://okmij.org/ftp/Computation/Subtyping/References.html и поэтому не может считаться наследованием. ))) Такчто не все в порядке в датском королевстве, как кажется на первый взгляд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 09:23:49 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
Но попытаюсь всё-таки в сторону ООП посмотреть, чтобы не превращать философское осмысление понятий в банальный спор противников и сторонников ООП: Как можно связать квадрат и прямоугольник при помощи поняий ООП? Я так полагаю, что надо с квадрата начинать - свойство "размер". Затем прямоугольник наследует квадрат - добавлятеся свойство "разница между длинами сторон (a-b)". Тут вроде бы идет наследование от квадрата к прямоугольнику - пусть гуру ООП меня покритикуют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 09:27:22 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 09:32:57 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
Naf wrote: Слон как наследуемый от > него может тоже самое, унаследовано от него, но при этом передвигаться > по-своему(полиморфизм) и иметь дополнительно длину хобота и размер копыт > (свойства). Копыта у слона -- это 5 ! > Теперь возьмем прямоугольник. Он имеет ширину и длину (2 свойства), > методы Сдвинуть, Повернуть. Его частный случай квадрат, но... что толку > от его наследования? все описано уже в прямоугольнике. Если нет ни новых свойств, ни нового поведения, то действительно наследовать не имеет смысла. Но можно - это ничему не помешает, кроме наличия лишнего класса. Вся специфика в > уменьшении свойств длина и ширина до одного. Так это наследование или нет? Нет, специфика в равенстве длины и ширины. Можно наследоваться. Ничего плохого не будет. Но можно и просто добавить метод-свойство isSquare() и успокоиться. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 09:34:18 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
VowkНо попытаюсь всё-таки в сторону ООП посмотреть, чтобы не превращать философское осмысление понятий в банальный спор противников и сторонников ООП: Как можно связать квадрат и прямоугольник при помощи поняий ООП? Я так полагаю, что надо с квадрата начинать - свойство "размер". Затем прямоугольник наследует квадрат - добавлятеся свойство "разница между длинами сторон (a-b)". Тут вроде бы идет наследование от квадрата к прямоугольнику - пусть гуру ООП меня покритикуют. только по-моему прощу у прямоуголника многие понятия определить как площадь и ипериметр, чем потом переопределять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 09:34:34 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
Одинаковость свойств не означает "исчезновение" одного из них. Рассмотрим пример: есть классы Фигуры, и некая процедура определяет пролезаемость фигуры через ворота. Хоть для прямоугольника, хоть для квадрата - она будет сравнивать высоту ворот с высотой фигуры, и ширину ворот с шириной фигуры. И ей наплевать, что у квадрата высота с шириной совпадут - для нее это разные свойства, никак не взаимозаменяемые (конечно, если она не умеет вертеть фигуры). Так что то, что у квадрата одинаковая ширина и высота - это его внутреннее дело, которое может выражаться, как уже было сказано, в синхронной подстройке одного при изменении другого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 09:36:06 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
Cane Cat FisherОдинаковость свойств не означает "исчезновение" одного из них. Рассмотрим пример: есть классы Фигуры, и некая процедура определяет пролезаемость фигуры через ворота. Хоть для прямоугольника, хоть для квадрата - она будет сравнивать высоту ворот с высотой фигуры, и ширину ворот с шириной фигуры. И ей наплевать, что у квадрата высота с шириной совпадут - для нее это разные свойства, никак не взаимозаменяемые (конечно, если она не умеет вертеть фигуры). Так что то, что у квадрата одинаковая ширина и высота - это его внутреннее дело, которое может выражаться, как уже было сказано, в синхронной подстройке одного при изменении другого. и я про тоже представьте, что вы описываете систему в которой объекты граждане имеют два свойства адрес прописки и текущего проживания, но есть "индейцы", которые должно всегда совмещать эти 2 понятия, как вы их опишете в ООП? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 09:39:13 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
NafПовернуть. Его частный случай квадрат, но... что толку от его наследования? все описано уже в прямоугольнике. Квадрат имеет новое св-во - длина стороны, так что наследование ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 10:04:02 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
tchingizнаследование квадратов из прямоугольников нарушает достаточно очевидный принцип Барбары Лисков Liskov Substitution Principle (LSP) и поэтому не может считаться наследованием. Это не проблема - достаточно переопределить ненужные методы в NULL и все будет нормально tchingizТакчто не все в порядке в датском королевстве, как кажется на первый взгляд. Это да, но про другим причинам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 10:34:36 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
хотелось бы увидеть что-то более готовое С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 10:39:23 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
Скажите мне пожалуйста, если базовый тип Млекопитающее, у которого есть свойства Лапы, то когда я образую Лощадь от этого типа, я могу Лапы переименовать в копыта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 11:07:27 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
AlexsalogСкажите мне пожалуйста, если базовый тип Млекопитающее, у которого есть свойства Лапы, то когда я образую Лощадь от этого типа, я могу Лапы переименовать в копыта? - да, для этого существует "полиморфизм" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 12:14:18 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
Мне нравится такое толкование полиморфизма ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 12:43:19 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
MasterZiv Если нет ни новых свойств, ни нового поведения, то действительно наследовать не имеет смысла. Но можно - это ничему не помешает, кроме наличия лишнего класса. Нет, специфика в равенстве длины и ширины. Можно наследоваться. Ничего плохого не будет. Но можно и просто добавить метод-свойство isSquare() и успокоиться. Смысл может быть в случае множественного наследования или реализации интерфейсов. Например есть интерфейс - правильный многоугольник. Класс квадрат может наследовать класс прямоугольник и реализовть необходимые методы для правильного многоугольника(размер стороны и количество вершин). как тут поможет метод isSquare()? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 15:58:35 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
Nafя так понимаю: квадрат таки наследуется от прямоугольника, но инкрементность делает ширину и длину всегда одинаковой С уважением, Naf Ерунда это. С математическим подходом, можно расматривать "точку", как вырожденный прямоугольник с длиной и шириной равной 0. Также можно взять N-угольник и аппроксимировать им окружность. Но будет ли вам от такого уровня абстракций хорошо? Надо сосредоточиться не на природе происхождения геометрических фигур. А на операциях, которые мы будем с ними делать. Если-бы я делал векторный редактор, то выделил-бы несколько базовых классов типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. И эта структура классов будет всего-лишь ИМХОМ. Её можно видоизменять, подстраивая под конкретные задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 16:25:10 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
mayton, про то что проблема надумана я согласен, но суть обсуждения - является ли класс квадрат производным от прямоугольника и как это решается. Про ты хорошо заметил согласен, найти этому применение трудно так же как и для квадрата. Но в твоей иерархии классов я не нашел решения данной проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 16:49:00 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNПро ты хорошо заметил тут я пропустил слово "точку" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 16:51:01 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
tchingiz, Вот все ты с этими прямоугольниками успокоиться не можешь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 16:51:51 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
наследник "Квадрат" существует для "своих" случаев. Например существуют алгоритмы которые на вход могут принять квадрат но не могут принять прямоугольник. Более интересный в этом плане случай с Прямоугольным треугольником. В геометрии четко разделяются формулы для подсчета в прямоугольном треугольники и не прямоугольном. В прямоугольном формулы значительно проще. Следовательно удобней сделать два класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 16:55:14 |
|
||
|
Наследование(ООП). растолкуйте
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNНо в твоей иерархии классов я не нашел решения данной проблемы. Забей на квадрат. В моей структуре это будет один из конструкторов Rectangle. Если тебе нужно какое-то особое аналитическое свойство, типа возможности нарисовать внутри Rectangle вписанную окружность, то можно ввести метод типа isCircleInside. Разумеется, свойство надо вынести на уровень PrimitiveShape. И опять-же... эти рассуджения будут справедливы только для "моей точки зрения" на разрабатываемую систему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 17:19:49 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=35957841&tid=1344470]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
466ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 807ms |

| 0 / 0 |
