Виталий Хить (well). Виджеты Примеры кода Собственное обучение.

Презентация:



Advertisements
Похожие презентации
Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
Advertisements

Программная инженерия Андрей Дмитриев ©
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Виталий Хить, Абсолютист.
АССОЦИАТИВНЫЕ КОЛЛЕКЦИИ Лекция 6 1. Отличие от последовательных 2 В последовательной коллекции каждый элемент ассоциируется с номером, начиная с 0. В.
Ассоциативные списки Поиск данных происходит не по индексу или положению объекта, а по его ассоциативной связи: public interface Map { // Доступ к объектам.
Высокоуровневые методы информатики и программирования Лекция 14 Интерфейсы.
Делегаты Как созданные объекты могут посылать сообщения тем объектам, которые их породили? При программировании под Windows на С и C++ основное средство.
Обработка исключительных ситуаций. Синтаксис try{ операторы0; } catch (ТипИсключения1 переменная1){ операторы1; } catch (ТипИсключения2 переменная2){
Исключительные ситуации. Схема обработки исключений Try { //охраняемый блок trow (new MyException();) } catch(MyExeption e) { … } catch(Exeption e){ …
Лекция 11. Введение в ООП. Часть 4 Красс Александр СПбГУ ИТМО, 2008.
Типы данных Инна Исаева. Переменные Переменная - это как ящик, в котором можно хранить данные. Каждая переменная имеет своё имя, она служит для хранения.
EXtreme Programming XP Тема 3. XP Пусть есть некоторая информационная система для банков. В качестве основной валюты для расчетов используется доллар,
Test 6 Вопрос 1. Как можно уничтожить объект в Java? a)присвоить null всем ссылкам на объект b)вызвать Runtime.getRuntime().gc() c)вызвать метод finalize()
Изучение динамического определения типов. Класс Class. Динамическая загрузка и инстанцирование классов. В Java вся информация о классе хранится в специальном.
Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
Лекция 2 Наследование Наследование в Java имеет тот же смысл, что и в С++. Однако наследование в Java осуществляется при помощи ключевого слова extends.
MACROMEDIA FLASH Свойства объектов. Каждый экземпляр символа Movie Clip, помещенный на поле может иметь своё уникальное имя. Например, имя экземпляра.
Обработка исключений в C# Единая техника обнаружения ошибок времени выполнения и передачи информации о них.
Adobe Flex Новая технология для создания RIA на базе Flash-платформы Константин Ковалев RIA-разработчик
Транксрипт:

Виталий Хить (well)

Виджеты Примеры кода Собственное обучение

Flex Flash Minimal Components (bit-101.com)

Плюсы Минусы Большое количество на все случаи жизни Тяжелая swf Хорошая документация Тормоза Постоянные обновленияmxml Индустриальный стандарт Большое количество вспомогательных классов

Плюсы Минусы Облегченная swf Коммерческая версия Хорошая документация Безобразный код Минимальное количество классов Заточены под Flash Удобство сканирования Базируются на MovieClip

Плюсы Минусы Очень маленький объем swf Версия не дошла до 1 Встроенный шрифт Спорное проектирование базовых классов Неплохой дизайн Отсутствие скинов Минимальное количество классов Минимальная документация

Компонент Мышка ОтображениеКлавиатура Менеджер

«ТAB» Экземпляр компонента Ввод с клавиатуры Активный компонент

Менеджер Параметры класса Класс Экземпляр Класс Глобальные параметры

Компонент Менеджер отображения Скин экземпляра Менеджер отображения Менеджер мышки Менеджер свойств

SpriteMovieClip «Один кадр»«Много кадров» Легкий Тяжелый FlexFlash

Координаты Размеры Состояния Visible Enabled Мышка (up, over, down) Значения Стили Стили экземпляра компонента Глобальные стили (класс, глобальные)

Изменение большого количества свойств между интервалами ENTER_FRAME Установление флага об изменении свойств и установка листенера на ENTER_FRAME Изменение видимого отображения компонента на следующем ENTER_FRAME

