powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Наследование(ООП). растолкуйте
25 сообщений из 120, страница 1 из 5
Наследование(ООП). растолкуйте
    #35957494
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ступор философский...
Стандартное понимание: наследование новых типов это описание более частных случаев с более конкретной спецификой. Например Животное может передвигаться(метод) и иметь вес (свойство). Слон как наследуемый от него может тоже самое, унаследовано от него, но при этом передвигаться по-своему(полиморфизм) и иметь дополнительно длину хобота и размер копыт (свойства). Все привычно, более частное можно описать более подробно со своей спецификой.
Теперь возьмем прямоугольник. Он имеет ширину и длину (2 свойства), методы Сдвинуть, Повернуть. Его частный случай квадрат, но... что толку от его наследования? все описано уже в прямоугольнике. Вся специфика в уменьшении свойств длина и ширина до одного. Так это наследование или нет?

С уважением, Naf
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35957504
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю, что здесь затрагивается некая интегральная характеристика (соотношение между свойствами, может быть очень простое - как у квадрата, а может и очень сложное). Эти вещи вообще к ООП никакого отношение не имеют - на мой ламерский взгляд.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35957508
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я так понимаю:
квадрат таки наследуется от прямоугольника, но инкрементность делает ширину и длину всегда одинаковой
С уважением, Naf
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35957519
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+
Я не сторонник ООП, но как я понял из ebooks, вся концепция ООП подразумевает
1. Сохранение свойств у новых объектов
2. Добавление и модификация новых.
И нигде не говорится о взимоотношениях между ними - понятия просто такого нет. Вывод напрашивается такой (а точнее подтверждается моё скептическое отношение к ООП) - не всё программирование сошлось клином на нём, не следует всё и вся рассматривать через призму ООП.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35957524
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nafя так понимаю:
квадрат таки наследуется от прямоугольника, но инкрементность делает ширину и длину всегда одинаковой
С уважением, Naf
В чем наследование заключается? И что такое инкрементность?
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35957539
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NafСтупор философский...
Стандартное понимание: наследование новых типов это описание более частных случаев с более конкретной спецификой. Например Животное может передвигаться(метод) и иметь вес (свойство). Слон как наследуемый от него может тоже самое, унаследовано от него, но при этом передвигаться по-своему(полиморфизм) и иметь дополнительно длину хобота и размер копыт (свойства). Все привычно, более частное можно описать более подробно со своей спецификой.
Теперь возьмем прямоугольник. Он имеет ширину и длину (2 свойства), методы Сдвинуть, Повернуть. Его частный случай квадрат, но... что толку от его наследования? все описано уже в прямоугольнике. Вся специфика в уменьшении свойств длина и ширина до одного. Так это наследование или нет?

С уважением, Naf
теоритечески - наследование, так как квадраты - подмножество прямоугольников.

к сообщению приложена статья, с примером, что наследование квадратов из прямоугольников
нарушает достаточно очевидный принцип Барбары Лисков
Liskov Substitution Principle (LSP)

http://okmij.org/ftp/Computation/Subtyping/References.html

и поэтому не может считаться наследованием.
)))
Такчто не все в порядке в датском королевстве, как кажется на первый взгляд.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35957545
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но попытаюсь всё-таки в сторону ООП посмотреть, чтобы не превращать философское осмысление понятий в банальный спор противников и сторонников ООП:
Как можно связать квадрат и прямоугольник при помощи поняий ООП?
Я так полагаю, что надо с квадрата начинать - свойство "размер". Затем прямоугольник наследует квадрат - добавлятеся свойство "разница между длинами сторон (a-b)". Тут вроде бы идет наследование от квадрата к прямоугольнику - пусть гуру ООП меня покритикуют.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35957553
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
class Rect
{
private:  
  float x,y;
public:
  float getX()  {return x}; 
  float getY()  {return y}; 
  virtual void setX(const float ax) {x=ax}; 
  virtual void setY(const float ay) {y=ay};
  float area() {return x*y}; 
  float perimeter() {return  2 *(x+y)}; 
};
class Square: public Rect
{
public:
  virtual void setX(const float ax) {x=y=ax}; 
  virtual void setY(const float ay) {y=x=ay};
};
С уважением, Naf
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35957556
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Naf wrote:
Слон как наследуемый от
> него может тоже самое, унаследовано от него, но при этом передвигаться
> по-своему(полиморфизм) и иметь дополнительно длину хобота и размер копыт
> (свойства).

Копыта у слона -- это 5 !

> Теперь возьмем прямоугольник. Он имеет ширину и длину (2 свойства),
> методы Сдвинуть, Повернуть. Его частный случай квадрат, но... что толку
> от его наследования? все описано уже в прямоугольнике.

Если нет ни новых свойств, ни нового поведения, то действительно наследовать
не имеет смысла. Но можно - это ничему не помешает, кроме наличия лишнего
класса.

Вся специфика в
> уменьшении свойств длина и ширина до одного. Так это наследование или нет?

Нет, специфика в равенстве длины и ширины. Можно наследоваться. Ничего плохого
не будет. Но можно и просто добавить метод-свойство isSquare() и успокоиться.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35957557
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkНо попытаюсь всё-таки в сторону ООП посмотреть, чтобы не превращать философское осмысление понятий в банальный спор противников и сторонников ООП:
Как можно связать квадрат и прямоугольник при помощи поняий ООП?
Я так полагаю, что надо с квадрата начинать - свойство "размер". Затем прямоугольник наследует квадрат - добавлятеся свойство "разница между длинами сторон (a-b)". Тут вроде бы идет наследование от квадрата к прямоугольнику - пусть гуру ООП меня покритикуют.
только по-моему прощу у прямоуголника многие понятия определить как площадь и ипериметр, чем потом переопределять
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35957561
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одинаковость свойств не означает "исчезновение" одного из них.

Рассмотрим пример: есть классы Фигуры, и некая процедура определяет пролезаемость фигуры через ворота. Хоть для прямоугольника, хоть для квадрата - она будет сравнивать высоту ворот с высотой фигуры, и ширину ворот с шириной фигуры. И ей наплевать, что у квадрата высота с шириной совпадут - для нее это разные свойства, никак не взаимозаменяемые (конечно, если она не умеет вертеть фигуры).

Так что то, что у квадрата одинаковая ширина и высота - это его внутреннее дело, которое может выражаться, как уже было сказано, в синхронной подстройке одного при изменении другого.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35957567
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherОдинаковость свойств не означает "исчезновение" одного из них.

Рассмотрим пример: есть классы Фигуры, и некая процедура определяет пролезаемость фигуры через ворота. Хоть для прямоугольника, хоть для квадрата - она будет сравнивать высоту ворот с высотой фигуры, и ширину ворот с шириной фигуры. И ей наплевать, что у квадрата высота с шириной совпадут - для нее это разные свойства, никак не взаимозаменяемые (конечно, если она не умеет вертеть фигуры).

Так что то, что у квадрата одинаковая ширина и высота - это его внутреннее дело, которое может выражаться, как уже было сказано, в синхронной подстройке одного при изменении другого.

и я про тоже

представьте, что вы описываете систему в которой объекты граждане имеют два свойства адрес прописки и текущего проживания, но есть "индейцы", которые должно всегда совмещать эти 2 понятия, как вы их опишете в ООП?
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35957636
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NafПовернуть. Его частный случай квадрат, но... что толку от его наследования? все описано уже в прямоугольнике.
Квадрат имеет новое св-во - длина стороны, так что наследование
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35957727
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tchingizнаследование квадратов из прямоугольников
нарушает достаточно очевидный принцип Барбары Лисков
Liskov Substitution Principle (LSP)
и поэтому не может считаться наследованием.
Это не проблема - достаточно переопределить ненужные методы в NULL и все будет нормально
tchingizТакчто не все в порядке в датском королевстве, как кажется на первый взгляд.
Это да, но про другим причинам
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35957739
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотелось бы увидеть что-то более готовое
С уважением, Naf
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35957841
Alexsalog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажите мне пожалуйста, если базовый тип Млекопитающее, у которого есть свойства Лапы, то когда я образую Лощадь от этого типа, я могу Лапы переименовать в копыта?
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35958100
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexsalogСкажите мне пожалуйста, если базовый тип Млекопитающее, у которого есть свойства Лапы, то когда я образую Лощадь от этого типа, я могу Лапы переименовать в копыта?
- да, для этого существует "полиморфизм" :)
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35958188
Гы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне нравится такое толкование полиморфизма
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35958741
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Если нет ни новых свойств, ни нового поведения, то действительно наследовать
не имеет смысла. Но можно - это ничему не помешает, кроме наличия лишнего
класса.

Нет, специфика в равенстве длины и ширины. Можно наследоваться. Ничего плохого
не будет. Но можно и просто добавить метод-свойство isSquare() и успокоиться.


Смысл может быть в случае множественного наследования или реализации интерфейсов.
Например есть интерфейс - правильный многоугольник. Класс квадрат может наследовать класс прямоугольник и реализовть необходимые методы для правильного многоугольника(размер стороны и количество вершин). как тут поможет метод isSquare()?
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35958855
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nafя так понимаю:
квадрат таки наследуется от прямоугольника, но инкрементность делает ширину и длину всегда одинаковой
С уважением, Naf

Ерунда это. С математическим подходом, можно расматривать "точку", как вырожденный прямоугольник с длиной и шириной равной 0. Также можно взять N-угольник и аппроксимировать им окружность. Но будет ли вам от такого уровня абстракций хорошо? Надо сосредоточиться не на природе происхождения геометрических фигур. А на операциях, которые мы будем с ними делать.

Если-бы я делал векторный редактор, то выделил-бы несколько базовых классов типа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
AbtractShape
 + PrimitiveShape
 |      + Rectangle
 |      + Circle
 + CompoundShape
       + Polygon
       + Text

И эта структура классов будет всего-лишь ИМХОМ. Её можно видоизменять, подстраивая под конкретные задачи.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35958945
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

про то что проблема надумана я согласен, но суть обсуждения - является ли класс квадрат производным от прямоугольника и как это решается. Про ты хорошо заметил согласен, найти этому применение трудно так же как и для квадрата.
Но в твоей иерархии классов я не нашел решения данной проблемы.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35958951
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNПро ты хорошо заметил
тут я пропустил слово "точку"
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35958957
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz,

Вот все ты с этими прямоугольниками успокоиться не можешь :)
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35958970
PC_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наследник "Квадрат" существует для "своих" случаев. Например существуют алгоритмы которые на вход могут принять квадрат но не могут принять прямоугольник.

Более интересный в этом плане случай с Прямоугольным треугольником.
В геометрии четко разделяются формулы для подсчета в прямоугольном треугольники и не прямоугольном. В прямоугольном формулы значительно проще. Следовательно удобней сделать два класса.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959069
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNНо в твоей иерархии классов я не нашел решения данной проблемы.
Забей на квадрат. В моей структуре это будет один из конструкторов Rectangle. Если тебе нужно какое-то особое аналитическое свойство, типа возможности нарисовать внутри Rectangle вписанную окружность, то можно ввести метод типа isCircleInside. Разумеется, свойство надо вынести на уровень PrimitiveShape.

И опять-же... эти рассуджения будут справедливы только для "моей точки зрения" на разрабатываемую систему.
...
Рейтинг: 0 / 0
25 сообщений из 120, страница 1 из 5
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Наследование(ООП). растолкуйте
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]