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

и какой язык программирование позволит переопределить метод так, чтобы он возвращал обьект другого типа?
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959755
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и хто мешает определить для целочисленного типа метод целочисленного деления, как в паскале. Вирт был не дурак, знал что в учебном языке нельзя реализовывать хоть и удобные вещи, но те которые противоречат здравому смыслу.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959757
l s p начинаю пониматьegorychещё раз: чему будет равно значение переменной с в таком случае: int c = half( 1 ); ???
0.5, конечно же.
Прошу прощения, невнимательно прочитал.
half ( 1 ) вернет 0.5.
Чему будет равно с программно определяется конструктором Integer; теоретически этот вопрос смысла не имеет, т.к. LSP требует чтобы изначально программа была определена в терминах Float, так что никаких Integer она содержать не должна.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959758
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l s p начинаю пониматьegorychдо тех пор, пока клиентский код не будет надеяться на то, что изменение высоты прямоугольника не приводит к изменению его ширины.
ЗЫ дежавю )))
Вы опять про переопределенные методы (сеттеры). Нельзя их использовать, если хотите применять принцип Лисков, вот и вся задача.

да. при переопределении метода появляются проблемы..

l s p начинаю понимать И это вовсе не значит, что "квадрат с переопределенными сеттерами сторон не является подтипом прямоугольника согласно LSP". Это значит лишь то, что данный вопрос неразрешим при помощи LSP, ни в ту ни в другую сторону.

про "и это вовсе не означает" другими словами можно?
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959761
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l s p начинаю пониматьtchingiz))
я выполнил substitution, и o1 is substituted for o2,
дале я жду, что бы поведение программы было неизменным.
the behavior of P is unchanged
поскольку поведение программы до субститушион и после отличаются, то \
делаю вывод, что int не есть подтип float/
{ return 1/2; } и { return 1.0/2; } - разные программы, хотя бы только потому что приводят к разным результатам, так что отрицать это бессмысленно;
заменить объект o2 на o1 в программе P значит вместо P(o2) выполнить P(o1).
А вы вместо P1() выполняете P2(). Нет никаких сомнений в том, что разные программы могут иметь разное поведение)))?
гут. принято

в статье в примере
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
void g (Rectangle & r)
{
 r.SetWidth( 5 );
 r.SetHright ( 4 );
 assert(r.GetWidth() * r.GetHeight()) ==  20 
}


действительно передается разные параметры.

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

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

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

И чтобы целые наследовались из рациональных.
И не объясняйте, что математика плохая, а мне надо не то, что в тз.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959797
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz,
математика хорошая, ты мне скажи какой математик тебе сказал что целое поделить на целое это целое(про то что операции определены на множестве целых, дак это ты сам придумал. тут уже упоминалось про то что метод класса не обязан возвращать результат собственного типа, а скорее наоборот, такие методы довольно редки)
Ты имееш ввиду что создатели многих(не си-подобных) языков придурки, и они неправы в том что реализовали нормальное деление для целых. И в 3-м питоне случайно заменили цел. деление на обычное, что-бы совместимость с 2-й(которая унаследовала деление от си) потерять :) ???
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959820
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я имею ввиду, что на множестве целых чисел операция деления определена не на всем множестве
целые >< целые, а на некоторых парах не определена.
и требуется реализовать именно эту функцию деления, а не какую либо другую.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959822
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о том, как вводится множество целых чисел с операциями сложения, отнимания, умножения и деления
мне рассказал Пеано.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35959987
мнение
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос? Вы определились с задачей?
Как только станет ясна задача и будет определено поведение, отсюда естественным образом получается контракт типа.
Контракт:
1. Может быть таким
2. Может вести себя так
3. Ожидаем таких-то манёвров
3. Предусловие, постусловие, ивариант
4. Прочее

Как только определен контракт, сразу всё станет на свои места. Тип Т исполняет контракт. Тип Р, являясь подтипом Т тоже обязан исполнить контракт, или он не может быть унаследован от Т.
Если тип Р должен иметь дополнительную функциональность (но не измененную!!!), наследуйте котракт, но в этом случае не требуйте, чтобы потребитель первого варианта контракта знал о новых(а не измененных. Менять поведение нельзя) мульках второго контракта.

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

С Уважением,
ЗЫ: Очень интересный топик.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35960747
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мнение,
вот реально +500 ))

