JavaRush /Blogue Java /Random-PT /UML: da teoria à prática
Viacheslav
Nível 3

UML: da teoria à prática

Publicado no grupo Random-PT

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.

UML: da teoria à prática - 1

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:
UML: da teoria à prática - 2
Mas e se você quiser desenhar sozinho e nem tiver a versão Ultimate do Idea? Se usarmos o IntelliJ Idea Community Edition, não teremos outra escolha. Para fazer isso, você precisa entender como esse diagrama UML é estruturado. Primeiro, precisaremos instalar o Graphviz . Este é um conjunto de utilitários para visualização de gráficos. É usado pelo plugin que usaremos. Após a instalação, você precisa adicionar o diretório bin do diretório de instalação do Graphviz à sua variável de ambiente PATH . Depois disso, no IntelliJ Idea, selecione Arquivo -> Configurações no menu. Na janela "Configurações", selecione a categoria "Plugins", clique no botão "Navegar nos repositórios" e instale o plugin de integração PlantUML . Por que o PlantUML é tão bom ? Ele usa uma linguagem de descrição de gráficos chamada " ponto " para descrever a UML e isso permite que ela seja mais universal, porque... Esta linguagem não é usada apenas pelo PlantUML. Além disso, tudo o que fazemos a seguir pode ser feito não apenas no IDE, mas também no serviço online planttext.com . Após instalar o plugin PlantUML, poderemos criar diagramas UML através de “Arquivo” -> “Novo”. Vamos criar um diagrama do tipo "classe UML". Durante este processo, um modelo com um exemplo é gerado automaticamente. Vamos deletar seu conteúdo e criar o nosso próprio, munidos de um artigo de Habr: Relacionamentos de classe - da UML ao código . E para entender como retratar isso no texto, vamos pegar o manual do PlantUML: diagrama de classes plantuml . Logo no início há uma tabela mostrando como as conexões devem ser descritas:
UML: da teoria à prática - 3
Também podemos observar as próprias conexões aqui: " Relacionamentos entre classes em UML. Exemplos ". Com base nesses materiais, vamos começar a criar nosso diagrama UML. Vamos adicionar o seguinte conteúdo descrevendo as duas classes:

@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 ArrayListuma entrada sobre o array privado de elementos do pacote:
~Object[] elementData
Agora queremos mostrar o que ArrayListconté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 LinkedListcontém Nodecontêineres que se referem aos dados armazenados. Nesse caso, Nodeeles fazem parte de si mesmos LinkedListe não podem viver separados. Nodenão é conteúdo armazenado diretamente, mas contém apenas um link para ele. Por exemplo, quando adicionamos a LinkedListuma 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, LinkedListeles ArrayListsabem 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:
UML: da teoria à prática - 4
Você pode entrar em tantos detalhes quanto necessário. Todas as designações são indicadas aqui: " PlantUML - Diagrama de Classes ". Além disso, não há nada de sobrenatural em desenhar tal diagrama e, ao trabalhar em suas tarefas, você pode desenhá-lo rapidamente à mão. Isso desenvolverá suas habilidades de reflexão sobre a arquitetura de aplicativos e o ajudará a identificar falhas na estrutura de classes logo no início, em vez de depois de passar o dia implementando o modelo errado. Acho que é um bom motivo para tentar? )
UML: da teoria à prática - 5

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:
UML: da teoria à prática - 6
Como o Maven não é o foco deste artigo, as respostas às suas perguntas sobre o Maven podem ser encontradas no Maven Users Center . No projeto gerado, abra o arquivo de descrição do projeto, pom.xml, para edição . Vamos copiar o conteúdo da descrição da instalação do uml-java-docklet nele . O artefato usado na descrição não foi encontrado no repositório Maven Central. Mas funcionou para mim com isto: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0 . Ou seja, nessa descrição basta substituir o groupId de “ info.leadinglight ” por “ com.chfourie ” e definir a versão para “ 1.0.0 ”. Depois disso, podemos executar estes comandos no diretório onde está localizado o arquivo pom.xmlmvn 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)

Conclusão

Como você pode ver, a UML permite visualizar a estrutura da sua aplicação. Além disso, a UML não se limita apenas a isso. Usando UML, você pode descrever vários processos dentro de sua empresa ou descrever o processo de negócios dentro do qual opera a função que você está escrevendo. Até que ponto a UML é útil para você cabe a você decidir, mas reservar um tempo para lê-la com mais detalhes será útil em qualquer caso. #Viacheslav
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION