« Клонирование объектов утилитой ObjectUtil.copyПубличные переменные в классе flash.geom.Point »

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

Проблема:
Допустим, сделал я интерфейс IVector:

  1. interface IVector{
  2. function get x () : Number;
  3.  …
  4. }

Есть у меня класс утилита, который работает с этим интерфейсом:

  1. class VectorMath{
  2.   public function calc(v:IVector):IVector
  3.   {
  4.   …
  5.   }
  6. }

Кульминация - нужно сделать реализацию IVector:

  1. class Vector  implements IVector
  2. {
  3.   private var _x  : Number;
  4.   public function get x () : Number
  5.   {
  6.         return _x;
  7.   }
  8. }

Если присмотреться к классу Vector, становиться понятно, что он очень похож на Point.
Что же делать, ведь в данной реализации наследовать Vector от Point нельзя. Включать Point в Vector тоже нехорошо, потому как мы потеряем поведение Point. И для всех системных утилит принимающих Point, придется делать преобразование.

Решение:
Перепишем интерфейс IVector:

  1. interface IVector
  2. {
  3.   function get i () : Number;
  4.  
  5. }

И реализация IVector будет иметь следующий вид:

  1. class Vector  extends   Point implements IVector
  2. {
  3.   public function get i () : Number
  4.   {
  5.         //это не опечатка :)
  6.         return super.x;
  7.   }
  8. }

Вот такая радость:). Сегодня придумал. Если вы увидели недостатки данного решения, очень прошу поделиться.

Bookmark this article at

Постоянная ссылка 2007-03-28 22:40:51, от agahov Email , 560 слов, Рубрики: AS3 , 5 комментариев »

5 комментариев

Комментарий от: GB [Посетитель] Email
Я так ниче не понял, зачем-то что-то куда-то.
2007-03-29 @ 10:55
Согласна с GB.
Не понятно для чего i? Почему i? Как применять это решение?
2007-03-29 @ 11:32
Если написано не очень понятно, не расстраивайтесь. Просто я пишу книгу и решил опубликовать отрывок... видимо отрывок оказался неудачный, уж больно у него сильное сцепление с другими главами
2007-03-29 @ 21:37
Просто я пишу книгу и решил опубликовать отрывок...


А что за книга будет?
2007-04-02 @ 14:17
Комментарий от: TurboUploading.com [Посетитель] Email · http://turbouploading.com
Try TurboUploading.com for Upload your files and share it anywhere!
2008-02-01 @ 17:00

Оставить комментарий


Ваш email адрес. (Не будет показан на сайте.)

Ваш URL будет показан.
:!: :?: :idea: :) :D :p B) ;) :> :roll: :oops: :| :-/ :( :'( |-| :>> :yes: ;D :P :)) 88| :. :no: XX( :lalala: :crazy: >:XX
(Заменить прерывания строк на <br />)
(Имя, email и сайт)
(Разрешить пользователям посылать вам сообщения (ваш email не отображается).)
3 + 2 + 7 - 1?
antispam test

Вы можете использовать OpenID чтобы предоставить ваше имя, email и url.