Olá, estudante! Agora que você já sabe como definir o projeto e analisar seus requisitos, sejam eles funcionais ou não funcionais, vou lhe apresentar como é o desenvolvimento da UML do sistema.
Para isso, irei lhe apresentar uma breve introdução à UML – Unified Modeling Language, ou, em português, linguagem unificada de modelagem –, em que você irá conhecer sua história e sua relevância na engenharia de software. Você também irá entender cada um dos objetivos da UML, que são: melhorar a comunicação, facilitar o entendimento do sistema, documentar de forma clara e criar uma base para implementação (codificação) do sistema.
Assim como na lição anterior, irei lembrá-lo(a) de assuntos que foram vistos em outros momentos do curso. Você verá que a UML oferece diferentes visões para modelar sistemas, tais como a visão estrutural e a visão comportamental, através de seus respectivos diagramas. Os diagramas são a cereja do bolo da UML! Irei lhe mostrar os principais diagramas da UML, como: diagrama de caso de uso, diagrama de classe, diagrama de sequência, entre outros. Um ponto muito importante também nos dias de hoje é como incorporar os diagramas em metodologias ágeis de desenvolvimento, como Scrum ou Kanban, amplamente utilizados no mercado de trabalho.
Com isso, você, técnico(a) em desenvolvimento de sistemas, terá um uma visão geral sólida do papel da UML no desenvolvimento de sistemas, bem como suas principais aplicações e benefícios. Pronto(a) para modelar?
Pense comigo como seria um projeto complexo de desenvolvimento de um sistema bancário. Primeiramente, a equipe de engenharia de software iria se deparar com o desafio de entender e representar as diversas interações entre as entidades envolvidas, como clientes, contas, transações e agências. Com requisitos frequentemente alterados e uma equipe multidisciplinar, a comunicação e a documentação do sistema se tornaria difícil, concorda?
Nessa situação, a UML aparece como uma solução eficaz, pois, por meio de diagramas, como o diagrama de classes, é possível visualizar a estrutura do sistema, com suas entidades, atributos e relações. Passando para o diagrama de caso de uso, ele possibilita identificar e entender as funcionalidades essenciais do sistema e apresenta as interações entre os atores e o sistema. Já o diagrama de sequência, por sua vez, ilustra o fluxo de comunicação entre os objetos em cenários específicos, simplificando o entendimento das interações complexas.
Dessa forma, a UML proporciona uma representação gráfica clara e visual, facilitando a comunicação entre os membros da equipe e partes interessadas, alinhando expectativas e também minimizando erros de interpretação. Além disso, a documentação detalhada dos diagramas UML contribui para a manutenção do sistema ao longo do tempo, garantindo sua escalabilidade e evitando inconsistências. Pensando no exemplo que deixei no início, neste processo de desenvolvimento de um sistema bancário, ela resolveria os problemas de comunicação e documentação, enquanto também iria agilizar o processo de construção do sistema.
Nesta lição, irei lhe apresentar o case fictício da empresa Tech Soluções, que estava prestes a desenvolver um novo sistema de gestão de projetos para otimizar a eficiência e a colaboração entre suas equipes. Esse sistema visava centralizar informações, controlar tarefas e facilitar a comunicação, a fim de entregar projetos de alta qualidade aos clientes.
Após a análise de requisitos, a equipe de desenvolvimento coletou informações que ajudaram a identificar os atores (gerente de projeto, membro da equipe e cliente) para a criação do diagrama de caso de uso. Com as funcionalidades e atores identificados, a equipe passou para a modelagem estrutural, pois com requisitos claros e tendo uma visão inicial das funcionalidades, foi possível que a equipe começasse a modelar a estrutura do sistema. Utilizando o diagrama de classes, a equipe descreveu as entidades principais, como Projeto, Tarefa, Usuário e Cliente, bem como seus atributos e relações, criando, assim, uma visão geral da arquitetura do sistema.
Passando para a modelagem mais conceitual, o foco se voltava para o entendimento de como as diferentes partes do sistema iriam interagir, ou seja, como a estrutura criada iria apoiar os comportamentos/funcionalidades descobertas na fase anterior. Assim, a equipe utilizou o diagrama de sequência para representar cenários de uso específico, como a criação de um novo projeto, o acompanhamento do processo da tarefa e a geração de relatórios, uma vez que este diagrama mostra a ordem das mensagens trocadas entre os objetos e como eles se comunicam.
Após a construção dos diagramas, a equipe passou para a fase de implementação (codificação do sistema) utilizando a modelagem UML como guia, assim como na sequência os testes de qualidade também conseguiam se nortear através da UML para entender como os processos deveriam ser. Sendo assim, neste case, conseguimos ver que a Equipe Tech Soluções conseguiu desenvolver um sistema de gestão de projetos eficiente e alinhado às necessidades dos usuários, pois a representação visual proporcionada pela UML permitiu uma melhor comunicação entre a equipe, resultando em um software robusto e bem-sucedido. Vamos entender melhor como fazer isso na prática?
Acredito que a melhor forma de introduzir o conceito do que é UML para você neste momento é com a definição do maior autor sobre o assunto, Martin Fowler. Segundo Fowler (2005, p. 25), “UML (Unified Modeling Language) é uma família de notações gráficas, apoiada por um metamodelo único, que ajuda na descrição e no projeto de sistemas de software, particularmente daqueles construídos utilizando o estilo orientado a objetos (OO)”.
Com base no que lhe foi apresentado, você já consegue ter uma ideia de todo poder que a UML lhe traz quando se fala em modelagem de sistemas, pois ela é como uma espécie de tradutora da conversa entre duas pessoas de países diferentes, no caso, o cliente e você. Você, como técnico(a) em desenvolvimento de sistemas, tem a tendência de utilizar palavras e expressões técnicas do mundo do desenvolvimento, assim como rotinas, linguagens de programação, banco de dados, entre outros. Por outro lado, temos o cliente, que sabe da “dor” que ele sente e o que precisa solucionar para o negócio/empresa dele. A UML entra nesse meio-termo dando à conversa um campo neutro onde é fácil para os dois “mundos” interagirem.
Mas realmente é necessário usar UML em todos projetos? Fowler (2005) afirma que o motivo principal para seu uso é que as linguagens de programação não estão em um nível de abstração suficientemente alto para facilitar as discussões sobre o projeto, especialmente em equipes multidisciplinares, em que nem todos têm conhecimento em linguagem de programação. Dessa forma, a ULM desempenha um papel crucial na agregação ao desenvolvimento de sistemas. Então, respondendo à questão inicial deste parágrafo: sim, é importante usar UML em todos os projetos, mesmo que seja na forma de 1 diagrama, pois ela é necessária para ter um bom entendimento do que será realizado e também uma maneira de documentar o projeto.
Uma vez que você já entendeu o papel da UML no desenvolvimento do sistema, vou lhe apresentar um pouco sobre o propósito e os objetivos dela para com essa espécie de “tradução” falada na introdução do assunto.
A UML tem como propósito principal oferecer uma linguagem padronizada para modelar sistemas de software de forma clara e compreensível para todas as pessoas envolvidas, independentemente de ser técnico(a) em desenvolvimento de sistemas ou não. Isso vai de acordo com seus objetivos, que são em sua maioria: fornecer uma representação visual abrangente e consistente, permitindo a comunicação efetiva entre membros da equipe e partes interessadas.
Além disso, a UML busca facilitar a análise e documentação de requisitos, garantindo que todos os envolvidos no projeto tenham uma visão compartilhada do sistema em desenvolvimento. Através da UML, é possível modelar a estrutura, o comportamento e as interações do software, facilitando a identificação de problemas potenciais e auxiliando na tomada de decisões durante todo o ciclo de vida do projeto. Dessa forma, a UML desempenha um papel fundamental na engenharia de software, tornando o desenvolvimento mais eficiente e com menor probabilidade de erros.
Os elementos da UML são essenciais para descrever a estrutura, o comportamento e as interações do sistema em desenvolvimento. Através deles que tudo o que foi dito nos parágrafos anteriores se torna realidade.
Entre os principais elementos da UML temos:
Classe: representa uma abstração de um objeto no sistema, definindo seus atributos e métodos. É o elemento central para modelar a estrutura estática do sistema.
Objeto: é uma instância específica de uma classe e representa um elemento concreto do sistema em execução.
Atributo: característica ou propriedade de uma classe que descreve os dados associados a um objeto.
Método: ações ou operações que uma classe pode realizar, definindo seu comportamento.
Herança: permite que uma classe herde os atributos e métodos de outra classe, estabelecendo uma relação de “é um” entre elas.
Interface: define um conjunto de operações que uma classe deve implementar, sem detalhar sua implementação.
Diagramas: são as representações gráficas dos elementos da UML. Os principais tipos de diagramas incluem diagramas de classes, diagramas de sequência, diagrama de casos de uso, diagrama de atividades, entre outros.
Ao analisar os elemento citados, você pode ter a impressão de estar na lição da disciplina errada, pois a maioria dos itens dizem respeito à programação orientada a objetos, mas não, você não está no lugar errado, pois como explicado na introdução desta conceitualização a UML é voltada em sua maioria para a modelagem de sistemas orientados a objetos, portanto, a maioria dos diagramas tem, principalmente com relação a sua estrutura, elementos que representam características do próprio paradigma (Orientação a Objetos).
Enfim, por meio desses elementos citados, a UML oferece uma notação unificada e poderosa para modelar sistemas complexos, facilitando a compreensão e comunicação entre os membros da equipe e as partes interessadas (stakeholders). No entanto, para isso, é fundamental sua utilização adequada, pois, assim, permite uma representação visual clara e concisa do sistema em todas as suas fases de desenvolvimento.
Os diagramas da UML são categorizados em duas principais perspectivas: diagramas de estrutura e diagramas de comportamento. Cada categoria abrange diferentes aspectos do sistema em desenvolvimento, permitindo uma representação abrangente e detalhada do software. Vamos ver com mais detalhes cada um deles?
São diagramas que têm como principal objetivo representar a estrutura estática do sistema em desenvolvimento, sendo assim, enfatizam os elementos estáticos do software, como classes, objetos, componentes, pacotes e suas relações.
Todos eles possuem algumas características importantes, tais como: organização hierárquica, foco na arquitetura, reutilização, clareza e simplificação, facilitação da comunicação e identificação de erros do projeto. Na sequência, apresentarei os diagramas de estrutura da UML:
Diagrama de Classes: representa a estrutura estática do sistema, mostrando as classes do sistema, seus atributos, métodos e os relacionamentos entre elas.
Diagrama de Objetos: focado nas instâncias específicas de objetos e suas relações em um determinado momento de execução do sistema.
Diagrama de Pacotes: organiza elementos da UML em grupos lógicos, permitindo uma visão mais organizada e hierárquica do sistema.
Diagrama de Componentes: mostra a estrutura do sistema em termos de componentes, que são unidades independentes e reutilizáveis de software.
Diagrama de Implantação: descreve a configuração física do sistema, mostrando os nós de hardware e software e suas interconexões.
Esses diagramas têm como principal objetivo representar o dinamismo e o comportamento dos sistemas em desenvolvimento. Eles dão foco às interações entre os elementos do sistema em diferentes cenários e situações.
Todos eles possuem algumas características importantes, tais como: Representação de Interação, Modelagem de Fluxo de Controle, Ênfase no Tempo, Cenários Específicos, Visão do Comportamento Dinâmico e Utilização de Elementos de Controle. Na sequência, apresentarei os diagramas de comportamentos da UML:
Diagrama de Casos de Uso: representa as funcionalidades do sistema do ponto de vista do usuário, mostrando as interações entre atores e casos de uso.
Diagrama de Sequência: ilustra a interação entre objetos e o fluxo de mensagens entre eles ao longo do tempo, permitindo modelar cenários específicos.
Diagrama de Colaboração: similar ao diagrama de sequência, mas enfatiza a estrutura de comunicação entre os objetos.
Diagrama de Estados: descreve o comportamento de um objeto em relação aos estados que ele pode assumir em resposta a eventos específicos.
Diagrama de Atividades: modela o fluxo de trabalho e a lógica de processos no sistema, mostrando as ações, decisões e forks (ramificações do fluxo).
Agora chegou a sua vez, técnico(a) em desenvolvimento de sistemas. Utilizando a ferramenta Visual Paradigm disponível, você verá como funciona na prática a criação de um diagrama.
Após acessar o site, você irá clicar no botão azul “Create Something”, e na sequência clicará em “Diagram” e “Use Case Diagram”. Ao fazer isso, irá abrir uma nova aba com os elementos para você criar um diagrama de uso. Mas qual diagrama de uso? Você lembra dos requisitos funcionais da lição anterior? No item “Saiba Aplicar” da lição anterior, você trabalhou com o SGB – Sistema de Gerenciamento de Biblioteca – e lá ficou definido o objetivo do projeto e alguns requisitos funcionais e não funcionais, pois bem, agora chegou a sua vez de criar o diagrama de caso de uso UML baseado nos requisitos funcionais do SGB.
As descrições do caso de uso são as seguintes:
O ator “Bibliotecário” tem acesso a três casos de uso: “Cadastrar Livro”, “Realizar Empréstimo” e “Realizar Devolução”.
O ator “Usuário” tem acesso aos casos de uso “Realizar Empréstimo” e “Realizar Devolução”.
A saber: o caso de uso “Cadastrar Livro” permite ao bibliotecário cadastrar as informações detalhadas de um livro. O caso de uso “Realizar Empréstimo” permite ao usuário emprestar um livro, e ao bibliotecário, controlar a data de empréstimo e o prazo de devolução. O caso de uso “Realizar Devolução” permite ao usuário devolver um livro, e ao bibliotecário, calcular multas, se houver atraso. Você poderá utilizar essas informações futuramente nas implementações ou até mesmo pesquisar sobre extends (quando obrigatoriamente um caso de uso é executado após o outro) e includes (quando é opcional um caso de uso ser executado após o outro) para diagramas de caso de uso.
Vamos pôr a mão na massa! Vá até a aba do Visual Paradigm com os elementos do diagrama de caso de uso disponíveis e siga os seguintes passos:
Clique no elemento Actor e o renomeie para Usuário.
Clique no elemento System e o posicione com o mouse ao lado direito do ator usuário. Renomeando System para SGB.
Clique no elemento UseCase e o posicione dentro do elemento system. Renomeie UseCase para Realizar Empréstimo e crie uma associação entre o ator Usuário e o caso de uso Realizar Empréstimo.
Clique no elemento UseCase e o posicione dentro do elemento system. Renomeie o segundo UseCase para Realizar Devolução e crie uma nova associação entre o ator Usuário e o caso de uso Realizar Devolução.
Pronto, você modelou os requisitos descobertos na lição anterior usando UML através do diagrama de caso de uso. Sugiro que para praticar ainda mais você use esse primeiro como exemplo e crie os demais descritos, além, é claro, de explorar a ferramenta e criar também o Diagrama de Classe e/ou o Diagrama de Sequência. Te espero na próxima lição!
FOWLER, M. UML Essencial: um breve guia para linguagem-padrão de modelagem de objetos. 3. ed. Porto Alegre: Bookman, 2005.