ПРОБЛЕМЫ ПРОИЗВОДИТЕЛЬНОСТИ РАЗРАБОТКИ JAVA ПРИЛОЖЕНИЙ

Научная статья
Выпуск: № 7 (7), 2012
PDF

Петрищев С.С.

Магистр, кафедра информатики и программного обеспечения вычислительных систем

Национальный исследовательский университет «МИЭТ»

 ПРОБЛЕМЫ ПРОИЗВОДИТЕЛЬНОСТИ РАЗРАБОТКИ JAVA ПРИЛОЖЕНИЙ

    Аннотация В статье рассмотрено применение скриптового языка Groovy для сокращения объёма кода с целью повышения наглядности и читаемости, а также с целью сокращения времени на разработку приложения. Ключевые слова: Java, Groovy, производительность разработки. Key words: Java, Groovy, development performance.   Современные приложения, написанные на языке Java, зачастую имеют большое количество избыточного кода. Написание модифицирующих методов и методов доступа отнимает большое количество времени у разработчиков. Было бы намного удобней иметь под рукой инструмент, освобождающий программиста от рутинной работы по написанию подобных методов. Таким инструментом является язык Groovy. Groovy – это скриптовой язык, выполняемый на виртуальной машине Java (JVM). Основные причины его существования: это быстрое написание кода для ежедневных задач, наглядность, лёгкость чтения и компактность, его интерпретируемая природа (анализ при выполнении) и слабая типизация[1]. Программисты часто обращаются к таким языкам, как Groovy, для создания кратких утилит, быстрого написания тестового кода, и даже для создания компонентов, из которых составляются крупные Java-приложения. Причиной этого служит присущая Groovy возможность сократить большую часть ненужного кода и снизить его сложность, свойственную системам на базе Java. Лаконичный, но гибкий синтаксис Groovy освобождает разработчиков от обычных конструкций Java, которые необходимы для компиляции кода, но вовсе не обязательно помогают выразить, что же программа реально пытается выполнить. Более того, менее строгая типизация Groovy снижает сложность восприятия кода[2]. Это происходит благодаря сокращению интерфейсов и суперклассов, которые необходимы в обычных Java-приложениях для поддержки обычного поведения среди отдельных строго определенных типов. Рассмотрим простой класс под названием Bike, который представляет собой велосипед на складе.  Он реализован как простой компонент JavaBean в обычном коде Java. Это типичный представитель сотен классов, которые пишут разработчики на Java. Ничего необычного в этих компонентах JavaBean нет: свойства объявлены как private, а доступ к ним осуществляется через методы get и set, объявленные как public . Листинг 1. importjava.math.BigDecimal;   public class Bike { private String manufacturer; private String model; private String serialNo; private double weight; privateBigDecimal cost;   public Bike(String manufacturer, String model, int frame, String serialNo, double weight, String status) { this.manufacturer = manufacturer; this.model = model; this.serialNo = serialNo; this.weight = weight; }   public String toString() { return "com.springbook.Bike : " + "manufacturer -- " + manufacturer + "\n: model -- " + model + "\n: serialNo -- " + serialNo + "\n: weight -- " + weight + ".\n"; }   public String getManufacturer() { return manufacturer; }   public void setManufacturer(String manufacturer) { this.manufacturer = manufacturer; } public String getModel() { return model; }   public void setModel(String model) { this.model = model; }   public String getSerialNo() { return serialNo; }   public void setSerialNo(String serialNo) { this.serialNo = serialNo; }   public double getWeight() { return weight; }   public void setWeight(double weight) { this.weight = weight; }   publicBigDecimalgetCost() { return cost; }   public void setCost(BigDecimal cost) { this.cost = cost.setScale(3,BigDecimal.ROUND_HALF_UP); } }   Листинг 1 - это маленький пример всего с одним конструктором и пятью свойствами.  Листинг 2 демонстрирует тот же компонент JavaBean, определенный в Groovy: Листинг 2 class Bike { String manufacturer String model Integer frame String serial No  Double weight String status BigDecimal cost public void setCost(BigDecimalnewCost) { cost = newCost.setScale(3, BigDecimal.ROUND_HALF_UP) } public String toString() { return """Bike: manufacturer --  ${manufacturer} model -- ${model} frame -- ${frame} serialNo -- ${serialNo} """ } } Версия на Groovy гораздо меньше, поскольку семантика свойств по умолчанию в Groovy автоматически определяет private-поле со средствами доступа и модификации, объявленными как public. Например, свойство model из раннего листинга теперь имеет эквивалент в виде метода getModel() и setModel(), который определяется автоматически. Можно увидеть, каким эта технология обладает преимуществом. Она позволяет сократить два требующих ручного написания метода на каждое свойство, определяемое в типе! Это также иллюстрирует и повторяющаяся тема в Groovy: делайте общие соглашения в коде простыми. Последняя версия языка Groovy, JSR-241, упростила в нем семантику свойств[3]. До выхода этой версии свойства определялись с помощью аннотации @Property, предшествующей объявлению переменной. Однако такая нотация больше не нужна. С версии JSR-241 свойство private с public-методами getter и setter будет сгенерировано просто путем указания типа и имени переменной. Вместо конкретного типа также можно использовать ключевое слово def. Более того, с помощью Groovy функциональность класса по умолчанию выражается короче по сравнению с тем, что необходимо писать явно в обычном коде на Java. Когда есть необходимость сделать нечто особенное с конструктором либо с методом get или set, Groovy демонстрирует неоспоримые преимущества, поскольку смысл поведения программы становится немедленно понятен. Надо просто взглянуть на код. Например, в листинге 2 легко увидеть, что метод setCost() собирается масштабировать свойство cost до трех десятичных позиций. Сравните этот скромный по размерам код на Groovy с исходным кодом на Java в листинге 1. Можно ли во время первого прочтения листинга сразу заметить, что метод setCost() обладает специальной встроенной функциональностью? Если не искать специально, то это легко упустить. В настоящее время язык Groovy активно развивается. На языке Groovy написан высокопродуктивный программный каркас для создания веб-приложений Grails. Groovy имеет идеологическую поддержку со стороны множества крупных корпораций, таких как Oracle, IBM, Linkedin и многих других.

Литература

  1. DierkKönig, Guillaume Laforge, Paul King, Jon Skeet. Groovy in Action. 2009 – 700 pages.
  2. Andrew Glover, Scott Davis. Practically Groovy: Stir some Groovy into your Java application. 2005
  3. Scott Hickey. Practically Groovy: Reduce code noise with Groovy. 2006