личный блог: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
Начиная мою первую диаграмму классов
Однако после того, как я напишу код справа, как указано выше, правая сторона показывает исключение:
Это потому чтоPlantUML
полагатьсяGraphviz
, нам нужно сначаласкачатьэто (ссылка для windows.msi
Установочный пакет, для других платформ вы можете обратиться по ссылке https://www.graphviz.org/download/)
После установки нужно настроить для него переменные окруженияGRAPHVIZ_DOT
, для каталога установки/bin/dot.exe
, как показано на рисунке
затем перезагрузитеIDEA
,PlantUML
Окно с вкладками может быть основано на том, что вы вводитеPlangUML language
рисование в реальном времени
PlantUML
последний разделPlantUML
как плагин вIDEA
Как независимый продукт, он, естественно, может работать независимо. В этом разделе описывается, как запуститьjar
способ использованияPlantUML
во-первыхскачатьЭтот продукт соответствуетjar
, то вjar
бежать по дорожкеjava -jar plantuml.jar
чтобы запустить приложение:
затем нажмитеChange Directory
Выберите каталог какworkspace
, здесь я выбираюD:\Work_Space\UML
, с последующимPlantUML
В этот каталог будут помещены как исходные файлы, так и соответствующие сгенерированные изображения.
существуетworkspace
Создайте новый исходный файл вtest.txt
, введите следующий код:
@startuml
class HelloWorld
@enduml
После сохранения дважды щелкните файл в графическом интерфейсе, чтобы открыть соответствующее окно рисования, и каждый раз при сохранении исходного файла автоматически будет запускаться перерисовка:
Диаграмма классов
использоватьPlantUML
Вы можете нарисовать много средних картинок, вы можете обратиться кофициальная документация, эта статья только знакомитIDEA
Метод рисования диаграммы среднего класса.
отношения между классами
Обобщение/IS-A
IS-A
Обычно используется для обозначения отношения наследования, которое представлено пустым треугольником и сплошной линией.Синтаксис такой:Parent <|-- Child
:
@startuml
Person <|-- Child
@enduml
Вы также можете выразить отношения, как в следующем коде,extends
будет идентифицирован
@startuml
class Person{
age : int
gender : char
}
class Student extends Person{
grade : String
}
@enduml
выполнить
Реализация обычно предназначена для интерфейса, символ представляет собой треугольник плюс пунктирную линию, а синтаксисFlyable <|.. Plane
@startuml
interface Flyable{
void fly();
{abstract} double getSpeed();
}
class Vehicle{
int speed;
{abstract} void run();
}
Flyable <|.. Plane
Vehicle <|-- Plane
@enduml
Агрегация
Синтаксис: полый ромб, за которым следует сплошная линия.Department o-- Employees
Aggregation
Отношение агрегации используется для представления отношения между сущностными объектами и представляет семантику того, что целое состоит из частей, например, отдел состоит из нескольких сотрудников. В отличие от комбинированного отношения, целое и часть не сильно зависимы, даже если целое не существует, часть все равно существует, например: отдел отозван, персонал не исчезнет, они все еще существуют
@startuml
class Employee{
}
class Department{
Employee[] employees;
}
Department o- Employee
@enduml
Один
-
будет рисовать горизонтальные линии, две-
рисуются вертикальные линии, напримерo--
рисовать вертикальные линии
Сочинение
Синтаксис: сплошной ромб + сплошная линияArrayList *- Element
Composition
Отношение комбинации — это особое отношение агрегации с сильными зависимостями.Если целого не существует, то не существует и части.Например, компания не существует, а отдел не существует.
@startuml
class Element{
}
class ArrayList{
Element[] elements
}
ArrayList *- Element
@enduml
Так как в 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
полагаться
грамматика:
Зависимости также легко спутать с ассоциациями, но в отличие от ассоциаций они представляют собойвременныйотношения, обычно генерируемые во время выполнения, и по мере изменения времени выполнения могут также изменяться зависимости
Очевидно, что у зависимостей тоже есть направления.Двусторонние зависимости — очень плохая структура.Мы всегда должны поддерживать односторонние зависимости и предотвращать возникновение двусторонних зависимостей;
В окончательном коде отношение зависимости отражается как входящие параметры конструктора класса и метода класса, а стрелка указывает на вызывающее отношение; отношение зависимости не только временно знает другую сторону, но и «использует» другую методы и свойства партии;
@startuml
class UserController{
void insertUser(User user)
}
class User{
}
UserController .> User
@enduml
Введение в диаграммы классов до сих пор, заинтересованные студенты могут обратиться кОфициальный сайтДальнейшее изучение и после изучения шаблонов проектирования используйте диаграммы классов, чтобы разобраться в процессах и идеях для достижения мультипликативного эффекта ~
использованная литература
-
«Шаблоны проектирования Head First» Ссылка на сайт:disk.baidu.com/yes/1 каждый раз 2Z Mk EP…Код извлечения: e6a7
-
«Иллюстрированные шаблоны проектирования Java» Ссылка на сайт:Disk.Baidu.com/Yes/11 Боюсь, EP за 40 000 пог.Код извлечения: 6j9r
-
Руководство по синтаксису PlantUMLрастение uml.com/this/class-paragraph…