Introdução
Acho que todo mundo já ouviu na infância um ditado como “ Meça duas vezes, corte uma vez ”. É o mesmo na programação. É sempre melhor pensar na implementação antes de perder tempo executando-a. Freqüentemente, durante a implementação, você precisa criar classes e inventar sua interação. E muitas vezes uma representação visual disso pode ajudar a resolver o problema da maneira mais correta. É aqui que a UML nos ajuda .O que é UML?
Se você olhar as imagens nos mecanismos de busca, ficará claro que UML tem a ver com diagramas, setas e quadrados. O importante é que a UML seja traduzida em Linguagem de Modelagem Unificada . A palavra Unificado é importante aqui. Ou seja, nossas imagens serão compreendidas não apenas por nós, mas também por outras pessoas que conhecem UML. Acontece que esta é uma linguagem internacional para desenhar diagramas.
Como diz a Wikipédia
UML é uma linguagem de descrição gráfica para modelagem de objetos no desenvolvimento de software, modelagem de processos de negócios, design de sistemas e exibição de estruturas organizacionais.A coisa mais interessante que nem todo mundo pensa ou percebe é que a UML tem especificações. Além disso, existe até uma especificação UML2. Mais detalhes sobre a especificação podem ser encontrados no site do Object Management Group . Na verdade, este grupo está desenvolvendo especificações UML. Também é interessante que a UML não se limite a descrever a estrutura das classes. Existem muitos tipos de diagramas UML. Uma breve descrição dos tipos de diagramas UML pode ser vista na mesma Wikipedia: diagramas UML ou no vídeo de Timur Batyrshinov Review of UML diagrams . A UML também é amplamente usada para descrever vários processos, por exemplo aqui: Single sign-on usando JWT . Voltando ao uso de diagramas de classes UML, vale destacar o livro Head First: Design Patterns , no qual os padrões são ilustrados por esses mesmos diagramas UML. Acontece que a UML está realmente sendo usada. E acontece que o conhecimento e a compreensão de sua aplicação são uma habilidade bastante útil.
Aplicativo
Vejamos como você pode trabalhar com essa mesma UML do IDE. Vamos considerar o IntelliJ Idea como um IDE . Se usarmos o IntelliJ Idea Ultimate , teremos o plugin “ Suporte UML ” instalado imediatamente. Ele permite gerar automaticamente belos diagramas de classes. Por exemplo, usando Ctrl+N ou o item de menu "Navigate" -> "Class" vamos para a classe ArrayList . Agora, através do menu de contexto do nome da classe, selecione “Diagrama” -> “Mostrar pop-up do diagrama”. Como resultado, obtemos um belo diagrama:
@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Para ver o resultado no Idea, selecione "Visualizar" -> "Ferramentas Windows" -> "PlantUML". Teremos apenas dois quadrados representando classes. Como sabemos, ambas as classes implementam a interface List. Esse relacionamento de classe é chamado de implementação. Para representar tal conexão, use uma seta com uma linha pontilhada. Vamos retratá-lo:
interface List
List <|.. ArrayList
List <|.. LinkedList
List
- uma das classes infantis Collection
. Ou seja, herda de Collection. Essa conexão é chamada de generalização. Parece uma seta com uma linha regular contínua. Vamos retratá-lo:
interface Collection
Collection <|-- List
Para o seguinte tipo de conexão, adicione à descrição da classe ArrayList
uma entrada sobre o array privado de elementos do pacote:
~Object[] elementData
Agora queremos mostrar o que ArrayList
contém alguns objetos. Neste caso, o tipo de conexão será agregação . A unidade neste caso é ArrayList
, porque ele contém outros objetos. Escolhemos a agregação porque os objetos na lista podem viver sem a lista: eles não são partes integrantes dela. O tempo de vida deles não está vinculado ao tempo de vida da lista. Agregado é traduzido do latim como “montado”, isto é, algo feito de algo. Por exemplo, na vida existe uma unidade de bombeamento, que consiste em uma bomba e um motor. A própria unidade pode ser desmontada, deixando alguns de seus componentes. Por exemplo, para vender ou colocar em outra unidade. A lista também. E isso é expresso na forma de um losango vazio próximo à unidade e uma linha contínua. Vamos retratá-lo assim:
class Object{
}
ArrayList o- Object
Agora queremos mostrar que, diferentemente de ArrayList
, a classe LinkedList
contém Node
contêineres que se referem aos dados armazenados. Nesse caso, Node
eles fazem parte de si mesmos LinkedList
e não podem viver separados. Node
não é conteúdo armazenado diretamente, mas contém apenas um link para ele. Por exemplo, quando adicionamos a LinkedList
uma linha, adicionamos um new Node
, que contém um link para essa linha, bem como um link para o anterior e o próximo Node
. Este tipo de comunicação é denominado composição . Para exibir um composto (que consiste em partes), um losango colorido é desenhado, com uma linha contínua conduzindo a ele. Vamos agora escrever isso como uma exibição de texto da conexão:
class Node{
}
LinkedList *-- Node
E agora precisamos aprender como exibir outro tipo importante de relacionamento - o relacionamento de dependência . É usado quando uma classe usa outra, mas a classe não contém a classe que está sendo usada e não é sua descendente. Por exemplo, LinkedList
eles ArrayList
sabem como criar arquivos ListIterator
. Vamos exibir isso como setas com uma linha pontilhada:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Depois de tudo isso ficará assim:
Automação
Existem várias maneiras de gerar diagramas PlantUML automaticamente. Por exemplo, o Idea possui um plugin SketchIT , mas não os desenha corretamente. Por exemplo, a implementação de interfaces é desenhada incorretamente (exibida como herança). Também há exemplos na Internet de como incorporar isso ao ciclo de vida de construção do seu projeto. Digamos que haja um exemplo de Maven usando uml-java-docklet . Para mostrar como isso é feito, usaremos o Maven Archetype para criar rapidamente um projeto Maven. Vamos executar o comando:mvn archetype:generate
Quando solicitado a selecionar um filtro ( Choose a number or apply filter ), deixe o padrão simplesmente pressionando Enter. Será sempre " maven-archetype-quickstart ". Selecione a versão mais recente. A seguir, respondemos às perguntas e finalizamos a criação do projeto:
mvn clean install
: e mvn javadoc:javadoc
. Agora, se abrirmos a documentação gerada (explorer target\site\apidocs\index.html), veremos os diagramas UML. A propósito, a implementação já está exibida corretamente aqui)
GO TO FULL VERSION