Познакомьтесь с PlantUML

UML

личный блог:zhenganwen.top

предисловие

Прошел почти месяц с тех пор, как я пришел в компанию на стажировку.Самый большой опыт заключается в том, что хотя большую часть времени я делаю простые добавления и удаления, это отличается от демо, написанного в школе.Вы должны полностью учитывать надежность программы (надежность), масштабируемость (сопровождаемость), временная/пространственная сложность и т. д. Поскольку это настоящий онлайн-проект, вы должны быть комплексными и ответственными перед командой.

Поэтому я решил не торопиться, чтобы улучшить свои стандарты кодирования, больше думать о масштабируемости дизайна программы, впечатляет ли производительность и т. д. после выполнения заданий в группе. Я думаю, что разница между инженерами-разработчиками и фермерами кода заключается не только в копировании, вставке и реализации функций как конечной цели, но и в рассмотрении того, как кодировать более элегантно, как добиться повторного использования кода и избежать повторяющихся действий, что является преследованием. также привнести в работу чувство мастерства и изобретательности.

Поэтому я хочу начать с шаблонов проектирования и освоить элегантные навыки кодирования, которые мои предшественники накопили за эти годы. Я уже читал «Шаблоны проектирования Head First» и думал, что она хорошо написана, но я стремился к успеху и читал ее вслепую, но я не могу вспомнить несколько моментов в ретроспективе. Я думаю, что реальный бой и повторение являются важными факторами в обучении. Это поверхностно, чтобы учиться на бумаге. Я не знаю, нужно ли мне практиковаться в этом вопросе, или мне все еще нужно потратить время и тщательно изучить его ~

Я чувствую, что содержание в "Шаблонах проектирования Head First" больше направлено на программирование с графическим интерфейсом, и теперь основное приложение Java находится на стороне сервера, плюс книги, которые я прочитал, если это не похоже на "Глубокое понимание Java Virtual Machine». Я не хочу читать ее второй раз, поэтому поставил перед собой цель «Иллюстрация шаблонов проектирования Java». (Первоначально, когда я искал «Шаблоны проектирования Java», я обнаружил, что «Шаблоны проектирования Java и практика " кажется довольно хорошим, и это для сервера Java, но я не могу найти ресурсы PDF на сетевом диске Taixin, и я ограничен в финансовом плане...)

При чтении книг, посвященных шаблонам проектирования, у меня всегда возникает ощущение, что когда в шаблонах проектирования много ролей, легко запутаться.В это время четкая диаграмма классов Java может эффективно помочь вам прояснить свое мышление и намерение такой дизайн. Так что я бросил и скачал другойIDEAплагинPlantUML, с тех порPlantUMLДорога в яму началась...

Установка и настройка

Плагин IDEA

существуетIDEAустановлен вPlantUMLплагины (иmarkdownПлагин аналогичный, имеет свой язык описания UML, что можно отразить на UML-диаграмме после написания), следуйте подсказкам официальной документацииFile->New->PlantUML FileНачиная мою первую диаграмму классов

1565688748017.png

Однако после того, как я напишу код справа, как указано выше, правая сторона показывает исключение:

1565688910081.png

