Наполнять
Парадигма | объектно-ориентированный |
---|---|
Разработано | Университет Оттавы |
Разработчик | Круизная группа на факультете электротехники и информатики под руководством Тимоти Летбриджа в Оттавском университете |
Впервые появился | 2008 |
Стабильная версия | 1.34.0
/ 6 июня 2024 г. |
Дисциплина набора текста | статический |
Платформа | JVM |
Лицензия | МОЯ лицензия |
Расширения имен файлов | .ump |
Веб-сайт | www |
Под влиянием | |
Java , C++ , UML , Ruby , PHP |
Umple — язык как для объектно-ориентированного программирования , так и для моделирования с помощью диаграмм классов и диаграмм состояний . Название Umple представляет собой сочетание слов « UML », «обширный» и «простой». [1] указывая на то, что он предназначен для предоставления широких возможностей для расширения языков программирования возможностями UML.
История и философия
[ редактировать ]Разработка Umple началась в 2008 году в Университете Оттавы . Umple имел открытый исходный код , и его разработка была перенесена в Google Code в начале 2011 года и в GitHub в 2015 году.
Umple был разработан частично для решения определенных проблем, наблюдаемых в модельном сообществе. [2] В частности, он был разработан для согласования моделирования и программирования . Он был призван помочь преодолеть препятствия в отношении моделирования, распространенные в сообществе программистов. Это также было призвано уменьшить некоторые трудности разработки на основе моделей , возникающие из-за необходимости использования больших, дорогих или неполных инструментов. Одна из целей разработки — дать программистам возможность моделировать так, как они считают естественным, путем добавления конструкций моделирования в языки программирования.
Особенности и возможности
[ редактировать ]Umple можно использовать для текстового представления многих объектов моделирования UML, присутствующих в диаграммах классов и диаграммах состояний . [2] Umple может генерировать для них код на различных языках программирования. В настоящее время Umple полностью поддерживает Java , C++ и PHP в качестве целевых языков программирования и имеет функциональную, но несколько неполную поддержку Ruby .
Umple также включает в себя различные функции, не связанные с UML, такие как шаблон Singleton , ключи, неизменяемость , примеси и аспектно-ориентированное внедрение кода.
Обозначения диаграммы классов, поддерживаемые Umple, включают классы , интерфейсы , атрибуты , ассоциации , обобщения и операции. Код, который Umple генерирует для атрибутов, включает в себя код конструктора , методы get и set. Сгенерированный код существенно различается в зависимости от того, имеет ли атрибут такие свойства, как неизменяемость, имеет значение по умолчанию или является частью ключа .
Umple генерирует множество методов для манипулирования, запроса и навигации по ассоциациям. Он поддерживает все комбинации множественности UML и обеспечивает ссылочную целостность .
Umple поддерживает подавляющее большинство нотаций конечного автомата UML , включая состояния с произвольной глубиной вложенности , параллельные регионы, действия при входе, выходе и переходе, а также длительные действия в состоянии. [3] Конечный автомат рассматривается как перечисляемый атрибут, значение которого контролируется событиями . События, закодированные в конечном автомате, могут быть методами, написанными пользователем или сгенерированными компилятором Umple. События запускаются вызовом метода. Событие может инициировать переходы (в зависимости от защиты ) в нескольких различных конечных автоматах. Поскольку программа может быть полностью написана на основе одного или нескольких конечных автоматов, Umple позволяет программировать на основе автоматов .
Тела методов написаны на одном из целевых языков программирования. То же самое справедливо и для другого императивного кода, такого как действия и меры защиты конечного автомата, а также кода, который необходимо внедрить аспектно-ориентированным способом. Такой код можно внедрить до того, как Umple сгенерирует многие методы в коде, например, до или после установки или получения атрибутов и ассоциаций.
Нотация Umple для конструкций UML может быть встроена в любой из поддерживаемых целевых языков программирования. Когда это будет сделано, Umple можно рассматривать как препроцессор : компилятор Umple расширяет конструкции UML в код целевого языка. Код на целевом языке можно передать непосредственно компилятору Umple; если нотация, специфичная для Umple, не найдена, то код целевого языка выдается компилятором Umple без изменений.
Umple в сочетании с одним из целевых языков для императивного кода можно рассматривать и использовать как полноценный язык программирования. Таким образом, Umple плюс Java можно рассматривать как расширение Java.
В качестве альтернативы, если оставить в стороне императивный код и концепции, специфичные для Umple, Umple можно рассматривать как способ выражения большого подмножества UML чисто текстовым способом. Код на одном из поддерживаемых языков программирования можно добавить таким же образом, как UML предполагает добавление кода языка действий.
Лицензия
[ редактировать ]Umple лицензируется по лицензии MIT .
Примеры
[ редактировать ]Вот классическая программа Hello world, написанная на Umple (расширяющая Java): [4]
class HelloWorld {
public static void main(String [ ] args) {
System.out.println("Hello World");
}
}
Этот пример похож на Java, поскольку Umple расширяет возможности других языков программирования.
Программа сохранена в файле с именем HelloWorld.ump
, его можно скомпилировать из командной строки:
$ java -jar umple.jar HelloWorld.ump
Чтобы запустить его:
$ java HelloWorld
Ниже приведен полностью исполняемый пример, показывающий встроенные методы Java и объявление ассоциации. [4]
class Person {
name; // Attribute, string by default
String toString () {
return(getName());
}
}
class Student {
isA Person;
}
class Mentor {
isA Person;
}
association {
0..1 Mentor -- * Student;
}
class Person {
public static void main(String [ ] args) {
Mentor m = new Mentor("Nick The Mentor");
Student s = new Student("Tom The Student");
s.setMentor(m);
System.out.println("The mentor of " + s + " is " + s.getMentor());
System.out.println("The students of " + m + " are " + m.getStudents());
}
}
В следующем примере описан конечный автомат под названием status с состояниями Open, Closing, Closed, Opening и HalfOpen, а также с различными событиями, которые вызывают переходы из одного состояния в другое. [5]
class GarageDoor { status { Open { buttonOrObstacle -> Closing; } Closing { buttonOrObstacle -> Opening; reachBottom -> Closed; } Closed { buttonOrObstacle -> Opening; } Opening { buttonOrObstacle -> HalfOpen; reachTop -> Open; } HalfOpen { buttonOrObstacle -> Opening; } } }
Заполнение дверей на практике
[ редактировать ]Первая версия компилятора Umple была написана на Java, Antlr и Jet (шаблоны Java Emitter), но в процессе начальной загрузки код Java был преобразован в Umple с использованием метода, называемого Umplification. [6] Позже Antlr и Jet были преобразованы в родной Umple. Таким образом, Umple теперь написан полностью сам по себе, другими словами, он размещается на собственном хостинге и служит собственным крупнейшим тестовым примером.
Umple и UmpleOnline использовались в классе несколькими преподавателями для преподавания UML и моделирования. В одном исследовании было обнаружено, что он помогает ускорить процесс обучения UML, а также улучшает оценки учащихся. [7]
Инструменты
[ редактировать ]Umple доступен в виде файла Jar , поэтому его можно запускать из командной строки, а также в виде плагина Eclipse .
Существует также онлайн-инструмент для Umple под названием UmpleOnline. [8] , который позволяет разработчику создавать систему Umple, рисуя диаграмму классов UML, редактируя код Umple или и то, и другое. Модели Umple, созданные с помощью UmpleOnline, хранятся в облаке . В настоящее время UmpleOnline поддерживает только программы Umple, состоящие из одного входного файла.
Помимо кода, инструменты Umple могут генерировать множество других типов вывода, включая пользовательские интерфейсы на основе модели Umple. [9]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Официальный сайт проекта» .
- ^ Перейти обратно: а б Нападающий, Андрей (2010). «Конвергенция моделирования и программирования: облегчение представления атрибутов и ассоциаций в универсальном модельно-ориентированном языке программирования» . Докторская диссертация, Университет Оттавы .
- ^ Бадреддин, Омар (2012). «Проявление двойственности модели и кода: облегчение представления конечных автоматов на универсальном модельно-ориентированном языке программирования» . Докторская диссертация, Университет Оттавы .
- ^ Перейти обратно: а б «Примеры привет, мир» . Простое руководство пользователя . 2013.
- ^ «Базовые государственные машины» . Простое руководство пользователя . 2013.
- ^ Летбридж, Тимоти К.; Нападающий, Эндрю; Бадреддин, Омар (2010). «Умплификация: рефакторинг для постепенного добавления абстракции в программу». 2010 17-я Рабочая конференция по обратному проектированию . стр. 220–224. дои : 10.1109/wcre.2010.32 . ISBN 978-1-4244-8911-4 . S2CID 14808702 .
- ^ Летбридж, Тимоти К.; Муссбахер, Гюнтер; Нападающий, Эндрю; Бадреддин, Омар (2011). «Преподавание UML с использованием Umple: применение модельно-ориентированного программирования в классе». 2011 24-я конференция IEEE-CS по образованию и обучению программной инженерии (CSEE&T) . стр. 421–428. дои : 10.1109/cseet.2011.5876118 . ISBN 978-1-4577-0349-2 . S2CID 15975894 .
- ^ Группа CRuiSE, Университет Оттавы. «Умпл Онлайн» .
- ^ Нападающий, Эндрю; Бадреддин, Омар; Летбридж, Тимоти К.; Солано, Джулиан (июль 2012 г.). «Быстрое прототипирование на основе моделей с помощью Umple». Программное обеспечение: практика и опыт . 42 (7): 781–797. дои : 10.1002/спе.1155 . S2CID 36046547 .
Внешние ссылки
[ редактировать ]- Бесплатные инструменты UML
- Единый язык моделирования
- Параллельные языки программирования
- Семейство языков программирования Java
- Языки программирования JVM
- Объектно-ориентированные языки программирования
- Статически типизированные языки программирования
- Языки программирования, созданные в 2008 году.
- Программное обеспечение платформы Java
- Инструменты программирования
- Программное обеспечение, использующее лицензию MIT