В то время как Flash и Silverlight достаточно интенсивно освещаются компьютерной прессой, конкурирующая с ними технология JavaFX по какой-то причине не столь полюбилась журналистам. "Компьютерные вести" исправляют такое положение вещей и предлагают вашему вниманию рассказ о практическом использовании этой многообещающей технологии.
Введение
Поскольку в прошлом номере "Компьютерных вестей" я уже рассказывал о том, что именно скрывается за названием JavaFX, повторяться не буду. Напомню лишь, что это технология построения RIA-приложений, предложенная компанией Sun Microsystems.
Самый важный вопрос, на который следует ответить, - чем JavaFX отличается от Java? Если отвечать на него кратко, то ответ будет простым: всем. Начиная хотя бы уже с того, что в JavaFX используется в качестве языка программирования не Java, а специальный JavaFX Script. Конечно, это не означает, что в JavaFX-приложениях вы не можете использовать код на Java.
Второй важный вопрос, который касается JavaFX, состоит в отличиях этой платформы от Flex и Silverlight. Отличие, в основном, в том, к каким платформам и инструментам привыкли разные разработчики. Если вам ближе Flash, то удобнее будет с Flex'ом, если .NET - с Silverlight'ом, ну а для тех, кто привык иметь дело с Java, как раз будет удобнее JavaFX. Конечно, когда речь заходит о мелочах, отличий выявляется больше, но если смотреть на эти платформы, что называется, с высоты птичьего полёта, то по своим возможностям они примерно равны.
Инструменты
Что ж, давайте приступим к непосредственному знакомству с JavaFX. Для того, чтобы оно состоялось, нам с вами нужно будет скачать и установить инструменты, без которых программирование на JavaFX попросту невозможно.
Первый - это, конечно же, JDK (Java Development Kit). Хотя JavaFX и Java, как я только что говорил, довольно существенно друг от друга отличаются, всё-таки в основе первого лежит второе, а потому без JDK, более того - одним JDK, в силу упомянутых различий, обойтись не удастся. Поэтому нам с вами понадобится ещё и JavaFX SDK. По идее, должно хватить и отдельного компилятора JavaFX Script'а, но, честно говоря, не думаю, что это будет намного удобнее, чем использовать SDK. И JDK, и JavaFX SDK можно найти на сайте компании Sun Microsystems, так что не буду приводить полные ссылки, чтобы не загромождать статью.
Ещё, пожалуй, неплохо бы заиметь какую-нибудь среду разработки, которая позволила бы создавать приложения с использованием JavaFX с максимально возможным комфортом. В настоящее время есть возможность использования JavaFX как в NetBeans, так и в Eclipse. И саму среду NetBeans, и плагин для Eclipse можно найти на сайте www.javafx.com. Что касается такой популярной среды, как IDEA (многим она нравится больше, чем Eclipse, и я догадываюсь, почему), то для неё плагина, который позволил бы добавить поддержку JavaFX в эту среду, пока ещё нет.
Скриптовый язык JavaFX: знакомство,
или "Hello World"
Что ж, считаем, что всё, что нужно было, вы установили, и теперь можно знакомиться с самим скриптовым языком, который используется при создании JavaFX-приложений. Он, в целом, достаточно похож на Java в плане синтаксиса написания кода, однако, конечно, различий тоже море.
Первое отличие - это декларативность языка. JavaFX Script - язык, "заточенный" под создание интерфейсов, а не под решение общих задач различного порядка, как Java. Соответственно, описания интерфейса в JavaFX выглядят довольно просто. Вы можете увидеть традиционное "Hello World"-приложение в листинге.
import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.text.Text; import javafx.scene.text.Font; Stage { title: "Hello World" width: 250 height: 80 scene: Scene { content: Text { font : Font { size : 24 } x: 10, y: 30 content: "Hello World" } } }
Обратите внимание, что благодаря декларативному характеру языка в этом листинге нет ни одной строчки кода, которая выполняла бы какую-либо инструкцию, однако, несмотря на это, программа делает то же самое, что должна делать любая программа из разряда "Hello World" - то есть, выводит пользователю эту фразу в качестве приветствия.
Переменные и функции
Впрочем, всё это не означает, что в JavaFX нельзя писать обычный, нормальный программный код, который делает что-то полезное. В JavaFX, как и в любом другом языке программирования, есть такие вещи, как переменные и функции.
Переменные в JavaFX объявляются с помощью ключевых слов var и def. Например, так: "def const1 = 100; var variable1; var variable2" (без кавычек, естественно). Чем отличаются эти объявления? В принципе, думаю, разница вполне очевидна. Хотя в терминах JavaFX всё это - переменные, на практике получается, что то, что объявляется с помощью def, является переменной, которая не может изменять своё значение, сиречь константой. То, что объявляется с помощью var, напротив, и пахнет как переменная, и ведёт себя соответствующим образом.
Кстати, хочу отметить, что и в именах переменных, и в именных функций в JavaFX используются те же соглашения, что и в Java - то есть, когда название переменной или функции содержит в себе несколько слов, то первое пишется со строчной буквы, а остальные - с прописной. Например: thisIsVariable, thisIsFunction.
Что касается функций, то они в JavaFX выглядят и работают так же, как и везде: у вас есть какие-то входные параметры, вы что-то с ними делаете и возвращаете какое-то значение. Например, так, как это делается в листинге.
function add(argOne: Integer, argTwo: Integer) : Integer { result = argOne + argTwo; println("{argOne} + {argTwo} = {result}"); return result; }
В нём вы можете увидеть функцию, занимающуюся суммированием двух чисел и выводом результата на экран.
Объекты
Говорим Java - подразумеваем объектно-ориентированное программирование. Говорим JavaFX... Хм, что-то ООП до сих пор мы здесь не видели. Неужели после Java в Sun Microsystems решили сделать чисто процедурный язык? То есть, простите, процедурно-декларативный. Оказывается, не совсем. Без объектов в современном ИТ-мире ни туда, ни сюда. Никуда от них не деться и тем, кто решил использовать в своей работе JavaFX.
Надо сказать, что объекты в JavaFX и объекты в Java внешне более чем похожи. И тут, и там они являются экземплярами особых типов данных - классов. Разница в объявлении классов состоит, пожалуй, только в различном объявлении их членов - вместо C-подобных "int i" в Java мы видим паскалевские "var i: integer". Пример класса, написанного на JavaFX Script'е, можно увидеть в листинге.
class Customer { var firstName: String; var lastName: String; var phoneNum: String; var address: Address; function printName() { println("Name: {firstName} {lastName}"); } function printPhoneNum(){ println("Phone: {phoneNum}"); } function printAddress(){ println("Street: {address.street}"); println("City: {address.city}"); println("State: {address.state}"); println("Zip: {address.zip}"); } }
Классы можно наследовать друг от друга (к счастью, как и в Java, наследование одиночное). Можно переопределять методы и делать прочие вещи, к которым привыкли те, кто привык к объектно-ориентированному стилю программирования. Есть и привычные по Java модификаторы доступа protected и public. Есть и другие, не менее полезные - public-read и public-init. Как написано в официальной документации, "модификатор доступа public-read определяет переменную, которая доступна для чтения отовсюду, но для записи (по умолчанию) доступна только из текущего скрипта. Модификатор доступа public-init определяет переменную, которая может быть публично инициализирована объектной константой, содержащейся в любом пакете".
Больше всего из того, что связано с классами, мне в JavaFX понравились объявления экземпляров классов. Фактически, мы с вами уже с ним сталкивались - в том самом приложении "Hello World", которое можно увидеть в первом листинге. В листинге можно увидеть аналогичное объявление для экземпляра только что рассмотренного класса Customer из предыдущего примера.
def customer = Customer { firstName: "John"; lastName: "Doe"; phoneNum: "(408) 555-1212" address: Address { street: "1 Main Street"; city: "Santa Clara"; state: "CA"; zip: "95050"; } }
Промежуточные итоги
Что ж, давайте подведём итоги - пока что промежуточные - тому, что было сказано выше о JavaFX. Почему промежуточные? Потому что мы с вами ещё продолжим увлекательный разговор о JavaFX - ведь, фактически, мы только начали знакомство с этой интересной и перспективной технологией и даже до конца не успели рассмотреть скриптовый язык, лежащий в её основе.
Язык этот, как видите, отличается от Java, однако, к счастью, эти отличия не делают его сложным для понимания и использования. Как и Java, JavaFX Script предлагает удобные средства работы с объектами, но при этом имеет очень интересные декларативные возможности, которые наверняка не останутся невостребованными при реальном создании RIA-приложений. В общем и целом, можно сказать, что JavaFX Script так же прост и так же эффективен, как и сама Java. И, наверное, было бы даже странно, если бы у компании, сумевшей в своё время создать такой великий язык программирования, как Java, скриптовый язык для RIA-приложений получился бы откровенно слабым.
Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by
Комментарии