Como eu uso UML para desenvolver sistemas?

Independente do porte de uma solução, todo projeto de software é caracterizado por um estágio inicial, sendo este momento uma fase de análise em que se procura estudar de que forma o mesmo será conduzido. A ênfase que é dada a este tipo de atividade depende, basicamente, não apenas do tamanho do sistema a ser construído, como também da forma como a equipe envolvida encontra-se estruturada e do conhecimento desta última acerca de padrões e metodologias próprios da área de software.

As pressões do cotidiano (sobretudo prazos muito curtos e a impaciência das áreas que requisitaram uma solução) acabam, por vezes, relegando este trabalho de análise a um segundo plano. Tudo isto resulta em uma série de armadilhas, as quais podem culminar em projetos que levaram mais tempo para serem executados ou, mesmo, que estouraram o orçamento previsto para a realização das atividades.

Embora representem aspectos extremamente indesejáveis, tais problemas são parte do contexto com que se deparam muitos profissionais de Tecnologia da Informação no dia-a-dia. Diversos estudos já foram publicados e fornecem numerosas explicações para o cancelamento de projetos. Essas pesquisas são unânimes em afirmar, através da observação de organizações dos mais variados tipos, que a falta de uma melhor análise do que realmente necessita ser feito representa um dos principais motivos de tais fracassos.

A linguagem UML procura fornecer meios para auxiliar no levantamento dos requisitos que irão constituir um sistema, além de recursos para a modelagem de estruturas que farão parte do mesmo. O fato da UML ser um padrão de grande aceitação no mercado também se deve, em grande parte, à forte integração desta com conceitos da Orientação a Objetos (OO). Como muitos sistemas são concebidos a partir da aplicação de práticas e técnicas de OO, a elaboração de documentos modelando os componentes esperados é feita atualmente a partir de diagramas UML.

O objetivo deste artigo é apresentar um resumo dos diferentes diagramas disponibilizados pela UML, abordando ainda de que forma estes recursos podem ser úteis em sistemas baseados em elementos da Orientação a Objetos.

A linguagem UML
Figura 1: A linguagem UML

A UML na modelagem de sistemas

UML (sigla em inglês para "Unified Modeling Language") é uma linguagem que se presta à modelagem de estruturas que irão compor uma aplicação, estando fortemente amparada em conceitos de Orientação a Objetos. Em termos práticos, a UML contempla uma série de notações para a construção de diagramas representando diferentes aspectos de um software, além de não estar presa a metodologias ou tecnologias específicas de desenvolvimento. Sistemas construídos nas mais variadas linguagens e plataformas como C#, VB.NET, Java, Delphi etc. podem se beneficiar das vantagens decorrentes do uso desta linguagem.

O advento da UML como um dos principais meios para a documentação de sistemas aconteceu ainda no final dos anos 1990, graças ao trabalho conjunto de três especialistas da área de desenvolvimento de software: James Rumbaugh, Grady Booch e Ivar Jacobson. Diversos dos diagramas disponibilizados pela UML são resultado da evolução de representações propostas em momentos anteriores por estes especialistas, sendo que os mesmos procuram contemplar diferentes aspectos da construção de aplicações baseadas em técnicas da OO.

É bastante comum que se encontrem literaturas a respeito de design patterns que fazem uso da UML, empregando esta última como um meio para a representação esquemática das ideias que estão sendo discutidas. Além disso, metodologias de desenvolvimento como RUP (Rational Unified Process) têm nesta linguagem um importante pilar, já que os diversos diagramas existentes acabam por servir como parte da documentação de um projeto.

As diversas notações da UML podem ser utilizadas em várias situações:

  • Para esboçar estruturas de um sistema em discussões a respeito do mesmo. Isto costuma acontecer de um modo informal, através do desenho de um componente ou processo da aplicação considerada, buscando assim um melhor entendimento daquilo que está analisando;
  • Como documentação que servirá de base para atividades de codificação das estruturas de um sistema, bem como elaboração de testes das funcionalidades implementadas;
  • Na documentação de estruturas já existentes de um sistema, ou seja, como uma ferramenta de engenharia reversa, a partir da qual serão documentadas funcionalidades e outras estruturas da aplicação em questão.