static public const ISIZE :uint = 0x01; static public const ISTYLE :uint = 0x02; ……. protected var invalidHash :uint; ……. public function invalidate(property: uint = InvalidationType.ALL, callLater :Boolean = true):void { invalidHash |= property; if (!_inCallLater) { addEventListener(Event.ENTER_FRAME, callLaterDispatcher,false,0,true); _inCallLater = true; } protected function validate():void { invalidHash = 0; _inCallLater = false; } private function callLaterDispatcher(event:Event):void { removeEventListener(Event.ENTER_FRAME,callLaterDispatcher); draw(); } protected function draw() :void { if (isValid(ISTYLE | ISIZE)) {... } validate(); }

x, y -> _x, _y, move() width, height -> _width, _height, setSize() scaleX, scaleY

static private const defaultStyles:Object = { color :0xffffff, defaultLabel : Label, disabledSkin : Label_DisabledSkin }; public static function getStyleDefinition():Object { return defaultStyles; }

protected var instanceStyles:Object; protected function getStyleValue(name:String):Object { return (instanceStyles[name] == null) ? StyleManager.getStyleValue(name, _classDef) : instanceStyles[name]; } protected function getDisplayObjectInstance(skin:Object):DisplayObject { var classDef:Object = null; if (skin is Class) { return (new skin()) as DisplayObject; } else if (skin is DisplayObject) { (skin as DisplayObject).x = 0; (skin as DisplayObject).y = 0; return skin as DisplayObject; } try { classDef = getDefinitionByName(skin.toString()); } catch(e:Error) { try { classDef = loaderInfo.applicationDomain.getDefinition(skin.toString()) as Object; } catch (e:Error) { // Nothing } if (classDef == null) { return null; } return (new classDef()) as DisplayObject; }

private static var _instances :Dictionary = new Dictionary(true); private static var _styles :Dictionary = new Dictionary(true); public static function getStyleValue(name :String, classDef :Class = null) :Object { var style :Object = _styles[classDef]; return (style && style[name]) ? style[name] : _styles[null][name]; } public static function setStyle(name :String, value :Object, classDef :Class = null) :void { if (!_styles[classDef]) _styles[classDef] = {}; _styles[classDef][name] = value; if (classDef) invalidateStyle(classDef); else for (var obj :* in _instances) invalidateStyle(obj == 'null' ? null : obj); }

public static function registerInstance(instance :UIComponent) :void { var classDef :Class = getClassDef(instance); if (!classDef) return; if (!_instances[classDef]) _instances[classDef] = new Dictionary(true); _instances[classDef][instance] = true; if (_styles[classDef]) return; var target :Class = classDef; var defaultStyles :Object = null; while (!defaultStyles) { if (target["getStyleDefinition"]) { defaultStyles = target["getStyleDefinition"](); break; } try { target = instance.loaderInfo.applicationDomain.getDefinition(getQualifiedSuperclassName(target)) as Class; } catch(err :Error) { try { target = getDefinitionByName(getQualifiedSuperclassName(target)) as Class; } catch (e:Error) { defaultStyles = UIComponent.getStyleDefinition(); break; } } _styles[classDef] = defaultStyles; if (!_styles[null]) _styles[null] = UIComponent.getStyleDefinition(); }

FlashFlex Библиотечные символыEmbeded классы Имя класса указывается при экспорте Имя класса генерируется компилятором По умолчанию скин MovieClip По умолчанию скин SpriteAsset Swf «чистая»Добавляются вспомогательные классы из Flex SDK

public class fl.controls.Button extends UIComponent { [Embed (source='../skin/skin.swf', symbol='Button_disabledSkin')] static private var disabledSkin :Class; public class fl.controls.Button_disabledSkin extends SpriteAsset private static var defaultStyles:Object = { disabledSkin :"fl.controls::Button_disabledSkin",

Удалить acsessibility составляющую Удалить FocusManager и сопутствующие классы Упростить Style Manager Удалить из UIComponent Связь с фокус менеджером Связь со средой разработки Flash (?) Изменение scale составляющей Исправить ошибки в дочерних классах Изменить названия скинов (если используется flex)