UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ DEPARTAMENTO ACADÊMICO DE INFORMÁTICA CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA GÍLSON MAEKAWA KANASHIRO SISTEMA DE TI PARA GESTÃO CONDOMINIAL MONOGRAFIA DE ESPECIALIZAÇÃO CURITIBA - PR 2011 GÍLSON MAEKAWA KANASHIRO SISTEMA DE TI PARA GESTÃO CONDOMINIAL Monografia de Especialização apresentada ao Departamento Acadêmico de Informática, da Universidade Tecnológica Federal do Paraná como requisito parcial para obtenção do título de “Especialista em Tecnologia Java” Orientador: Prof. Paulo Roberto Bueno. CURITIBA - PR 2011 PR UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ Ministério da Educação Universidade Tecnológica Federal do Paraná Diretoria do Campus Curitiba Gerência de Pesquisa e Pós-graduação Departamento Acadêmico de Informática Curso de Especialização em Tecnologia Java TERMO DE APROVAÇÃO Sistema de TI para Gestão Condominial Esta monografia foi apresentada às 16 h 20 min, do dia 21 de setembro de 2011, como requisito parcial para a obtenção do título de Especialista em Tecnologia Java – Departamento Acadêmico de Informática – Universidade Tecnológica Federal do Paraná. O candidato apresentou o trabalho para a Banca Examinadora composta pelos professores abaixo assinados. Após a deliberação, a Banca Examinadora considerou o trabalho APROVADO. _______________________________ ______________________________ Prof. MSc. Marcelo Mikosz Gonçalves Membro (UTFPR) Prof. Dr. Gustavo Alberto Giménez Lugo Membro (UTFPR) _______________________________ Prof. MSc. Paulo Roberto Bueno Orientador (UTFPR) Visto da Coordenação: _______________________________ Prof. Dr. João Alberto Fabro Coordenador Curso de Especialização em Tecnologia Java UTFPR – DAINF Av. Sete de Setembro, 3165 - 80.230-901 - Rebouças – Curitiba-PR Brasil www.dainf.ct.utfpr.edu.br Fone: +55 (41) 3310-4644 Fax: +55 (41) 3310-4646 DEDICATÓRIA À minha esposa, Graciele. À nossa menininha recém-chegada, bênção de felicidade e de ternura em nossas vidas: Sayuri, filha amada. À memória de Maíza, irmã dedicada e exemplo de compreensão e carinho. AGRADECIMENTOS É pouco o tempo em que pudemos compartilhar o convívio entre novos colegas, novos professores. Pouco não é o termo adequado. É daqueles raros tempos vividos intensamente, imersos em afazeres, muitos afazeres; são tempos aventureiros, em que se vive o desafio de fazer, aprender e conhecer. São momentos inefáveis como aqueles em que um mero velejador começa a aprender com grandes navegadores. Meus sinceros votos de apreço e consideração a todos os colegas, em especial ao Leonardo Ravazzi, parceiro de muitos trabalhos de fim de semana; Fernando, que nos passou inúmeras dicas para domar o Eclipse, Gláucia e Rebeca, meninas bem humoradas com quem demos boas gargalhadas; Najib El Alam, com quem tentamos negociar algumas piadas, mas acabamos nos perdendo em boas risadas. Cintia, obrigado! Graças a você muita coisa funcionou na hora certa. Aos professores, agradeço o esforço didático para ensinar em noites de quem já teve um dia cheio no trabalho; principalmente, por responder dúvidas e trocar ideias valiosas. Em especial, agradeço aos professores Alexandre Reis Graeml, Celso Antonio Alves Kaestner, Cesar Augusto Tacla, Leandro Batista de Almeida e Robson Ribeiro Linhares. Com esses mestres e doutores pude assimilar conceitos bastante sutis em suas áreas do conhecimento. Ao meu orientador, professor Paulo Roberto Bueno, o meu grande agradecimento por contribuir, reforçando ideias e conceitos. As palavras não são suficientes para expressar o meu profundo agradecimento à minha esposa, cujo apoio ajudou a me manter firme em meus propósitos, apesar das intensas mudanças profissionais por que passamos. Comecei a monografia em Curitiba e a termino em Londrina. Graciele, esposa amada, com certeza teremos histórias para contar à nossa pequena Sayuri. RESUMO KANASHIRO, Gílson M. Sistema de TI para gestão condominial. 2011. Monografia (Especialização em Tecnologia Java) – Departamento Acadêmico de Informática, Universidade Tecnológica Federal do Paraná. Curitiba, 2011. Esse trabalho apresenta uma abordagem do problema de coordenação das atividades sob o ponto de vista de um programa de gerenciamento de condomínios. Da experiência do autor, ex-síndico de condomínio, focou-se na visão daquele que gerencia, buscando a praticidade e a flexibilidade. Aborda aspectos da gestão condominial e de seus problemas. Traz como resultado uma ferramenta gerencial simplificada, desenvolvida para auxiliar o acompanhamento de atividades. Palavras-chave: Gestão condominial, coordenação de atividades, acompanhamento de atividades. ABSTRACT KANASHIRO, Gílson M. IT System to condominium management. 2011. Monografia (Especialização em Tecnologia Java) – Departamento Acadêmico de Informática, Universidade Tecnológica Federal do Paraná. Curitiba, 2011. This work presents a boarding of the question of coordination of activities under the point of view of a condominium management software. Of the author's experience, ex-condominium syndic, it focus on who manages, aiming flexibility and practice. It presents aspects of the condominium management. As results, research brings a simplified management tool that was developed to help on activities tracking. Palavras-chave: Condominium management, activities coordination, activities tracking. LISTA DE ILUSTRAÇÕES Figura 1: Representação de tabela de cadastro de clientes em um banco de dados relacional. 23 Figura 2: Esquemático demonstrando o relacionamento entre tabelas.....................................24 Figura 3: Esquemático - Padrão de projeto da estratégia..........................................................27 Figura 4: Esquemático - Padrão de projeto observador............................................................27 Figura 5: Esquemático - Padrão de projeto da composição......................................................28 Figura 6: Comparativo entre o padrão MVC e o modelo de separação de responsabilidades..28 Figura 7: Diagrama de caso de uso Administrar Cadastro, demonstrando representação de atores e casos de uso e associações...........................................................................................31 Figura 8: Diagrama de classes do caso de uso Administrar Cadastro, demonstrando as classes criadas.......................................................................................................................................31 Figura 9: Diagrama de classes do caso de uso Administrar Usuário, demonstrando o padrão MVC e a separação de responsabilidades por camadas............................................................33 Figura 10: Edição de dados na área de administração do cadastro de usuários........................34 Figura 11: Diagrama de caso de uso Administrar Atividade....................................................35 Figura 12: Diagrama de classes do caso de uso Administrar Atividade, demonstrando o padrão MVC e a separação de responsabilidades por camadas................................................36 Figura 13: Área de acesso restrito para administração das atividades......................................37 Figura 14: Componente picklist: utilização para associar um usuário à respectiva atividade. O primeiro da lista Atividade é sempre o líder do grupo..............................................................37 Figura 15: Causas de falhas em projetos, segundo pesquisa do PMI no Brasil, em 373 empresas....................................................................................................................................38 Figura 16: Classe Agenda como fachada de apresentação de várias informações...................39 Figura 17: Agenda de acompanhamento dos projetos: detalhe dos apontamentos...................40 Figura 18: Curva de aprendizagem comparativa entre o sistema de TI e as técnicas de gestão. ...................................................................................................................................................43 Figura 19: Trecho de código correspondente à classe de interface UsuarioDAO.java.............47 Figura 20: Trecho de código correspondente à classe UsuarioDAOHibernate.java................47 Figura 21: Trecho de código correspondente à classe UsuarioRN.java...................................48 LISTA DE TABELAS Tabela 1: Programas de gestão condominial: características principais e diferenciais.............13 Tabela 2: Principais programas de gestão condominial e seu público-alvo.............................14 Tabela 3: A análise de processos em etapas.............................................................................20 Tabela 4: Características e vantagens do MySQL....................................................................25 Tabela 5: Visualização esquemática do padrão MVC e separação de responsabilidades.........32 Tabela 6: Levantamento dos problemas, principais causas e retrabalho..................................41 Tabela 7: Principais soluções propostas e resultado em 6 meses de monitoramento...............42 Tabela 8: Navegação implícita. Acesso resultante, em função da origem e do destino...........46 SUMÁRIO 1. INTRODUÇÃO....................................................................................................................11 1.1. Problema ...........................................................................................................................11 1.2. Justificativa........................................................................................................................12 1.3. Objetivos............................................................................................................................14 1.4. Metodologia.......................................................................................................................15 2. COORDENAÇÃO DE ATIVIDADES CONDOMINIAIS: TEORIA E FUNDAMENTOS ...................................................................................................................................................16 2.1 Aspectos legais da gestão condominial...............................................................................16 2.2 A gestão condominial..........................................................................................................18 2.3 Tecnologias Java, banco de dados e padrões de projeto.....................................................20 2.3.1 Java Server Faces.............................................................................................................21 2.3.2 Hibernate..........................................................................................................................22 2.3.3 MySQL.............................................................................................................................23 2.3.4 O padrão de projeto Model – View – Controller (MVC)................................................26 3. METODOLOGIA.................................................................................................................29 3.1. Desenvolvimento do projeto..............................................................................................29 3.1.1. Cadastro de usuários.......................................................................................................30 3.1.2. Cadastro das atividades...................................................................................................35 3.1.3. Agenda............................................................................................................................38 4. APRESENTAÇÃO E DISCUSSÃO DOS RESULTADOS................................................41 5. CONSIDERAÇÕES FINAIS ...............................................................................................44 6. REFERÊNCIAS....................................................................................................................45 7. APÊNDICE...........................................................................................................................46 7.1. Cadastro de usuários..........................................................................................................46 7.2. Cadastro de atividades.......................................................................................................49 7.3. Agenda...............................................................................................................................49 11 1. INTRODUÇÃO A gestão de empresas é uma área da Administração que possui conhecimentos e técnicas consolidadas. Particularmente, a gestão de condomínios habitacionais possui alguns diferenciais que a torna um caso sui generis. Pode-se observar que, em geral, um condomínio não é uma organização destinada ao lucro; mas, ao mesmo tempo, é um sistema gerencial, cujos processos financeiros, contábeis e fiscais devem estar sob rigoroso controle. No sistema gerencial de um condomínio, em termos executivos ou operacionais, a figura central é o Síndico, cuja função é administrar o patrimônio comum e representar os interesses coletivos dispostos em Assembleia Geral, conforme estabelecem o artigo 1347 da Lei Federal nº 10.406/02 (Código Civil) e a Lei Federal nº 4591/64 (Convenção Condominial). O assunto do presente trabalho é um sistema de tecnologia da informação que auxilie na coordenação de atividades e se desenvolva com foco nas necessidades do síndico do condomínio, de forma a facilitar e a agilizar a rotina de seu trabalho. 1.1. Problema Os condomínios residenciais são sistemas com processos gerenciais dos mais simples até os que alcançam a complexidade de um grande sistema corporativo. Invariavelmente, utilizam-se softwares para auxiliar a gestão condominial. Para serem competitivos, os softwares vem agregando o maior número de funcionalidades possível. É evidente que isso, além de tornar o produto final caro, descaracteriza-o para a utilização centrada em uma única pessoa: o síndico. Dessa forma, em função da realidade atual, diversas funcionalidades não serão utilizadas (ou o seriam de forma diferente) pelo síndico. Um exemplo disso é a emissão de boletos. Para o síndico, essa funcionalidade é secundária, já que tal serviço pode ser terceirizado para uma administradora de condomínios. A atenção do síndico converge para o status da arrecadação e na situação de inadimplências. O síndico precisa dessas informações principalmente para o planejamento de longo prazo. Não se deseja, com a argumentação acima, minimizar a importância e a adequação das diversas funcionalidades em programas já existentes no mercado. As observações acima são 12 evidências de que as atividades condominiais já estão veementemente distantes das atividades de uma administradora de condomínios. Sob a expressão administração de condomínios ou gestão condominial, encontram-se principalmente os programas com foco nas pessoas jurídicas, administradoras de vários condomínios. Pouco se vê em termos de ferramentas de tecnologia da informação centradas nos síndicos. Uma das atividades sujeitas a um maior desgaste é o gerenciamento de projetos, em particular, no acompanhamento desses projetos. Vários deles são administrados concomitantemente. O esquecimento de datas importantes ou a ausência da visão do todo tendem a turvar a percepção do síndico a tal ponto que ao final não é possível inferir se determinado projeto alcançou seus objetivos. 1.2. Justificativa No que tange à administração condominial: “(…) identificam-se três modalidades de gestão: autogestão, co-gestão e terceirização. Na autogestão, o síndico, eleito na forma da Lei Federal nº 10.406/02, assume total responsabilidade e administra o condomínio. Na co-gestão, o síndico recorre a uma assessoria administrativa, ou seja, partilha suas tarefas com empresas especializadas na administração de condomínios, mas sem transferências das responsabilidades legais. Já a terceirização, uma das tendências atuais do mercado imobiliário, trata-se da eleição da própria administradora de condomínios como síndico, esta, assim, assumindo total responsabilidade, administrando e representando legalmente o condomínio.” (Farber e Segreti, 2006, p. 3 e 4) Farber e Segreti (2006, p. 12) afirmam ainda que 56% dos condomínios de São Paulo compartilham sua administração com empresas especializadas (co-gestão). Logo, os outros 44% representam a autogestão ou a terceirização. Embora a pesquisa tenha-se realizado na cidade de São Paulo, a realidade urbana em muitas cidades, incluindo Curitiba, vem contribuindo para o surgimento de condomínios e de empresas administradoras de condomínio (Rede Globo – Jornalismo, PEGN, 2011). Exceto pela terceirização, as outras duas modalidades exigem a decisão do síndico. Nesse caso, existe uma característica preponderante na maioria dos condomínios residenciais: os síndicos não detem conhecimento gerencial suficiente para o mister. É natural, portanto, que haja uma carência em conceitos de gestão, tais como: identificar os problemas e as necessidades, mobilizar equipes de trabalho, desenvolver e controlar o andamento de soluções financeiramente viáveis. 13 Diante dessa dificuldade, o síndico se vê assoberbado pelas demandas, em um ciclo vicioso de urgências e soluções precipitadas. Assim, há poucos instrumentos para apoiar decisões estratégicas, como o orçamento anual. É evidente que o conhecimento gerencial se faz imprescindível. No entanto, a falta de uma estrutura gerencial mínima tende a se agravar com a carência de ferramentas computacionais para facilitar a atividade do síndico. A Tabela 1 abaixo apresenta programas tradicionais do mercado, focando suas características e os diferenciais de mercado. Neste último quesito, é possível identificar aqueles que se posicionam para empresas ou para administradores (síndicos). Tabela 1: Programas de gestão condominial: características principais e diferenciais Programa Características principais e diferenciais 1 Controle dos contratos de administração com os condomínios. Controle de contas a Base Condomínio pagar e a receber. Integração com bancos. Cálculo de rateio e emissão de boleto. Relatórios diversos. Acesso via web opcional. 2 BRCondomínio Controle de contas a pagar e a receber. Integração com todos os bancos. Emissão de boletos. Folha de pagamento. Personalização do sistema. Relatórios diversos. Repasse de pagamentos efetuados a menor ou a maior para a próxima mensalidade. Configuração de acesso multinível (administradora, contador, síndico, conselho fiscal, condôminos e funcionários). Condomínio Controle de contas a pagar e a receber. Cadastros de diversos condomínios, blocos e suas unidades. Previsões de receitas e despesas. Cálculo de rateio. Desenvolvido para administrar o próprio ou diversos condomínios. Atende às necessidades de controle das rotinas diárias. Curso multimídia para aprendizado do programa para administradores e funcionários. 4 Condomínio21 Há três versões para se adaptar ao tamanho do condomínio. Controle de contas a pagar e a receber. Integração com bancos. Emissão de boletos. Folha de pagamento. Personalização do sistema. Relatórios diversos. Consultas a informações via web. Adaptável para utilização de administradores de perfis variados, na gestão de condomínios de pequeno, médio ou grande porte. 5 Condor Controle de contas a pagar e a receber. Cobranças de taxas. Integração com banco. Emissão de boletos. Personalização do sistema. Relatórios diversos. Controle de inadimplências. Acesso via web. Há uma versão gratuita. Immobile Controle de contas a pagar e a receber, de lançamentos fixos, indexados, cobranças de taxas. Integração com banco. Emissão de boletos. Personalização do sistema. Relatórios diversos. Interface para imobiliárias. Integração com outros sistemas da empresa relacionados a armazenamento seguro e serviços de contabilidade e recursos humanos. 3 6 Fonte: Arquivos de pesquisas pessoais do autor. Com base nas características observadas e também nos diferenciais apresentados em material publicitário, pode-se claramente definir os programas focados nas atividades rotineiras do síndico. 14 Essa observação em relação ao diferencial se baseia em material propagandístico. No entanto, é preciso observar que também o síndico ou a respectiva Assembleia Geral farão a comparação dessas características através do material disponibilizado em alguma mídia publicitária. Na Tabela 2, resumem-se os programas analisados, a empresa desenvolvedora e o seu público-alvo. De acordo com o comparativo, verifica-se uma forte tendência de varejo voltado ao mercado corporativo, em detrimento da pessoa física do síndico. Tabela 2: Principais programas de gestão condominial e seu público-alvo Programa Empresa Público-alvo 1 Base Condomínio Base Software Empresa 2 BRCondomínio BRCondomínio Empresa 3 Condomínio Best Software Empresa/Síndico 4 Condomínio21 Group Software Empresa/Síndico 5 Condor Superlogica Empresa 6 Immobile Aterdata Software Empresa Fonte: Arquivos de pesquisas pessoais do autor. Como se viu em Farber e Segreti (2006, p. 4), embora haja uma tendência à terceirização, a autogestão e a co-gestão são as duas modalidades de gestão condominial dominantes. Em ambas, verifica-se que o processo decisório passa pelas mãos de uma única pessoa: o síndico. Dessa forma, esse trabalho se focaliza no estudo de uma abordagem do problema de coordenação das atividades sob o ponto de vista de ferramentas que possam ajudar o síndico 1.3. Objetivos Os objetivos gerais desse trabalho se voltaram para o desenvolvimento de uma ferramenta computacional, através da qual apresenta-se uma abordagem do problema de coordenação de atividades. Como objetivos específicos, os esforços se concentraram no desenvolvimento das seguintes funcionalidades: • Cadastro de usuários: controle do acesso ao sistema. • Cadastro de atividades: acompanhamento e coordenação das atividades. • Agenda: acompanhamento e coordenação das atividades. 15 Algumas premissas fundamentaram os trabalhos. São elas: • Fazer ferramentas computacionais mais amigáveis. • Considerar que síndicos tem pouco tempo para decidir. • Ter a possibilidade de colaboração, independente de horários e reuniões presenciais. 1.4. Metodologia O presente trabalho se compõe basicamente de estudos, testes e aplicação de várias tecnologias, integrando-as em um produto, destinado ao gerenciamento de projetos. Conforme Silva e Menezes (2005), na essência, esse trabalho se caracteriza eminentemente como uma pesquisa aplicada. A pesquisa bibliográfica foi o principal instrumento para identificar a situação mercadológica dos softwares para gestão condominial, de modo que se viu uma oportunidade de trabalho específico na área. Testes foram realizados para aplicar as tecnologias e os resultados foram sendo refinados etapa por etapa à medida que se adquiria maior desenvoltura na codificação. O capitulo 1 foi uma apresentação do trabalho, buscando esclarecer seus objetivos, os problemas envolvidos e seu conceito geral. No capítulo 2, abordam-se os aspectos teóricos que envolvem as atividades sobre as quais um síndico se debruça no cotidiano. A seguir, passa-se a abordar os aspectos técnicos que permeiam o presente trabalho: frameworks Java, Hibernate, padrões de projeto DAO e MVC, a especificação JSF e MySQL. No capítulo 3, demonstra-se o desenvolvimento da projeto à medida que a pesquisa evoluía. Busca-se apresentar os principais conceitos envolvidos na solução, a observação que deu origem ao trabalho, às restrições técnicas. O relatório foi elaborado sem divagar em torno dos códigos Java. Ênfase é dada na explicação da funcionalidade implementada. Os capítulos 4 e 5 apresentam considerações finais e as conclusões propiciadas pelo trabalho. 16 2. COORDENAÇÃO DE ATIVIDADES CONDOMINIAIS: TEORIA E FUNDAMENTOS Vários conceitos comuns à gestão de empresas podem ser aplicados na administração de um condomínio. Trata-se de serviço privado com características de serviço público, já que o síndico não age deliberadamente e deve prestar conta de suas ações aos condôminos. No texto a seguir, a exposição teórica se divide em duas áreas do conhecimento muito diferentes: o Direito e a Informática. Inicialmente, alguns conceitos do Direito Civil serão expostos para evidenciar como as atividades do síndico se revestem de especificidades muito sérias: os aspectos legais. Na sequencia, serão abordados os conceitos teóricos de algumas tecnologias utilizadas. Brevemente, as principais tecnologias se referem a: Java Server Faces (JSF) e Hibernate (ambos, frameworks Java); MySQL, um banco de dados relacional e MVC, o design pattern (padrão de projeto) que mais se sobressai. Obviamente, na prática, o projeto se utiliza de várias outras tecnologias, não menos importantes. Entretanto, a prolixidade levaria a abordar assuntos tais como XHTML, XML, Webdesign, os próprios conceitos de orientação a objetos, Engenharia de Software e Gestão de Projetos, dentre outros assuntos que fogem aos objetivos do trabalho. No projeto implementado, entretanto, convem citar o emprego das seguintes tecnologias e programas: Facelets, Spring Security, JSF (PrimeFaces), Apache Commons, Apache Tomcat, Eclipse, MySQL Workbench e LibreOffice. Além das tecnologias acima, convem citar também a experiência do autor como síndico do condomínio em que residia. Esse fato simplificou a abordagem no desenvolvimento, já que síndico e programador, cliente e desenvolvedor, são a mesma pessoa. O projeto do programa se deu por refinamentos sucessivos. Assim, as idas e vindas, comuns a essa técnica, foi bastante abreviada. 2.1 Aspectos legais da gestão condominial Toda organização possui uma estrutura administrativa e, no caso de um condomínio, essa estrutura é fixada em lei. Ao contrário da gestão empresarial, que visa ao lucro, a gestão condominial visa ao controle, ou seja, o síndico deve prestar conta de suas ações aos condôminos. 17 Na estrutura organizacional de um condomínio, existem basicamente três instâncias: o síndico, o conselho fiscal e a assembleia geral. Ao contrário do que muitos podem crer, a eleição do síndico, bem como a composição de um conselho fiscal e de uma assembleia geral, são obrigações instituídas pela Lei Federal nº 10.406/02 (novo Código Civil Brasileiro) e pela Lei Federal nº 4591/64 (Convenção Condominial). Em particular, o Código Civil estabelece os deveres do síndico: Art. 1.348. Compete ao síndico: I - convocar a assembleia dos condôminos; II - representar, ativa e passivamente, o condomínio, praticando, em juízo ou fora dele, os atos necessários à defesa dos interesses comuns; III - dar imediato conhecimento à assembleia da existência de procedimento judicial ou administrativo, de interesse do condomínio; IV - cumprir e fazer cumprir a convenção, o regimento interno e as determinações da assembleia; V - diligenciar a conservação e a guarda das partes comuns e zelar pela prestação dos serviços que interessem aos possuidores; VI - elaborar o orçamento da receita e da despesa relativa a cada ano; VII - cobrar dos condôminos as suas contribuições, bem como impor e cobrar as multas devidas; VIII - prestar contas à assembleia, anualmente e quando exigidas; IX - realizar o seguro da edificação. É importante observar que a competência estabelecida no inciso V demanda muito em termos de gerenciamento da rotina de um condomínio. O dia a dia determina um fluxo de caixa e uma certa periodicidade para alguns tipos de serviço. Tem-se, assim, no inciso VI uma competência que somente se consubstanciará ao fim do exercício anual, acompanhando diariamente os lançamentos a débito das contas condominiais. O artigo 1356 do Código Civil institui o Conselho Fiscal. Sua função é examinar a contabilidade do condomínio, que é de responsabilidade do síndico. Esse conselho não é de instituição obrigatória e, de fato, existem condomínios que não contam com essa instância. Entretanto, existindo, seus membros compartilham parte das responsabilidades administrativas do condomínio. A assembleia geral (artigo 1334 do Código Civil), no rigor do termo, é a denominação das reuniões em que ocorrem as decisões, as prestações de contas e a aprovação de planos condominiais. Apesar disso, por extensão, também se refere à coletividade, isto é, à máxima instância do condomínio, composta por todos os proprietários das unidades condominiais. 18 Além da estrutura de um condomínio acima descrita, convem destacar alguns diplomas legais pertinentes. É preciso observar que a legislação brasileira obedece a um princípio hierárquico, denominado ordenamento jurídico, que tem na Constituição Federal o seu elemento originário ou constituinte. A partir da Carta Magna, várias normas gerais tratam dos mais diversos campos do Direito. O Código Civil é norma geral que dispõe sobre direitos e obrigações de ordem privada concernentes às pessoas, aos bens e suas relações. Em seu Capítulo VI, conceitua o condomínio geral, isto é, dá a conformação em sentido mais amplo em matéria de condomínios. A convenção condominial e o regulamento interno são normas regulamentadoras, ou seja, são centradas na forma em que se materializará ou se instrumentalizará o Direito Civil instituído. Farber e Segreti (2006, p. 6) definem bem ambos os conceitos: • A convenção condominial é uma autêntica lei interna da comunidade, destinada a resguardar, em proveito de todos, o patrimônio condominial e a moralidade ambiente, num sistema de normas que, mais rigorosamente do que as decorrentes do direito de vizinhança, objetiva garantir a todos os ocupantes das unidades autônomas o sossego, a tranquilidade e a segurança. • O regulamento interno se preocupa com a rotina diária do condômino, com o seu funcionamento. Considerando que a lei não define sua abrangência, o regulamento interno poderá conter regras meramente procedimentais, mas também ir além, regulando o comportamento exigível dos condôminos, moradores e funcionários. 2.2 A gestão condominial Como se observou, o novo Código Civil Brasileiro impõe ao síndico deveres. Em razão das responsabilidades assumidas, que recaem sobre uma única pessoa, é recomendável e necessário um suporte para alguns serviços administrativos, tais como, os que se referem aos incisos VI a IX. Nesse contexto, quanto à administração condominial: “(…) identificam-se três modalidades de gestão: autogestão, co-gestão e terceirização. Na autogestão, o síndico, eleito na forma da Lei Federal nº 10.406/02, assume total responsabilidade e administra o condomínio. Na co-gestão, o síndico recorre a uma assessoria administrativa, ou seja, partilha suas tarefas com empresas especializadas na administração de condomínios, mas sem transferências das 19 responsabilidades legais. Já a terceirização, uma das tendências atuais do mercado imobiliário, trata-se da eleição da própria administradora de condomínios como síndico, esta, assim, assumindo total responsabilidade, administrando e representando legalmente o condomínio.” (Farber e Segreti, 2006, p. 3 e 4) Exceto pela terceirização, as outras duas modalidades exigem a tomada de decisão pelo síndico. Nesse caso, existe uma característica preponderante na maioria dos condomínios residenciais: os síndicos não detem conhecimento gerencial suficiente para o mister. Essa realidade é observada na pesquisa de Farber e Segreti (2006, p. 5), quando afirmam que apenas 39% dos síndicos contam com maior experiência na gestão de condomínios. É natural, portanto, que haja uma carência em conceitos de gestão, tais como: identificar os problemas e as necessidades, mobilizar equipes de trabalho, desenvolver e controlar o andamento de soluções financeiramente viáveis. De todos os conceitos, aquele sobre o qual o síndico deve-se debruçar é na identificação dos problemas e das necessidades, ou melhor, em suas causas. É relativamente fácil definir indicadores de desempenho para acompanhar processos em um condomínio. Por exemplo: inadimplências (expressas em R$ e em percentual), atrasos nos pagamentos de fornecedores, atrasos no pagamento de serviços de concessionárias (água, luz, telefonia), faltas e atrasos por parte dos funcionários. Diametralmente oposta à facilidade de estabelecer indicadores, a dificuldade em se identificar as causas dos problemas passa pela chamada análise de processos. Na Tabela 3, adaptaram-se as etapas que Araujo (2001, p. 66) sugere para a análise de processos. As etapas são genéricas o suficiente para serem aplicadas em quaisquer tipos de processos gerenciais. É preciso observar que os processos gerenciais são compostos eminentemente por etapas previsíveis, monitoráveis por indicadores de desempenho, por mais que seja difícil identificá-los. Assim, investigar quem pichou o muro do condomínio não é um processo gerencial, pois os resultados da investigação são imprevisíveis. Já a cobrança das taxas condominiais é um processo gerencial, que pode ser causa das inadimplências e que pode ser monitorada por indicadores e influenciada por ações. 20 Tabela 3: A análise de processos em etapas Etapa Descrição 1. Escolha É importante priorizar o estudo e escolher processos que realmente causem impactos significativos. Todo processo gerencial possui inicio, meio e, no fim, um produto. 2. Representação Entender como um processo se desenvolve passo a passo. Busca-se retratar em fluxogramas o processo, deixando as mudanças para a etapa seguinte. 3. Análise Ao representar o processo, frequentemente já se vislumbram melhorias. Essa fase é imprescindível para compreender como um processo deve ou deveria funcionar, modificando-o. 4. Documentação Com as melhorias idealizadas, documenta-se esse método com fluxogramas e com explicações pertinentes. Fonte: Arquivos de pesquisas pessoais do autor. De acordo com a legislação e também por questões práticas, é frequente que os condomínios possuam um Conselho Consultivo Fiscal, que além das funções fiscais, exerce uma função mais participativa, tornando-se uma representação de moradores e de suas demandas. Por fim, é importante frisar que a gestão condominial, ao contrário da empresarial, não visa ao lucro. Suas características lembram mais o fim público, ou seja, controlar os processos administrativos para prestar contas de forma transparente. 2.3 Tecnologias Java, banco de dados e padrões de projeto Pode-se dizer que a linguagem Java se tornou o cerne multifacetado de várias frentes em desenvolvimento. Em seus primórdios, a linguagem Java se diferenciava ao incorporar inerentemente as grandes vantagens do paradigma da orientação a objetos. Nos anos que se seguiram, diversas frentes de pesquisa das Ciências da Computação evoluíram exponencialmente; grandes empresas fomentaram organizações, que promoveram partido por essa evolução e várias tecnologias nasceram a partir do que, inicialmente, era apenas uma linguagem orientada a objeto. As linguagens de programação são uma espécie de linguagem formal 1. Conforme Gersting (2000, p. 427), as linguagens formais foram empregadas na definição das linguagens de alto nível e correspondem aos conjuntos (símbolos) aceitos por diversos tipos de autômatos (elementos matematicamente definidos, que “entendem” os símbolos aceitos). 1 Para uma abordagem mais detalhada, vide (Gersting, 2000, Capítulo 8). 21 Em seus dias atuais, Java transcendeu o conceito de linguagem. Tornou-se a base formal sobre a qual se desenvolveram ferramentas consagradas. Multiplicaram-se as soluções com base em Java, desenvolvidas pelas organizações mais influentes do planeta. Popularizouse o uso da linguagem Java para vê-la presente em carros, computadores pessoais, celulares e caixas eletrônicos de bancos. Essa gama de aplicações não deu apenas o poder da flexibilidade à comunidade Java. Deu a ela também a imprescindível capacidade de se integrar a outras tecnologias. Como será visto mais adiante, o exemplo histórico disso, foi o advento do Hibernate, como solução de integração dos conceitos de orientação a objetos e o de mapeamento objeto relacional dos Sistemas Gerenciadores de Banco de Dados (SGBD). 2.3.1 Java Server Faces Conforme Geary e Horstmann (2010, p. 3), atualmente, pode-se escolher entre vários frameworks para desenvolver a interface com o usuário de uma aplicação web. Java Server Faces (JSF) é uma especificação de framework baseado em componentes. A base em componentização permite que o desenvolvedor pense em seu projeto em um nível de abstração de nível mais alto. Exemplificando, ao exibir uma tabela com linhas e colunas, não se gera iterativamente o código HTML; ao invés disso, adiciona-se um componente tabela à página, que é gerada e atualizada por mecanismos específicos. Podem-se utilizar conjuntos personalizados de componentes ou os de terceiros. Além disso, é possível utilizar um ambiente de desenvolvimento visual do tipo arraste e solte componentes em um formulário. A especificação JSF possui as seguintes partes: • Um conjunto padrão de componentes de interface do usuário; • Um modelo de programação orientado a eventos; • Um modelo de componentes que permite o desenvolvimento de novos componentes. Um framework baseado em JSF não é apenas uma ferramenta web baseada em componentes. Trata-se de uma camada de visualização no padrão da especificação Java Enterprise Edition (JEE). Atualmente, vários frameworks atendem as especificações JSF, tais como MyFaces, IceFaces, PrimeFaces e Mojarra. 22 Convem citar também que o padrão JSF é definido por uma comunidade chamada Java Community Process (JCP), que é composta por empresas tais como Oracle, Novell, Siemens, Hewlett-Packard, Apache, Fujitsu, IBM, Macromedia, dentre outros. Por essa razão, torna-se evidente por que essa especificação é de fato um padrão mundialmente aceito. No presente trabalho, utilizou-se os frameworks Mojarra e PrimeFaces para compor a camada de visualização. 2.3.2 Hibernate Sobre o desenvolvimento do framework Hibernate, Fisher e Murphy (2010, p. 3) apresentam uma abordagem histórica tão interessante que os acompanham as linhas abaixo. O Hibernate foi criado pela empresa JBoss Incorporated (hoje, pertencente à Red Hat) e seu código fonte foi desenvolvido em Java. Foi um dos primeiros frameworks de mapeamento objeto relacional (ou object relational mapping – ORM), que forneceu uma solução corporativa viável para a persistência de dados. Nessa época, o Hibernate era uma solução proposta para o problema que havia entre o modelo relacional de tabelas e o modelo orientado a objetos (OO) do Java. A título de exemplo, um dos problemas era que as bases de dados relacionais não implementavam conceitos do paradigma da orientação a objetos, tais como polimorfismo, encapsulamento e acessibilidade. Outro dos grandes problemas, era a noção de igualdade, que é drasticamente diferente para Java e para SQL. Inicialmente, o Hibernate fazia a ponte entre os paradigmas ORM e OO através de arquivos XML. Após a incorporação à empresa Red Hat, sua implementação passou por mudanças e os relacionamentos passaram a ser através de Annotations (ou anotações, metadados do Java, implementados na versão JDK 5.0). Atualmente, as especificações Hibernate se aproximam das especificações do Enterprise Java Beans (EJB), que é um dos principais componentes do Java Enterprise Edition (JEE). No presente trabalho, utiliza-se o Hibernate como ferramenta para implementar o paradigma object relational mapping (ORM), relacionando e mapeando, através das annotations, os objetos Java ao sistema de gerenciamento de banco de dados. 23 2.3.3 MySQL O Sistema de Gerenciamento de Banco de Dados (SGBD) é um programa que implementa operações que visam, em última análise, à persistência de dados. Dentre vários artigos e livros a respeito do assunto, escolheu-se adaptar os estudos apresentados por Murach e Harris (2010, p. 93). Em 1970, o Dr. Edgar Frank Codd apresentou o modelo teórico dos bancos de dados relacionais, que suplantava os problemas de recuperação e redundância de dados. Atualmente, o modelo de bancos de dados relacionais consiste de tabelas que, tipicamente, representam uma entidade do mundo real, como uma lista de produtos ou um cadastro de clientes. Como mostra a Figura 1, essas tabelas contem colunas (ou campos) e linhas (ou registros). Cada coluna representa um atributo de uma entidade. Já as linhas, um conjunto de valores para uma determinada entidade. A interseção entre uma linha e uma coluna é chamada célula e armazena um único valor, correspondente a um atributo da entidade. Figura 1: Representação de tabela de cadastro de clientes em um banco de dados relacional. Fonte: arquivos do autor. Como se verifica na Figura 1, uma chave primária é tipicamente uma coluna, cujas células contem valores que identificam univocamente uma entidade. Mas, para ser chave primária, um campo preferencialmente deve possuir outra característica também muito importante: não deve ser editável. Além das chaves primárias, os sistemas de gerenciamento de banco de dados permitem a definição de uma ou mais chaves não primárias. Essas chaves não primárias, em MySQL, são chamadas chaves únicas. Tais como as primárias, essas chaves únicas não se repetem, mas são editáveis. Um exemplo disso são os e-mails, campos editáveis, utilizados no cadastramento de clientes. 24 Um dos grandes diferenciais do modelo de banco de dados relacionais, em relação a um simples armazenamento de dados, é que as tabelas podem se relacionar umas com as outras. As relações são feitas através da chave primária em uma tabela e da chave estrangeira em outra tabela. Empiricamente, a chave estrangeira é uma coluna de uma determinada tabela, que contem a chave primária de outra tabela. Pode-se observar esse fato no esquemático da Figura 2 abaixo. A tabela Cliente possui uma chave primária chamada IdCliente. A tabela Produtos também possui a sua chave primária, IdProdutos. No entanto, para se configurar a relação um-para-muitos (one-to-many) – em que um cliente pode ter vários produtos relacionados a ele – a tabela Produtos deve conter a chave estrangeira Cliente_IdCliente (nome este no formato Tabela-Chave Primária). É importante observar que em Indexes, constam PRIMARY (referência à chave primária da tabela) e/ou fk_Produtos_Cliente (referência à chave estrangeira). Figura 2: Esquemático demonstrando o relacionamento entre tabelas Fonte: arquivos do autor. A partir do MySQL 5.0, passou-se a dar suporte à integridade referencial e ao processamento de transações. Assim, havendo integridade referencial, não seria possível apagar uma linha que estivesse relacionada a uma outra tabela. Havendo processamento de transações, se houvesse uma alteração de valores nas tabelas de investimentos pré-fixados e nas de investimentos pós-fixados, a tabela extrato de conta somente seria atualizada somente se todos os processamentos forem concluídos com sucesso. 25 Com essa evolução, o MySQL tornou-se uma alternativa para substituir produtos comerciais como Oracle Database e Microsoft SQL Server. A Tabela 4 mostra algumas das características do banco de dados MySQL, que o tornaram tão popular. Tabela 4: Características e vantagens do MySQL. MySQL é: Viável. MySQL é gratuito para muitas aplicações e não é caro para outras. Rápido. MySQL é um dos bancos de dados relacionais mais rápidos atualmente disponíveis. Fácil. Comparado a outros sistemas de gerenciamento de banco de dados, MySQL é fácil de instalar e de usar. Portável. MySQL executa na maioria dos sistemas operacionais modernos, incluindo Windows, Unix, Solaris e OS/2. MySQL proporciona: Suporte a SQL. MySQL dá suporte à linguagem padrão, que trata dados junto ao banco de dados relacional. Suporte a múltiplos clientes. MySQL permite acesso de múltiplos clientes de interfaces diversas e de linguagens de programação diferentes, incluindo Java, PHP, Perl, Python e C. Segurança. MySQL permite acesso somente a usuários autorizados. Integridade referencial. MySQL evita alterações em dados de uma tabela que estejam relacionados a uma outra tabela. Processamento de transações. MySQL somente permite o processamento de transações íntegras, isto é, se, dentre vários procedimentos, algum deles der errado, a transação é abortada, preservando os dados e as tabelas envolvidas. Descrição: MySQL é um sistema de gerenciamento de banco de dados de código aberto e é incluído nos pacotes de muitos provedores de serviços de internet. MySQL foi desenvolvido pela empresa MySQL AB, que foi comprada pela Sun Microsystems. Esta por sua vez, foi comprada, juntamente com todos os seus produtos, pela Oracle Corporation. Integridade referencial se refere à capacidade de manter intactos os relacionamentos entre as tabelas. Ou seja, não é possível apagar uma linha de uma tabela que contem uma chave primária referenciada como chave estrangeira em uma outra tabela. Processamento de transações se refere à capacidade de processar como um única transação uma série de declarações SQL inter-relacionadas. Nesse caso, se uma das declarações falha, o processamento que foi executado pelas outras declarações pode ser desfeita, de forma que o banco de dados se mantem íntegro. Fonte: Adaptado de Murach e Harris (2010, p. 107). Nesse trabalho, o MySQL foi utilizado como sistema de gerenciamento de banco de dados. Adicionalmente, a Oracle também oferece uma ferramenta gráfica que proporciona uma grande praticidade no projeto do banco de dados: o MySQL Workbench. A Figura 2 demonstra um exemplo de sua utilização. As tabelas, as propriedades e os relacionamentos são rápida e graficamente configuráveis através de uma interface bastante intuitiva. 26 2.3.4 O padrão de projeto Model – View – Controller (MVC) Gamma et al. (1995, p 2) resgatam a inspiração que deu origem aos padrões de projeto no campo das Ciências da Computação ao citar Christopher Alexander, Matemático, Arquiteto e Urbanista: “Cada padrão descreve um problema que ocorre uma vez e novamente outra vez em nosso ambiente e, então, delineia-se o cerne de uma solução para aquele problema, de tal maneira que se pode usar essa solução milhões de vezes, sem jamais fazer a mesma coisa duas vezes.” Apesar do contexto de Alexander ter sido a Arquitetura, seu trabalho inspirou os padrões de projetos, também conhecidos por design patterns. Segundo Gamma et al. (1995, p. 3), podem-se distinguir quatro elementos essenciais: • O nome do padrão, normalmente uma ou duas palavras, é um artifício usado para designar um problema de projeto, suas soluções e consequências. • O problema descreve quando se deve aplicar um padrão; explica o problema e seu contexto. • A solução descreve os elementos que delinearam o projeto, seus relacionamentos, responsabilidades e colaborações. • As consequências são os resultados e os dilemas enfrentados ao aplicar os padrões. O advento dos padrões de projeto teve grande repercussão na manutenção dos sistemas. Em certo momento, passou-se a falar em separação de responsabilidades e em baixo acoplamento. Um dos princípios do padrão MVC é a separação de responsabilidades. Assim, cada uma das três camadas tem responsabilidades distintas e bem definidas. Havendo essa separação, define-se que as camadas mantem um baixo nível de dependência umas com as outras. Isso permite que uma camada seja alterada sem afetar a outra. Pode-se dizer que MVC é um padrão composto, isto é, compõe-se da integração de alguns dos padrões conhecidos. Apesar de ser uma composição de padrões de projeto, o MVC é considerado na literatura, ele mesmo, um padrão de projeto. Entretanto, de acordo com Freeman et al. (2004, p. 528), a estrutura do MVC se torna mais clara sob a óptica dos vários padrões que o compõem. No MVC, identificam-se claramente os padrões: estratégia, observador e composição. No padrão de projeto de estratégia, quando o usuário interage, a camada de visualização delega ao controlador a decisão do que fazer. Em uma classe controladora, 27 existem métodos que reagem às ações do usuário. Esse padrão é representado esquematicamente na Figura 3. Figura 3: Esquemático - Padrão de projeto da estratégia Fonte: arquivos do autor. Em função da separação de responsabilidades, a camada de visualização apenas se preocupa com a apresentação da interface com o usuário. A camada de controle se preocupa em tratar as entradas do usuário com ações do modelo (regras de negócio). No padrão de projeto observador, toda nova classe de visualização, que precisa ser notificada sobre alterações no estado do modelo, deve ser registrada como observador (vide Figura 4). Uma vez registrados, os observadores serão notificados pela classe da camada de modelo sobre qualquer ação do usuário que altere seu estado. Dentre as classes observadoras podem existir classes da camada de visualização, bem como, classes da camada de controle. É importante observar que a classe de modelo não tem dependências em relação às classes das camadas de visualização e de controle. Figura 4: Esquemático - Padrão de projeto observador Fonte: arquivos do autor. 28 No padrão de projeto de composição, a camada de visualização é uma composição de componentes, que são classes que implementam a interface gráfica com o usuário, conhecida também como Graphical User Interface (GUI). Um componente no topo de uma camada de visualização contem outros componentes que, por sua vez, conterão outros e assim sucessivamente até se chegar a componentes unitários. Isto é, explodindo-se as camadas de um padrão de composição, verifica-se que o todo é composto por pequenas partes. Essa ideia é representada esquematicamente pela Figura 5. Figura 5: Esquemático - Padrão de projeto da composição Fonte: arquivos do autor. Por fim, reiterando-se: a fim de facilitar a manutenção dos sistemas, frequentemente se trabalha com a separação de responsabilidades em camadas. Segundo Luckow e Melo (2010), pode-se comparar o modelo de camadas de responsabilidades com o padrão MVC. A Figura 6 mostra esse comparativo, em que os retângulos azuis representam as camadas de acesso a dados (DAO), de regras de negócio (RN) e de apresentação. Em cinza, agruparam-se os retângulos correspondentes ao modelo (model) à visualização (view) e ao controlador (controller). Figura 6: Comparativo entre o padrão MVC e o modelo de separação de responsabilidades. Fonte: Adaptado de Luckow e Melo (2010, p. 181). 29 3. METODOLOGIA Em pequenos condomínios, há uma tendência a uma gestão mais participativa, no sentido de que existe naturalmente uma propensão à aproximação do síndico e dos condôminos. Quando as relações são relativamente prósperas, o síndico consegue converter as reivindicações em projetos. Porém, às vezes, isso só não é implementável pelo fato de que é difícil controlar projetos participativos. Além disso, o pequeno condomínio pode ser proporcionalmente mais eficiente que um condomínio grande e bem estruturado, haja vista que ganha em agilidade e flexibilidade. A instituição de comissões seria solução, mas leva à dificuldade de comunicação, pois não é possível fazer reuniões constantemente entre seus membros e o síndico. A dificuldade passa a ser a coordenação das atividades descentralizadas. O objetivo geral é o desenvolvimento de uma ferramenta de TI que auxilie o síndico na coordenação e no acompanhamento de atividades. Considerou-se que, embora de pequeno porte, o condomínio possui recursos financeiros para a co-gestão (Farber e Segreti, 2006, p. 3), ou seja, as atividades são de responsabilidade do síndico, mas este é assessorado por uma empresa especializada em administração de condomínios. Quanto às tecnologias Java, ainda que existam diversas ferramentas, evitou-se propositalmente discussões e comparativos acerca de desempenho. Como o foco é a integração de tecnologias e sua aplicação, as escolhas se deram simplesmente pela popularidade ou pela conveniência. 3.1. Desenvolvimento do projeto Primordialmente, era preciso acompanhar as atividades do condomínio para coordenálas. Dessa forma, a partir dessas necessidades primordiais, algumas funcionalidades naturalmente se desdobraram. Focando-se nesses objetivos específicos, concentrou-se o desenvolvimento nas seguintes funcionalidades: • Cadastro de usuários: controle do acesso ao sistema. • Cadastro de atividades: acompanhamento e coordenação das atividades. 30 • Agenda: acompanhamento e coordenação das atividades. Em termos de implementação é importante mencionar o aspecto da reutilização de código, do qual se beneficiou o desenvolvimento exposto no presente capítulo. Particularmente, os dois primeiros objetivos específicos citados acima, que se referem a cadastros de usuários e de atividades, possuem características análogas, em termos de desenvolvimento. A fim de orientar e formalmente definir o que está sendo desenvolvido, a partir de um diagrama de caso de uso, conforme os padrões UML, elaborou-se um diagrama de classes. Essa elaboração é subjetiva, por se tratar de uma atividade de síntese, ou seja, aquela que depende da criatividade do desenvolvedor. Nos tópicos seguintes, serão abordados com mais detalhes os conceitos acima. 3.1.1. Cadastro de usuários Os sistemas gerenciadores envolvem abstrações de diversos entes do mundo real, tais como administradores, bancos de dados, cadastros, dentre outros. É uma prática comum cadastrar usuários para legitimá-los à utilização de um sistema gerenciador. A razão é simples: segurança. Um sistema de gestão condominial aberto ficaria exposto ao democratizar informações financeiras ou particulares do condomínio. É frequentemente indesejável essa exposição. Assim, acessar o sistema é um caso de uso que faz parte da administração do cadastro de usuários. Essa é uma forma de restringir o acesso ao sistema gerencial do condomínio. E, da mesma forma, fazem parte também os casos de inserção, edição, consulta e exclusão de outros usuários. A Figura 7 demonstra o caso de uso relacionado à administração do cadastro de usuários. No caso de uso Administrar Cadastro, os atores são o Síndico e o Sistema Gerenciador de Banco de Dados, o SGBD. Esses atores estão associados ao caso de uso e essa associação é representada por linhas cheias. A representação da Figura 7 permite a interpretação de que uma pessoa (habilitada) faça uso do sistema gerencial para administrar um cadastro. Um dos usos possíveis será, por exemplo, a inserção de um novo usuário no sistema gerenciador de banco de dados. 31 Figura 7: Diagrama de caso de uso Administrar Cadastro, demonstrando representação de atores e casos de uso e associações. Fonte: Arquivos pessoais do autor. Como se pode visualizar, o caso de uso Administrar Cadastro inclui outros cinco casos: Inserir, Editar, Consultar, Excluir e Acessar. Este último restringe o acesso ao sistema, ao exigir login e senha. Os cinco casos se incluem como parte de Administrar Cadastro e a relação de inclusão (<<include>>) é representada por linhas tracejadas. Já se fez alusão ao fato de que a elaboração do diagrama de classes é um processo criativo do desenvolvedor. Mas, existe uma abordagem a partir da qual se começa a refinar o modelo. A abordagem consiste em: • Atribuir uma classe de interface para cada ator. • Criar uma classe de controle e instanciar classes para cada caso de uso. • Criar classes de entidade para os casos de uso. Seguindo a abordagem acima, na Figura 8 abaixo, representa-se um esboço do diagrama de classes, conforme o padrão UML. Figura 8: Diagrama de classes do caso de uso Administrar Cadastro, demonstrando as classes criadas. Fonte: Arquivos pessoais do autor. 32 Na sequência, convem lembrar que o padrão de projeto adotado é o MVC. Aliado ao padrão, separou-se as responsabilidades por camadas, de modo que a Tabela 5 auxilia a compreensão do método de desenvolvimento abaixo descrito. Tabela 5: Visualização esquemática do padrão MVC e separação de responsabilidades Responsabilidades Camadas Acesso a dados Model UsuarioDAO UsuarioDAOHibernate DAOFactory Regras de negócio Apresentação UsuarioRN - Usuario (POJO) View - - JSP ou XHTML Controller - - Bean Fonte: Arquivos pessoais do autor. A camada de apresentação (vide Figura 6, p. 28) foi idealizada utilizando os recursos do PrimeFaces, uma implementação do JSF (vide 2.3.1 Java Server Faces, p. 21) e a camada de acesso a dados, os recursos do Hibernate (vide 2.3.2 Hibernate, p. 22). Serão explicadas como se deu a síntese do diagrama de classes final, representado na Figura 9. Além disso, com base na Figura 7, apenas por questão de ordenamento do texto, a análise se dará da esquerda para a direita, isto é, do Usuário para o SGBD. A interface entre o usuário e o sistema gerencial se dá através de classes bean e páginas XHTML. Representou-se essa interface de apresentação como uma anotação no diagrama de classes UML. No modelo JSF, as chamadas classes backing bean (ou, simplesmente, bean) controlam a comunicação com o XHTML - a camada de apresentação do sistema (vide Figura 6, p. 28). Feitas as considerações acima, uma classe chamada UsuarioBean controlará a comunicação entre a camada de apresentação e a camada do modelo. Se todas as propriedades dos usuários estiverem definidas na classe UsuarioBean, será necessário o envio dessa classe para gravação em banco de dados, o que desvirtua o conceito MVC. Nesse caso, um objeto da camada de controle está avançando sobre a camada de modelo (vide Tabela 5). Ou, visto por outro ângulo, um objeto cuja responsabilidade é controlar a camada de apresentação também detem parte da responsabilidade pelo acesso a dados. 33 Figura 9: Diagrama de classes do caso de uso Administrar Usuário, demonstrando o padrão MVC e a separação de responsabilidades por camadas. Fonte: Arquivos pessoais do autor. Para solucionar o problema, cria-se a chamada classe POJO, Plain Old Java Object, ou seja, uma classe simples, contendo apenas dados, que trafegará livremente por todas as camadas como um mensageiro (vide Figura 9). Dessa forma, a classe UsuarioBean contem como uma de suas propriedades uma classe POJO, que chamaremos Usuario. Além disso, convém ressaltar que as classes POJO são abstrações de tabelas de um banco de dados, o que representa a operacionalização do mapeamento objeto-relacional. Comparando-se a Figura 8 e a Figura 9, observa-se que temos a camada de apresentação desenvolvida. O que era uma classe InterfaceUsuario se tornou XHTML e as classes UsuarioBean e Usuario. Prosseguindo no desenvolvimento, passaremos pela camada de regra de negócios. Essa responsabilidade representa o cerne da modelagem, pois é nesta camada que ocorrerão as decisões. Na Figura 8, regras de negócios2 foram definidas conforme os possíveis casos de uso do sistema. Ao Administrar Cadastro, o usuário poderá se deparar com situações como Inserir, Editar, Consultar, Excluir e Acessar. 2 Classes da camada de controle do padrão MVC possuem definição um tanto diferente dos casos de uso, que, convertidos em diagramas de classes, podem ser definidos em UML com o estereótipo de controlador (control ou controller). Buscou-se contornar tal fato usando a expressão “regra de negócios”. 34 Analisando-se tais situações, evidencia-se ser mais coerente que as regras de negócio sejam representadas em uma única classe. Por exemplo, seria incoerente fazer uma instanciação para inserir um usuário no cadastro e outra instanciação para editar o cadastro desse mesmo usuário. Dessa forma, as ações de Inserir, Editar, Consultar, Excluir e Acessar foram definidas em uma única classe: UsuarioRN. Nela, estão definidos quais métodos serão chamados, quando isso acontecerá, como serão tratados os erros, bem como outras regras. Em uma classe de regra de negócio, deve-se definir: • Uma propriedade DAO (UsuarioDAO), correspondente à regra de negócio que se deseja definir. • Uma instanciação dessa propriedade, usando DAOFactory no construtor. Uma vez tendo recebido dados da classe Usuario, a classe UsuarioRN solicita à classe DAOFactory que gere as classes UsuarioDAO e UsuarioDAOHibernate. Esta possui o código necessário para acessar e tratar dados de um banco, através da plataforma Hibernate. Aquela possui apenas as assinaturas dos métodos e os atributos necessários para o repasse de dados. Essa descrição corresponde à implementação do padrão DAO, que separa nitidamente as responsabilidades de acesso a dados das de regras de negócio. Com isso, verifica-se o desenvolvimento completo do diagrama de classes sugerido na Figura 9, a partir do diagrama inicial da Figura 8. Figura 10: Edição de dados na área de administração do cadastro de usuários Fonte: arquivos pessoais do autor. A Figura 10 ilustra a página XHTML controlada pela classe UsuarioBean. Outros detalhes da implementação podem ser encontrados no APÊNDICE. 35 3.1.2. Cadastro das atividades Do ponto de vista analítico, cadastrar usuários como parte de uma atividade é o mesmo que criar grupos específicos de usuários. Observa-se que, no caso típico, um usuário participará de um grupo responsável por uma atividade. O grupo de usuários assim formado recebe um nome sugestivo e passa a ter componentes. A reutilização de código é uma máxima já largamente difundida entre os desenvolvedores. Nessa proposta de trabalho, também se falou em reuso da metodologia de desenvolvimento, sobre a qual discorrerão as linhas seguintes. O caso de uso Administrar Atividade é essencialmente análoga ao caso Administrar Usuário. A diferença é que existe um caso de uso adicional, referente a uma associação entre um usuário já cadastrado e uma atividade. Figura 11: Diagrama de caso de uso Administrar Atividade Fonte: arquivos pessoais do autor. Associar um usuário a uma atividade é relativamente simples, quando se instancia um objeto Usuario na própria classe AtividadeBean. Dessa forma, todos os dados relativos a um usuário acompanharão a atividade relacionada. Da mesma forma, se todas as propriedades das atividades estiverem definidas na classe AtividadeBean, será necessário o envio dessa classe para gravação em banco de dados, o que desvirtua o conceito MVC. Nesse caso, um objeto da camada de controle está avançando sobre a camada de modelo. Ou, visto por outro ângulo, um objeto cuja responsabilidade é controlar a camada de apresentação também detem parte da responsabilidade pelo acesso a dados. 36 Reutilizando-se artifício anterior, cria-se uma classe POJO, contendo apenas dados, que trafegará livremente por todas as camadas como um mensageiro (vide Figura 12). Figura 12: Diagrama de classes do caso de uso Administrar Atividade, demonstrando o padrão MVC e a separação de responsabilidades por camadas. Fonte: Arquivos pessoais do autor. Também no presente caso, evidencia-se ser mais coerente que as regras de negócio sejam representadas em uma única classe. Por exemplo, seria incoerente fazer uma instanciação para inserir uma atividade e outra instanciação para edição dessa mesma atividade. Dessa forma, as ações de Inserir, Associar, Editar, Consultar, Excluir e Acessar foram definidas em uma única classe: AtividadeRN. Nela, estão definidos quais métodos serão chamados, quando isso acontecerá, como serão tratados os erros, bem como outras regras. Nessa classe de regra de negócio, deve-se definir: • Uma propriedade DAO (AtividadeDAO), correspondente à nova regra de negócio definida. • Uma instanciação dessa propriedade, usando DAOFactory no construtor. Uma vez tendo recebido dados da classe Atividade, a classe AtividadeRN solicita à classe DAOFactory que gere as classes AtividadeDAO e AtividadeDAOHibernate. Esta possui o código necessário para acessar e tratar dados de um banco, através da plataforma Hibernate. Aquela possui apenas as assinaturas dos métodos e os atributos necessários para o 37 repasse de dados. Essa descrição corresponde à implementação do padrão DAO, que separa nitidamente as responsabilidades de acesso a dados das de regras de negócio. Observa-se que a classe DAOFactory está sendo reutilizada. Assim, é preciso modificá-la para acrescentar o seguinte método: public static AtividadeDAO criarAtividadeDAO() { AtividadeDAOHibernate atividadeDAO = new AtividadeDAOHibernate(); atividadeDAO.setSession(HibernateUtil.getSessionFactory().getCurrentSession()); return atividadeDAO; } Figura 13: Área de acesso restrito para administração das atividades. Fonte: arquivos pessoais do autor. Com isso, verifica-se o desenvolvimento completo do diagrama de classes sugerido na Figura 12, a partir do diagrama inicial da Figura 11. Figura 14: Componente picklist: utilização para associar um usuário à respectiva atividade. O primeiro da lista Atividade é sempre o líder do grupo. Fonte: arquivos pessoais do autor. A Figura 13 ilustra a página XHTML controlada pela classe AtividadeBean. Apesar da apresentação diferente, em relação à página de administração de usuários, observa-se que as 38 mesmas funcionalidades estão presentes. Um clique no componente DataTable da Figura 13, ativa a edição dos responsáveis por uma atividade. São ativados os componentes picklist e overlay panel do framework PrimeFaces (Figura 14). Outros detalhes da implementação podem ser encontrados no APÊNDICE. 3.1.3. Agenda Essa última ferramenta foi implementada a partir da necessidade de proporcionar ao gestor a visão sistêmica, isto é, em uma única interface, ser possível observar os principais aspectos das atividades em curso no condomínio. Segundo pesquisas do Project Management Institute - PMI, no Brasil, as maiores causas de insucessos nos projetos estão por conta de: descumprimento de prazos, problemas de comunicação e dificuldades relacionadas ao escopo do projeto. Para auxiliar na definição das informações disponibilizadas ao gestor do condomínio, elegeram-se aqueles três mais incidentes aspectos (vide Figura 15). Sem grande perda de generalidade, permitiu-se considerar que, por exemplo, atrasos em atividades remetem a atrasos no projeto. Figura 15: Causas de falhas em projetos, segundo pesquisa do PMI no Brasil, em 373 empresas. Fonte: PMI 39 Com relação aos prazos, uma agenda seria uma boa forma de controlá-los. Para o gestor, uma visão geral bastante prática é a mensal, pois, como as obrigações e os recebíveis se dão nessa janela de tempo, o melhor é trabalhar dessa forma. Porém, como na agenda real, no mesmo espaço, não é possível incluir toda a informação (início/término das atividades, responsáveis, atividades e observações gerais). Seria conveniente disponibilizar dados gerais e, caso necessário, detalhes à parte. Com relação à comunicação, a disponibilidade de uma agenda comum facilita compartilhar as informações, contribuindo para o bom relacionamento. A agenda, nesse ponto, torna-se um canal centralizado de comunicação entre gestores, facilitando a coordenação das atividades. O escopo de projeto, ou seja, a abrangência a que faz menção a metodologia PMI pode ser aplicada no âmbito das atividades. Na Agenda, não se modificam as atividades, apenas se visualiza, de modo que seu escopo não se altera; para modificá-lo, deve-se alterar o cadastro da própria atividade. Figura 16: Classe Agenda como fachada de apresentação de várias informações. Fonte: arquivos pessoais do autor. Analisando-se outro aspecto, verifica-se que as informações desejadas já se encontram gravadas em banco de dados. Ao se cadastrar as atividades e as informações que lhes foram acrescidas no decorrer do tempo, todas as informações foram armazenadas nos bancos de 40 dados. Assim, apenas é necessário uma classe de fachada que reúna tais informações e as apresente. Esse é um padrão de projeto conhecido como Façade ou Fachada. A Figura 16 omite propositalmente as interações com as classes de banco de dados, a fim de simplificar a visualização do padrão fachada. A vantagem está no repasse das dependências da classe Agenda para a classe Atividade. Figura 17: Agenda de acompanhamento dos projetos: detalhe dos apontamentos. Fonte: arquivos pessoais do autor. Conforme estabelece o modelo JSF, uma classe AgendaBean é responsável pelo controle da camada de apresentação. Essa classe possui o desenvolvimento bastante similar ao da classe AtividadeBean (vide Figura 12). A página XHTML controlada por AgendaBean é aquela apresentada na Figura 17, em que se destaca o fato de que os botões Limpar e Salvar se destinam ao campo Observações Gerais. 41 4. APRESENTAÇÃO E DISCUSSÃO DOS RESULTADOS Houve uma pesquisa realizada entre o Conselho Consultivo e o Síndico, na qual se levantaram as possíveis causas dos problemas administrativos do condomínio. Mencionou-se que uma das grandes dificuldades no gerenciamento das atividades condominiais seria a coordenação entre elas. A Tabela 6 demonstra alguns dos principais problemas levantados. Tabela 6: Levantamento dos problemas, principais causas e retrabalho. Processos Problemas Causas Retrabalho Pagamento Pagamento de juros de mora Ligações à Administradora do Condomínio. Em média, 5 Datas de pagamentos esquecidas. min/ligação, em horário comercial. Compra Atraso de fornecimento Falta de acompanhamento de entrega. Cobrança Falta de isonomia Em média, 4 meses para As grandes inadimplências eram regularização de cada as mais acompanhadas. inadimplente. Atualizar orçamento ou mudar de fornecedor. Em média, 7 dias úteis. Anotações do Síndico que não Comunicação Descontinuidade de ações eram do conhecimento de mais ninguém. Retrabalho de ação já executada. Em média 3 dias. Serviços de Falta de manutenção acompanhamento Contratação de serviços complementares. Em média, 5 dias para contratar e 2 dias para corrigir. Inexistência de escala de revezamento de inspeções. Fonte: arquivos pessoais do autor. As obrigações relativas ao acompanhamento e à coordenação entre as diversas atividades acabam sendo o foco da rotina do Síndico. Os processos de pagamento, cobrança, comunicação são executados diretamente pelo Síndico. O processo de compras tem seus orçamentos feitos por membros do Conselho Consultivo. É deste também a responsabilidade pelo acompanhamento das obras e dos serviços, mas a autorização destes é do Síndico, o que não o exime de acompanhar todas as atividades do Condomínio. Devido ao volume de processos para coordenar, o programa trouxe uma vantagem operacional ou um ganho de escala relativo. Diminuindo-se a necessidade de reuniões constantes, bem como mantendo dados disponíveis a todos os envolvidos, o programa desenvolvido veio a facilitar a tomada de decisão. Considerando as funcionalidades implementadas, o sistema de TI apresentou recursos que permitem uma grande economia de tempo, como a agenda e o cadastro de atividades. A 42 Tabela 7 demonstra as soluções propostas com o apoio do software e os resultados obtidos frente aos problemas levantados na tabela anterior. Tabela 7: Principais soluções propostas e resultado em 6 meses de monitoramento. Processos Problemas (Causas) Soluções Resultados Pagamento Pagamento de juros de mora. (Datas de pagamentos esquecidas). Agendamento no sistema. Compra Atraso de fornecimento (Falta de acompanhamento de entrega) Em média, 7 dias úteis por evento Agendamento de datas limites economizado. Furo do fornecedor antes da entrega a fim de contornado em uma situação, propiciar troca de fornecedor, se devido à antecipação pelo for o caso. acompanhamento. Cobrança Falta de isonomia (As grandes inadimplências eram as mais acompanhadas) Cobrança efetivada de forma agendada. Acompanhamento semanal. Descontinuidade de ações (Anotações do Síndico Estabelecimento de regra: Comunicação que não eram do anotações devem constar em conhecimento de mais campo observações na Agenda. ninguém) Falta de acompanhamento Serviços de (Inexistência de escala de manutenção revezamento de inspeções.). Após contato com o grupo, com base na Agenda, os próprios responsáveis passaram a estabelecer os revezamentos. Passou-se a postar o resultado das inspeções no campo observações da Agenda. Não houve esquecimentos. Desnecessidade de ligações à Administradora por esse motivo. Em média, 2,5 meses para regularização de cada inadimplente. Inexistência de fato reincidente no período monitorado Os contratos passaram a ser cobrados mais efetivamente. Fonte: arquivos pessoais do autor. A existência de dados, prontamente acessíveis e beneficamente claros, tornam o sistema bastante prático. Nesse ínterim, verificou-se uma importante constatação: a curva de aprendizagem de um sistema de TI que agrega conceitos de gestão é menor que a mesma curva focada na aprendizagem das técnicas de gestão condominial. Empiricamente, em quatro meses (vide Figura 18), observou-se que os esforços de nivelamento do grupo, em termos de assimilação do sistema de TI, desempenharam um papel quase cinco vezes mais relevante do que a mesma assimilação de conteúdo versando sobre gestão de projetos ou matérias correlatas. A escala da Figura 18 tomou por base a quantidade de aplicações dos conceitos gerenciais, ou aplicados através do sistema de TI, ou aplicados através do conhecimento de gestão. 43 5 4,5 4 3,5 escala 3 2,5 Gestão 2 Sistema TI 1,5 1 0,5 0 1 2 3 4 meses Figura 18: Curva de aprendizagem comparativa entre o sistema de TI e as técnicas de gestão. Fonte: arquivos pessoais do autor. O uso do sistema de TI para gestão condominial foi rotulado por dois participantes como intuitivo, com o que se quis dizer que a utilização do programa dispensa treinamentos demorados e exaustivos. Muitas das vezes, bastaram algumas orientações rápidas, além da exposição inicial, que se deu em uma reunião de uma hora e meia. 44 5. CONSIDERAÇÕES FINAIS A maioria dos sistemas condominiais são direcionados para as empresas. Tal fato levou ao empreendimento desse projeto, com um sistema de TI com foco nas atividades rotineiras de um síndico. Após sua codificação, o sistema de TI para a gestão condominial apresentou uma grande tendência a corroborar sua importância e sua funcionalidade. Aspectos importantes embasaram essa observação: facilitou a coordenação dos grupos envolvidos em projetos, apresentou economia de tempo, curva de aprendizagem reduzida, retorno financeiro por redução do retrabalho. Em parte, na fase de desenvolvimento e também na fase de testes, percebeu-se que o programa pode ser conformado para a utilização em outras atividades, que exijam a coordenação das ações de vários participantes, em formato simples e direto, possivelmente, agregando tecnologia, como e-mails e SMS. Poder-se-ia argumentar que é por essa razão que não existem sistemas de TI específicos para as atividades do síndico: suas atividades já seriam alvo de programas de gestão administrativa. Entretanto, uma das premissas que motivou o presente trabalho continua tendo um valor preponderante: as atividades condominiais são muito específicas, conformadas por aspectos legais e muito restringidas financeiramente. É fato a carência no mercado, quando o assunto é sistemas de TI para o gerenciamento de atividades sujeitas à legislação federal, estadual ou municipal. Exemplos concretos, além da gestão condominial, é a gestão contábil. Existem muitos softwares contábeis, mas é muito raro encontrar um software para gestão administrativa da contabilidade. Por fim, cabe ressaltar que uma das principais observações, se não a mais importante, é o fato de que é muito mais rápido ensinar a operar um software que agrega vários conceitos complexos do que ensinar os próprios conceitos complexos. Certos conhecimentos demandam muito mais tempo para serem ensinados, de modo que, para a prática do dia a dia, a curva de aprendizagem não é viável. 45 6. REFERÊNCIAS Alterdata Software. Folder de Automação Imobiliária (Immobile). Disponível em: <http:// www.alterdata.com.br/imagens/folders/Alterdata_IMMOBILE_2009_web.pdf>. Acesso em: 13 jun 2011, 10:30:00. Araujo, Luis César G. de, Organização, sistemas e métodos e as modernas ferramentas de gestão organizacional: arquitetura, benchmarking, empowerment, gestão pela qualidade total, reengenharia. 1. ed. - São Paulo: Editora Atlas, 2001. 311 p. Base Software. Página eletrônica do programa Base Condomínio. Disponível em: <http:// www.basesoft.com.br/base-condominio/?gclid=CM6C5N7xsqkCFQrt7QodxEk__w>. Acesso em: 13 jun 2011, 10:30:00. Best Software. Página eletrônica do programa Condomínio. Disponível em: <http://www. bestsoftware.com.br/?DeptoId=276&ProdId=2114>. Acesso em: 13 jun 2011, 10:30:00. BRCondomínio. Página eletrônica do programa BRCondomínio. Disponível em: <http:// www.brcondominio.com.br/recursos.cfm>. Acesso em: 13 jun 2011, 10:30:00. Farber, João Carlos e Segreti, João Bosco , Análise da adequação das informações econômico-financeiras para a tomada de decisão nos condomínios residenciais da cidade de São Paulo através de uma pesquisa empírica, 6º Congresso de Controladoria e Contabilidade – USP, 2006. Fisher, Paul T. and Murphy, Brian D., Spring Persistence with Hibernate, 1. ed. - New York: Apress, 2009, 350 p. Freeman, Eric et al., Head First Design Patterns, 1. ed. - Sebastopol: O'Reilly, 2004, 688 p. Gamma, Erich et al., Design Patterns: Elements of Reusable Object-Oriented Software, 1. ed. - EUA: Addison-Wesley, c1995, 395 p. Geary, David & Horstmann, Cay, Core JavaServer Faces, 3. ed. - New Jersey: Prentice Hall, 2010, 672 p. Gersting, Judith L., Fundamentos matemáticos para a Ciência da Computação, 3. ed. Rio de Janeiro: LTC, 1995, 538 p. Group Software. Página eletrônica do programa Condomínio21. Disponível em: <http://www. condominio21.com.br/produtos/visao.aspx?id=7>. Acesso em: 13 jun 2011, 10:30:00. Murach, Joel and Harris, Ray, Murach's PHP and MySQL, 1. ed. - Fresno: Mike Murach & Associates, Inc., 2010, 840 p. Project Management Institute, Chapters Brasileiros. Estudo de Benchmarking em Gerenciamento de Projetos, 2008. Disponível em: <pmi-rio.ning.com/page/benchmarking1>. Acesso em: 13 jun 2011, 14:00:00. Rede Globo – Jornalismo, PEGN: Administração de condomínio cresce com alta da venda imobiliária. Disponível em: <http://redeglobo.globo.com/novidades/jornalismo/ noticia/2011/04/pegn-administracao-de-condominio-cresce-com-alta-da-venda-imobiliaria. html>. Acesso em: 13 jun 2011, 17:30:00. Silva, E. L. da e Menezes, E. M., Metodologia da Pesquisa e Elaboração de Dissertação. 4. ed. rev. atual. - Florianópolis: UFSC, 2005. 138 p. Superlogica. Página eletrônica do programa Condor. Disponível em: <http://superlogica. com/conheca/>. Acesso em: 13 jun 2011, 10:30:00. 46 7. APÊNDICE No texto a seguir, alguns comentários foram acrescentados para detalhamentos técnicos sobre o desenvolvimento. Apesar da intenção, o excessivo detalhamento acabaria deixando o texto longo e pouco explicativo. Visou-se, portanto, o meio termo. 7.1. Cadastro de usuários No Eclipse, criou-se uma classe UsuarioBean.java, que é acessada dinamicamente por páginas web. Para viabilizar esse acesso, utilizou-se o mapeamento via annotations, abstendose, portanto, do uso do arquivo de configuração faces-config.xml. A seguir, criou-se uma página que contem: um formulário de cadastro (usuario.xhtml, vide Figura 10), uma que exibe os usuários já cadastrados (mostraUsuario.xhtml) e outra que faz o papel de página inicial de cadastro de usuários (indexCadastro.xhtml). A chamada navegação implícita simplifica o mapeamento de navegação entre as páginas. Isso quer dizer, por exemplo, que ao clicar no link salvar da página usuario.xhtml, o método correspondente na classe UsuarioBean.java retornará uma string mostraUsuario, que será interpretada como o nome da próxima página a ser acessada. A navegação implícita tem comportamento dependente de página de origem e de destino. A Tabela 8 resume os acessos resultantes em função da configuração origem e destino. Tabela 8: Navegação implícita. Acesso resultante, em função da origem e do destino. Origem Destino Acesso resultante /publico/usuario.xhtml mostraUsuario /publico/mostraUsuario.xhtml /publico/usuario.xhtml /mostraUsuario /mostraUsuario.xhtml /publico/usuario.xhtml /restrito/pets /restrito/pets.xhtml /publico/usuario.xhtml perfil.pdf /publico/perfil.pdf /publico/usuario.xhtml /modelos/perfil.pdf Fonte: Adaptado de Luckow e Melo (2010, p. 100). /modelos/perfil.pdf Visando aumentar o desacoplamento da camada de persistência, criaram-se duas classes que representam o padrão de projetos Data Access Object – DAO. Essas duas classes são instanciadas a partir de uma classe DAOFactory.java e sua descrição é feita na sequência. A primeira classe de interface, UsuarioDAO.java, contem somente as assinaturas dos métodos correspondentes às ações de carregar, listar, atualizar, salvar, excluir e buscar por login. Essa classe contem apenas as chamadas das funcionalidades utilizadas no acesso ao banco de dados. 47 Figura 19: Trecho de código correspondente à classe de interface UsuarioDAO.java. Fonte: arquivos pessoais do autor. Uma segunda classe (de interface) é implementada através da classe UsuarioDAOHibernate.java, cujo nome sugestivamente faz lembrar o framework Hibernate. Essa classe implementa o acesso ao banco de dados propriamente dito. Poderia ser modificado para qualquer outro SGBD, sem grandes problemas, o que evidencia o baixo acoplamento do padrão DAO. Figura 20: Trecho de código correspondente à classe UsuarioDAOHibernate.java. Fonte: arquivos pessoais do autor. A camada de regra de negócio é implementada pela classe UsuarioRN.java (vide Figura 21). Definem-se regras relacionadas ao funcionamento ou ao comportamento do 48 software propriamente dito. A título de exemplo, ao excluir um usuário do cadastro, deve-se fazê-lo considerando que a exclusão se estende aos projetos dos quais participava. Isso pode ser visualizado no método excluir da classe UsuarioRN.java. Figura 21: Trecho de código correspondente à classe UsuarioRN.java Fonte: arquivos pessoais do autor. Um recurso de atualização assíncrona chamado Partial Page Rendering (PPR) do PrimeFaces foi utilizado. É um dos mais frequentes nas páginas web. As premissas básicas para sua utilização são: • Evitar ações de mouse para exibição de dados. • Evitar tráfego intenso de dados redundantes. Para implementar o recurso PPR do PrimeFaces, utilizam-se identificadores, tais como: <h:form id = “edicao”> … </h:form> <h:form id = “exibicao”> … </h:form> E, em um botão de comando, pode-se usar um elemento como: <p:commandButton update=”edicao, exibicao” value=”Salvar” action=”#{projetoBean.salvar}”/> As tags iniciadas por “p:” indicam a utilização de recursos AJAX no PrimeFaces. No exemplo acima, existem dois formulários, em que: inserem-se dados (área que se denominou “edicao”) e em que, ao clicar o botão Salvar, mostram-se os dados gravados (área que se denominou “exibicao”). O atributo “update” determina quais formulários (áreas) serão recarregados e redesenhados na tela. 49 A Figura 10 demonstra a funcionalidade de edição, quando ao clicar no ícone lápis, a tela de edição aparece em primeiro plano. Os dados correspondentes àquele usuário são exibidos, permitindo a edição de conteúdo. Ao clicar em Salvar, o método dispara os métodos DAO que se encarregarão de gravarem em banco os dados atualizados. 7.2. Cadastro de atividades A Figura 13 e a Figura 14 são telas de edição dos dados referentes a uma atividade e suas respectivas tarefas. Dessa forma, reutilizou-se de forma análoga todas as técnicas explanadas para o caso de uso referente ao cadastramento de usuários. É somente através dessa ferramenta que o administrador poderá alocar uma pessoa a determinado projeto, como se pode verificar na Figura 14. Trata-se de uma regra de negócio, que se deve ao fato do síndico ser a única pessoa que poderá autorizar a participação de outros condôminos em algum tipo de projeto condominial. Essa funcionalidade foi implementada com Picklist e Overlay Panel do framework PrimeFaces. 7.3. Agenda A lupa da Figura 14 remete à agenda e seus dados servem para que as pessoas possam se coordenar e serem coordenadas. Dessa forma, estão visíveis a todos os usuários envolvidos com uma determinada atividade. Cada atividade é inserida na agenda, como ponto de apoio visual para os apontamentos que serão reflexo do acompanhamento das atividades tanto pelo Síndico quanto pelos demais responsáveis. A Agenda foi implementada com o componente Scheduler do framework PrimeFaces.