Это потому чтоPlantUMLполагатьсяGraphviz, нам нужно сначаласкачатьэто (ссылка для windows.msiУстановочный пакет, для других платформ вы можете обратиться по ссылке https://www.graphviz.org/download/)

После установки нужно настроить для него переменные окруженияGRAPHVIZ_DOT, для каталога установки/bin/dot.exe, как показано на рисунке

1565689168390.png

затем перезагрузитеIDEA,PlantUMLОкно с вкладками может быть основано на том, что вы вводитеPlangUML languageрисование в реальном времени

1565689274652.png

PlantUML

последний разделPlantUMLкак плагин вIDEAКак независимый продукт, он, естественно, может работать независимо. В этом разделе описывается, как запуститьjarспособ использованияPlantUML

во-первыхскачатьЭтот продукт соответствуетjar, то вjarбежать по дорожкеjava -jar plantuml.jarчтобы запустить приложение:

1565690222139.png

затем нажмитеChange DirectoryВыберите каталог какworkspace, здесь я выбираюD:\Work_Space\UML, с последующимPlantUMLВ этот каталог будут помещены как исходные файлы, так и соответствующие сгенерированные изображения.

существуетworkspaceСоздайте новый исходный файл вtest.txt, введите следующий код:

@startuml
class HelloWorld
@enduml

После сохранения дважды щелкните файл в графическом интерфейсе, чтобы открыть соответствующее окно рисования, и каждый раз при сохранении исходного файла автоматически будет запускаться перерисовка:

1565690677576.png

Диаграмма классов

использоватьPlantUMLВы можете нарисовать много средних картинок, вы можете обратиться кофициальная документация, эта статья только знакомитIDEAМетод рисования диаграммы среднего класса.

отношения между классами

Обобщение/IS-A

IS-AОбычно используется для обозначения отношения наследования, которое представлено пустым треугольником и сплошной линией.Синтаксис такой:Parent <|-- Child:

@startuml
Person <|-- Child
@enduml

image.png

Вы также можете выразить отношения, как в следующем коде,extendsбудет идентифицирован

@startuml
class Person{
    age : int
    gender : char
}

class Student extends Person{
    grade : String
}
@enduml

image.png

выполнить

Реализация обычно предназначена для интерфейса, символ представляет собой треугольник плюс пунктирную линию, а синтаксисFlyable <|.. Plane

@startuml
interface Flyable{
    void fly();
    {abstract} double getSpeed();
}

class Vehicle{
    int speed;
    {abstract} void run();
}

Flyable <|.. Plane
Vehicle <|-- Plane
@enduml

image.png

Агрегация

Синтаксис: полый ромб, за которым следует сплошная линия.Department o-- Employees

AggregationОтношение агрегации используется для представления отношения между сущностными объектами и представляет семантику того, что целое состоит из частей, например, отдел состоит из нескольких сотрудников. В отличие от комбинированного отношения, целое и часть не сильно зависимы, даже если целое не существует, часть все равно существует, например: отдел отозван, персонал не исчезнет, ​​они все еще существуют

@startuml
class Employee{
}

class Department{
    Employee[] employees;
}

Department o- Employee
@enduml

image.png

Один-будет рисовать горизонтальные линии, две-рисуются вертикальные линии, напримерo--рисовать вертикальные линии

Сочинение

Синтаксис: сплошной ромб + сплошная линияArrayList *- Element

CompositionОтношение комбинации — это особое отношение агрегации с сильными зависимостями.Если целого не существует, то не существует и части.Например, компания не существует, а отдел не существует.

@startuml
class Element{

}

class ArrayList{
    Element[] elements
}

ArrayList *- Element
@enduml

image.png

Так как в Java управление памятью для нас прозрачно. В отличие от C, может быть, мы вызываемfree(company)объект свободной структурыcompanyпамяти, то ее членыdepartmentListтакже будет уничтожен. Механизм автоматического управления памятью в Java имеет длину до тех пор, пока объектGC RootsЕсли он достижим (то есть может быть подключен к цепочке ссылок), он не будет переработан. Итак, в Java эти два отношения не определены четко.

Ассоциативные отношения

Синтаксис: сплошная линия + стрелка,->/<-или<--/-->или<->/<-->

Ассоциативная связь изображается прямой линией; она описывает структурную связь между объектами разных типов; это статическая связь, обычно независимая от рабочего состояния и обычно определяемая такими факторами, как здравый смысл; она обычно используется для отношения между объектами определяют статическую, естественную структуру, следовательно, отношения представляют собой «сильная ассоциация"Отношение;

Например, существует ассоциация между пассажирами и билетами, студенты и школы являются ассоциацией;

Ассоциативное отношение по умолчанию не подчеркивает направление, что означает, что объекты знают друг друга; если направление особо подчеркивается, как показано на рисунке ниже, это означает, что A знает B, но B не знает A;

@startuml
class Controller{
    Service service;
}
class Service{
    Dao dao;
}
class Service2
class Dao
Controller -> Service
Service <-> Service2 
Service -> Dao
@enduml

image.png

полагаться

грамматика:

Зависимости также легко спутать с ассоциациями, но в отличие от ассоциаций они представляют собойвременныйотношения, обычно генерируемые во время выполнения, и по мере изменения времени выполнения могут также изменяться зависимости

Очевидно, что у зависимостей тоже есть направления.Двусторонние зависимости — очень плохая структура.Мы всегда должны поддерживать односторонние зависимости и предотвращать возникновение двусторонних зависимостей;

В окончательном коде отношение зависимости отражается как входящие параметры конструктора класса и метода класса, а стрелка указывает на вызывающее отношение; отношение зависимости не только временно знает другую сторону, но и «использует» другую методы и свойства партии;

@startuml
class UserController{
    void insertUser(User user)
}

class User{

}

UserController .> User
@enduml

image.png

Введение в диаграммы классов до сих пор, заинтересованные студенты могут обратиться кОфициальный сайтДальнейшее изучение и после изучения шаблонов проектирования используйте диаграммы классов, чтобы разобраться в процессах и идеях для достижения мультипликативного эффекта ~

использованная литература