ООП во FLASH 5


Содержание


Ладно, теперь, зная всё это, давайте попробуем заново создать класс Shape. На этот раз чуть меньше "псевдо" и чуть больше "кода".

// Shape Class Shape = function() { // тут ничего делать не надо } // Properties x,y,width,height // давайте использовать настоящие имена, раз уж на то пошло. // Methods setLocation( x, y ) { this.x = x; this.y = y; } getLocation() { return this.x; return this.y; // назревает проблемка? Хе-хе... } setSize( w, h ) { this.width = w; this.height = h; } getSize() { return this.width; return this.height; // что же делать? }

Не так уж много кода понадобилось написать, чтобы всплыла новая проблема: разумеется, с getLocation и getSize, ибо невозможно сделать возврат из метода дважды, а нам-то нужно вернуть два значения. Самое очевидное решение - запаковать оба значения в объект и вернуть объект, например: obj.x и obj.y. Это выход из положения, но как теперь сообщить пользователю, что его ожидает? Можно пойти на дополнительный шаг: вместо того, чтобы возвращать абстрактный объект, создадим стандартный объект, который будет использоваться всегда. Пусть это заставит кое-кого ответственнее относиться к работе, что ж, ответственность крайне важная черта, как для разработчиков, так и для продавцов софта.

Какова же основная единица измерения позиции? А это смотря какими параметрами измерять: x и y, шириной и долготой, xyz, или даже углом-радиусом, все они задают точку. Мы будем работать с 2D и использовать декартовы координаты, поэтому наша точка будет содержать x и y. Как вы уже наверно догадались, мы зададим точку как класс:

// Point Class Point= function( x, y ) { this.x = x; this.y = y; }

Теперь, чтобы задать позицию, можно сказать:

s1.setLocation( new Point(20, 30) );

Помимо решения проблемы с get, мы получили ещё ряд преимуществ. Во-первых, наш код стал гораздо чище. Достаточно только взглянуть на одну строку, чтобы понять, что позиция s1 устанавливается в определённую точку. Кроме того, метод setLocation теперь точно знает, что он получит, объект Point не такой уж и большой, но если нужно использовать более сложные объекты, очень пригодится знание того, что все значения установятся в дефолтные, если не будут заданы явно. Да и копирование свойств одного объекта в другой теперь становится проще:




Начало  Назад  Вперед