CAPÍTULO 4 - AVALIAÇÃO DO PROCESSO ADESE
4.1 ESTUDO DE CASO
4.1.1 Aplicação Web de Locação de Vídeos
4.1.1.2 Etapa 2 - Desenvolvimento de Serviços
O desenvolvimento de serviços é uma etapa do processo ADESE que deve ser executada cada vez que um novo serviço seja necessário para o desenvolvimento da aplicação. Nas seções a seguir será apresentado o desenvolvimento do serviço opcional de calendário seguindo as regras desta etapa do processo.
Definir o Modelo de Características do Serviço
Para definir o modelo de características do serviço de calendário é necessário especificar as características comuns e diferentes deste domínio. O serviço deve oferecer as seguintes funcionalidades:
• informar a data do dia, de forma inteira (ex: dd/mm/aaaa), ou em partes
separadas como somente o dia, somente o mês, somente o ano e somente o dia
da semana;
• informar o horário do momento, de forma inteira (ex: hh:mm:ss), ou em partes separadas como somente a hora ou somente o minuto;
• informar a diferença de dias entre a data do dia e uma data qualquer informada;
• calcular uma data a partir de um número de dias informado.
A Figura 15 apresenta o modelo de características do serviço de calendário desenvolvido a partir destas definições. Este modelo contém a característica Calendário como característica raiz, e possui o restante das características divididas em dois grupos maiores chamados Data e Horário . As características Hoje , Dia , Mês e Ano , contida no grupo Data , e Agora , Hora e Minuto , contida no grupo Horário , são características obrigatórias no modelo, pois são características essenciais para o seu funcionamento.
Figura 15 - Modelo de características do serviço de calendário.
Instanciar o Modelo de Características
Para instanciar o modelo de características é preciso definir uma configuração deste contendo as características obrigatórias e opcionais a serem utilizadas na aplicação. As características obrigatórias estarão presentes em qualquer configuração do modelo, enquanto as características opcionais necessárias na configuração deverão ser marcadas.
A Figura 16 apresenta o modelo de características do serviço de calendário já
instanciado com todas as suas características opcionais marcadas. Isso significa que o modelo
deverá ser transformado em um novo serviço com todas as suas funções disponíveis. O modelo de características pode ser instanciado com outras configurações para uso em outras aplicações. Neste caso, o desenvolvimento do serviço necessitará ser refeito.
Figura 16 – Modelo de características já instanciado do serviço de calendário.
Mapear o Modelo de Característica para o Diagrama de Classes
Para mapear o modelo de características instanciado para o diagrama de classes UML foram seguidas regras de conversão definidas nesta etapa do processo que consiste em identificar classes, relacionamentos, atributos e operações para o diagrama, conforme definido no capítulo 3. Os passos de identificação foram:
• identificação de classes: foram adicionadas ao diagrama as classes Calendario , Data e Horario por não serem características “folhas” no modelo de características;
• identificação de relacionamentos: foram adicionados ao diagrama de classe,
relacionamentos de agregação entre as classes Calendario e Data ; e,
Calendario e Horario , pois eles têm relacionamentos no modelo de
características, sendo que a classe agregadora é a classe Calendario por ser a
característica de mais alto nível;
• identificação de operações e atributos: foram adicionadas às classes que já constam no diagrama, operações e atributos que representam suas respectivas características “folhas” no modelo de características. Assim, foram adicionadas à classe Data , as operações hoje , dia , mes , ano , diaSemana , diferencaEntreDatas e calcularData e, à classe Horario , as operações agora , hora e minuto ;
• identificação das operações na classe principal: como a classe principal deste diagrama é a classe Calendario , as operações que serão convertidas em operações do serviço devem ser incluídas nesta classe. Esse é o caso das operações hoje , dia , mes , ano , diaSemana , diferencaEntreDatas , calcularData , agora , hora e minuto . Na etapa de implementação do serviço, estas operações contidas na classe principal deverão fazer a invocação da operação original nas outras classes, onde consta realmente a programação da operação.
A Figura 17 apresenta o diagrama de classes produzido para o serviço de calendário
seguindo as regras de conversão detalhadas acima.
Figura 17 - Diagrama de classes do serviço de calendário.
Implementar o Serviço a partir do Diagrama de Classes
Para implementar o serviço é preciso inicialmente programar e compilar todas as classes que compõem o diagrama de classes. Esta programação é feita manualmente pelo desenvolvedor, mas com auxílio de alguma ferramenta de desenvolvimento, como é o caso da ferramenta NetBeans IDE 5.5 que foi utilizada neste trabalho.
A Listagem 13 apresenta um exemplo da programação da operação diaSemana na
classe Calendario , que é a classe principal do serviço e onde constam as operações que
serão operações do serviço. Nesta operação é feita apenas a invocação da operação
diaSemana que consta na classe Data . Por sua vez, na Listagem 14 é apresentado um
exemplo da programação da operação diaSemana na classe Data , que é a classe original da
operação, e onde consta realmente a programação de sua função.
• agora : retorna o horário atual;
• hora : retorna a hora atual;
• minuto : retorna o minuto atual.
Estas são as mesmas operações que estão na classe Calendario e que foram convertidas em operações do serviço. A pasta calendario contém os arquivos que foram gerados a partir do diagrama de classes.
Figura 18 - Estrutura do serviço de calendário na ferramenta Netbeans 5.5.
Após o desenvolvimento do serviço de calendário, é necessário desenvolver a sua
especificação em uma interface padronizada que defina suas funcionalidades e permita o uso
por outras aplicações. Conforme já descrito, essa especificação é feita em WSDL. Algumas
Listagem 15 - Trecho do WSDL que contém as operações do serviço de calendário.
...
<portType name="wsCalendarioSEI">
<operation name="agora">
<input message="tns:wsCalendarioSEI_agora"/>
<output message="tns:wsCalendarioSEI_agoraResponse"/>
</operation>
<operation name="ano">
<input message="tns:wsCalendarioSEI_ano"/>
<output message="tns:wsCalendarioSEI_anoResponse"/>
</operation>
<operation name="calcularData">
<input message="tns:wsCalendarioSEI_calcularData"/>
<output message="tns:wsCalendarioSEI_calcularDataResponse"/>
</operation>
<operation name="dia">
<input message="tns:wsCalendarioSEI_dia"/>
<output message="tns:wsCalendarioSEI_diaResponse"/>
</operation>
<operation name="diaSemana">
<input message="tns:wsCalendarioSEI_diaSemana"/>
<output message="tns:wsCalendarioSEI_diaSemanaResponse"/>
</operation>
<operation name="diferencaEntreDatas">
<input message="tns:wsCalendarioSEI_diferencaEntreDatas"/>
<output message="tns:wsCalendarioSEI_diferencaEntreDatasResponse"/>
</operation>
<operation name="hoje">
<input message="tns:wsCalendarioSEI_hoje"/>
<output message="tns:wsCalendarioSEI_hojeResponse"/>
</operation>
<operation name="hora">
<input message="tns:wsCalendarioSEI_hora"/>
<output message="tns:wsCalendarioSEI_horaResponse"/>
</operation>
<operation name="mes">
<input message="tns:wsCalendarioSEI_mes"/>
<output message="tns:wsCalendarioSEI_mesResponse"/>
</operation>
<operation name="minuto">
<input message="tns:wsCalendarioSEI_minuto"/>
<output message="tns:wsCalendarioSEI_minutoResponse"/>
</operation>
</portType>
...