Projeto de Sistemas 2011/2 2 a Lista de Exercícios (1) Um importante aspecto do projeto da camada de Lógica de Negócio (LN) diz respeito à organização das classes e distribuição de responsabilidades entre elas, o que vai definir, em última instância, os métodos das classes dessa camada. Dentre os padrões arquitetônicos existentes para o projeto da camada de LN, dois merecem destaque: o padrão Modelo de Domínio e o padrão Camada de Serviço. Diferencie esses dois padrões, destacando que classes tipicamente ficam responsáveis pela lógica dos casos de uso em cada caso. Qual o impacto em termos da estrutura (pacotes) da Camada de Lógica de Negócio quando cada um desses padrões arquitetônicos é aplicado? (*) (2) O projeto da Camada de Interface com o Usuário (IU) considera dois tipos de funcionalidades: Visão e Controle de Interação. Como o padrão arquitetônico Modelo-Visão-Controlador (MVC) trata esses diferentes tipos de funcionalidades? Como se dá a interação entre as camadas de IU e de LN quando o padrão MVC é usado em conjunto com o padrão Modelo de Domínio? Como se dá essa interação quando o padrão MVC é usado em conjunto com o padrão Camada de Serviço? (*) (3) Durante o projeto da camada de persistência usando bancos de dados relacionais, uma importante questão a ser tratada é a definição de quais classes serão responsáveis por realizar a persistência dos objetos, interagindo com o banco de dados. Dois dos padrões aplicáveis neste contexto são o padrão Registro Ativo (Active Record) e o padrão Objeto de Acesso a Dados (Data Access Object DAO). Diferencie esses dois padrões. Que classes ficam responsáveis pela persistência dos dados em cada caso? (*) (4) A seguir são listadas três afirmações. Marque se as mesmas são verdadeiras ou falsas. Caso você não saiba, marque a opção Não Sei. Atenção: UMA RESPOSTA ERRADA ANULA UMA CERTA. (*) (a) Dois dos principais padrões arquitetônicos para o projeto da camada de Lógica de Negócio são os padrões Modelo de Domínio e Camada de Serviço. No padrão Modelo de Domínio, a lógica dos casos de uso é distribuída pelos objetos de domínio, aqueles identificados já na fase de análise, os quais residem no Componente de Domínio do Problema (CDP). No padrão Camada de Serviço, a lógica dos casos de uso é atribuída a classes gerenciadoras de tarefas, as quais residem no Componente de Gerência de Tarefas (CGT). Objetos dessas classes, por sua vez, colaboram com objetos do CDP para realizar a lógica de negócio. ( ) Verdadeiro ( ) Falso ( ) Não sei. (b) O padrão Modelo-Visão-Controlador (MVC) considera três tipos de classes. A visão refere-se à entrada e à exibição de informações na Interface com o Usuário. O controlador refere-se às classes responsáveis pelo tratamento das requisições vindas da interface e seu envio para o Componente de Domínio do Problema, funcionando como objetos controladores de casos de uso. Por fim, o modelo refere-se aos objetos de domínio, sendo responsáveis pela sua persistência. ( ) Verdadeiro ( ) Falso ( ) Não sei. (c) Do ponto de vista de manutenibilidade e portabilidade, é bastante útil isolar a lógica de negócio do mecanismo de banco de dados, criando uma camada responsável pelo mapeamento entre objetos e tabelas do banco de dados relacional. Os padrões Mapeador de Dados (Data Mapper) e Objeto de Acesso a Dados (Data Access Object - DAO) adotam esta filosofia, de modo que apenas uma parte da arquitetura de software fica ciente da tecnologia de persistência adotada. ( ) Verdadeiro ( ) Falso ( ) Não sei.
(5) A Figura 3 mostra um fragmento do diagrama de classes de análise de um sistema para uma livraria. Nesse sistema, usabilidade é um dos condutores do projeto da arquitetura e a seguinte tática deve ser empregada: minimize o número de ações de entrada requeridas e possíveis erros, permitindo, sempre que possível, a seleção de dados a partir de um conjunto pré-definido de valores de entrada. (a) Faça o projeto do Componente de Domínio do Problema. Considere que está disponível para reúso o utilitariopessoa da Figura 2 e que o sistema será implementado em Java. (*) (b) A partir do diagrama de classes elaborado no item anterior, derive o modelo relacional correspondente. (*) Figura 1 - Diagrama de Classes da Fase de Análise Figura 2 Utilitário Pessoa
(6) A Figura 3 mostra um fragmento do diagrama de classes de análise para um sistema de clínica médica. A usabilidade é um dos condutores do projeto da arquitetura desse sistema e a seguinte tática deve ser empregada: minimize o número de ações de entrada requeridas e possíveis erros, permitindo, sempre que possível, a seleção de dados a partir de um conjunto pré-definido de valores de entrada. Observação: Princípio ativo é a substância que deverá exercer efeito farmacológico. Por exemplo, o paracetamol é o princípio ativo de diversos medicamentos, dentre eles o Tylenol. (a) Faça o projeto do Componente de Domínio do Problema. Considere que está disponível para reúso o utilitariopessoa da Figura 2 e que o sistema será implementado em Java. (*) (b) A partir do diagrama de classes elaborado no item anterior, derive o modelo relacional correspondente. Figura 3 - Diagrama de Classes da Fase de Análise
(7) Considere o desenvolvimento de um sistema para apoiar as atividades de um hotel. Clientes se hospedam em quartos e podem solicitar serviços, tais como serviços de lavanderia, restaurante etc. A Figura 4 mostra o diagrama de casos de uso para o sistema proposto. Os casos de uso Cadastrar Quarto, Cadastrar Serviço e Cadastrar Cliente possuem fluxos de eventos básicos para criar, alterar, consultar e excluir as respectivas entidades. O caso de uso Efetuar Reserva possui fluxos de eventos para efetuar nova reserva, cancelar reserva e consultar reserva. O caso de uso Controlar Hospedagem possui fluxos de eventos para registrar entrada e para registrar saída. Ao se registrar uma saída, a hospedagem deverá ser paga, realizando o caso de uso Efetuar Pagamento. O pagamento pode ser feito por meio de cartão de crédito, cheque ou dinheiro. Por fim, o caso de uso Controlar Prestação de Serviço possui fluxos de eventos para registrar uma prestação de serviço, alterar dados de uma prestação de serviço e cancelar uma prestação de serviço. Figura 4 Diagrama de Casos de Uso O fluxo de eventos Registrar Saída do caso de uso Controlar Hospedagem tem a seguinte descrição: 1. O recepcionista informa o quarto que deseja encerrar a hospedagem. 2. De posse do quarto, o sistema recupera a hospedagem vigente do quarto e os serviços prestados para essa hospedagem. 3. O sistema calcula o valor a ser pago em diárias, o valor a ser pago por serviços prestados e o valor total a ser pago. 4. A hospedagem é finalizada, registrando-se a data e hora da saída. 5. Incluir Efetuar Pagamento. A Figura 5 apresenta o diagrama de classes da fase de análise.
Figura 5 Diagrama de Classes da Fase de Análise (a) Faça o projeto do Componente de Domínio do Problema. Considere que há dois utilitários disponíveis para reúso, a saber: utilitariopessoa (Figura 2) e utilitariopagamento (ver exercício da Locadora de Vídeo). Além disso, considere que o sistema será implementado em Java. (b) A partir do diagrama de classes desenvolvido na questão anterior, faça um diagrama de sequência para o fluxo de eventos Registrar Saída considerando o uso do padrão Camada de Serviço. Adicione os métodos de forma apropriada no diagrama de classes. (c) Considerando apenas os casos de uso Controlar Hospedagem e Controlar Prestação de Serviço e a aplicação do padrão Camada de Serviço, faça em um mesmo diagrama o projeto do Componente de Gerência de Tarefas e o projeto da Camada de Interface com o Usuário. (d) Os casos de uso Cadastrar Cliente e Efetuar Reserva deverão estar disponíveis pela Internet para acesso pelos clientes, na forma de uma aplicação Web tradicional. Levando em conta essa porção do sistema, considere que se deseja manter a uniformidade da apresentação das páginas web. Diga como essa questão pode ser trabalhada, justificando sua resposta. (e) Considere que um framework de mapeamento objeto-relacional será utilizado para implementar a persistência de dados do sistema em um banco de dados relacional. Faça o projeto do Componente de Gerência de Dados. Discuta também que tabelas seriam criadas no banco de dados relacional e como as mesmas seriam ligadas. Para tal, produza o modelo relacional correspondente.
(8) Seja um sistema de submissão de trabalhos para eventos científicos. Há funcionalidades que estarão disponíveis apenas para os coordenadores dos eventos (registro do evento, definição do comitê de avaliação, convite aos avaliadores), outras que serão voltadas para avaliadores (resposta a convite, acesso aos trabalhos e registro de suas avaliações) e um terceiro conjunto de funcionalidades voltado para os autores dos trabalhos (submissão de artigos e consulta às avaliações). O sistema deve rodar na Web e poderá ser acessado pelos três tipos de usuários anteriormente descritos, os quais terão de se cadastrar previamente. A Figura 6 mostra um fragmento do diagrama de classes de análise do subsistema de submissão de artigos. Nesse subsistema, deseja-se que, sempre que possível, a entrada de dados seja feita via seleção de dados a partir de um conjunto pré-definido de valores de entrada. (a) Faça o projeto do Componente de Domínio do Problema. Considere que o sistema será implementado em Java e que há um utilitário disponível para reúso, a saber o utilitariopessoa apresentado na Figura 2. (*) Figura 6 - Diagrama de Classes da Fase de Análise