Desenvolvimento - Modelagem

Aprenda a construir seus códigos a partir de modelos UML, com o Visio 2003 / Visual Studio 2003 Architet

Através deste artigo pretendo demonstrar como ficou fácil gerar os seus códigos através de um modelo UML.

por Donisetti Ferreira Cosma



Através deste artigo pretendo demonstrar como ficou fácil gerar os seus códigos através de um modelo UML. Uma vez que você tiver com seu modelo no Visio Architet, a versão que vem com o Visual Studio 2003 será só escolher a linguagem desejada e ele se encarregará de escrever os códigos necessários. Atualmente é possível gerar códigos para C#, VB e C++.

Vamos ver como isso funciona na pratica, passo a passo. Começaremos criando um diagrama de Classe simples e em seguida veremos o código que será gerado.

Primeiramente, criaremos uma classe chamada EMPREGADO, com os seguintes campos: ID, Nome, Sexo, DataNasc, Salário, Função, etc.

Abra o Visio, escolhendo o tipo do diagrama ou através do menu:

File-> New-> Software-> UML Model Diagram.

Tela Inicial de um documento do Visio.

Click com o botão direito sobre Top Package, no Model Explore e Altere o Nome do pacote para RH.

Em seguida arraste um Shapes classe para o diagrama, e dê duplo click nele. Será apresentada a Janela de propriedades da classe. Digite EMPREGADO, no campo Name.

Agora vamos informar os Atributos da Classe. Informe os seguintes campos em Atributes: ID do tipo int e Salário tipo decimal e click no botão OK deverá ficar como apresentado na seguinte figura:

Podemos agora verificar como ficará a classe gerada, apesar de que ainda temos muito trabalho pela frente. Escolha Code Generation Options, e escolha a linguagem desejada, exemplo C#, e clique no botão preview code.

Resultado do código gerado

Vamos criar um novo tipo de Dados, antes disso porém precisamos acrescentar um pacote novo, que conterá um novo tipo de dados. Selecione o pacote RH, e com o botão direito do mouse, escolha a opção New->Package, informe System no campo Name.

Agora façamos o seguinte, selecione o novo pacote System, e com o botão direito escolha New->DataType. Na caixa de Propriedades no campo name digite DateTime.

Agora retornamos a classe Empregado, dê um duplo click para mostrar a caixa de propriedades, adicione um novo atributo DataNasc, e você verá que agora será possível selecionar o novo tipo System::DateTime.

Vamos ver o código gerado novamente selecionando a opção Code Generation Options, e depois click no botão Preview code. Você verá que agora foi acrescentado o name space System no inicio da classe.

Vamos agora criar as propriedades, para que possam ser acessadas pelos clientes da classe. Criaremos propriedades de retornam os valores para ID, DataNasc e Salário. Dê um duplo clique na classe para chamar a caixa de propriedades, em seguida selecione Operations, e informe os Nomes e valores de retorno, idênticos aos campos definidos anteriormente.

Marque a operação ID, click no botão Properties, para ter acesso as propriedades desta operação, escolha Code Generation Opctions, altere o campo Kind de procedure para property, e marque o check box, Create Get Method, procedendo assim, estamos criando uma propriedade de apenas leitura.

Para criar uma propriedade com atributo de leitura e gravação, marque também o check box Cerate Set Method, mas neste exemplo não será necessário. Click no botão Preview code, e você verá o código, que será gerado para esta propriedade. Não se esqueça de clicar no botão OK, as alterações somente terão efeito após esta confirmação.

Faltou, porém escrevermos o retorno dos dados para nosso GET. Também poderíamos já ir documentando nosso código, preenchendo a caixa de texto Documentation. Dê um duplo click na classe, para apresentar a caixa de propriedades. Selecione Operations, marque a Operação ID, click no botão Methods, Selecione a Linguagem no combo, language para Code, e escreva o corpo do método, no nosso caso return ID;

Ao solicitarmos o preview do código obteremos o seguinte código:

Vamos criar um método para efetuar a alteração do Salário do empregado, para isso adicionaremos um novo método chamado AlterarSalario.

Para este método incluiremos também um parâmetro chamado Valor, que será o novo valor atribuído ao Salário do empregado. Marque a operação AlterarSalario, click em Properties, digite o comentário, em Documentation, e depois selecione Parameters, na caixa de Categories. Click em New, e entre como o nome do parâmetro Valor, sendo do tipo decimal.

Agora, digite o código abaixo no corpo de método para alterar o campo salário da classe.

Veja agora como ficou o código gerado, selecione Code Generation Options, e em seguida no botão Preview Code.

Agora criaremos uma interface chamada Pessoa, que define o comportamento da Classe. Arraste o Shape Interface para o diagrama ou click com o botão direito em RH, escolha New

Informe o Nome da interface no campo Name.

Agora definiremos as propriedades da interface pessoa que serão herdadas e implementadas na classe Empregado. Note que na interface temos apenas Operations.

Defina o tipo de retorno das operações Nome, CPF e RG para String. Altere também o tipo das operações para Property, e defina como leitura e gravação, marcando os dois checkbox, para criar os métodos Get e Set, faça isso para todas as operações, não esquecendo de confirmar com OK, pois somente será gerado o código após a confirmação.

Veja como ficou o código gerado. Observe que no código não há a uma implementação para os métodos Get e Set, pois isso será feito na classe que usará esta interface.

Vamos vincular a interface pessoa a classe empregado. Selecione a interface no diagrama, e com o botão direito do mouse, escolha a opção Show as lolipop Interface, você obterá o seguinte resultado:

Observe que a interface é representada pelo Shapes na forma de um pirulito.

Click, no pirulito e arraste para a classe empregado, até que o objeto fique conforme a figura abaixo:

Ao soltar o botão do mouse, você verá que todos as operações da interface automaticamente aparecerão na classe.

Selecione a interface pessoa e com o botão direito do mouse, solicite para mudar a visão novamente para Show as Class-like interface, o resultado será um relacionamento de dependência entre a classe Empregado e a interface pessoa.

Veja também como ficou o código gerado para a Classe empregado. Verá que o sistema definiu a classe empregado como sendo uma herança da interface pessoa.

Definiremos agora os outros tipos de dados: Sexo, Endereço e Telefone. Primeiro vamos criar um enumeração para sexo, faça isso selecionando RH, e com o botão direito do mouse escolha:

New->DataType.

Digite Genero, no campo Name, e altere o stereotype para enumeration.

Informe os valores possíveis: Masculino e Feminino, você também poderá informar um valore literal para eles.

Volte na interface pessoa, adcione a operação Sexo, altere o tipo para propriedade, defina o acesso para os métodos Get e Set e informe o tipo de retorno Genero.

Repare que automaticamente, o tipo sexo da classe empregado assumira o novo valor.

Acompanhe também como ficou o código gerado tanto na interface como na classe, o Visio transforma UML em código.

Veja o código da classe agora gerado nas outras linguagens

VB.NET

C++

Obs: Os códigos do C++ apresentam alguns erros nos tipos dos dados, deverão ser alterado para o tipo apropriado. Poderíamos também ter definido os tipos comuns às várias linguagens, em vez de ter escolhido especificamente tipos do C#, como fizemos, mas este exemplo tem como finalidade de demonstração dos recursos do VS, portanto poderá ser melhorado, mas isso, vou deixarei como exercício para os leitores.

Bem, agora as falta enviar o código gerado para o Visual Studio, já que a versão atual do Visio não está integrada ao ambiente do VS, por enquanto...

Selecione o menu UML, vá em CODE, escolha Generate, marque o check box RH, e desmarque a System, não é necessário gerar o código para o Framework. Altere a localização onde você deseja gerar a solução.

Agora abra o Visual Studio, encontre e selecione o projeto que foi gerado pelo Visio.

Veja que o projeto está ai, pronto para ser usado.

Espero que este artigo ajude os leitores a entender um pouco sobre os recursos disponível neste maravilhoso produto. Em outra oportunidade, falarei mais sobre outros conceitos, como herança, Associação, composição e agregação. Até lá.

Donisetti Ferreira Cosma

Donisetti Ferreira Cosma - Líder do GUP.Net de Maringá-Pr.
Diretor da Delta Informática Ltda.
www.gupnet.com.br
www.deltasge.com.br