есть как бы понятие "множество целых чисел". Его контракт известен пользователю класса Integer. Есть понятие "множество рациональных чисел", его контракт известен пользователю класса Float. Контракты практически одинаковы, с одним маленьким различием, касательно операции деления. Если мы хотим отнаследовать Integer от Float, то нам необходимо разрешить противоречие, заключённое в этом маленьком различии. Ибо парадигма объектно-ориентированного программирования нам говорит, что класс-наследник должен полностью выполнять контракт базового класса. В случае целых и рациональных чисел наследуемый класс не может полностью выполнить контракт базового. Вот и всё, о чём ещё говорить?
Кстати, и в питоне и в паскале, хотя разработчики этих языков и были умными людьми, всё одно не сделали int наследником float. Почему бы?
И в конце концов, операция деления целых чисел, возвращающая рациональное число приводит к появлению неоправданного оверхеда на многократное приведение типов. "С" и его наследники с оверхедом борятся, другим языкам на оверхед наплевать, вот отсюда и разница в реализации.

В случае квадрата и прямоугольника - такая же история с невозможностью полного выполнения контракта базового класса. Кстати, а почему, собственно, квадрат наследник прямоугольника? почему не ромба? почему не равнобедренного многоугольника? Совсем неочевидный выбор базового класса.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35961073
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tchingizпочему целые числа нельзя наследовать из рациональных?
Потому что наследник накладывает ограничения на св-ва и методы родителя. То же самое с квадратом - он накладывает ограничение на прямоугольник. В этом случае такие св-ва и методы должны быть переопределены. Наследование в чистом виде работает если нет ограничений, а только добавляются новые св-ва и методы.
На самом деле есть просто разные типы данных, для каждого типа определены свои операции, но могут использоваться "чужие" с возможностью отказа выполняться.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35961500
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему в моем варианте не сохраняеться контракт, ведь у мну тип инт наделяеться новым поведением под названим целочисленное деление и остаток от деления, а рациональное деление остаеться таким каки оно и было для рац. чисел.

а про квадрат, я согласен, при изменении одной стороны вторая изменяться не должна(по контракту).
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35961538
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychмнение,
Кстати, и в питоне и в паскале, хотя разработчики этих языков и были умными людьми, всё одно не сделали int наследником float. Почему бы?


Пскаль это процедурный язык, там ООП до Броланда и не пахло, а в создатель питона взял поведение целих и рац чисел с языка СИ.
А главные ограничения на наследования инт от флоат наложила машина. Ведь там уже забиты понятия целых и вещественных
И в языке паскаль - поведение целых и вещественных типов соответсвует наследованию инт от риал
вместо риал подставить целое можно, а наоборот нельзя, при делении целых - ответ вещественный, для целых определены новые методы mov div.
А насчет питона, дак это только в 3-е изменили поведение деления на то каким оно должно быть(не в плане удобства, а в лгики, мне нравиться то что в си деление целочисленное)
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35961565
мнение
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZyK_BotaN,

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

Если тип не выполняет контракт, например постусловие - возвращаемый результат целое число, а мы возвращаем вещественное, то это тот случай про который я написал.

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

Вот как-то так.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35961676
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мнение,

Я слеп, бьюсь головой об это деление(и тут я уверен что прав ведь логично что контракт деление определяет возвращение вещественного числа). Но как тода быть со сложением, разницой и умноженим. Тогда выйдет что сума целых будет вещественное число что правильно относительно парадигмы ООП, но не удобно при применении. Да каюсь, - также как и квадрат относительно прямоугольника, целое - это часный случай вещественного, а наследование зделать можно но бесмысленно. Здаюсь и в этот топик не возвращаюсь.
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35961917
йцуфыв
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мнениеКак только определен контракт, сразу всё станет на свои места. Тип Т исполняет контракт. Тип Р, являясь подтипом Т тоже обязан исполнить контракт, или он не может быть унаследован от Т.
egorych+500
...
есть как бы понятие "множество целых чисел". Его контракт известен пользователю класса Integer. Есть понятие "множество рациональных чисел", его контракт известен пользователю класса Float.
Что-то я, видимо, по меньшей мере одного из вас не понял. мнение пишет про один контракт, а egorych уже откуда-то взял два.

egorychВ случае целых и рациональных чисел наследуемый класс не может полностью выполнить контракт базового.
Почему не может-то? Для деления рациональных чисел, он требует, чтобы:
1) второй операнд был отличен от нуля;
2) возвращаемый результат был рациональным числом.
Деления для целых чисел в полной мере удовлетворяет обоим требованиям.
Вот и всё, о чём ещё говорить?