Os diferentes diagramas que compõem a UML podem ser agrupados em categorias, levando em conta para isto o contexto em que cada uma dessas representações pode vir a ser empregada:

  • Diagramas Estruturais: priorizam a descrição estática de estruturas de um sistema, como classes, atributos e operações destas últimas, além de prováveis relacionamentos entre tais construções. A Tabela 1 lista os diversos diagramas que pertencem a esta classificação;
  • Diagramas Comportamentais: detalha o funcionamento (comportamento) de partes de um sistema ou processos de negócio relacionados a tal aplicação. Na Tabela 2 são apresentados os diversos diagramas que se enquadram nesta categoria;
  • Diagramas de Interação: considerados um subgrupo dos diagramas comportamentais, sendo normalmente utilizados na representação de interações entre objetos de uma aplicação. Os diferentes diagramas que fazem parte deste conjunto de representações foram descritos na Tabela 3.
Diagrama Função
Diagrama de Classes Permite a visualização de um conjunto de classes, detalhando atributos e operações (métodos) presentes nesta última, assim como prováveis relacionamentos entre essas estruturas. Este tipo de representação pode incluir ainda definições de interfaces.
Diagrama de Componentes Apresenta diferentes componentes de um sistema, além de possíveis dependências entre tais elementos. A ideia de componente refere-se a uma parte (ou até mesmo um módulo) de uma aplicação, englobando assim uma séria de outras estruturas relacionadas (como classes, interfaces etc.).
Diagrama de Pacotes Descreve as dependências entre diferentes namespaces/pacotes que compõem uma aplicação. Dentro da plataforma .NET, um namespace costuma conter classes, interfaces e outros elementos, atuando como uma forma de agrupamento lógico destes elementos.
Diagrama de Objetos Apresenta o estado de instâncias de objetos dentro de um sistema, levando em conta para isto um intervalo de tempo específico.
Diagrama de Estrutura Composta Utilizado para demonstrar a estrutura interna de uma classe, incluindo referências que apontam para outras partes de um sistema.
Diagrama de Instalação Empregado para demonstrar a estrutura de hardware adotada para a implantação de uma aplicação em um ambiente. Pode envolver dispositivos como servidores de aplicação, servidores de banco de dados, terminais de usuários etc.
Diagrama de Perfil Possibilita a definição de novos elementos UML, permitindo assim estender os diagramas existentes com a inclusão de estruturas customizadas para uma determinada necessidade.

Tabela 1: Diagramas Estruturais da UML

Diagrama Função
Diagrama de Casos de Uso Voltado à apresentação de funcionalidades e características de um sistema, assim como de que forma tais elementos se relacionam com usuários e entidades externas envolvidas num determinado processo.
Diagrama de Atividades Contempla as diversas tarefas desempenhadas na execução de uma atividade, sendo utilizado geralmente na representação de processos dentro de uma empresa/organização.
Diagrama de Transição de Estados Detalha os diferentes estados pelos quais pode passar um objeto, tomando por base a execução de um processo dentro do sistema que se está considerando.

Tabela 2: Diagramas Comportamentais da UML

Diagrama Função
Diagrama de Sequência Demonstra as interações entre diferentes objetos na execução de uma operação, destacando ainda a ordem em que tais ações acontecem num intervalo de tempo. A sequência em que as diversas operações são executadas ocorre na vertical, de cima para baixo.
Diagrama de Interatividade Espécie de representação híbrida, com uma estrutura similar à de diagramas de atividade. O que diferencia este tipo de representação está justamente no fato do equivalente a uma atividade ser representada por outro diagrama, sendo o de sequência um exemplo de uso válido neste último caso.
Diagrama de Colaboração ou Comunicação Similar aos diagramas de sequência, é também empregado na modelagem de interações entre vários objetos dentro de um determinado contexto. Este tipo de representação difere de um diagrama de sequência por não possuir uma estrutura rígida para demonstrar a comunicação entre objetos, ou seja, estes elementos podem ser dispostos na melhor ordem que se julgar necessária, sem a obrigatoriedade de exibir as diferentes operações na vertical uma após a outra.
Diagrama de Tempo Corresponde a um tipo específico de diagrama de sequência, descrevendo mudanças de estado e interações entre objetos dentro de intervalos de tempo tomados como parâmetro.

