Esse artigo faz parte da revista SQL Magazine edição 47. Clique aqui para ler todos os artigos desta edição

N> 

Objetos também são hospitaleiros

No artigo anterior, aprendemos um pouco sobre um padrão de projeto conhecido por Composite. Esse pattern padroniza uma solução para lidar com estruturas de árvores de forma unificada e flexível.

Ao invés de árvores, aqui vamos abordar a importância de conhecer como um objeto pode ser hospitaleiro e quão saudável é fazê-lo visitar outros objetos. Mas assim como no mundo real, o virtual também não é perfeito. Essas visitas têm suas desvantagens e a onerosidade, de suas conseqüências, precisa ser bem analisada.

Acredito que exemplos ao estilo “Cachorro herda de Mamífero” ou “Se grasnar, então é Pato” são importantes para motivar os iniciantes, mas não são eficientes quando aplicados à vida real. Também creio que não podemos ser tão realistas na escolha dos exemplos, sob pena de perdemos o foco no propósito do artigo. Dessa forma, procurei buscar exemplos em situações reais, mas sem permitir que essa realidade se torne um pesadelo.

 

O Cliente e seu Problema

A ABC é uma tradicional empresa especializada na criação de provas para os mais diversos tipos de concursos. A única responsabilidade da ABC é confeccionar as provas e vendê-las a quem interessar, esse por sua vez, se responsabiliza pela aplicação e organização do concurso.

Apesar da grande experiência da ABC, há vinte e sete anos no mercado, essa empresa começou, por pressão de seus clientes, a automatizar seus processos há pouco tempo. Para isso foi desenvolvido o ABC Sis, um sistema para criação e manutenção de provas. Esse sistema permite criar provas, e nelas inserir suas questões, e essas recebem seus itens. Para atender as necessidades desse sistema de uma maneira natural e flexível, o analista de sistemas leu o artigo anterior sobre Composite, e se inspirou nesse padrão para modelar o design do ABC Sis (veja Figura 1).

 

 

                                Figura 1. Design do ABC Sis.

 

Esse modelo é bem poderoso, apesar da simplicidade, pois suporta as mais diversas estruturas de Provas. Observe que a Classe ItemGenerico é abstrata e possui uma composição para sua própria interface, isso permite que qualquer estrutura (Prova, QuestaoRepostaUnica, etc) possa conter ou está contida em outra estrutura. Por herança, todas as classes concretas possuem os métodos adicionar e remover, que recebem um Item como parâmetro. É através desses métodos que adicionamos ou removemos um item a outro.

A Listagem 1 mostra o código que o ABC Sis utiliza para criar uma prova.

 

Listagem 1. Código do ABC Sis para gerar prova.

Prova prova = new Prova("Concurso para Chefe de Cozinha - 2007");

 

QuestaoMultiplaEscolha q1 = new QuestaoMultiplaEscolha("O que oferecer a um programador Java?");

prova.adicionar(q1);

 

q1.adicionar(new CheckBoxOpcaoQuestao("Vodka")); ...

Quer ler esse conteúdo completo? Tenha acesso completo