powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Наследование(ООП). растолкуйте
25 сообщений из 120, страница 2 из 5
Наследование(ООП). растолкуйте
    #35959121
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
я уже упоминал про полиморфизм(работу с квадратом как с правильным многоугольником) как это связуеться с методами проверки и конструкторами?
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959187
PC_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNmayton,
я уже упоминал про полиморфизм(работу с квадратом как с правильным многоугольником) как это связуеться с методами проверки и конструкторами?

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

Суть же ООП, это не слепить все в одну универсальную модель. А как раз крассиво разнести все по полочкам учитывая контекст использования абстракций.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959274
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNmayton,
я уже упоминал про полиморфизм(работу с квадратом как с правильным многоугольником) как это связуеться с методами проверки и конструкторами?
Господи... да забудь-же ты про квадрат
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959371
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
математически, или геометрически, квадрат является частным случаем прямоугольника ( и, кстати, ромба, о чём торжественно забыли ), а вот с точки зрения программирования, вообще-то, не всегда. Как раз попалась мне одна книжица, процитирую, пожалуй, корифеев:
Саттер & Александреску "Стандарты программирования на С++"
Рассмотрим 2 класса - Square ( квадрат ) и Rectangle ( прямоугольник ), каждый из которых имеет виртуальные функции для установки их высоты и ширины. Тогда Square не может быть корректно унаследован от Rectangle, поскольку код, использующий видоизменяемый Recatangle, будет полагать, что функция SetWidth не изменяет его высоту ( независимо от того, документирован ли данный контракт классом Rectangle явно или нет ), в то время как функция Square::SetWidth не может одновременно выполнить этот контракт и свой инвариант "квадратности". Но и класс Rectangle не может корректно наследовать классу Square, если его клиенты Square полагают, например, что для вычисления его площади надо возвести в квадрат ширину, либо используют какое-то иное свойство, которое выполняется для квадрата и не выполняется для прямоугольника.
Описание "является" для открытого наследования оказывается неверно понятым при использовании аналогий из реального мира: квадрат "является" прямоугольником в математическом смысле, но с точки зрения поведения Square не является Rectangle. Вот почему вместо "является" мы предпочитаем говорить "работает как" ( или "используется как" ) для того, чтобы такое описание воспринималось максимально правильно
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959414
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych,

Это многое объясняет, но все же, ИМХО предпочтительнее использовать понятие «является» а не «работает как» в плане того же полиморфизма.
Меня убил пример, когда круг наследовался от точки, точка от координат. И потом в массиве точек могли хранится круги. Ведь круг только внес понятие радиуса и переопределил метод отрисовки.
Но логически наследование бредовое, хоть круг работает как точка.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959420
belugin4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прямоугольник должен быть immutable
или
должна быть возможость у кокретого обхекта сменить класс
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959429
belugin4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://www.cs.washington.edu/research/projects/cecil/www/cecil.html

Cecil has predicate objects, which allow virtual "subclasses" to be defined carrying specialized methods that override their parent's methods whenever some boolean predicate over the object is true. In this way, inheritance can be used to model time-varying and/or state-dependent properties of objects just like permanent properties of objects.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959564
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модtchingizнаследование квадратов из прямоугольников
нарушает достаточно очевидный принцип Барбары Лисков
Liskov Substitution Principle (LSP)
и поэтому не может считаться наследованием.
Это не проблема - достаточно переопределить ненужные методы в NULL и все будет нормально

какие методы в данном случае. пример простой.
думаю, проблема.
x принадлежит X, а X включается в Y.
X подкласс Y.
все функции зависящие от x должны вырабатывать одинаковый результат
независимо от того, x обьявлен как X x; или Y x;

почему целые числа нельзя наследовать из рациональных?

целые не замкнуты относительно деления.
1.0 / 2.0 вырабатывает результат отличный от 1/2 что нарушает lsp
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959568
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL_Lamertchingiz,

Вот все ты с этими прямоугольниками успокоиться не можешь :)
я пропустил осмысленный ответ?
))))))
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959579
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonNafя так понимаю:
квадрат таки наследуется от прямоугольника, но инкрементность делает ширину и длину всегда одинаковой
С уважением, Naf

Ерунда это.
проблема далеко не надумана.

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

Или показать, что случай прямоугольников - квадратов единственный, и другого нет.

Или показать, что множество случаем применения постулата существенно больше множества
случаев, где постулат не применим. Например, применим в несчетном числе случаев, а не применим
в конечном.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959584
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizИли показать, что множество случаем применения постулата существенно больше множества
случаев, где постулат не применим. Например, применим в несчетном числе случаев, а не применим
в конечном.ух ты! ниасилил, если честно ))
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959586
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNМеня убил пример, когда круг наследовался от точки, точка от координат. И потом в массиве точек могли хранится круги. Ведь круг только внес понятие радиуса и переопределил метод отрисовки.
Но логически наследование бредовое, хоть круг работает как точка.как раз этот пример и показывает, что термин "работает как", а вернее, термин "используется как" подходит для объяснения открытого наследования более подходящий, чем "является". круг, в обычном понимании, естественно точкой не является, однако в конкретной программе использовался так же, как и точка. )) имхо.
на самом деле терминологический спор не очень интересен, в конце концов, это дело вкуса, главное правильное понимание
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959587
l s p
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tchingizпочему целые числа нельзя наследовать из рациональных?

целые не замкнуты относительно деления.
1.0 / 2.0 вырабатывает результат отличный от 1/2 что нарушает lsp
Та формулировка, которую я прочитал в википедии ( Let q(x) be a property provable about objects x of type T. Then q(y) should be true for objects y of type S where S is a subtype of T. ), по-моему, вовсе не противоречит наследованию целых от рациональных...
q(x) = { x/a принадлежит T для любого a<>0 принадлежащего T }
да, оно верно так же и для всех целых чисел (S)...
не?
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959594
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
классическую производную не берут от какой попало функции.
Чтобы брать производную - надо взять непрерывную функцию. То есть задали множество случаев
применения операции взятия производной (функция называется непрерывное если она непрерывна в каждой точке. Функция непрерывна в точке, если бла бла бла). И задали множество случаев не применения операции взятия производной.

для применения операции наследования надо сказать, что наследование не применимо когда попало
(что показывает контпример с квадратами и треугольниками), а применимо в таком множестве случаев.
Вот lsp пытается множество случаев применения наследования задать.
Мне кажется, то, что Лисков пыталась выродить называет замкнутость множества относительно
применения всех операция. Любая функция получающая аргумент из множества должна вырабатывать
результат из того, же множества.
целые числа не замкнуты относительно деления, и замкнуты относительно сложения, отнимания и умножения.
С тремя операциями класс целых можно наследовать от класса рациональных
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959625
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizSQL_Lamertchingiz,

Вот все ты с этими прямоугольниками успокоиться не можешь :)
я пропустил осмысленный ответ?
))))))

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

Комплексы, кватернионы и октавы сохраняют преемственность четырёх мат. операций, и вполне могут быть наследованы от некого типа мат. вектора. Другое дело, что атомарные типы, такие как int и double вообще "выпадают" из мира наследования как "объекты изучения".

Атомы слишком малы, чтобы "городить" вокруг них врапперы.

2 Все

Еще раз напоминаю, что без привязки к предметной области, наша дискуссия будет просто философствованием. Будет-ли квадрат наследником прямоугольника или нет - это определит сама прирада задачи. Быть может в какой-нибудь геометрии Лобачевского-Римана или Егорыча-Чингиза существует "точка" с "ненулевой массой" или квадрат с отрицательной площадью. Всё будет иметь своё место и смысл!! Но..... как только мы ОПРЕДЕЛИМСЯ с этой природой.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959651
tchingizМне кажется, то, что Лисков пыталась выродить называет замкнутость множества относительно применения всех операция. Любая функция получающая аргумент из множества должна вырабатывать результат из того, же множества. целые числа не замкнуты относительно деления, и замкнуты относительно сложения, отнимания и умножения.
С тремя операциями класс целых можно наследовать от класса рациональных
Так ведь формулировка википедии этого не подразумевает... Утверждение о замкнутости - это предикат для всего множества, а не для его элементов, к тому же уже накладывающий ограничения на предметную область (операции? кто сказал что они вообще должны быть? есть объект, у него есть поведение , а вся алгебра может быть спокойно проигнорирована в ООП). Или та формулировка не точна? Какой пользуетесь вы?
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959655
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l s ptchingizпочему целые числа нельзя наследовать из рациональных?

целые не замкнуты относительно деления.
1.0 / 2.0 вырабатывает результат отличный от 1/2 что нарушает lsp
Та формулировка, которую я прочитал в википедии ( Let q(x) be a property provable about objects x of type T. Then q(y) should be true for objects y of type S where S is a subtype of T. ), по-моему, вовсе не противоречит наследованию целых от рациональных...
q(x) = { x/a принадлежит T для любого a<>0 принадлежащего T }
да, оно верно так же и для всех целых чисел (S)...
не?

автор
Liskov Substitution Principle (LSP)

If for each object o1 of type S there is another object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2, then S is a subtype of T.


берем обьект o1 1 из целых (S) для него существует обьект o2 1.0 из типа рациональных (T)
берем программу деления на 2 - P
заменяем тип T на S : тоесть получаем программу Pштрих : S -> S

результат программы Pштрих(o1) неопределен,
результат программы P(o2) = 0.5

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

Программы должны быть написаны так, чтобы их могли читать люди, и только иногда так, чтобы их могли выполнять машины.(c) (Абельсон и Сассман)

если обьявлен массив точек, какго там могут храниться другие фигуры?
и второе, еще больше меня поразило то что точка наследует координаты а не содержит. С таким же успехом можно наследовать машину от колеса.

а вывод тут может быть один. все решать по обстановке, но пытаться чтобы наследование происходило по принципу "является", хотя джавовское extends - несет другую нагрузку :)(именно расширение а не наследование)
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959657
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizNafСтупор философский...
Стандартное понимание: наследование новых типов это описание более частных случаев с более конкретной спецификой. Например Животное может передвигаться(метод) и иметь вес (свойство). Слон как наследуемый от него может тоже самое, унаследовано от него, но при этом передвигаться по-своему(полиморфизм) и иметь дополнительно длину хобота и размер копыт (свойства). Все привычно, более частное можно описать более подробно со своей спецификой.
Теперь возьмем прямоугольник. Он имеет ширину и длину (2 свойства), методы Сдвинуть, Повернуть. Его частный случай квадрат, но... что толку от его наследования? все описано уже в прямоугольнике. Вся специфика в уменьшении свойств длина и ширина до одного. Так это наследование или нет?

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

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

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

и поэтому не может считаться наследованием.
)))
Такчто не все в порядке в датском королевстве, как кажется на первый взгляд.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959659
tchingiz
авторwhen o1 is substituted for o2
заменяем тип T на S : тоесть получаем программу Pштрих : S -> S

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

Комплексы, кватернионы и октавы сохраняют преемственность четырёх мат. операций, и вполне могут быть наследованы от некого типа мат. вектора. Другое дело, что атомарные типы, такие как int и double вообще "выпадают" из мира наследования как "объекты изучения".

Атомы слишком малы, чтобы "городить" вокруг них врапперы.
.

это не атомы - это примеры неприменимости.

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

пысы
четоприпоминается, что всюду разрывных функций больше чем непрерывных.
если попалось два примера (квадраты - прямоугольники, целые-рациональные) которые не вмещаются
в теорию, это повод понять размеры множеств применимости или не применимости теории,
а не отмахиваться от "слишком малых атомов"
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959664
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l s p не понимаюtchingiz
авторwhen o1 is substituted for o2
заменяем тип T на S : тоесть получаем программу Pштрих : S -> S

Все равно не понимаю. В принципе говорится о замене объектов, а не замене классов, разве нет?
я тоже пример с квадратами- прямоугольниками рассматриваю уже год это и не понимаю.
давай так.
деление явно должно быть перегружено
берем программу

Код: plaintext
1.
2.
3.
4.
5.
int P ( float x) 
{
return x/ 2 
}


при подстановке o1, целой единицы вызовется целое деление - результат будет 0.
при подстановке плавающей единицы результат будет 0.5
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959667
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в смысле, подстановке в коде
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
int P ( const int o1= 1 ) 
{
return o1/ 2 
}



Код: plaintext
1.
2.
3.
4.
5.
6.
int P ( const float o2 =  1 . 0 ) 
{
return o2/ 2 
}


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


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