Всем привет! Сегодня мы поговорим о такой важной вещи, как объектно-ориентированное программирование и как его можно использовать в контексте разработки Windows Store JavaScript приложений.
Как правило, любая программа, выходящая по уровню сложности за рамки калькулятора, должна иметь определенную архитектуру, то есть определенный набор классов, компонентов и правил их взаимодействия.
Однако, исторически, в языке JavaScript, поддержка объектно-ориентированного программирования была очень слабой, поэтому сегодня существует множество библиотек, которые расширяют ядро языка, добавляя синтаксис для создания классов (Microsoft AJAX, CoffeScript, TypeScript и прочие).
Разработчики ядра WinJS прекрасно понимали, что для Windows 8 будут писаться отнюдь не простые приложения, поэтому предусмотрели возможности удобной работы с классами.
В этой статье мы познакомимся с основными приемами ООП на WinJS.
Для создания класса необходимо следовать следующему синтаксису.
1: var object = WinJS.Class.define(constructor, instanceMembers, staticMembers);
Здесь вы можете задать конструктор, свойства и методы объекта, а также статические свойства и методы типа. Рассмотрим пример создания класса и его использования:
1: var Car = WinJS.Class.define(
2: function(name) {
3: this.modelName = name;
4: },
5: {
6: modelName: "",
7: getPrice: function() {
8: return 10;
9: }
10: },
11: {
12: canFly: false,
13: getAllModels: function() { }
14: }
15: );
Для доступа к свойствам и методам объекта необходимо сначала создать объект класса. Доступ к статическим членам осуществляется через имя класса. Пример использования класса Car приведен ниже:
1: var o = new Car("BMW");
2: o.modelName;
3: o.getPrice();
4:
5: Car.canFly;
6: Car.getAllModels();
Наследование
Одно из основных понятий ООП - наследование. Объект потомок получает свойства и методы родителя. В WinJS это реализовано следующим образом:
1: var SportCar = WinJS.Class.derive(
2:
3: Car, // класс-родитель
4:
5: function () { }, // конструктор
6:
7: {
8: sportVendor: "" // поле типа
9: },
10: {
11: getAllSportModels: function () { } // статический метод
12: }
13: );
14:
15: var o = new SportCar("Mitsubishi Sport"); // конструктор родителя
16: o.modelName // поле родителя
17: o.sportVendor // поле потомка
Тут вроде все понятно, объект класса потомка имеет доступ как к собственным полям и методам, так и к членам родительского класса. А вот дальше мы посмотри на кое-что оригинальное, чего вы не найдете в таких языках как C# или Java.
Смешивание
Как и во многих языках, в JavaScript не поддерживается множественное наследование. В WinJS предусмотрели функция для эмулирования такого поведения. При помощи следующего синтаксиса все поля и методы одного класса копируются в целевой класс.
1: WinJS.Class.mix(MyClass, ClassForImport);
Данную функцию можно вызывать множество раз, интегрируя в свой класс любое количество других классов. Один из типичных сценариев использования – присоединение к своему классу объект WinJS.UI.DOMEventMixin. При этом ваш класс получает методы работы с событиями.
Пространства имен.
Также стоит обратить внимание на работу с пространствами имен. Совершенно недопустимо создавать все классы приложения в глобальном пространстве имен, тем самым превращая его в свалку.
Ядро WinJS предлагает нам две основные функции управления пространствами имен:
1) Объявление пространства имен.
1: WinJS.Namespace.define("AutoNamespace", {
2: Car: WinJS.Class.define(...)
3: });
Все классы объявленные внутри объекта будут созданы в указанном пространстве имен. Чтобы создать объект такого класса необходимо использовать полный путь к нему, как показано ниже:
1: var o = new MyNamespace.Car("BMW");
2) Расширение существующих пространств имен. Такой сценарий бывает полезен при написании различных классов расширений/дополнений/утилит. Например, реализовав свой кастомный контрол, вполне логично поместить его в пространство имен WinJS.UI, как показано в примере ниже:
1: WinJS.Namespace.defineWithParent(WinJS.UI, "MyNamespace", {
2: Car: WinJS.Class.define(...)
3: });
Теперь класс Car будет доступен по адресу: WinJS.UI.Car.
Итак, мы рассмотрели с вами все базовые вещи, которые относятся к ООП в WinJS. Спасибо, что дочитали до этого места :) Приятной разработки на платформе Windows 8!
А на сайте: www.superplayers1.ru можно посмотреть курс по созданию ка
ОтветитьУдалить