Objective-J

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 20:01, 1 июня 2016.
Objective-J
Objective-J.png
Парадигма мультипарадигменный: рефлексивно-ориентированный, объектно-ориентированный, императивный, скриптовый, функциональный
Спроектировано Cappuccino Core Developers and community
Первый   появившийся 2008
Печать дисциплины динамическая, неявная, слабая
Лицензия LGPL
Портал: http://www.cappuccino-project.org/
Под влиянием
Objective-C, JavaScript

Objective-J - язык программирования основанный на языке Objective-C. Является расширение языка JavaScript, что означает, что любой код на языке JavaScrypt является корректным кодом на языке Objective-J. Objective-J добавляет в JavaScript традиционное наследование и динамическую диспетчеризацию. Программам, написанным на Objective-J, требуется предварительная обработка перед тем, как они смогут быть исполнены виртуальной машиной JavaScript в веб-браузере. Этот этап может проходить во время исполнения в веб-браузере с помощью компилятора, который транслирует программы на Objective-J в код на чистом JavaScript. Компилятор Objective-J написан на JavaScript, и поэтому развертывание программ на Objective-J не требует наличия какой-нибудь специальной надстройки для браузера.Первое полномасштабное применение Objective-J связано с созданием веб-приложения 280Slides в 2008 году на основе фреймворка Cappuccino. Хотя Objective-J может быть использован (и разрабатывался) независимо от Cappuccino, Objective-J в первую очередь был создан для поддержки веб разработки на основе Cappuccino.

Классы

В языке Objective-J есть два типа объектов: встроенные объекты JavaScrypt и объекты Objective-J. Объекты Objective-J представляют собой особый тип встроенного объекта, добавленного Objective-J. Эти новые объекты основаны на классах и классическом наследовании. Создание класса на Objective-J очень просто. Ниже приведен пример класса Address который содержит имя жильца и город.

 @implementation Address : CPObject
 {
     CPString m_name;
     CPString m_city;
 }
 @end

Класс начинается с ключевого слова @implementation, после чего следует имя класса. После символа двоеточие следует имя родительского класса, от которого наследуется класс. В этом примере класс Address наследуется от класса CPObject, который является корневым классом для большинства классов. После объявления, блок между фигурными скобками используется для определения всех переменных-членов. Каждый член определяется на отдельной строчке с указанием типа и имени и заканчивается символом точка с запятой. Указание типа не является обязательным, но рекомендуется. Заявление о переменных-членов является важным, потому что любая переменная не объявленная переменная, которая используется в другом месте класса, автоматически станет глобальной переменной. Класс заканчивается ключевым словом @end.

Методы

В дополнение к родным функций, Objective-J добавляет методы, которые являются частью новой системы класса. Ниже приведен пример методов класса Address

 - (void)setCity:(CPString)aCity
 {
     m_city = aCity;
 }
 - (CPString)name
 {
     return m_name;
 }

Методы можно писать после определения класса, между ключевыми словами @implementation и @end. Каждый метод начинается со знака тире (-) или плюс (+). Тире используется для определения методов объекта. Плюс используется для определения методов класса. После знака указывается возвращаемый методом тип, после чего следует имя метода. Знак двоеточие указывает на параметры который принимает метод. Если метод принимает больше одного параметра, то все параметры разделяются знаком двоеточие.

 - (void)initWithName:(CPString)aName city:(CPString)aCity
 {
     m_name = aName;
     m_city = aCity;
 }

Использование объектов и классов

Ниже приведен пример создания объекта Address:

 var myAddress = [[Address alloc] init];
 [myAddress setCity:"Moscow"];

Использование методов в языке Objective-J называется "сообщением". Сообщения отправляются с помощью квадратных скобок: [объект сообщение]. Каждый класс написанный на Objective-J имеет метод класса alloc, который возвращает новый объект этого класса. При создании класса необходимо вызвать метод alloc, после чего метод init. Каждый класс наследует метод инициализации init от класса CPObject. Метод alloc является аналогом оператора new в языке C++, Java, C#, а метод init является аналогом конструктора.

Ссылки и разыменования

На языках С/С++ при использовании ссылок необходимо их разыменовать. В языке Objective-J необходимо использовать методы @ref и @deref. Ниже приведен пример на языках C и Objective-J: C:

 int a;
 int *aPtr = &a;
 *aPtr = 5;
 printf("%d\n", *aPtr);  // 5.
 printf("%d\n", a);      // 5.

Objective-J:

 var a,
     aRef = @ref(a);
 @deref(aRef) = 5;
 console.log(@deref(aRef));  // 5.
 console.log(a);             // 5.

Если есть ссылки, можно передать их, сохранить их, и разыменовать их по мере необходимости. Это не фактический указатель, потому что арифметика не возможна.

Импорт кода

В JavaScript возможность импортировать код таким же образом, как в языках Java и C, отсутствует. С этой целью, в Objective-J добавлен оператор @import.

 @import <Foundation/CPObject.j>
 @import <AppKit/CPView.j>
 @import "MyClass.j"

Есть два типа оператора @import. Угловые скобки указывают на код фреймворка, в то время как кавычки указывают на локальный код проекта. Импорта кода фреймворка использует встроенный механизм поиска нужного файла. Локальный импорт ищет нужный файл только относительно импортирующего файла.

Категории

Категории позволяют добавлять методы класса без необходимости создавать дочерний класс или изменять исходный код класса. Новый метод (или методы) становится частью класса как только категория загружается. Это полезно в различных сценариях, например, добавление метода в встроенный языком класс. Если есть необходимость добавить метод в класс CPString который возвращает "перевернутую" строку, можно определить категорию следующим образом:

 @import <Foundation/CPString.j>
 @implementation CPString (Reversing)
 - (CPString)reverse
 {
    var reversedString = "",
        index = [self length];
    while(index--)
        reversedString += [self characterAtIndex:index];
    return reversedString;
 }
 @end

Теперь каждую строку можно "перевернуть".

  var myString = "hello world",
     reversed = [myString reverse];
 alert(reversed);  // alerts "dlrow olleh"

Синтаксис для категорий является ключевое слово @implementation, после чего следует класс в который добавляется категория, указанная в скобках. Любые методы, добавленные перед ключевым словом @end станут частью категории. Нельзя добавить член класса с помощью категорий.

Совместимость

Cappuccino совместим со многими браузерами, включая Internet Explorer 7+, Firefox 2+, Safari 3+, Opera 9+, and Google Chrome.

Список литературы

  1. Learning Objective-J
  2. Accilivity NYC Developers Blog
  3. Objective-J