Tabela 3: Diagramas de Interação da UML

Benefícios e pontos de atenção quanto à utilização de UML

Dentre as vantagens em se adotar a UML como ferramenta para a modelagem e documentação de sistemas, convém destacar:

  • A UML foca na representação visual de diferentes elementos e aspectos de um software. Devido às suas características bastante intuitivas, esta linguagem permite uma compreensão mais rápida, assim como abrangente, de componentes e funcionalidades que fazem parte de uma aplicação;
  • Sistemas extensos costumam apresentar relacionamentos complexos entre as diferentes partes que os compõem. Muitas vezes, a simples descrição textual de dependências entre os diversos recursos de uma aplicação pode ser confusa, não atingindo o resultado esperado e que é, basicamente, possibilitar uma clara compreensão sobre como tais elementos interagem. O uso de UML pode simplificar tal tarefa, permitindo a elaboração de diagramas à primeira vista simples, mas que resumem o difícil trabalho de descrever como classes e processos estão relacionados entre si;
  • Desenvolvedores de diferentes plataformas podem compreender com mais facilidade as características de um sistema (independentemente da tecnologia na qual este foi concebido). Isto se deve ao fato da UML ser uma linguagem independente de plataforma, além de corresponder a um padrão de ampla aceitação dentro da área de software;
  • Ainda considerando o item anterior, os diagramas UML representam uma excelente ferramenta para a demonstração de conceitos de Orientação a Objetos, sobretudo no que se refere a explicações a respeito de design patterns e outras soluções genéricas passíveis de reaproveitamento em novos projetos;
  • A forte ênfase dada por esta linguagem à padronização também contribui, sem sombra de dúvidas, para um melhor desempenho das funções dentro dos times de implementação de projetos. Os diferentes profissionais envolvidos na codificação de uma aplicação têm na UML um meio que facilita a comunicação e a transmissão de ideias, partindo-se para isto da premissa de que todos contam com um conhecimento adequado desta linguagem.

Algumas questões devem ser ponderadas ao se adotar a UML para a geração de documentação em um projeto de software:

  • Em muitas situações será necessário sincronizar a documentação do projeto, atualizando diagramas elaborados num estágio inicial para que contemplem as últimas mudanças efetuadas numa aplicação. Este tipo de atividade costuma consumir uma parcela significativa de tempo, devendo ser bem planejado a fim de evitar atrasos ou, até mesmo, ser deixado de lado por representar um processo relativamente trabalhoso;
  • É essencial que a construção de diagramas UML priorize partes mais complexas ou críticas de um sistema. A documentação de funcionalidades e estruturas relativamente simples pode não agregar muito ao projeto, sendo desaconselhável investir tempo neste tipo de tarefa (quando o foco poderia justamente estar direcionado a elementos de uma maior importância dentro do contexto geral da aplicação);
  • A construção de diagramas muito extensos pode dificultar a compreensão de determinados pontos de um sistema. A montagem de representações com um escopo mais reduzido pode ser a melhor opção em alguns momentos, visto que permite um melhor entendimento de alguns detalhes que passariam despercebidos num diagrama abrangendo um contexto bem maior.

UML (sigla em inglês para "Unified Modeling Language") é uma linguagem que se presta à modelagem de estruturas que irão compor uma aplicação, estando fortemente amparada em conceitos de Orientação a Objetos. Em termos práticos, a UML contempla uma série de notações para a construção de diagramas representando diferentes aspectos de um software, além de não estar presa a metodologias ou tecnologias específicas de desenvolvimento. Sistemas construídos nas mais variadas linguagens e plataformas como C#, VB.NET, Java, Delphi etc. podem se beneficiar das vantagens decorrentes do uso desta linguagem.

O advento da UML como um dos principais meios para a documentação de sistemas aconteceu ainda no final dos anos 1990, graças ao trabalho conjunto de três especialistas da área de desenvolvimento de software: James Rumbaugh, Grady Booch e Ivar Jacobson. Diversos dos diagramas disponibilizados pela UML são resultado da evolução de representações propostas em momentos anteriores por estes especialistas, sendo que os mesmos procuram contemplar diferentes aspectos da construção de aplicações baseadas em técnicas da OO.

Ferramentas para a geração de diagramas UML

São diversas as ferramentas disponíveis no mercado para a geração de diagramas UML. Existem desde soluções gratuitas e que contam com um bom suporte para a elaboração de representações baseadas nesta linguagem, passando ainda por softwares proprietários dotados de uma ampla gama de recursos.

No que se refere a aplicativos pagos, é comum que muitos destes ofereçam funcionalidades baseadas em mecanismos de engenharia reversa (para a geração de diagramas a partir de implementações pré-existentes) ou, até mesmo, a obtenção de código-fonte tomando por base diagramas concebidos a partir da ferramenta em questão (o que não significa que todo o esforço de codificação será substituído por esta última).

Constituem bons exemplos de aplicações que suportam a construção de diagramas baseados nas notações da UML:

  • Astah UML: conhecida anteriormente como JUDE, esta solução conta tanto com versões gratuitas quanto pagas. É fornecida pela empresa japonesa Change Vision, disponibilizando recursos para a elaboração dos diferentes diagramas previstos pela UML;
  • Enterprise UML: software de modelagem comercializado pela Sparx Systems, contando com total suporte à construção dos diferentes diagramas de UML, além de compatibilidade com diversas linguagens como Java e C# (geração de código e aplicação de engenharia reversa);
  • Visio: parte integrante do pacote Office da Microsoft, este aplicativo também permite que diagramas UML sejam elaborados a partir do mesmo, além de um amplo conjunto de outros tipos de representações gráficas suportadas.

Importante destacar ainda que todas as ferramentas mencionadas nesta seção possibilitam a exportação de diagramas para diferentes formatos gráficos, tais como .gif, .jpg e .png.

Conclusão

Conforme discutido ao longo deste artigo, a UML oferece uma ampla variedade de diagramas, buscando com isto abranger diferentes aspectos relativos ao desenvolvimento de software. Isto não significa, obrigatoriamente, que a modelagem de uma nova aplicação precise empregar todas as representações fornecidas por esta linguagem. Na verdade, cada projeto conta com características bem específicas, o que significa que somente alguns dos diagramas podem realmente agregar algum valor como documentos que especificam o sistema a ser construído.

Além disso, o uso de elementos de UML não se restringe apenas à elaboração de artefatos dentro de um projeto. É bastante comum que a UML seja utilizada como meio para representar estruturas baseadas em conceitos de Orientação a Objetos ou ainda, em mecanismos de engenharia reversa que permitem a elaboração de diagramas a partir de estruturas de código implementadas anteriormente. A grande preocupação no tocante à padronização desta linguagem foi um fator determinante para o sucesso da mesma, com tal fato não restringindo ao meio acadêmico, mas contando ainda com o respaldo de gigantes da área de tecnologia (Microsoft, Oracle e IBM são algumas destas empresas).

Espero que o conteúdo aqui apresentado, embora de caráter introdutório, possa ter sido útil e sirva de motivação para você aprofunde seus conhecimentos em UML. Até uma próxima oportunidade!

Links

Links Úteis

Saiba mais sobre Desenvolvimento de sistemas ;)

Sugestão de conteúdo