_модПотому что наследник накладывает ограничения на св-ва и методы родителя. То же самое с квадратом - он накладывает ограничение на прямоугольник. В этом случае такие св-ва и методы должны быть переопределены. Наследование в чистом виде работает если нет ограничений, а только добавляются новые св-ва и методы.
Вы можете привести пример наследования, при котором наследник не накладывает ограничения ни на свойства ни на методы родителя, но при этом и не совпадает с ним (т.е. не просто class Child : Parent {})?
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35962228
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
йцуфывegorych
есть как бы понятие "множество целых чисел". Его контракт известен пользователю класса Integer. Есть понятие "множество рациональных чисел", его контракт известен пользователю класса Float.
Что-то я, видимо, по меньшей мере одного из вас не понял. мнение пишет про один контракт, а egorych уже откуда-то взял два.ну бог ты мой, про математику забыли, да? егорыч взял оба контракта из математики. когда возникло программирование, было такое странное желание, что типы данных "целое" и "рациональное" в программировании сделать такими-же, как они определены в математике, и знаете что? - такая их реализация оказалась вполне востребованной.
ну да, кстати, лучше уж "вещественное", чем "рациональное", что, правда, смысл не меняет.

йцуфывegorychВ случае целых и рациональных чисел наследуемый класс не может полностью выполнить контракт базового.
Почему не может-то? Для деления рациональных чисел, он требует, чтобы:
1) второй операнд был отличен от нуля;
2) возвращаемый результат был рациональным числом.
Деления для целых чисел в полной мере удовлетворяет обоим требованиям.
Вот и всё, о чём ещё говорить?контракт деления рациональных чисел действительно такой. вот контракт деления у целых - другой. В этом и проблема. При реализации класса целых как наследника рациональных, мы нарушаем контракт деления целых чисел, которое знает и использует очень большое количество людей. Как я понимаю, создатели питона.3 решили на них положить - теперь вот думают, чего делать дальше. Слишком много оказалось надо переписывать. Хотя могу и ошибаться, я с питонами не дружу ))
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35962832
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
йцуфывВы можете привести пример наследования, при котором наследник не накладывает ограничения ни на свойства ни на методы родителя, но при этом и не совпадает с ним (т.е. не просто class Child : Parent {})?
Конечно.
Parent: Документ, св-ва: дата, содержание, метод: поиск по дате или содержанию
Child: Накладная, доп. св-ва - список товаров, методы: поиск по товару
все методы Документ без ограничений обслуживают Накладные, ничего не зная о доп. св-вах и методах
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35963402
мнение
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_модйцуфывВы можете привести пример наследования, при котором наследник не накладывает ограничения ни на свойства ни на методы родителя, но при этом и не совпадает с ним (т.е. не просто class Child : Parent {})?
Конечно.
Parent: Документ, св-ва: дата, содержание, метод: поиск по дате или содержанию
Child: Накладная, доп. св-ва - список товаров, методы: поиск по товару
все методы Документ без ограничений обслуживают Накладные, ничего не зная о доп. св-вах и методах
А теперь вопрос к йцуфыв.
Можете привести обратный пример (обратный к Вашему вопросу).
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35963445
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мнение
Дык float - int, прямоугольник-квадрат ну и т.д
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35964157
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych
ну да, кстати, лучше уж "вещественное", чем "рациональное", что, правда, смысл не меняет.
не лучше, рациональные - это минимальное поле, содержащее целые.
Меньше сущностей меньше места для посторонних разговоров, типа не от того породил,
как с квадратами было
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35964169
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть, будем считать что требуемая реализация целых рациональных с использованием
наследования на с++ трудностей не представляет.
Код может быть написан.

два формальных примера выполненных на с++ с использованием наследования уважаемая публика,
начиная с Лисков, упорно отказывается признавать "правильным" наследованием.
/* если вспомнить определение Страуструпа "класс это пользовательский тип", то обнаружим,
что есть неопределенность в терминах класс и тип. То что есть подтипом по Страуструпу, не есть
подтипом по Лисков*/

а что такое контракт?
...
Рейтинг: 0 / 0
Наследование(ООП). растолкуйте
    #35978185
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрите как реализовано наследование абстрактных классов чисел в 3-м питоне
http://www.ibm.com/developerworks/ru/library/l-python3-2/
...
Рейтинг: 0 / 0
25 сообщений из 120, страница 4 из 5
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Наследование(ООП). растолкуйте
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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