Написать небольшую заметку на данную тему я решил после того, как прочитал тут на Хабре, обсуждение о выборе языка разработки для нового десктоп приложения. С завидным постоянством упоминался тот момент, что визуально, приложения на Java выглядят аляповато. Вот и решил я, слегка, прояснить это вопрос.
Итак, в чём же состоит особенность реализации десктоп приложений на Java и почему они способны быть очень красивыми? А также, откуда родился миф об ущербности (некоторые экзальтированные личности, порой, склонны даже употреблять слово ‘убогость’) Java GUI, читайте ниже. Я постарался не вдаваться в тонкости, не писать никакого кода, да и вообще не использовать никаких специфических для Java мира знаний. Хотелось бы, что бы заметка была понятна людям, далёким от этой технологии.
Большинство эрудированных программистов таки знают, что… Java приложение должно быть максимально кросс-платформенным. Также, как правило, самые эрудированные из них знают и то, что стандарты на внешний вид для разных операционных систем несколько отличаются. Стало быть возникает и вопрос, а как собственно то достичь того, что бы приложение выглядело красиво, в том понимании красоты, как её привыкли оценивать пользователи конкретных операционных систем?
А вот как. Видимо, не ошибусь, если скажу, что любой из нас знает, что такое Winamp. И скорее всего знает что такое skin (кожа). Мы все привыкли к тому, что эта программа может выглядеть абсолютно иначе, если ей поменять “кожицу”. Разумеется этой особенностью обладают и многие другие программы. А теперь вернёмся к нашим ба… нашей Java. Основным программным фреймворком, который используется для разработки Java десктоп приложений и стандартно поставляется в составе платформы, является Swing (гусары молчать!). Этот фреймворк вообще является хорошим примером проектирования ООП приложений, но сейчас, нас в нём интересует только две его особенности.
Особенность номер один – все визуальные элементы, которые мы видим в приложении, рисуются непосредственно и только самим этим фреймворком, используя самые элементарные графические примитивы системы.
Особенность номер два – вся эта рисовательная мутотень, тщательно и аккуратно вынесена в отдельный слой со своим чётко постулированным и открытым интерфейсом. Слой этот, по умному, называется Look&Feel. А вот тут, прошу обратить особенное внимание на слова “чётко постулированный открытый интерфейс”. Что это означает по жизни? А по жизни, это означает, ни много, не мало, что мы имеем эдакую “программную кожицу” (skin) которую может по своему вкусу реализовать абсолютно любой разработчик, знающий этот замечательный язык Java. Круглые, полупрозрачные кнопки с прыгающими внутри логотипчиками Windows? Нет проблем!
Но это ещё не всё. Главное то, что уже давно появился рынок этих самых Look&Feel. То есть имеется большая кодла энтузиастов, которые принялись с энтузиазмом эти Look&Feel-ы рисовать, с точки зрения их личностного понимания природы красоты.
Разумеется, для разминки, вначале появились кожицы делающие внешний вид и поведение как у Outlook (всех версий можно найти), как Windows XP, как известные интерфейсы из Юникс мира и… пошло поехало. Как вы правильно понимаете, давно есть Look&Feel дающие Java программе внешний вид приложений и как в ОС от компании Apple. Включая работу стандартных клавиш для доступа к элементам интерфейса.
В стандартной поставке библиотек Java идёт несколько реализаций разных Look&Feel. Люди, имеющие доступ к интернету, могут найти неплохие образцы, к примеру, вот тут:
www.jidesoft.com
или тут:
www.incors.com/lookandfeel
www.javasoft.de/jsf/public/products/synthetica/themes
Как вы понимаете, это всё также означает следующее – любая программа на Java, написанная с помощью Swing, может иметь а-абсолютно любой мыслимый визуальный интерфейс, который будет выглядеть совершенно одинаково в любой операционной среде. А с другой стороны, любая программа может поставляться с несколькими визуальными интерфейсами, которые можно прямо из меню переключать во время работы. И эти красивые интерфейсы уже давно сделали за вас и бесплатно раздают. Или платно раздают. Те иногда даже получше бесплатных. Хотя и не всегда. Очевидно также и то, что все эти визуальные компоненты наследуются от одного общего предка и, стало быть, опираясь на него, вы можете придумать свой визуальный компонент, который будет рисоваться и работать так, как лично вам это нравиться. Учитывая всё вышеописанное (и проверенное мной на практике), утверждение, что Java некрасива, это видимо происки микрософтофилов, не сумевших оперативно (в присутствии заказчика) отличить Java Windows XP Look&Fell от родного Windows XP. Другое объяснение мне пока сложно найти. :-)
Тут, видимо эстеты, мне возразят, а не очень ли долго вся эта красота рисуется, этож получается, что каждый пиксель то на Java нужно отрисовать? И будут частично правы. Это действительно на несколько миллисекунд дольше. Для эстетов, в Java мире существует другой подход и другой фреймворк. Называется он SWT (Standard Widget Toolkit). Разумеется открытый и бесплатный. Ну эт и так понятно.
Этот фреймворк построен на других принципах. Он по максимуму использует графические элементы той операционной среды, в контексте которой запускается приложение. Рисуются они, по возможности, средствами самой операционной среды, и выглядят так, как в этой среде принято. То есть кнопка, она везде будет такой кнопкой, какой её привыкли видеть пользователи той системы, где запускается приложение. Рисуется всё несколько быстрее. Выглядит – стандартнее.
Каждый выбирает что ему ближе. Но… С точки зрения скорости работы интерфейса, есть два хороших примера. Это самые популярные на сегодняшний день Java IDE. Надо прямо сказать, это очень мощные IDE. Наверное самые мощные IDE которые сейчас существует на планете в мире разработки софта. IntelliJ IDEA и Eclipse. Первая написана на Swing, вторая на SWT. Никакой разительной разницы (да чего там, просто — никакой) в скорости работы я не заметил. Более того, существует ещё одна известная среда разработки — Visual Studio, от сами знаете кого (спокойно, это не А. Лебедев), написанная сами знаете на чём. Так вот субъективно оценивая, она также, почему-то, субъективно, быстрее не работает. Ну такие вот дела. :-)
А теперь, пару слов об том, откуда тянется миф об убогости. Как я думаю. Стандартные примеры уровня ‘Hello World’ на Swing написаны так, что бы их можно было как-то запустить в любой среде. Как-то… Никто там не ставит шрифт Tahoma для показа текста. Там вообще три-четыре шрифта, имеющихся в любой системе. И вот запускается это безобразие с серыми, топором-отёсанными кнопками и..., работает. Везде! Но по спартански изысканно и незамысловато. Смотрят на всё это разработчики, чешут свою репу, и выносят вердикт – гавн...(зачёркнуто) не очь хороший GUI у этой вашей явы, пойду-ка я попробую Эрланг или Хаскель. Вот там уж всё, стопудово, получше сделано. И на Хабре, походу, расскажу, какая гавн...(зачёркнуто) не очень хорошая эта Java. Ну не читать же в документации всякую там ерунду про этот ваш Look&Feel интерфейс. Других забот хватает. :-)
Итак, в чём же состоит особенность реализации десктоп приложений на Java и почему они способны быть очень красивыми? А также, откуда родился миф об ущербности (некоторые экзальтированные личности, порой, склонны даже употреблять слово ‘убогость’) Java GUI, читайте ниже. Я постарался не вдаваться в тонкости, не писать никакого кода, да и вообще не использовать никаких специфических для Java мира знаний. Хотелось бы, что бы заметка была понятна людям, далёким от этой технологии.
Большинство эрудированных программистов таки знают, что… Java приложение должно быть максимально кросс-платформенным. Также, как правило, самые эрудированные из них знают и то, что стандарты на внешний вид для разных операционных систем несколько отличаются. Стало быть возникает и вопрос, а как собственно то достичь того, что бы приложение выглядело красиво, в том понимании красоты, как её привыкли оценивать пользователи конкретных операционных систем?
А вот как. Видимо, не ошибусь, если скажу, что любой из нас знает, что такое Winamp. И скорее всего знает что такое skin (кожа). Мы все привыкли к тому, что эта программа может выглядеть абсолютно иначе, если ей поменять “кожицу”. Разумеется этой особенностью обладают и многие другие программы. А теперь вернёмся к нашим ба… нашей Java. Основным программным фреймворком, который используется для разработки Java десктоп приложений и стандартно поставляется в составе платформы, является Swing (гусары молчать!). Этот фреймворк вообще является хорошим примером проектирования ООП приложений, но сейчас, нас в нём интересует только две его особенности.
Особенность номер один – все визуальные элементы, которые мы видим в приложении, рисуются непосредственно и только самим этим фреймворком, используя самые элементарные графические примитивы системы.
Особенность номер два – вся эта рисовательная мутотень, тщательно и аккуратно вынесена в отдельный слой со своим чётко постулированным и открытым интерфейсом. Слой этот, по умному, называется Look&Feel. А вот тут, прошу обратить особенное внимание на слова “чётко постулированный открытый интерфейс”. Что это означает по жизни? А по жизни, это означает, ни много, не мало, что мы имеем эдакую “программную кожицу” (skin) которую может по своему вкусу реализовать абсолютно любой разработчик, знающий этот замечательный язык Java. Круглые, полупрозрачные кнопки с прыгающими внутри логотипчиками Windows? Нет проблем!
Но это ещё не всё. Главное то, что уже давно появился рынок этих самых Look&Feel. То есть имеется большая кодла энтузиастов, которые принялись с энтузиазмом эти Look&Feel-ы рисовать, с точки зрения их личностного понимания природы красоты.
Разумеется, для разминки, вначале появились кожицы делающие внешний вид и поведение как у Outlook (всех версий можно найти), как Windows XP, как известные интерфейсы из Юникс мира и… пошло поехало. Как вы правильно понимаете, давно есть Look&Feel дающие Java программе внешний вид приложений и как в ОС от компании Apple. Включая работу стандартных клавиш для доступа к элементам интерфейса.
В стандартной поставке библиотек Java идёт несколько реализаций разных Look&Feel. Люди, имеющие доступ к интернету, могут найти неплохие образцы, к примеру, вот тут:
www.jidesoft.com
или тут:
www.incors.com/lookandfeel
www.javasoft.de/jsf/public/products/synthetica/themes
Как вы понимаете, это всё также означает следующее – любая программа на Java, написанная с помощью Swing, может иметь а-абсолютно любой мыслимый визуальный интерфейс, который будет выглядеть совершенно одинаково в любой операционной среде. А с другой стороны, любая программа может поставляться с несколькими визуальными интерфейсами, которые можно прямо из меню переключать во время работы. И эти красивые интерфейсы уже давно сделали за вас и бесплатно раздают. Или платно раздают. Те иногда даже получше бесплатных. Хотя и не всегда. Очевидно также и то, что все эти визуальные компоненты наследуются от одного общего предка и, стало быть, опираясь на него, вы можете придумать свой визуальный компонент, который будет рисоваться и работать так, как лично вам это нравиться. Учитывая всё вышеописанное (и проверенное мной на практике), утверждение, что Java некрасива, это видимо происки микрософтофилов, не сумевших оперативно (в присутствии заказчика) отличить Java Windows XP Look&Fell от родного Windows XP. Другое объяснение мне пока сложно найти. :-)
Тут, видимо эстеты, мне возразят, а не очень ли долго вся эта красота рисуется, этож получается, что каждый пиксель то на Java нужно отрисовать? И будут частично правы. Это действительно на несколько миллисекунд дольше. Для эстетов, в Java мире существует другой подход и другой фреймворк. Называется он SWT (Standard Widget Toolkit). Разумеется открытый и бесплатный. Ну эт и так понятно.
Этот фреймворк построен на других принципах. Он по максимуму использует графические элементы той операционной среды, в контексте которой запускается приложение. Рисуются они, по возможности, средствами самой операционной среды, и выглядят так, как в этой среде принято. То есть кнопка, она везде будет такой кнопкой, какой её привыкли видеть пользователи той системы, где запускается приложение. Рисуется всё несколько быстрее. Выглядит – стандартнее.
Каждый выбирает что ему ближе. Но… С точки зрения скорости работы интерфейса, есть два хороших примера. Это самые популярные на сегодняшний день Java IDE. Надо прямо сказать, это очень мощные IDE. Наверное самые мощные IDE которые сейчас существует на планете в мире разработки софта. IntelliJ IDEA и Eclipse. Первая написана на Swing, вторая на SWT. Никакой разительной разницы (да чего там, просто — никакой) в скорости работы я не заметил. Более того, существует ещё одна известная среда разработки — Visual Studio, от сами знаете кого (спокойно, это не А. Лебедев), написанная сами знаете на чём. Так вот субъективно оценивая, она также, почему-то, субъективно, быстрее не работает. Ну такие вот дела. :-)
А теперь, пару слов об том, откуда тянется миф об убогости. Как я думаю. Стандартные примеры уровня ‘Hello World’ на Swing написаны так, что бы их можно было как-то запустить в любой среде. Как-то… Никто там не ставит шрифт Tahoma для показа текста. Там вообще три-четыре шрифта, имеющихся в любой системе. И вот запускается это безобразие с серыми, топором-отёсанными кнопками и..., работает. Везде! Но по спартански изысканно и незамысловато. Смотрят на всё это разработчики, чешут свою репу, и выносят вердикт – гавн...(зачёркнуто) не очь хороший GUI у этой вашей явы, пойду-ка я попробую Эрланг или Хаскель. Вот там уж всё, стопудово, получше сделано. И на Хабре, походу, расскажу, какая гавн...(зачёркнуто) не очень хорошая эта Java. Ну не читать же в документации всякую там ерунду про этот ваш Look&Feel интерфейс. Других забот хватает. :-)