Baixe o app para aproveitar ainda mais
Prévia do material em texto
MODELAGEM DO SISTEMA COM A ANÁLISE ORIENTADA A OBJETOS W B A 04 48 _v 1. 0 2 Iolanda Cláudia Sanches Catarino Londrina Editora e Distribuidora Educacional S.A. 2020 MODELAGEM DO SISTEMA COM A ANÁLISE ORIENTADA A OBJETOS 1ª edição 3 2020 Editora e Distribuidora Educacional S.A. Avenida Paris, 675 – Parque Residencial João Piza CEP: 86041-100 — Londrina — PR e-mail: editora.educacional@kroton.com.br Homepage: http://www.kroton.com.br/ Presidente Rodrigo Galindo Vice-Presidente de Pós-Graduação e Educação Continuada Paulo de Tarso Pires de Moraes Conselho Acadêmico Carlos Roberto Pagani Junior Camila Braga de Oliveira Higa Carolina Yaly Giani Vendramel de Oliveira Henrique Salustiano Silva Juliana Caramigo Gennarini Mariana Gerardi Mello Nirse Ruscheinsky Breternitz Priscila Pereira Silva Tayra Carolina Nascimento Aleixo Coordenador Henrique Salustiano Silva Revisor Rogério Colpani Editorial Alessandra Cristina Fahl Beatriz Meloni Montefusco Gilvânia Honório dos Santos Mariana de Campos Barroso Paola Andressa Machado Leal Dados Internacionais de Catalogação na Publicação (CIP)__________________________________________________________________________________________ Catarino, Iolanda Cláudia Sanches. C357m Modelagem do sistema com a análise orientada a objetos/ Iolanda Cláudia Sanches Catarino. – Londrina: Editora e Distribuidora Educacional S.A., 2020. 44 p. ISBN 978-65-87806-19-8 1. Modelagem 2. Sistema 3. Objeto I. Título. CDD 005 ____________________________________________________________________________________________ Raquel Torres – CRB 6/2786 © 2020 por Editora e Distribuidora Educacional S.A. Todos os direitos reservados. Nenhuma parte desta publicação poderá ser reproduzida ou transmitida de qualquer modo ou por qualquer outro meio, eletrônico ou mecânico, incluindo fotocópia, gravação ou qualquer outro tipo de sistema de armazenamento e transmissão de informação, sem prévia autorização, por escrito, da Editora e Distribuidora Educacional S.A. 4 SUMÁRIO Análise e Desenvolvimento de Software Orientado a Objetoss ______ 05 Linguagem de Modelagem Unificada (UML): modelagem comportamental e estrutural de software __________________________ 21 Modelagem comportamental da análise com a Linguagem de Modelagem Unificada (UML) ________________________________________ 40 Modelagem estrutural da análise com a Linguagem de Modelagem Unificada (UML) ____________________________________________________ 57 MODELAGEM DO SISTEMA COM A ANÁLISE ORIENTADA A OBJETOS 5 Análise e Desenvolvimento de Software Orientado a Objetos Autoria: Iolanda Cláudia Sanches Catarino Leitura crítica: Rogério Colpani Objetivos • Conhecer e compreender a evolução dos paradigmas da análise e desenvolvimento de software. • Conhecer e compreender as características dos métodos orientados a objetos. • Conhecer e compreender as características, conceitos e pilares do paradigma orientado a objetos. 6 1. Evolução da análise e desenvolvimento de software Na era da transformação digital, o desenvolvimento de sistemas de software se tornou uma atividade ágil, a partir da definição de uma metodologia de desenvolvimento que assegure as boas práticas da engenharia de software, principalmente a garantia da qualidade do software. O processo de engenharia de software abrange todas as decisões tomadas quanto ao planejamento de execução do projeto, a definição do método com suas fases e técnicas de modelagem, ferramentas de desenvolvimento, tecnologias de implementação e testes e demais padrões necessários, decorrentes da complexidade e domínio de um sistema de software. Esta Leitura Digital contempla, primeiramente, uma fundamentação sobre a evolução histórica dos paradigmas da análise e desenvolvimento de software e uma descrição das características dos principais métodos orientados a objetos que se destacaram na década de 1990. Na sequência, serão apresentadas as características, conceitos e pilares que sustentam o paradigma orientado a objetos. 1.1 Análise estruturada e orientada a objetos A evolução histórica dos paradigmas da análise e desenvolvimento de software fundamenta-se nas análises estruturada, essencial e orientada a objetos, a partir da década de 1970. Os paradigmas que categorizam as técnicas e métodos usados na fase de análise têm relação com os paradigmas de programação, decorrentes das linguagens de programação surgirem antes das técnicas de modelagem adotadas para documentarem as fases de análise e projeto de um sistema. 7 A análise estruturada, no início da década de 1970, tem como foco os elementos processos e dados em estruturas separadas, abstraindo o mundo real, a partir de processos e fluxos de dados com detalhamento top-down, ou seja, do nível macro para os menores detalhes. Diante da demanda de mercado por sistemas de softwares complexos e robustos, a abordagem da análise estruturada trouxe a ideia da documentação do sistema, a partir de diagramas com a perspectiva em processos e depósitos de dados, destacando o Diagrama de Fluxo de Dados (DFD), contudo, a programação era implementada de forma modular com refinamentos sucessivos, acarretando problemas de decomposição funcional. A análise estruturada essencial ou moderna, na década de 1980, caracteriza-se por ser uma evolução da análise estruturada e recomenda que a especificação do sistema seja apresentada em três perspectivas que se complementam e enfatizam os eventos que afetam o sistema: modelo de processos ou funcional; modelo de dados; e o modelo de controle, descrevendo o sistema de maneira independente de restrições tecnológicas, reforçando o conjunto de requisitos essenciais de um sistema, contudo, não enfatizando o comportamento temporal dos processos definidos. Os problemas que se evidenciaram com a análise estruturada moderna estão relacionados com a dificuldade de conexão do DFD com as demais técnicas de modelagem entre a transição da fase de análise para a fase de projeto, além dos mesmos problemas de decomposição funcional na programação. A análise orientada a objetos emergiu entre meados da década de 1980 e 1990, acompanhando a evolução das linguagens de programação orientadas a objetos, consolidando-se um novo paradigma de desenvolvimento de software. A orientação a objetos concentra- se no elemento objeto, considerado uma unidade autônoma, que contém tanto a estrutura dos dados como seu comportamento, que é representado pelas operações, assim realizando suas tarefas de forma 8 colaborativa, resultando nas funcionalidades do sistema de software. Segundo Bezerra (2014): Um sistema de software orientado a objetos consiste em objetos em colaboração com o objetivo de realizar as funcionalidades desse sistema. Cada objeto é responsável por tarefas específicas. É graças à cooperação entre objetos que a computação do sistema se desenvolve. (BEZERRA, 2014, p. 7) Na década de 1990, surgiram diversos métodos para apoiar o paradigma orientado a objetos, sendo que as técnicas de modelagem específicas para documentar as fases de análise e projeto se relacionam e são consistentes, enfatizando as perspectivas estática e dinâmica da modelagem do software. De forma geral, a modelagem da fase de análise documenta a visão lógica do software, ou seja, a identificação e definição do domínio do problema, especificando os requisitos de sistema. A modelagem da fase de projeto documenta a visão física do software, a partir de um refinamento da documentação elaborada na fase de análise, complementando-a com definições das tecnologias de linguagens de programação, frameworks, patterns, componentes de software e banco de dados que serão adotados para implementação do software, ou seja, define o domínio da solução. Das principais técnicas de modelagem da análise e projeto orientado a objetos, destacam-se o diagrama de use cases (casosde uso), o diagrama de classes, o diagrama de atividades, o diagrama de máquina de estados e o diagrama de sequência. 1.2 Principais métodos da análise orientada a objetos Os métodos de modelagem de análise e projeto orientados a objeto surgiram entre meados da década de 1980, acompanhando a evolução das linguagens de programação orientadas a objetos e, na década de 1990, evidenciaram-se no âmbito acadêmico e de mercado. 9 Os métodos de modelagem orientados a objetos suportam os mesmos princípios e conceitos básicos da orientação a objetos, consistindo em um conjunto de técnicas de modelagem aplicadas, principalmente, às atividades de requisitos e análise e projeto de um processo de desenvolvimento de software, com um propósito especifico para representarem modelos estáticos e dinâmicos do sistema, especificados graficamente por diagramas, na maioria, ou de forma descritiva. Há vários métodos de desenvolvimento orientados a objetos que se destacaram na literatura. Veremos, a seguir, uma descrição sucinta de alguns métodos orientados a objetos que se destacaram. Em 1988, foi lançado o método de Shlaer e Mellor (Sally Shlaer e Stephen Mellor), denominado como Object-Oriented Systems Analysis (OOSA) ou Object-Oriented Analysis (OOA), que enfatiza a modelagem consistente dos objetos e seus agrupamentos, a partir de mecanismos que facilitam a representação de modelos dinâmicos dos objetos, permitindo que a especificação dos modelos de análise seja traduzida para implementação. O método contempla técnicas de modelagem aplicadas às fases de análise, projeto e implementação, sendo as principais: diagrama de objetos, diagrama de estados, diagrama de fluxo de dados e diagrama de ações. Em 1990, foi lançado o método de Rebecca Wirfs-Brock, o primeiro a enfatizar a modelagem orientada a objetos para a fase de projeto (design), contemplando técnicas de modelagem para especificação das fases de requisitos, projeto, implementação e testes. O método enfatiza o princípio de gerenciamento por responsabilidades, por meio da técnica Class-Resposability-Collaboration (CRV), cartões que permitem o mapeamento de classes para execução de responsabilidades, a partir de colaboração mútua dos objetos identificados. Em 1991, foi lançado o método de Grady Booch, considerado um dos mais autênticos métodos de desenvolvimento orientado a objetos, definindo que o sistema é analisado a partir de visões, onde cada visão 10 é descrita por modelos e diagramas. O método contempla técnicas de modelagem aplicadas às fases de análise e projeto, nas perspectivas estática e dinâmica, a partir de modelos lógicos e físicos. A principal técnica de modelagem estática do método é o diagrama de classes. para modelar a perspectiva dinâmica do software, o método abrange o diagrama de máquina de estados, o diagrama de interação e o diagrama de processos. Em 1991, foi lançado o método de James Rumbaugh, Michael Blaha, William Premerlani, Frederick Eddy e William Lorensen, nomeado como Object Modelling Technique (OMT). É um método conservador no uso da teoria de objetos, contemplando técnicas de modelagem para especificação da análise de requisitos, análise, projeto e implementação. A modelagem se inicia com a descrição do enunciado do problema, na sequência, especifica-se a modelagem de objetos, a modelagem dinâmica e a modelagem funcional, destacando o tratamento dos processos. Durante a fase de projeto, consiste a especificação em projeto de objetos e projeto do sistema. Em 1992, foram lançados os métodos de Ivar Jacobson, denominados como Object-Oriented Software Enginneering (OOSE) e o Objectory, que enfatizam a modelagem baseada em requerimentos, especificada por meio de use cases (casos de uso), que definem os requisitos iniciais do sistema. O método OOSE é um método orientado a objetos, com abordagem dirigida a cenários, e o método Objectory é aplicado a diferentes domínios de sistemas, principalmente, para modelagem organizacional. O método OOSE contempla as fases de análise, projeto e implementação. Na fase de análise, os principais modelos são o modelo de requisitos e o modelo de objetos. Em 1992, foi lançado o método de Coad e Yourdon (Peter Coad e Edward Yourdon), que enfatiza a modelagem dirigida a dados, contemplando as mesmas técnicas de modelagem aplicadas às fases de análise e projeto, com refinamentos iterativos entre as fases. A principal técnica de 11 modelagem é o modelo de objetos, não particionado, complementado com o modelo de especificação de classe-objeto e dos diagrama de estado de objeto e do diagrama de serviço. Em 1993, foi lançado o método de Martin e Odell (James Martin e James J. Odell), que apresenta a modelagem de dados e seus serviços, enfatizando a reutilização dos objetos. Além disso, contempla a modelagem de Análise da Estrutura do Objeto (AEO), a partir da especificação do diagrama de objeto-relacionamento; a modelagem de Análise do Comportamento do Objeto (ACO), a partir do diagrama de fluxo de objetos; e a modelagem de Projeto da Estrutura do Objeto (PEO) e do Projeto do Comportamento do Objeto (PCO), a partir da especificação de esquemas de atividades que representam os eventos, processos, fluxo de objetos e a transição de estados dos objetos. Em 1994, foi lançado o método de Derek Coleman, denominado de método Fusion, que consiste em uma abordagem sistemática para o desenvolvimento de software orientado a objetos, contemplando as etapas de produção e montagem. A etapa de produção abrange as fases de análise, projeto e implementação; e a etapa montagem enfatiza assegurar a qualidade do software, a partir da detecção e remoção de erros. As principais técnicas de modelagem da fase de análise são os modelos de objeto e de interface, que se complementam com as técnicas de modelagem da fase de projeto, os grafos de interação entre objetos, grafos de visibilidade, descrições de classes e os grafos de herança. Diante da diversidade de métodos que surgiram para apoiar o desenvolvimento orientado a objetos, no início da década de 1990, Grady Booch, Ivar Jacobson e James Rumbaugh uniram as melhores práticas, características e aplicabilidade de suas técnicas de modelagem e construíram um padrão de referência para modelagem orientada a objetos, lançando oficialmente a Linguagem de Modelagem Unificada (Unified Modeling Language–UML), em 1997. 12 2. Paradigma orientado a objetos O Paradigma Orientado a Objetos (POO) é uma estratégia consistente de desenvolvimento de sistemas de software, utilizando modelos organizados a partir de conceitos do mundo real para organizar o software como uma coleção de objetos. O desenvolvimento orientado a objetos assegura o aumento da produtividade e da qualidade do processo de software. De acordo com Bezerra (2014), o termo paradigma da orientação a objetos é uma forma de abordar um problema, visualizando um sistema de software como uma coleção de agentes interconectados chamados objetos, sendo cada objeto responsável por realizar tarefas específicas e a partir da interação entre os objetos que as tarefas computacionais são realizadas. De acordo com Booch, Rumbaugh e Jacobson (2006), a principal característica do POO é a uniformização dos formalismos, conceitos utilizados nas fases de análise, projeto e implementação. Destacam também as seguintes características: a. Reusabilidade: refere-se à reutilização de componentes de software na implementação das funcionalidades, proporcionando a diminuição de custos e tempo de desenvolvimento do software. b. Extensibilidade: refere-se à aplicação do conceito de herança, sendo que partes do software têm seu uso estendido a objetos herdados, assim, as classes genéricas podem ser acrescidas de funcionalidades comuns às classes especializadas. c. Confiabilidade: refere-se a um controle de organização e segurança que é estabelecido aos objetos a partir do encapsulamento das classes, que torna o acesso às estruturasde dados privado aos objetos. d. Manutenibilidade: refere-se ao grau de impacto de alterações corretivas e evolutivas no software, decorrentes da realização de 13 mudanças pontuais dos objetos, que não acarreta a propagação descontroladas por todo o software. 2.1 Conceitos da orientação a objetos A orientação a objetos é uma maneira natural de identificar os elementos do mundo real, abstraindo os grupos de objetos e suas relações para mundo computacional. Para assegurar o sucesso do desenvolvimento orientado a objetos, é importante compreender os conceitos básicos que fundamentam o paradigma, entre eles, os pilares da programação orientação a objetos, os conceitos de abstração, encapsulamento, herança e polimorfismo. A seguir, apresenta-se uma definição dos principais conceitos do POO, suas correlações e exemplos. Um objeto pode ser definido como qualquer coisa concreta ou abstrata do mundo real, com características e comportamento próprio em uma única estrutura, sendo possível identificá-lo. Na definição de Booch, Jacobson e Rumbaugh (2006, p. 456), um objeto é “uma entidade com uma fronteira bem definida e uma identidade que encapsula o estado e comportamento”. São exemplos de objetos concretos do mundo real, como automóvel, edifício, produto, cliente e objetos abstratos como contrato, ingresso, evento cultural. O conceito de abstração consiste na concentração dos aspectos importantes e relevantes dos objetos, considerando o contexto analisado e o domínio do sistema. Para Bezerra (2014): A abstração é um processo mental pelo qual nós, seres humanos, nos atentamos aos aspectos mais importantes (relevantes) de alguma coisa, ao mesmo tempo em que ignoramos os aspectos menos importantes. [...] Note que uma abstração de algo é dependente da perspectiva (contexto) 14 sobre a qual uma coisa é analisada: o que é importante em um contexto pode não ser importante em outro. (BEZERRA, 2014, p. 8) Para elaborar a documentação de um software, aplica-se abstração em diferentes níveis de perspectivas. Primeiramente, identificam-se os objetos conceituais a partir de objetos do mundo real, descrevendo as características e comportamentos comuns entre os objetos e definem-se as classes para representarem o conjunto desses objetos. Posteriormente, verifica se, entre as classes identificadas, é possível classificá-las como pertencentes a um mesmo tipo, sempre projetando no contexto do mundo real do domínio do sistema e, se possível, define- se uma hierarquia entre as classes. Podem-se definir vários níveis de hierarquias entre as classes. Uma classe representa um grupo de objetos do mundo real que possui tipos de características e de comportamento em comum. Cada ocorrência de um objeto representa uma instância da classe. Na definição de Booch, Jacobson e Rumbaugh (2006, p. 49), uma classe é “uma descrição de um conjunto de objetos que compartilham os mesmos atributos, operações, relacionamentos e semântica”. Para Rumbaugh (1997, p. 32), uma classe “descreve um grupo de objetos com propriedades semelhantes (atributos), o mesmo comportamento (operações), os mesmos relacionamentos com outros objetos e a mesma semântica”. É importante enfatizar que uma classe é uma abstração das características e comportamentos relevantes de um conjunto de objetos. Assim, as características descrevem os atributos ou propriedades dos objetos de uma classe e o comportamento descreve as operações. Um atributo descreve uma característica possuída por todos os objetos de uma classe, assumindo valores específicos para cada objeto. Na definição de Booch, Jacobson e Rumbaugh (2006, p. 50), um atributo é “uma propriedade nomeada de uma classe que descreve um intervalo de valores que as instâncias da propriedade podem apresentar. Uma classe pode ter qualquer número de atributos ou mesmo 15 nenhum atributo”. Para Guedes (2018), os atributos representam as características relevantes de uma classe que costumam variar de um objeto para outro, permitindo diferenciar os objetos da mesma classe. Uma operação descreve uma ação que o próprio objeto executa ou uma ação que o objeto pode executar, a partir do disparo de um evento, ou seja, é uma ordem que faz o objeto reagir decorrente do acontecimento de um evento, sendo compartilhada por todos os objetos da mesma classe. Na definição de Booch, Jacobson e Rumbaugh (2006, p. 51), uma operação é “uma abstração de algo que pode ser feito com um objeto e que é compartilhado por todos os objetos dessa classe. Uma classe pode ter qualquer número de operações ou até não ter nenhuma operação”. O mecanismo de invocação de uma operação representa uma mensagem enviada, sendo a forma de conseguir executar um método. A implementação de uma operação é chamada de método. Assim, um método representa o conjunto de passos lógicos, os comandos de uma linguagem de programação, que um objeto executa para descrever a operação. A Figura 1 ilustra a representação das classes aluno e funcionário, com seus atributos relevantes ao contexto e as operações básicas. O nome da classe é representado na primeira divisão da classe, os atributos são representados na segunda divisão da classe e as operações são representadas na terceira divisão da classe. 16 Figura 1 – Classes aluno e funcionário Fonte: elaborada pela autora. Eventos são os acontecimentos que provocam a mudança de estado dos objetos. Um evento, ao ser disparado, envia uma mensagem, invocando uma operação dos objetos de uma classe, assim provocando a mudança de estado do objeto. Na definição de Rumbaugh (1997), um evento é um estímulo individual de um objeto para outro, ou seja, é algo que acontece em certo momento, disparando uma transmissão ou informação unidirecional de um objeto para outro, sendo uma ocorrência única. Um estado representa a abstração de uma forma de apresentação dos objetos em um instante de tempo com uma duração, demonstrando a reação de um objeto em resposta a um evento. Na definição de Booch, Jacobson e Rumbaugh (2006, p. 290), um estado é “uma condição ou situação na vida de um objeto durante a qual o objeto satisfaz alguma condição, realiza alguma atividade ou aguarda um evento. Um objeto permanece em um estado por uma quantidade finita de tempo”. 17 Considere como exemplo um objeto do tipo trem que, num instante de tempo (t1), encontra-se no estado repouso e, a partir de um evento disparado, como, por exemplo, um botão acionado por uma ação humana, o objeto reage e muda seu estado para movimento, no instante de tempo seguinte (t2). Uma transição de estado representa a mudança de estado de um objeto em resposta um evento disparado. Para Booch, Jacobson e Rumbaugh (2006, p. 291), uma transição é “um relacionamento entre dois estados, indicando que um objeto no primeiro estado realizará certas ações e entrará no segundo estado quando um evento especificado ocorrer e as condições especificadas forem satisfeitas”. O conceito de encapsulamento representa o ato de reunir em uma estrutura chamada classe, os atributos e operações dos objetos, permitindo que um objeto proteja a integridade de suas partes. O objetivo do encapsulamento é restringir a visibilidade ou escopo das informações dos objetos de uma classe, sendo que a única maneira de acessar as operações de um objeto é por meio de interfaces fornecidas pelo objeto. Assim, uma interface é o modo de se comunicar com os objetos, conhecendo o que ele sabe fazer, contudo, não sabendo como ele faz. Na definição de Rumbaugh (1997, p. 10), o conceito de encapsulamento é “também chamado de ocultamento de informações, consiste na separação dos aspectos externos de um objeto, acessíveis por outros objetos, dos detalhes internos da implementação daquele objeto, que ficam ocultos dos demais objetos”. O conceito de generalização, também denominado de herança, representa a propriedade pela qual uma classe pode herdar atributos e operações de uma classe que generaliza as característicase comportamentos comuns de um grupo de objetos. Na definição de Booch, Jacobson e Rumbaugh (2006, p. 454), herança é “o mecanismo pelo qual elementos mais específicos incorporam a estrutura e o comportamento de elementos mais gerais”. De acordo com Rumbaugh 18 (1997, p. 4), o conceito de herança é “o compartilhamento de atributos e operações entre classes com base em um relacionamento hierárquico. Uma classe pode ser definida de forma abrangente e depois refinada em sucessivas subclasses mais definidas”. Em um contexto, a partir da abstração das classes, o reconhecimento da similaridade entre classes é demonstrado em uma hierarquia de classes, surgindo os conceitos de superclasse e subclasses. Superclasses representam abstrações generalizadas e subclasses representam abstrações especializadas, com atributos e operações específicas. Quando a herança acontece de uma única superclasse, é denominada herança simples; sendo de várias superclasses, é denominada herança múltipla. A Figura 2 ilustra um exemplo de classes semelhantes que foram agrupadas em uma hierarquia, representado pelo relacionamento de generalização entre as classes pessoa (superclasse) e Aluno e Funcionario (subclasses). Fazendo a leitura da figura, aluno é um tipo de pessoa, no mundo real, e funcionário também é um tipo de pessoa. A herança define uma relação entre classes do tipo é-um (a). Figura 2 – Exemplo de herança (generalização) Fonte: elaborada pela autora. 19 O conceito de polimorfismo significa que a mesma operação pode atuar de diversas formas em classes distintas. Uma operação polimórfica possui o mesmo nome em classes distintas, mas em cada classe o método implementado é diferente. O polimorfismo está associado ao conceito de herança. Para Guedes (2018), o polimorfismo consiste na redeclaração de operações herdadas por uma classe, que são semelhantes na nomenclatura, contudo, diferem de alguma forma da implementação utilizada na superclasse, sendo, assim, necessário reimplementá-las na subclasse. Conforme Bezerra (2014), o polimorfismo refere-se à capacidade de duas ou mais classes responderem à mesma mensagem, cada uma de uma forma, ou seja, um objeto pode enviar a mesma mensagem para objetos semelhantes, mas os objetos receptores respondem de maneiras distintas. A Figura 3 representa um exemplo de polimorfismo, em que a superclasse ContaBancaria possui o atributo saldo, herdado pelos objetos das subclasses ContaCorrente e ContaPoupança. Isso sendo que, a partir de uma mensagem para executar a operação sacar conta, da subclasse ContaCorrente, define-se como parâmetros os atributos numero, saldo e limite, ou seja, diminui-se o valor a ser debitado do saldo da conta e, se necessário, utiliza-se o valor extra, referente ao valor do atributo limite. Na execução da operação sacarConta, da subclasse ContaPoupança, define-se como parâmetros apenas os atributos numero e saldo, assim, caso o objeto não possua saldo suficiente, a operação será recusada. 20 Figura 3 – Exemplo de polimorfismo Fonte: elaborada pela autora. Os vários métodos de desenvolvimento de sistemas de software abrangem um conjunto de técnicas de modelagem específicas para documentarem as principais fases de um processo de desenvolvimento, em consonância com o modelo de processo de software adotado e com os princípios do paradigma de desenvolvimento. A análise de sistemas é uma das principais fases de um processo de desenvolvimento de software. Referências Bibliográficas BEZERRA, Eduardo. Princípios de análise e projeto de sistemas com UML. 3. ed. Rio de Janeiro: Elsevier, 2014. BOOCH, Grady; RUMBAUGH, James; JACOBSON, Ivar. UML: guia do usuário. 2. ed. Rio de Janeiro: Campus, 2006. GUEDES, Gilleanes T. A. UML: uma abordagem prática. 3. ed. São Paulo: Novatec, 2018. RUMBAUGH, James et al.Modelagem e projetos baseados em objetos. Rio de Janeiro: Campus, 1997. 21 Linguagem de Modelagem Unificada (UML): modelagem comportamental e estrutural de software Autoria: Iolanda Cláudia Sanches Catarino Leitura crítica: Rogério Colpani Objetivos • Conhecer a Linguagem de Modelagem Unificada (UML) para o desenvolvimento de software orientado a objetos. • Compreender as técnicas de modelagem comportamental da UML. • Compreender as técnicas de modelagem estrutural da UML. 22 1. Visão Geral da Linguagem de Modelagem Unificada A Linguagem de Modelagem Unificada (UML–Unified Modeling Language) descreve uma notação padrão para ser utilizada no desenvolvimento de softwares orientados a objetos. As técnicas de modelagem da UML, os diagramas, apoiam o desenvolvimento incremental, a partir de modelos que podem evoluir com a inclusão de novos detalhes, contudo, não estão vinculadas exclusivamente a uma fase do processo de desenvolvimento de software, definindo quem deve fazer o que, quando e como. A UML consiste da união dos métodos de Grady Booch, James Rumbaugh (OMT- Object Modeling Technique) e Ivar Jacobson (OOSE – Object-Oriented Software Engineering), contudo, teve a contribuição de vários autores da década de 1990. A construção da UML iniciou-se com as boas práticas dos métodos de Rumbaugh e Booch, surgindo, em 1995, o Unified Method 0.8. Em meados de 1996, Jacobson integrou- se ao grupo e lançaram a UML versão 0.9. A partir daí, criaram forças com a cooperação de grandes empresas e com a aprovação da Agência Americana de Padrões–Object Management Group (OMG), lançando, em julho de 1997, a UML como uma linguagem visual para modelagem de softwares orientados a objetos. Atualmente, a OMG é a organização internacional responsável em manter e administrar a UML e desde seu lançamento, várias atualizações foram feitas, sendo que a versão 2.0 foi oficialmente apresentada em 2005 e, atualmente, a versão 2.5.1 foi lançada em dezembro de 2017. De acordo com Booch, Jacobson e Rumbaugh (2006, p. 13), a UML é “uma linguagem padrão para a elaboração da estrutura de projetos de software. A UML é uma linguagem para visualização, especificação, construção e documentação de artefatos que façam uso de sistemas complexos de software”. 23 A UML contempla uma representação gráfica para os vários elementos que permitem representar os conceitos do paradigma orientado a objetos, a partir de uma sintaxe e uma semântica. Segundo Bezerra (2014, p. 15), “a sintaxe de um elemento corresponde à forma predeterminada de desenhar o elemento. A semântica define o que significa o elemento e com que objetivo ele deve ser utilizado”. Booch, Jacobson e Rumbaugh (2006) consideram as principais características da UML: a. Centrada na arquitetura: a arquitetura do sistema incorpora os aspectos estáticos e dinâmicos mais importantes do sistema e é utilizada como principal artefato para a conceituação, construção, gerenciamento e evolução do sistema em desenvolvimento, representando uma visão do projeto como um todo. b. Orientada a casos de uso: os casos de uso representam os requisitos funcionais do sistema e são utilizados como o principal artefato para definir o comportamento do sistema. c. Processo iterativo: consiste no gerenciamento de sequências de versões executáveis e incrementais, definidas como iteração, sendo que cada nova versão incorpora os aprimoramentos incrementais em relação às demais. Dependendo das características e da complexidade dos sistemas de software, é importante fornecer múltiplas visões da modelagem do sistema sob diferentes aspectos de análise e detalhamento. A UML privilegia a descrição da modelagem de sistemas de software em três perspectivas principais de visões: a estrutural, que enfatiza a visão estática do sistema, ou seja, os dados; a funcional, que prioriza as funcionalidades do sistema, enfatizando os requisitos funcionais; e a temporal, que prioriza a especificação dos eventos, representando o comportamento dos objetos em tempo de execução. 24 A UML 2.0 abrange as técnicas de modelagem classificadas em estrutural e comportamental.As técnicas de modelagem estruturais demonstram a estrutura dos elementos, a partir da identificação dos objetos, representando a modelagem com a visão estática do sistema. As técnicas de modelagem comportamentais representam o comportamento e a interação entre os elementos do sistema, representando a modelagem com a visão dinâmica do sistema. A perspectiva de interação representa um subgrupo dos diagramas comportamentais, que mostra a interação de como os objetos do sistema agem internamente para apoiarem a realização das funcionalidades representadas pelos casos de uso, conforme ilustra a Figura 1 a seguir. Figura 1 – Classificação dos diagramas da UML Fonte: elaborada pela autora. 25 A UML não faz grande distinção entre a modelagem das fases de análise e projeto de um processo de desenvolvimento de software. A atividade de projeto é uma extensão refinada dos diagramas elaborados na fase de análise, com detalhes de implementação. A seguir, será apresentada uma visão geral das técnicas de modelagem comportamentais e estruturais da UML. 1.1 Diagramas comportamentais da UML As técnicas de modelagem comportamentais representam o comportamento e a interação entre os elementos do sistema, colaborando para modelagem da visão dinâmica do sistema. A seguir, será apresentado o objetivo de cada diagrama comportamental e um exemplo. 1.1.1 Diagrama de casos de uso O diagrama de casos de uso (use cases) é o diagrama mais geral e informal da UML, que representa as funcionalidades ou serviços do software e suas interações com os atores do sistema. O diagrama apresenta uma linguagem de fácil compreensão para os usuários conhecerem como o sistema se comportará e serve de base para a especificação dos demais diagramas da UML, principalmente os diagramas comportamentais. Segundo Booch, Jacobson e Rumbaugh (2006), o diagrama de casos de uso representa os aspectos dinâmicos do sistema, mostrando um conjunto de casos de uso, atores e seus relacionamentos, tendo um papel central para a modelagem do comportamento de sistemas, subsistemas ou de classe. O diagrama de casos de uso demonstra um conjunto de casos de uso, atores e seus relacionamentos, como mostra a Figura 2, como, por exemplo, o ator candidato, interagindo com os casos de uso manter 26 candidato, manter currículo, manter instituição de ensino, realizar inscrição para vaga, realizar entrevista e emitir contrato de estágio. Figura 2 – Exemplo de diagrama de casos de uso Fonte: elaborada pela autora. A representação do diagrama de casos de uso é complementada com a documentação de casos de uso, que pode ser demonstrada em formatos distintos, descrevendo os eventos que são disparados durante a execução do caso de uso, de forma textual detalhada ou não, contudo, respeitando uma sequência lógica temporal de execução dos eventos. 1.1.2 Diagrama de atividades O diagrama de atividades demonstra o fluxo de controle de um conjunto de atividades que representa a execução de um procedimento, caso de uso, processo de negócio, subsistema ou até o sistema completo. Segundo Guedes (2018), o diagrama de atividades descreve os passos a serem percorridos para a realização de uma atividade específica, 27 representando os métodos, algoritmos, ou até mesmo, um processo completo, concentrando-se na representação do fluxo de controle e de objetos que participam de uma atividade. A Figura 3 ilustra um diagrama de atividade correspondente a um caso de uso realizar login, representando o fluxo das ações, a partir da primeira ação receber login e senha e finalizando com a ação acessar sistema e o nó final. Figura 3 – Exemplo de diagrama de atividades Fonte: elaborada pela autora. 1.1.3 Diagrama de máquina de estados O diagrama de máquina de estados demonstra o comportamento de um elemento, por meio de um conjunto de transições de estados. Até a versão 1.5, da UML, o diagrama era conhecido como diagrama de gráfico de estados ou como diagrama de estados. Conforme Guedes (2018), o diagrama de máquina de estados demonstra o comportamento de um 28 elemento, a partir de um conjunto finito de transições de estado que expressam o comportamento de um caso de uso ou de uma instância de uma classe, por exemplo. A Figura 4 ilustra um diagrama de máquina de estados correspondente aos estados agendando, realizando, aprovando, reprovando e cancelando e suas transições de estados de uma instância da classe entrevista. Figura 4 – Exemplo de diagrama de máquina de estados Fonte: elaborada pela autora. 1.1.4 Diagrama de sequência O diagrama de sequência representa a ordem temporal em que as mensagens são trocadas entre os objetos envolvidos na execução de um processo. O diagrama de sequência baseia-se no diagrama de casos de uso, elaborando, normalmente, um diagrama de sequência para cada caso de uso e apoiando-se no diagrama de classes para determinar os objetos das classes envolvidas no processo. Segundo Guedes 29 (2018), o diagrama de sequência descreve a ordem temporal em que as mensagens são trocadas entre os objetos envolvidos na execução de um processo que representa um caso de uso, bem como no ator responsável pela interação com os objetos. A Figura 5 ilustra um Diagrama de Sequência correspondente ao caso de uso realizar entrevista, representado o ator entrevistador, interagindo pela interface Form_Realizar Entrevista, que troca mensagens com os objetos das classes funcionário, candidato, vaga e entrevista. Figura 5 – Exemplo de diagrama de sequência Fonte: elaborada pela autora. 1.1.5 Diagrama de comunicação O diagrama de comunicação representa o inter-relacionamento entre os objetos envolvidos na execução de um processo, a partir da troca de mensagens. Até a versão 1.5 da UML, o diagrama de comunicação 30 era conhecido como o diagrama de colaboração. Segundo Guedes (2018), o diagrama de comunicação complementa o diagrama de sequência, concentrando-se na representação de como os elementos do diagrama estão vinculados e a ocorrência das mensagens que esses elementos trocam entre si durante a execução de um processo, não se preocupando com a temporalidade do processo. A Figura 6 ilustra um diagrama de comunicação correspondente ao caso de uso realizar entrevista, demostrando a direção da troca de mensagens entre os objetos das classes funcionário, candidato, vaga e entrevista com a interface Form_Realizar Entrevista, e esta com o ator entrevistador. Figura 6 – Exemplo de diagrama de comunicação Fonte: elaborada pela autora. 1.1.6 Diagrama de visão geral de interação O diagrama de visão geral de interação é uma variação do diagrama de atividades que integra diferentes tipos de diagramas de interação, demonstrando um processo geral. É um novo diagrama da UML 2.0. Nesse diagrama são utilizados dois tipos de quadros: os quadros de 31 interação, que contém a representação completa de qualquer tipo de diagrama de interação; e os quadros de ocorrência de interação, que fazem uma referência a um diagrama de interação, contudo não apresentam seu detalhamento. Segundo Guedes (2018), o diagrama de visão geral de interação demonstra uma visão geral de um sistema ou processo, envolvendo vários subprocessos que interagem entre si, a partir de um fluxo, similar ao diagrama de atividades, utilizando quadros no lugar dos nós de ação. A Figura 7 ilustra um diagrama de visão geral de interação, integrando quadros de ocorrência de interação dos seguintes diagramas de sequência: realizar inscrição para vaga, realizar entrevista, efetivar contrato de estágio e emitir contrato de estágio. Figura 7 – Exemplo de diagrama de visão geral de interação Fonte: elaborada pela autora. 32 1.1.7 Diagrama de tempo O diagrama de tempo representa de forma concisa e simples à mudança no estado de um objeto durante um período de tempo. É um diagrama novo da UML 2.0. A Figura 8 ilustra um diagrama de tempo correspondente aos estados ElaborandoEdital, AbrindoInscrições, AplicandoProvaSeleção,AnalisandoProvas e PublicandoResultados, de um processo do contexto com a duração de cada estado, indicando o período das datas e para o estado AplicadoProvasSeleção, e também o horário de início e término. Figura 8 – Exemplo de diagrama de tempo Fonte: Guedes (2018, posição 810) Segundo Guedes (2018), o diagrama de tempo ou de temporização demonstra a mudança no estado de um objeto, em um período específico de tempo em que um objeto executa algo importante, em resposta aos eventos disparados. 1.2 Diagramas Estruturais da UML As técnicas de modelagem estruturais da UML demonstram a estrutura das classes e do software, a partir da identificação dos objetos do sistema, representando a modelagem com visão estática do sistema. A seguir, será apresentado o objetivo de cada diagrama estrutural e um exemplo. 33 1.2.1 Diagrama de pacotes O diagrama de pacotes demonstra como os elementos do sistema estão organizados em pacotes e suas dependências, ou seja, categorizados em grupos de elementos que representam as partes do sistema, sendo que um pacote pode se subdividir em outros pacotes. Segundo Guedes (2018), o diagrama de pacotes representa como os elementos de um modelo estão divididos logicamente em pacotes, sendo que os elementos demonstram subsistemas, componentes ou as camadas que compõem o sistema. O diagrama pode ser especificado de maneira independente ou associado a outros diagramas da UML. A Figura 9 exemplifica um diagrama de pacotes correspondentes aos pacotes negócio, consultas e relatórios e suas dependências, de um modelo de casos de uso. Figura 9 – Exemplo de diagrama de pacotes Fonte: elaborada pela autora. 34 1.2.2 Diagrama de classes O diagrama de classes representa um conjunto de classes com seus atributos, operações e relacionamentos, demonstrando a modelagem da visão estática do projeto de um sistema. De acordo com Guedes (2018), o diagrama de classes demonstra uma visão estática das classes, com seus atributos e métodos, definindo-se a estrutura lógica e relacionamento entre as classes do sistema. O diagrama é um dos mais importantes e utilizados, servindo de apoio para especificação dos demais diagramas da UML. A Figura 10 exemplifica um diagrama de classes com as classes cargo, vaga, empresa, inscrição, funcionário, entrevista, candidato e contrato e seus relacionamentos, sendo apenas relacionamentos do tipo associação binária entre as classes representadas. Figura 10 – Exemplo de diagrama de classes Fonte: elaborada pela autora. 35 1.2.3 Diagrama de objetos O diagrama de objetos representa instâncias do diagrama de classes, a partir da descrição dos valores dos atributos dos objetos e os vínculos estabelecidos entre os objetos. A utilização deste diagrama é opcional. Segundo Guedes (2018), o diagrama de objetos representa uma visão dos valores armazenados pelos objetos de uma classe em um determinado instante de tempo. O diagrama está associado exclusivamente ao diagrama de classes. A Figura 11 apresenta um exemplo do diagrama de objetos, representando um objeto do tipo pessoa física, vinculado a um objeto do tipo conta especial. Figura 11 – Exemplo de diagrama de objetos Fonte: Guedes (2018, posição 4790) . 1.2.4 Diagrama de estrutura composta O diagrama de estrutura composta representa as colaborações entre elementos que cooperam entre si para executarem uma função específica. É um novo diagrama da UML 2.0. De acordo com Guedes (2008), o diagrama de estrutura composta representa a estrutura interna de uma classe, componente ou uma colaboração entre um conjunto de instâncias que coopera entre si para realizar uma tarefa, a partir da descrição das partes que o compõem e se comunicam. 36 A Figura 12 ilustra um diagrama de estrutura composta, considerando a colaboração realizar entrevista com as instâncias – funcionário, vaga, candidato, contrato e entrevista, que cooperam para realizar a tarefa. Figura 12 – Exemplo de diagrama de estrutura composta Fonte: elaborada pela autora. 1.2.5 Diagrama de componentes O diagrama de componentes representa os aspectos físicos do sistema, demonstrando a visão estática de implementação do sistema, a partir da reutilização de componentes. De acordo com Guedes (2018), o diagrama de componentes representa os componentes que fazem parte de um sistema ou mesmo os componentes ou classes internas de um componente lógico ou físico. 37 A Figura 13 ilustra um exemplo do diagrama de componentes, com os componentes de software pessoa e candidato e as três interfaces do componente candidato. Figura 13 – Exemplo de diagrama de componentes Fonte: elaborada pela autora. 1.2.6 Diagrama de implantação O diagrama de implantação demonstra a organização da arquitetura física do sistema, a partir da representação de nós e suas ligações físicas. Um nó pode representar um item de hardware do sistema ou um outro dispositivo integrado ao sistema e também os ambientes de execução que integram o sistema. Segundo Guedes (2018), o diagrama de implantação representa o aparato físico necessário para executar o sistema, demonstrando os elementos de hardware do sistema, como os servidores, estações, topologias e protocolos de comunicação, bem como a comunicação entre esses elementos. O diagrama também pode representar a distribuição dos módulos do sistema quando são executados em servidores distintos. 38 A Figura 14 representa a associação entre o nó do tipo dispositivo, hardware do candidato, com os nós do tipo ambiente de execução servidor de comunicação, servidor firewall, servidor de aplicação e servidor de BD. Figura 14 – Exemplo de diagrama de implantação Fonte: elaborada pela autora. 1.2.7 Diagrama de perfil O diagrama de perfil demonstra a criação de uma extensão da notação da UML para domínios de software com características específicas, representadas por estereótipos. O diagrama foi introduzido na UML 2.5. Segundo Guedes (2018), o diagrama de perfil é um diagrama abstrato que permite adaptar a notação da UML a uma nova plataforma com características, tecnologias ou domínio específico, a partir da criação de perfis que representam a extensão da linguagem para criação de novas metaclasses e estereótipos, permitindo, assim, a modelagem desses novos domínios. A Figura 15 mostra um diagrama de perfil que exemplifica a criação do estereótipo InternetActor, específico para o domínio de aplicações web, associada a metaclasse Actor da notação padrão da UML. 39 Figura 15 – Exemplo de diagrama de perfil Fonte: Guedes (2018, posição 7706) Referências Bibliográficas BEZERRA, Eduardo. Princípios de análise e projeto de sistemas com UML. 3. ed. Rio de Janeiro: Elsevier, 2014. BOOCH, Grady; RUMBAUGH, James; JACOBSON, Ivar. UML: guia do usuário. 2. ed. Rio de Janeiro: Campus, 2006. GUEDES, Gilleanes T. A. UML: uma abordagem prática. 3. ed. São Paulo: Novatec, 2018. 40 Modelagem comportamental da análise com a Linguagem de Modelagem Unificada (UML) Autoria: Iolanda Cláudia Sanches Catarino Leitura crítica: Rogério Colpani Objetivos • Compreender as principais técnicas de modelagem comportamentais da UML para documentar a fase de análise de um processo de desenvolvimento de software. • Aplicar as principais técnicas de modelagem comportamentais da UML para documentar a perspectiva da visão dinâmica do software. • Compreender a integração e consistência entre as principais técnicas de modelagem comportamentais da UML. 41 1. Diagrama de casos de uso Independente do modelo de processo de engenharia de software, tradicionais ou ágeis, que indica um fluxo de trabalho organizado para o desenvolvimento de sistemas de software, a Linguagem de Modelagem Unificada (UML – Unified Modeling Language) não define quais de suas técnicas de modelagem devem ser adotadas para documentar exatamente uma fase ou atividade de um processo de desenvolvimento. Toda definição do que, quando e como será desenvolvido um sistema, faz parte decada metodologia que uma empresa ou equipe de desenvolvimento estabelece, em consonância com as boas práticas da engenharia de software, para atender os diferentes domínios de aplicações e soluções computacionais. A técnica de modelagem comportamental, diagrama de casos de uso (use cases), pode ser adotada para documentar a modelagem de negócio do sistema, a modelagem conceitual de análise de requisitos e, principalmente, a modelagem lógica e funcional da fase de análise, representando um refinamento da especificação dos requisitos funcionais do sistema com o objetivo de representar os serviços, tarefas ou funcionalidades do software. A técnica de modelagem de casos de uso foi idealizada, em 1970, pelo cientista da computação, Ivar Jacobson. A partir da incorporação da notação do diagrama de casos de uso à UML, esta técnica tornou-se cada vez mais popular na representação dos requisitos funcionais de um software, devido sua notação gráfica ser simples, de fácil compreensão e sua documentação ser apresentada em linguagem natural, o que facilita a comunicação entre a equipe técnica e os usuários do domínio do sistema, segundo Bezerra (2014). Segundo Booch, Rumbaugh e Jacobson (2006, p. 232) o diagrama de caso de uso pode ser aplicado “para visualizar o comportamento de um 42 sistema, subsistema ou classe, para que os usuários possam entender como utilizar esse elemento e os desenvolvedores possam implementá- lo” e representa os aspectos dinâmicos do sistema, mostrando um conjunto de casos de uso, atores e seus relacionamentos. De acordo com Guedes (2018), o diagrama de casos de uso representa uma visão externa das funcionalidades do sistema, sem demonstrar a forma como tais funcionalidades são implementadas, a partir da indicação dos atores que interagem com os casos de uso. Para Bezerra (2014), o Modelo de Casos de Uso (MCU): A documentação do diagrama de casos de uso é complementada com a documentação de casos de uso, descrevendo os cenários de execução de cada caso de uso, geralmente, de forma textual ou tabulada. A UML não padroniza um único formato dessa documentação e nem o nível de detalhamento da descrição da funcionalidade. O diagrama de casos de uso serve de base para a especificação dos demais diagramas da UML, principalmente os diagramas comportamentais. Na elaboração do diagrama de casos de uso, os casos de usos podem ser categorizados e agrupados em pacotes, dependendo da quantidade de casos de uso identificados, representando um diagrama para cada pacote e, assim, consistindo em um modelo de casos de uso, ou seja, um conjunto de diagrama de casos de uso. Os elementos básicos da notação do diagrama de casos de uso são: • Sistema: representa a modelagem da fronteira do sistema, sendo que os atores são desenhados do lado de fora e os casos de uso são desenhados dentro do retângulo, indicando uma ideia visual clara da fronteira do sistema. A fronteira do sistema é representada por retângulo grande. • Ator: representa qualquer elemento externo ao sistema que interage com as funcionalidades do sistema, podendo ser pessoas, hardware, dispositivo, outro sistema etc. Os atores são 43 representados por símbolos de bonecos magros, identificados com um nome que representa qual o papel que o ator assume no contexto do sistema, sendo que cada ator deve representar um único papel. • Caso de uso: representa um relato de uso de uma funcionalidade do sistema, sem revelar seu comportamento interno. Os casos de uso são representados por uma elipse com um nome dentro do seu símbolo, identificando qual serviço o caso de uso assume. Recomenda-se nomear os casos de uso com verbo no infinitivo mais substantivo(s). Exemplo: manter cliente, reservar veículo, gerar relatório de clientes. • Associação: representa um relacionamento de comunicação entre ator e os casos de uso, indicando uma interação com o sistema. • Generalização: é um tipo de relacionamento que representa o reuso de comportamento existente entre casos de uso ou entre atores. A generalização de atores é uma representação abstrata de papéis que assumem como função no sistema. • Extensão: é um tipo de relacionamento de dependência existente somente entre casos de uso. O caso de uso estendido é uma descrição completa de uma sequência de interações, com significado em si mesmo. O relacionamento de dependência, representado pelo estereótipo <<extend>>, é indicado por uma seta que parte do caso de uso estendido para o caso de uso base, que tem interação com o ator. • Inclusão: é um tipo de relacionamento existente somente entre casos de uso para indicar a continuidade de execução obrigatória entre os casos de uso. O relacionamento de dependência, representado pelo estereótipo <<include>>, é representado por uma seta que parte do caso de uso base para o caso de uso incluído. 44 A Figura 1 ilustra um exemplo de diagrama de casos de uso com a indicação de seus elementos. O elemento indicado com o número 1 representa a fronteira do sistema. O elemento 2 representa o ator coordenador. O elemento 3 representa um caso de uso nomeado como manter evento de extensão. O elemento 4 representa um relacionamento do tipo generalização de casos de uso, já o elemento 5 representa um relacionamento do tipo generalização de atores. O elemento 6 representa um relacionamento de dependência entre casos de uso do tipo inclusão; e o elemento 7 indica um relacionamento de dependência do tipo extensão. Figura 1 – Exemplo de diagrama de casos de uso e seus elementos Fonte: elaborada pela autora. 45 2. Diagrama de atividades A técnica de modelagem comportamental, diagrama de atividades, demonstra o fluxo de controle de um conjunto de atividades que representa a execução de procedimentos, casos de uso, processos de negócio, subsistemas ou até o sistema completo. Considerando que os casos de uso foram especificados, é importante evoluir com a modelagem comportamental do software para melhor compreensão da lógica de funcionamento dos serviços do sistema. Segundo Guedes (2018), o diagrama de atividades descreve os passos a serem percorridos para a realização de uma atividade específica, representando os métodos, algoritmos, ou até mesmo um processo completo, concentrando-se na representação do fluxo de controle e de objetos que participam de uma atividade. Para Bezerra (2014, p. 307), o diagrama de atividades “pode ser visto como uma extensão dos fluxogramas. Além de possuir toda a semântica existente em um fluxograma, o diagrama de atividade possui notação para representar ações concorrentes, juntamente com a sua sincronização”. Os elementos de um diagrama de atividades podem ser divididos para demonstrarem fluxos de controle sequenciais ou simples e os fluxos de controle paralelos, também denominados de simultâneos. Nesse caso, deve-se utilizar as barras de sincronização do tipo bifurcação (fork) ou barra de união (join). O diagrama também pode ser representado com o uso de raias (swinlanes), equivalentes a compartimentos, que dividem o diagrama com o fluxo de suas atividades ou ações sendo realizadas por um ator específico em cada compartimento. Os elementos básicos da notação do diagrama de atividades são: • Atividade: representa a sequência de tarefas em um fluxo de trabalho que resulta em um comportamento de um processo. Uma atividade é composta por um conjunto de ações e representada 46 por um retângulo grande com bordas arredondadas, com um nome que descreve a atividade na perspectiva de execução do sistema, geralmente, usa-se um verbo no infinitivo. • Nó de ação: representa um único passo de execução imediata de uma atividade, sendo o elemento mais básico de uma atividade, ou seja, não pode ser decomposto. Um nó de ação é representado por um retângulo pequeno com bordas arredondadas, com um nome que também descreve a ação na perspectiva de execução do sistema, geralmente, usa-se um verbo no infinitivo. • Nó inicial: representao início do fluxo da atividade, indicando a primeira ação executada da atividade, sendo representado por um círculo preenchido. O diagrama de atividades deve ter um nó inicial obrigatoriamente. • Nó final: representa o fim do fluxo de uma atividade, é representado por um círculo preenchido dentro de um círculo vazio. Um diagrama de atividades pode ter um ou mais nós finais. • Nó de decisão: representa uma escolha entre dois ou mais fluxos, a partir de uma entrada e duas ou mais saídas. Um nó de decisão é acompanhado, obrigatoriamente, por condições de guarda que indicam a condição para que um fluxo possa ser escolhido. Um nó de decisão é representado por um losango com dois ou mais fluxos de escolha, cada um acompanhando pela descrição da condição de guarda entre colchetes. • Nó de objeto: representa uma instância de uma classe gerada ou acessada pela atividade, a partir de um fluxo de objeto. São representados como um retângulo com o nome do objeto. • Fluxo de controle: representa um conector com direcionamento que liga dois nós, enviando sinais de controle do fluxo sequencial de execução da atividade. É representado por uma reta contendo 47 uma seta, podendo conter uma descrição, uma condição de guarda ou uma restrição. • Fluxo de objeto: representa um conector com direcionamento, indicado objetos ou dados enviados por meio dele, ou seja, entre o nó de ação e o nó de objeto. O fluxo de objeto pode ser utilizado para modificar o estado de um objeto. • Nó de bifurcação (fork): ocorre quando há um fluxo de entrada e vários fluxos de saída concorrentes. O nó de bifurcação é representado por uma barra espessa na horizontal ou vertical, com a indicação de seus fluxos. • Nó de união (join): ocorre quando há dois ou mais fluxos de entrada e um único fluxo de saída. O nó de união também é representado por uma barra espessa na horizontal ou vertical, com a indicação dos seus fluxos. • Partições de atividade (swinlanes): permitem representar o fluxo de um processo que interage por diferentes atores que participam das atividades. As partições são representadas por retângulos longos no formato de compartimentos. A Figura 2 ilustra um exemplo de diagrama de atividades correspondente a atividade processar pedido com a indicação de seus elementos. 48 Figura 2 – Exemplo de diagrama de atividades e seus elementos Fonte: elaborada pela autora. O elemento indicado com o número 1 representa a atividade processar pedido, sendo composta por um conjunto de ações. O elemento 2 representa o nó inicial da atividade. O elemento 3 representa um nó de ação nomeado de receber pedido, que acessa um nó de objeto ordem de pedido, representado pelo elemento número 4, a partir de um fluxo de objeto. O elemento 5 representa o elemento fluxo de controle, indicando a próxima ação a ser executada. O elemento 6 representa um nó de decisão com duas decisões, cada uma indicada por uma condição de guarda. O elemento 7 representa um nó de bifurcação com uma entrada e dois fluxos de saída concorrentes; já o elemento 8, representa um nó de união, indicando dois fluxos de entrada e um único fluxo de saída. Por fim, o elemento 9 representa o nó final que indica o fim do fluxo da atividade. 3. Diagrama de máquina de estados A técnica de modelagem comportamental, diagrama de máquina de estados, demonstra o comportamento dinâmico de um elemento, 49 por meio de um conjunto de transições de estados realizadas entre os estados finitos de objetos de uma classe, de um caso de uso, ou mesmo de sistema completo. Geralmente, o diagrama é adotado nas fases de análise e projeto de desenvolvimento de um software, que é recomendável que seja utilizado para documentar a mudança de estados dos objetos de classes com estados representativos. Segundo Booch, Jacobson e Rumbaugh (2006, p. 285), o diagrama de máquina de estados representa “um comportamento que especifica as sequências de estados pelos quais um objeto passa durante seu tempo de vida em resposta a eventos, juntamente com suas respostas a esses eventos”. De acordo com Guedes (2018), o diagrama de máquina de estados demonstra o comportamento de um elemento, geralmente, uma instância de uma classe, a partir de um conjunto finito de transições de estado. No entanto, pode-se usar o diagrama para modelar também o comportamento de um caso de uso. E para Bezerra (2018, p. 287), o diagrama de máquina de estados “permite descrever o ciclo de vida de objetos de uma classe, os eventos que causam a transição de um estado para outro e a realização de operações resultantes”. Na elaboração do diagrama de máquina de estados, é importante identificar as regras de negócio aplicadas ao contexto dos objetos, a fim de auxiliar na definição dos seus estados e transições, que são os elementos básicos do diagrama. Um estado representa a abstração de uma forma de apresentação dos objetos por uma quantidade finita de tempo. Na definição de Booch, Rumbaugh e Jacobson (2006, p. 290), um estado é “uma condição ou situação na vida de um objeto durante a qual o objeto satisfaz alguma condição, realiza alguma atividade ou aguarda um evento”. A transição de estado demonstra a mudança de estado de um objeto como resposta a um evento, sendo que as transições de estados podem indicar condições de guarda e descrições. Os eventos são os acontecimentos que provocam a transição de estado. Na definição de Rumbaugh (1997), um evento é um estímulo individual 50 de um objeto para outro, sendo uma transmissão ou informação unidirecional que acontece em certo momento. Os elementos básicos da notação do diagrama de máquina de estados são: • Estado: representa uma situação durante a manipulação de um objeto, por um instante finito de tempo, que satisfaz alguma condição ou realiza alguma atividade. Um estado é representado por um retângulo com bordas arredondadas com um nome único, com ações de entrada e saída, se necessário, e de representação não obrigatória, indicadas pelas cláusulas entry, que representa as ações realizadas no momento em que o objeto assume o estado. A cláusula exit representa as ações executadas antes do objeto mudar de estado e a cláusula do representa uma atividade do estado executada durante o tempo em que o objeto se encontra no estado, e pode conter também transições internas que indicam operações que não causam alteração na situação do estado. • Transição: representa um relacionamento entre dois estados, indicando a mudança de estado a partir da ocorrência de um evento. A transição é representada por uma linha com uma seta na extremidade, apontando para um dos estados. • Estado inicial: representa o estado inicial da máquina de estados, sendo único. É representado por um círculo preenchido. • Estado final: representa o fim do ciclo dos estados que compõem a máquina de estados. Este estado é opcional e pode conter mais de um estado final em um mesmo diagrama. É representado por um círculo preenchido dentro de um círculo vazio. • Pseudoestado de escolha: representa uma decisão com a indicação dos estados, que podem ser gerados a partir de uma condição de guarda. Um pseudoestado de escolha é representado por um 51 losango com duas ou mais transições, cada uma acompanhada pela descrição da condição de guarda entre colchetes. • Estado composto: indica que um estado contém internamente dois ou mais estados com suas transições, gerados independentes ou não. É uma forma de simplificar a representação da máquina de estados, a partir do detalhamento de um estado principal. A Figura 3 ilustra um exemplo de diagrama de máquina de estados correspondente aos objetos da classe inscrição, com a indicação de seus elementos. Figura 3 – Exemplo de diagrama de máquina de estados e seus elementos Fonte: elaborada pela autora. 52 O elemento 1 representa o estado inicial, que indica o primeiro estado que os objetos assumem. O elemento 2 representa o estado realizando inscrição, com a indicaçãode uma transição de estado, representada pelo número 3, para um pseudoestado de escolha, indicado pelo elemento 4. Por fim, o elemento 5 representa o estado final, indicando o final do ciclo da máquina de estados. 4. Diagrama de sequência A técnica de modelagem comportamental, diagrama de sequência, é uma técnica do subgrupo de diagramas de interação da UML, que representa a ordem temporal em que as mensagens são trocadas para darem suporte à realização de um caso de uso. Na modelagem da fase de análise, recomenda-se utilizar o diagrama de sequência para descrever o cenário dos casos de uso e identificar os objetos que colaboram entre si, além das mensagens e informações que são enviadas nas mensagens de um objeto a outro. Geralmente, na modelagem da fase de projeto, refina-se a notação dos diagramas de sequência em conformidade com a arquitetura do sistema e padrões de implementação. Segundo Guedes (2018), o diagrama de sequência descreve a ordem temporal em que as mensagens são trocadas entre os objetos envolvidos na execução de um processo que representa um caso de uso, bem como, no ator responsável pela interação com os objetos. Conforme Bezerra (2018, p. 193), “o objetivo do diagrama de sequência é apresentar as interações entre objetos na ordem temporal em que elas acontecem”. Para Booch, Jacobson e Rumbaugh (2006), o diagrama de sequência: É um diagrama de interação que dá ênfase à ordenação temporal das mensagens. Graficamente, um diagrama de sequência é uma tabela que 53 mostra objetos distribuídos no eixo X e mensagens, em ordem crescente no tempo, no eixo Y. (BEZERRA, 2006, p. 243) Os elementos básicos da notação do diagrama de sequência são: • Linha de vida: representa a existência de um elemento (objeto ou ator) participante da realização do caso de uso em um período de tempo. É representada por uma linha vertical tracejada abaixo do elemento. • Ator: os atores são os mesmos já criados no diagrama de casos de uso, são apoiados por uma linha de vida e enviam mensagens para os objetos como uma forma de interação para solicitarem a execução de uma operação ou simplesmente o envio de informações. • Objeto: representa os objetos que participam da realização do caso de uso também apoiados por uma linha de vida, que juntamente com os atores formam um cabeçalho para o diagrama. Um objeto pode existir desde o início da interação ou ser criado ao longo da interação. Um objeto é representado por um retângulo com um nome único, conforme o padrão da notação de objeto, ou também pode ser representado por ícones que representam os estereótipos do tipo: fronteira <<boundary>>; classe <<entity>>; ou controlador <<control>>. • Foco de controle: representa o período de tempo durante o qual um elemento executa uma ação, diretamente ou não. É representado por um retângulo estreito na vertical sobre a linha de vida, podendo aparecer diversas vezes ao longo da linha de vida. • Mensagem ou estímulo: representa a solicitação que um elemento envia para o outro, com o objetivo de executar uma ação, demonstrando a ocorrência de eventos. Uma mensagem é representada por uma linha horizontal com uma seta na 54 extremidade. A troca de mensagens pode acontecer entre os elementos: ator e ator, indica uma comunicação entre os atores; ator e objeto, geralmente o ator provoca um evento, enviando uma mensagem que dispara uma operação, contudo, o ator pode simplesmente transmitir uma informação sem disparar uma operação; objeto e objeto, indica o envio de uma mensagem, disparando uma operação, sendo que um objeto pode enviar uma mensagem para si mesmo, denominada de autochamada; e objeto e ator, que indica o retorno de uma mensagem com o seu resultado. As mensagens de retorno são representadas por uma linha tracejada com a seta na extremidade, apontando para o elemento que recebe a resposta. • Mensagem síncrona: a mensagem é síncrona quando o emissor aguarda o retorno para continuar com a interação. Geralmente, são as mensagens comumente utilizadas no diagrama de sequência. É representada com a seta sólida. • Mensagem assíncrona: a mensagem é assíncrona quando o emissor continua enviando mensagens sem aguardar o retorno, com isso, o elemento receptor da mensagem assíncrona não precisa atendê-la imediatamente. É representada por uma seta aberta. A Figura 4 ilustra um exemplo de diagrama de sequência correspondente ao cenário principal do caso de uso realizar inscrição do evento, com a indicação de seus elementos. O elemento 1 representa o ator participante, já indicado no diagrama de casos de uso. O elemento 2 representa o elemento linha de vida, que acompanha cada objeto ou ator do diagrama. O elemento 3 representa o objeto evento e, na sequência, os demais objetos pessoa e inscrição. O elemento 4 representa o foco de controle sobre a linha de vida do ator participante. O elemento 5 representa uma mensagem enviada pelo ator participante e recebida pelo objeto tela inscrição, que não dispara nenhuma operação, contudo, a mensagem identificada pela numeração 3.1 carregarEvento( ), enviada 55 pelo objeto Tela Inscrição para o objeto ControladorInscricao, é uma mensagem síncrona que dispara a operação carregarEvento( ). Figura 4 – Exemplo de diagrama de sequência e seus elementos Fonte: elaborada pela autora. Na representação do diagrama de sequência, também é possível utilizar fragmentos combinados ou fragmentos de interação que possibilitam o alinhamento de interações, sendo que cada fragmento representa uma interação independente. Recomenda-se representar os fragmentos apenas se de fato contribuírem com a compreensão da interação. Segundo Guedes (2018), os fragmentos combinados são representados por um retângulo que determina a área de abrangência do fragmento no diagrama, contendo uma subdivisão no canto superior esquerda, a 56 fim de identificar a descrição do fragmento e seu operador de interação, que define o tipo de fragmento. Referências Bibliográficas BEZERRA, Eduardo. Princípios de análise e projeto de sistemas com UML. 3. ed. Rio de Janeiro: Elsevier, 2014. BOOCH, Grady; RUMBAUGH, James; JACOBSON, Ivar. UML: guia do usuário. 2. ed. Rio de Janeiro: Campus, 2006. GUEDES, Gilleanes T. A. UML: uma abordagem prática. 3. ed. São Paulo: Novatec, 2018. RUMBAUGH, James et al. Modelagem e projetos baseados em objetos. Rio de Janeiro: Campus, 1997. 57 Modelagem estrutural da análise com a Linguagem de Modelagem Unificada (UML) Autoria: Iolanda Cláudia Sanches Catarino Leitura crítica: Rogério Colpani Objetivos • Compreender as principais técnicas de modelagem estruturais da UML para documentar a fase de análise de um processo de desenvolvimento de software. • Aplicar as principais técnicas de modelagem estruturais da UML para documentar a perspectiva da visão estática do software. • Compreender a integração e consistência entre as principais técnicas de modelagem estrutural da UML. 58 1. Diagrama de pacotes As técnicas de modelagem estruturais da Linguagem de Modelagem Unificada (UML) representam a perspectiva da visão estática dos objetos do sistema, enfatizando a estrutura das classes e do software. Na análise, a partir da compreensão do domínio do problema, é fundamental delimitar o escopo do projeto de software e, com isso, dimensionar as partes que integram o sistema. A técnica de modelagem estrutural, diagrama de pacotes, demonstra os elementos do sistema agrupados e organizados em pacotes lógicos ou físicos, com o objetivo de representar os componentes ou módulos que integram um sistema e suas dependências. O diagrama de pacotes também pode ser utilizado para compor outros diagramas da UML em modelos, como, por exemplo, a partir da identificação da quantidade de casos de uso do sistema, pode-se optar em classificá-los por assunto e dividi-los em pacotes, dessa forma, para cada pacote especifica-se um diagrama de casos de uso. Segundo Booch, Jacobson e Rumbaugh(2006, p. 169), “um pacote é um mecanismo de propósito geral para a organização de elementos em grupos. Um pacote é representado graficamente como uma pasta com uma guia”. Para Bezerra (2014), um pacote é um mecanismo utilizado para agrupar elementos semanticamente relacionados, inclusive outros pacotes, sendo que as ligações entre pacotes são indicadas pelo relacionamento de dependência entre pacotes. A notação do diagrama de pacotes consiste na representação dos pacotes e suas ligações, que é demonstrado pelo relacionamento do tipo dependência, sendo uma linha tracejada com direção. Cada pacote deve ser identificado por um nome único e um pacote pode agrupar outros pacotes. 59 A Figura 1 exemplifica um diagrama de pacotes, demonstrando o conteúdo e as dependências entre os pacotes. É ilustrado um pacote nomeado de evento, identificado pelo número 1, composto pelos pacotes Usuario e negocio, sendo que o pacote Usuario contém as classes empresa, Funcionario, visitante, participante e InstituiEensino, e o pacote negocio depende de algum elemento do pacote usuário, identificado pelo número 2, que representa o relacionamento de dependência entre os dois pacotes. A figura ainda representa a dependência entre os pacotes evento e curso, em que o pacote curso contém os pacotes Formacao e Extensao, indicado pelo ícone de pacote, identificado pelo número 3, sendo outra forma de exibir o agrupamento de pacotes. Figura 1 – Exemplo de diagrama de pacotes Fonte: elaborada pela autora. 2. Diagrama de classes A partir da especificação dos casos de uso, inicia-se a identificação e definição das classes de objetos e a elaboração do modelo de classes para demonstrar o aspecto estático das colaborações, que permite compreender como o sistema está estruturado internamente. O modelo de classes abrange um conjunto de diagramas de classes, que 60 é considerada a principal técnica de modelagem estrutural da UML, e é utilizada durante a maior parte do desenvolvimento iterativo de um software orientado a objetos. Durante a atividade de análise e projeto de um modelo de processo de software, como, por exemplo, o processo unificado, recomenda-se que, na medida em que o sistema é desenvolvido, o modelo de classes seja incrementado com novos detalhes de notação, refinando-o até a atividade de implementação. Dessa forma, o modelo de classes pode apresentar vários níveis de abstração ou versões. Segundo Guedes (2018), o diagrama de classes permite a visualização das classes utilizadas pelo sistema e como estas se relacionam. Esse diagrama apresenta uma visão estática de como as classes estão organizadas, preocupando-se em definir sua estrutura lógica. Para Bezerra (2014), o diagrama de classes é utilizado na construção do modelo de classes, iniciando no nível de análise até o nível da especificação, sendo considerado o mais rico em termos de notação. A seguir, será apresentada a estrutura das classes, bem como os tipos de relacionamentos entre as classes. 2.1 Classes Uma classe representa um grupo de objetos do mundo real que compartilha os mesmos atributos, operações e semântica, e é representada graficamente por um retângulo com três partes, no máximo. Na primeira parte, exibe-se o nome da classe, geralmente, um substantivo ou expressões breves, devendo ser único no modelo de classes. Por convenção, o nome é apresentado no singular e com as palavras compostas, usa-se concatená-las, começando cada palavra por letra maiúscula. Na segunda parte, são declarados os atributos que 61 representam os dados do objeto, sendo nomeados por substantivos ou expressões que representam alguma propriedade da classe, tipicamente em letra minúscula, e, para palavras compostas, usa-se concatená-las, sendo que, a partir da segunda palavra, inicia-se com letra maiúscula, por exemplo, estadoCivil e razaoSocial. Na terceira parte, são declaradas as operações que correspondem às ações dos objetos, nomeadas por um verbo ou uma locução verbal breve, usando a mesma convenção de letras minúsculas e maiúsculas dos atributos, como, por exemplo, criarCliente e validarCpf. A Figura 2 ilustra a notação de classes e suas formas de representação, suprimindo alguma parte ou não. Figura 2 – Exemplo de representação de classes Fonte: elaborada pela autora. Na representação dos atributos e operações de uma classe, indica-se também, à esquerda do nome dos mesmos, o símbolo da visibilidade que determina o nível de acessibilidade de um atributo ou operação por outros objetos. Existem basicamente quatro tipos de visibilidade, sendo: • Privada: é representada por um símbolo de menos (-) e indica que somente os objetos da própria classe podem enxergá-la. • Pública: é representada por um símbolo de mais (+) e indica que qualquer objeto pode utilizar o objeto acessado. 62 • Protegida: é representada pelo símbolo de sustenido (#) e indica que além dos objetos da própria classe, os objetos das subclasses também podem ter acesso ao objeto da superclasse. • Pacote: é representado pelo símbolo de til (~) e indica que o atributo ou operação é visível por qualquer objeto do mesmo pacote. Na elaboração de cada versão do diagrama de classes, a partir da identificação e definição das classes, deve-se verificar a consistência entre as classes e os casos de usos já especificados e, assim, observar a necessidade de novas classes ou eliminar redundâncias e inconsistências. Algumas técnicas que se destacam para identificação das classes são: • Análise de casos de uso: preconizada pelo modelo de processo de software Rational Unified Process (RUP), seguindo os passos de: fazer a descrição de cada caso de uso; para cada caso de uso, identificam-se as classes, a partir do comportamento do caso de uso, descrevendo suas responsabilidades, atributos e associações; unificam-se as classes de análise identificadas em um ou mais diagramas de classes. • Análise textual de Abbott: utilizam-se diversas fontes de informação sobre o sistema, como, por exemplo, documento de requisitos e modelo de negócio, sendo que, para cada um desses documentos, destacam-se os nomes com substantivos e adjetivos e os sinônimos são removidos. Cada termo remanescente pode se tornar uma classe candidata, um atributo ou ser descartado. Nos documentos, os termos que indicam verbos são destacados para identificar as operações e associações de uma classe. • Cartões Classes, Responsabilidades e Colaboradores (CRC): utiliza-se de cartão CRC, no formato de tabela, para representar as classes identificadas, a partir do comportamento dos objetos, 63 especificando as características e responsabilidades de cada objeto. • Taxonomia de conceitos: identificam-se e analisam-se conceitos abstratos e concretos, papéis desempenhados por seres humanos, eventos que representam ocorrências em um determinado período de tempo, indicação de lugares e ambientes, organizações que demonstram coleções de pessoas ou de recursos etc. 2.2 Relacionamentos Na UML, os modos pelos quais os itens elementos dos diagramas podem estar conectados a outros, isto é, logicamente ou fisicamente, são modelados como relacionamentos, sendo representados graficamente como um caminho, com tipos diferentes de linhas utilizadas para diferenciar os relacionamentos (Booch, Jacobson e Rumbaugh, 2006). No diagrama de classes, além da representação das classes, estabelecem-se os relacionamentos entre as classes, que indicam o compartilhamento de informações entre os objetos das classes, por meio da troca de mensagens entre os objetos, em tempo de execução do sistema. Na modelagem orientada a objetos, existem quatro tipos de relacionamentos, que são os mais importantes, sendo: • Associação: são relacionamentos estruturais que conectam os objetos entre as classes, podendo ser associação do tipo: unária (também denominada de reflexiva ou auto-associação), binária, ternária classe associativa (também denominada de classe de associação)
Compartilhar