Análise e design orientados a objetos para sistemas de informação Modelagem com UML, OCL e IFML Raul Sidnei Wazlawick © 2015, Elsevier Editora Ltda. Todos os direitos reservados e protegidos pela Lei n. 9.610, de 19/02/1998. Nenhuma parte deste livro, sem autorização prévia por escrito da editora, poderá ser reproduzida ou transmitida sejam quais forem os meios empregados: eletrônicos, mecânicos, fotográficos, gravação ou quaisquer outros. Revisão: Flor de Letras Editorial Editoração Eletrônica: SBNigri Artes e Textos Ltda. Elsevier Editora Ltda. Conhecimento sem Fronteiras Rua Sete de Setembro, 111 – 16o andar 20050-006 – Centro – Rio de Janeiro – RJ – Brasil Rua Quintana, 753 – 8o andar 04569-011 – Brooklin – São Paulo – SP – Brasil Serviço de Atendimento ao Cliente 0800-0265340 [email protected] ISBN 978-85-352-7984-9 Nota: Muito zelo e técnica foram empregados na edição desta obra. No entanto, podem ocorrer erros de digitação, impressão ou dúvida conceitual. Em qualquer das hipóteses, solicitamos a comunicação ao nosso Serviço de Atendimento ao Cliente, para que possamos esclarecer ou encaminhar a questão. Nem a editora nem o autor assumem qualquer responsabilidade por eventuais danos ou perdas a pessoas ou bens, originados do uso desta publicação. CIP-Brasil. Catalogação na fonte. Sindicato Nacional dos Editores de Livros, RJ ____________________________________________________________________________ W372a Wazlawick, Raul Sidnei, 1967- Análise e projeto de sistemas de informação orientados a objetos: modelagem com UML, OCL e IFML / Raul Wazlawick. – [3. ed.] – Rio de Janeiro: Elsevier, 2015. il. ; 24 cm. ISBN 978-85-352-7984-9 1. Administração de projetos. 2. Engenharia de software. 3. Software – Desenvolvimento. I. Título. 14-17370. CDD: 658.404 CDU: 005.8 ___________________________________________________________________________ A meus pais e ancestrais, sem os quais eu não existiria. Agradecimentos Quero agradecer a algumas pessoas que, de uma forma ou de outra, ajudaram a tornar este livro possível: Professor Luiz Fernando Bier Melgarejo, por me iniciar no mundo dos sistemas orientados a objetos já em 1987; meu colega Professor Marcos Eduardo Casa, por todo o trabalho de programação em pares feito ainda nos anos de 1980, quando a orientação a objetos era “coisa de outro mundo”; meu colega Professor Antonio Carlos Mariani, por desenvolver o Mundo dos Atores, uma ferramenta que nos ajudou a ensinar programação orientada a objetos; as empresas que me permitiram usar as técnicas explicadas neste livro em ambientes reais de desenvolvimento; meus orientandos Everton Luiz Vieira, Kuesley Fernandes do Nascimento e Iuri Cardoso, por ajudarem a consolidar algumas das novas técnicas; o Departamento de Informática e Estatística (INE) da Universidade Federal de Santa Catarina (UFSC), pela oportunidade de desenvolver este trabalho; e especialmente ao engenheiro de software Gilmar Purim, pelas excelentes discussões que ajudaram a definir o formato da primeira edição deste livro em 2003. Também agradeço aos mais de mil alunos, que não posso citar nominalmente, vítimas de minha disciplina de Análise e Projeto Orientados a Objetos por mais de duas décadas. Suas dúvidas, erros e dificuldades me motivaram a aprender ainda mais; a meu amigo, Professor Rogério Cid Bastos, pela orientação e motivação; e finalmente a meus amigos e irmãos, pelos momentos de alegria e fraternidade. Prefácio Porque as coisas são frequentemente difusas no início de um projeto de software, porque muitas vezes é difícil fazer os interessados concordarem, porque as informações e funções necessárias muitas vezes não são claras, porque os clientes não se sentem culpados por solicitar sistemas com complexidade e tamanho assustadores e porque é tão tentador assumir que já sabemos o que é solicitado, resta uma necessidade urgente de bons livros que ensinem aos engenheiros de software uma abordagem pragmática e testada para análise e design. Raul Wazlawick nos fornece este livro. Nos últimos 50 anos, vimos muitos métodos propostos para análise e design de softwa- re computacional, mas, na minha visão, os mais intuitivos e efetivos adotam a mentalidade orientada a objetos. Lembre-se, análise e design ocorrem relativamente cedo no processo de software, em um tempo em que as coisas são fluidas, a iteração não é apenas comum, mas obrigatória, e os “objetos” são frequentemente os elementos mais visíveis do problema. A beleza do paradigma orientado a objetos está na sua maravilhosa elasticidade. Nós podemos descrever objetos que são facilmente entendidos pelo pessoal de negócios no nível conceitual e, então, por meio de um processo de iteração e elaboração, refinar tais objetos para níveis de abstração bem mais baixos, que o pessoal técnico pode usar efetivamente. Neste livro, o Professor Wazlawick nos fornece um guia para conseguir isso. Usando UML como sua forma notacional, ele inicia onde todos os bons analistas deveriam iniciar – no começo! Ele nos fornece as ferramentas necessárias para entender o problema por meio de um processo de eliciação, elaboração e representação. Ele enfatiza casos de uso e ajuda a entender que eles servem tanto como um excelente mecanismo para entendimento quanto como um mecanismo que pode ajudar bastante a auxiliar o planejamento de projeto. Ele insiste que bons analistas e bons designers devem iterar à medida que desenvolvem um entendimento crescentemente melhor e mais detalhado do problema. Para conseguir isso, Wazlawick fornece ao leitor técnicas orientadas a objetos e ferramentas da UML necessárias para fazer o trabalho. Por meio do livro, um estudo de caso é usado para fornecer exemplos de todas as técnicas de análise e design. Princípios básicos são introduzidos, expandidos em um conjunto de técnicas trabalháveis e, então, usados para projetar representações e modelos usando UML. Durante minha longa carreira profissional, eu me encontrei com centenas de empresas e milhares de profissionais de software ao redor do mundo. Cada empresa e cada pessoa têm uma opinião única sobre o que faz o software tão desafiador, e há muitas opiniões sobre como resolver esses desafios em uma situação particular. Mas poucos profissionais de software discordariam de uma simples afirmação: “Se você não sabe para onde está indo, é muito, muito difícil chegar lá”. Métodos efetivos de análise e design dão aos profissionais de software um destino e um mapa para chegar lá. Em Análise e design de sistemas de informação orientados a obje- tos, Raul Wazlawick fornece as ferramentas de que os profissionais de software precisam para desenhar o mapa da estrada e, como consequência, este livro ajuda qualquer leitor a chegar lá onde ele precisa ir. Roger S. Pressman, Ph. D. Prefácio do Autor Este livro apresenta de forma didática e aprofundada elementos de análise e design orientados a objetos para o desenvolvimento de sistemas de informação. A área de desenvolvimento de software para sistemas e informação tem evoluído nas últimas décadas ao redor da Linguagem de Modelagem Unificada (UML) e do Processo Unificado (UP), adotados como padrões internacionais pelo Object Management Group (OMG). Mesmo os métodos de desenvolvimento ágil atualmente utilizam orientação a objetos como o paradigma dominante. Em contraste com outros livros nesta área, que são organizados ao redor da apre- sentação dos diagramas da UML e seus muitos usos possíveis, este livro se concentra nas atividades diárias de analistas e designers, e explica como os diferentes diagramas podem ajudá-los a desenvolver sistemas melhores e a desenvolver melhor os sistemas. Embora a cultura de orientação a objetos tenha mais de 40 anos de existência, ainda há empresas que acham difícil desenvolver software de boa qualidade, especialmente em razão da falta de manutenibilidade e flexibilidade nos sistemas que elas produzem. Este livro apresenta informações e técnicas para minimizar tal deficiência. As técnicas descritas aqui foram aplicadas com sucesso pelo autor em muitos projetos de desenvolvimento de software em empresas, bem como em projetos de pesquisa em universidades. O livro é voltado para profissionais de computação (analistas, designers e programa- dores) e estudantes de computação, tanto em nível de graduação quanto de pós-graduação, que tenham pelo menos um conhecimento mínimo em desenvolvimento ou modelagem orientada a objetos. Iniciantes e profissionais com experiência encontrarão nesta obra um guia útil para melhorar a qualidade de seus projetos. A intenção é ajudá-los a obter o melhor design possível. Em contraste com o que ocorre com o modelo Waterfall (Royce, 1970), no qual as atividades de análise e design ocorrem sequencialmente, modelos iterativos como o UP propõem que essas atividades (também chamadas de disciplinas) possam ocorrer com maior ou menor ênfase em qualquer fase. Este livro apresenta mais ênfase nas atividades que são tipicamente realizadas por analistas e designers, incluindo modelagem de negócio, engenharia de requisitos, análise e design. Outras disciplinas como gerenciamento de projetos, implementação e teste também são referenciadas. Para mais informações sobre outras disciplinas, livros de engenharia de software, como o de Pressman (2010), podem ser consultados, ou ainda livros mais específicos sobre o Processo unificado, como o de Kruchten (2003). O objetivo da fase de Concepção do UP é construir uma visão geral do sistema e do seu contexto e planejar o desenvolvimento futuro. As duas principais ferramentas de mo- delagem para esta fase são o modelo conceitual (Capítulos 6 e 7) e os casos de uso de alto nível (Capítulo 3). A modelagem de negócio (Capítulo 2) pode ser necessária com maior ou menor ênfase, dependendo do projeto que será desenvolvido. No final da fase de Concepção, casos de uso de alto nível serão utilizados como uma base para o planejamento do resto do projeto (Capítulo 4). Usualmente, este planejamento envolve avaliar os casos de uso como pequenos, médios ou grandes (escala camiseta) em relação à sua complexidade, e decidir sobre sua prioridade. Quando a complexidade de cada caso de uso é conhecida, é possível estimar o tempo médio necessário para desenvolvê-los (Karner, 1993) e, assim, as iterações podem ser planejadas como um conjunto de atividades que podem ser realisticamente realizadas no tempo disponível. A fase de Elaboração do UP é realizada como uma sequência de iterações. Cada iteração possui um conjunto de casos de uso atribuídos para desenvolvimento1. O desen- volvimento de um caso de uso individual normalmente inicia com sua expansão em fluxos (Capítulo 5). Opcionalmente, os fluxos de um caso de uso também podem ser representados como diagramas de sequência de sistema, com o objetivo de ajudar a descobrir as consultas e os comandos que devem ser implementados. Durante a fase de Elaboração, quando a arquitetura está evoluindo, o modelo conceitual (Capítulos 6 e 7) é refinado e completado. Consultas e comandos de sistema podem ser implementados com uma linguagem de programação. Mas o designer pode escolher, em vez disso, especificar contratos para consultas e comandos de sistema (Capítulo 8), os quais, além de serem definições de alto nível para o comportamento esperado de cada procedimento, podem ser muito úteis para definir casos de teste (Capítulo 11). Estes contratos correspondem ao modelo funcional do sistema, porque definem a funcionalidade de cada consulta e comando em termos das entradas que recebem e dos resultados que produzem. Neste ponto, novamente o sistema pode ser implementado, ou seu código pode ser automaticamente gerado, se ferramentas estiverem disponíveis. Entretanto, caso deseje código elegante, pode ser útil produzir um novo conjunto de diagramas (diagramas de sequência ou comunicação) para cada uma das operações de sistema (Capítulo 9). Tais diagramas indicam como os diferentes objetos trocarão mensagens para distribuir res- ponsabilidades e obter as pós-condições desejadas especificadas pelos contratos. Com este procedimento, padrões de projeto são mais fáceis de aplicar ao código. Ademais, esses diagramas também ajudam a especificar quais métodos (além de getters e setters) devem ser implementados em cada classe e como isso deve ser feito. 1 Uma iteração também pode ter um plano de mitigação atribuído para um dado risco ou uma solicitação de mudança originada pelo cliente, usuário ou mesmo pela equipe de desenvolvimento. Durante a Elaboração, o design da interface pode ser completado (Capítulo 12). Este livro apresenta a notação Information Flow Modeling Language (IFML)2 como uma opção para modelar este aspecto do sistema. A IFML é uma nova linguagem de modelagem recentemente (março de 2013) adotada como padrão pelo OMG. Embora isso seja mais enfático durante a fase de Construção, a Elaboração também pode precisar de geração de uma base de dados (Capítulo 13) e código executável (Capítulo 10). A persistência de dados pode ser gerada automaticamente se ferramentas adequadas estiverem disponíveis. Entretanto, vale a pena saber pelo menos como o mecanismo de persistência funciona, mesmo que seja automatizado. A geração de código é também apresentada como um conjunto de regras que podem ser automatizadas. Para economizar espaço para uma apresentação mais profunda dos tópicos, a maioria dos exercícios poderá ser acessada em www.elsevier.com.br. 2 Disponível em: <www.ifml.org>. SIGLAS API Application Program Interface – Interface de Programação de Aplicações AUP Agile Unified Process – Processo Unificado Ágil BPMN Busines Process Model and Notation – Notação e Modelo de Processo de Negócio CASE Computer Aided Software Engineering – Engenharia de Software Auxiliada por Computador CEP Código de Endereçamento Postal CMMI Capability Maturity Model Integration – Integração de Modelos de Capa- cidade e Maturidade COCOMO II Constructive Cost Model II – Modelo de Custo Construtivo II COTS Commercial off the Shelf – Produto de Prateleira CPF Cadastro de Pessoa Física CQS Command-Query Separation – Separação Comando-Consulta CRU Create, Retrieve, and Update – Inserir, Consultar e Atualizar CRUD Create, Retrieve, Update, and Delete – Inserir, Consultar, Atualizar e Remover CRUDL Create, Retrieve, Update, Delete, and List – Inserir, Consultar, Atualizar, Remover e Listar DBMS Database Management System – Sistema Gerenciador de Banco de Dados DCD Diagrama de Classes de Design DDD Discagem Direta a Distância EBP Elementary Business Process – Processo Elementar de Negócio EF Environmental Factor – Fator Ambiental FK Foreign Key – Chave Estrangeira FPA Function Point Analysis – Análise de Pontos de Função FURPS+ Functionality, Usability, Reliability, Performance , and Supportability – Fun- cionalidade, Usabilidade, Confiabilidade, Desempenho e Suportabilidade. FUSP Fuzzy Use Case Points – Pontos de Caso de Uso Difusos IFML Interaction Flow Modeling Language – Linguagem de Modelagem de Fluxo de Interação INE Informática e Estatística (Departamento) ISBN International Standard Book Number – Número de Livro Padrão Internacional ISO/IEC International Organization for Standardization / International Electro- technical Commission – Organização Internacional de Padronização / Comissão Eletrotécnica Internacional KSLOC Kilo Source Lines of Code – Milhares de Linhas de Código Fonte MK II Mark II MoSKoW Must, Should, Could, or Would – Deve, Deveria, Pode ou Poderia
Description: