![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jun 2012
Сообщений: 40
|
пожалуйста помогите по этой теме, на простых примерах
|
|
|||||
|
Динамическое связывание, полиморфизм. Что не понятно?
|
|
|||||
|
Регистрация: Jun 2012
Сообщений: 40
|
Цитата:
|
|
|||||
|
в теориях не силен, сори, если что
но мне представляется совсем простая штука: с полиморфизмом понятно - наследники могут могут иметь свою реализацию свойств\методов базового класса, а динамическим в этом контексте связывание будет потому, что на этапе компиляции не обязательно должно быть известно какая именно из реализаций понадобится вот пример как бы из букваря, типов фигур может быть сколько захочешь, можно и других добавить - код не изменится 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; } } |
|
|||||
|
Регистрация: Jun 2012
Сообщений: 40
|
Цитата:
silin, я не разобрался с примером, просто я не все изучил и есть в этом примере вещи мне непонятные может есть какая-нибудь метафора для объяснения полиморфизма и динам связ |
|
|||||
|
полиморфизм это когда пудель одновременно является собакой, зверем, живым существом и домашним животным, но для некоторых он просто Шарик
под динамическим связыванием вы вероятно имели в виду Data binding метафора: кукла вуду связана с жертвой, если куклу колоть иголками, то это мгновенно отразится на жертве (свойство "полученный урон" жертвы связано с аналогичным свойством куклы)
__________________
Хороший отдых - половина работы. Последний раз редактировалось artcraft; 18.09.2012 в 21:03. |
|
|||||
|
.
|
Цитата:
|
|
|||||
|
Регистрация: Jul 2007
Сообщений: 393
|
Только вот делать такого нельзя, так как это нарушает базовый принцип ООП. Если метод есть у родителя, то должен быть и у потомка, и делать то же самое. Детали реализации внутри могут быть разные, конечно, но результат должен быть одинаков. Поэтому танк и собака не могут быть в одной цепочке наследования(ну кроме базовой "объект реального мира"), так как либо собака будет стрелять, либо танк гавкать.
|
|
|||||
|
полиморфизм это не наследование
хоть и тесно связаны полиморфизм это когда к одной конкретной собаке в зависимости от контекста можно обращаться по разному, эй пудель, или эй шарик, или эй кучерявый и в любой ситуации это будет верно т.к. эта конкретная собака является кучерявым пуделем шариком наследование это когда пудель расширяет более общее понятие собака, которое в свою очередь расширяет еще более общее понятие зверь
__________________
Хороший отдых - половина работы. |
|
|||||
|
Цитата:
![]() геометрическая фигура (Figure) может быть всякой, что и описываем в наследниках (Circle и Square) в моем примере это вычисление площади, в базовом классе пустышка (необязательно, но здесь так уж вышло), для круга и квадрата своя конкретика, реализация area() для каждого своя - полиморфизм теперь такие ситуации: 1)работаем конкретно с кругом, создаем экземпляр и вычисляем его площадь компилятор заведомо знает метод какого класса вызывается - статическое связывание 2)работаем с любой фигурой вычисляем, например объем 3d-плюшки, выдавленной из фигуры компилятор не знает, какая фигура (экземпляр какого класса) будет передана в метод, но сработает fig.area(), соответствующий именно типу (классу) этого экземпляра - динамическое связывание |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:31. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|