Форум 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)

wisconsin 18.09.2012 18:44

Объясните динамическое связывание и полиморфизм
 
пожалуйста помогите по этой теме, на простых примерах

bav 18.09.2012 18:57

Динамическое связывание, полиморфизм. Что не понятно?

wisconsin 18.09.2012 19:13

Цитата:

Сообщение от bav (Сообщение 1096396)

там нет примеров связанных с as

silin 18.09.2012 19:32

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

package
{
 
        public class Main extends Sprite
        {
 
                public function Main():void
                {
                        var list:Vector.<Figure> = Vector.<Figure>([new Circle(), new Square()]);
 
                        for each(var fig:Figure in list)
                        {
                                // компилятор здесь не знает какие наследники Figure в списке
                                // все это выяснится в рантайме
                                trace( "fig : " + fig +"; area : " + fig.area());
                        }
 
                }
 
        }
 
}
 
class Figure
{
        public var size:Number = 1;
        public function area():Number {        return 0;}
}
 
class Circle extends Figure
{
        override public function area():Number        { return 0.25 * Math.PI * size * size;        }
}
 
class Square extends Figure
{
        override public function area():Number        { return  size * size;        }
}


wisconsin 18.09.2012 20:12

Цитата:

Сообщение от bav (Сообщение 1096396)

первая ссылка вообще не к теме...


silin, я не разобрался с примером, просто я не все изучил и есть в этом примере вещи мне непонятные

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

artcraft 18.09.2012 20:52

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

под динамическим связыванием вы вероятно имели в виду Data binding
метафора: кукла вуду связана с жертвой, если куклу колоть иголками, то это мгновенно отразится на жертве
(свойство "полученный урон" жертвы связано с аналогичным свойством куклы)

dimarik 18.09.2012 21:05

Цитата:

пудель одновременно является собакой
А если переопределить его методы "гав" и "апорт", то он сможет быть и танком. Вот такая тут метафора, вот такая полиморфизма.

Krusty 18.09.2012 21:12

Цитата:

Сообщение от dimarik (Сообщение 1096433)
А если переопределить его методы "гав" и "апорт", то он сможет быть и танком. Вот такая тут метафора, вот такая полиморфизма.

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

artcraft 18.09.2012 21:37

полиморфизм это не наследование
хоть и тесно связаны

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

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

silin 18.09.2012 21:45

Цитата:

Сообщение от wisconsin (Сообщение 1096421)
я не разобрался с примером, просто я не все изучил и есть в этом примере вещи мне непонятные

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

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

теперь такие ситуации:
1)работаем конкретно с кругом,
создаем экземпляр и вычисляем его площадь
Код AS3:

var circle:Circle = new Circle();
var circleArea:Number = circle.area();

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

2)работаем с любой фигурой
вычисляем, например объем 3d-плюшки, выдавленной из фигуры
Код AS3:

function calcVolume(fig:Figure, height:Number):Number
{
        return height * fig.area();
}

компилятор не знает, какая фигура (экземпляр какого класса) будет передана в метод, но сработает fig.area(), соответствующий именно типу (классу) этого экземпляра - динамическое связывание


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

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