Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Объясните динамическое связывание и полиморфизм (http://www.flasher.ru/forum/showthread.php?t=184417)

Krusty 18.09.2012 22:21

Цитата:

Сообщение от artcraft (Сообщение 1096445)
полиморфизм это не наследование
хоть и тесно связаны

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

наследование это когда пудель расширяет более общее понятие собака, которое в свою очередь расширяет еще более общее понятие зверь

Если писать про полиморфизм в терминах собак, то выходит немного не так.
В данном случае полиморфизм-это "интерфейс" i_Жрать_Спать_Гадить, который реализуют класс Собака и класс Кошка. Соответственно, нам известно, что шарик(экземпляр класса Собака), может быть накормлен, так как реализует этот интерфейс i_Жрать_Спать_Гадить. Причем неважно, это шарик или мурка(экземпляр класса Кошка)- в обоих случаях он может быть накормлен. То есть вообще неважно, к какому классу принадлежит объект-главное наличие реализации i_Жрать_Спать_Гадить

artcraft 18.09.2012 22:43

ну я не стал про интерфейсы писать, там у автора поста похоже и так не успевает укладываться всё голове.

приведение объекта типа пудель к типу животное это полиморфизм, я всё верно написал

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

и одновременно этот пудель может быть в другом списке - запись к парикмахеру

strangedk 18.09.2012 22:55

Даже зная что такое полиморфизм, когда читаешь все объяснения - начинаешь путаться :)

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

wisconsin 18.09.2012 23:28

с динамическим и статическим связыванием разобрался

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

главное, что я для себя понял, то что полиморфизм это принцип, а не средства языка, с помощью которых можно использовать этот принципы

artcraft 18.09.2012 23:40

полиморфизм это когда к классу можно обратиться как к суперклассу или как к интерфейсу

например
класс А имплементирует интерфейс IA
а класс В наследуется от класса А

так вот полиморфизм это то что можно сделать так
Код AS3:

var a:IA = new B();


wisconsin 18.09.2012 23:43

Цитата:

Сообщение от artcraft (Сообщение 1096445)

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

хм, и как это изобразить в виде иерархии классов

artcraft 19.09.2012 00:17

тут не только иерархия но и интерфейсы

Код:

сlass Пудель extends Cобака
сlass МояСобака extends Пудель implements IКучерявый, IШарик

var мойПёс:МояСобака = new МояСобака();
trace( мойПёс is Пудель ); //true
trace( мойПёс is Cобака); //true
trace( мойПёс is IКучерявый); //true
trace( мойПёс is IШарик); //true


dimarik 19.09.2012 15:21

Цитата:

Сообщение от Krusty (Сообщение 1096439)
Только вот делать такого нельзя, так как это нарушает базовый принцип ООП. Если метод есть у родителя, то должен быть и у потомка, и делать то же самое. Детали реализации внутри могут быть разные, конечно, но результат должен быть одинаков. Поэтому танк и собака не могут быть в одной цепочке наследования(ну кроме базовой "объект реального мира"), так как либо собака будет стрелять, либо танк гавкать.

Расскажите еще что-нибудь про то, что нельзя делать. Заодно раскройте суть фразы "делать то же самое". И где та грань, которая определяет "тоже самое" от "совершенно другое"? Я не страдаю тягой переносить в архитектуру аналогии из окружающего мира. Перефразирую. "Прапорщик сказал, что собака — танк, значит ищи пушку".

Krusty 19.09.2012 15:52

Я ваш сарказм не понимаю.

artcraft 19.09.2012 17:02

я целиком согласен с Krusty
ничего не мешает сделать из собаки танк, но делать этого не стоит
если вы хотите использовать повторно то общее что есть и в собаке и в танке, то следует вынести это общее в отдельный класс


Часовой пояс GMT +4, время: 01:11.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.