Capítulo 8 - UML – M ODELAÇÃO DA ARQUITECTURA Tópicos § § § § § Introdução Componentes e Nós Diagramas de Componentes Diagramas de Instalação Exercícios 8.1 Introdução Diagramas de arquitectura1 descrevem aspectos da fase de implementação e instalação de um sistema de software, designadamente a estrutura e dependências de código fonte e de módulos executáveis tal como a sua respectiva instalação nas diferentes plataformas computacionais subjacentes. Estes diagramas apresentam-se sob duas formas: diagramas de componentes e diagramas de instalação. Os diagramas de componentes são usados para modelar a arquitectura de um sistema de software da perspectiva dos seus componentes digitais (e.g., ficheiros de código fonte, de executáveis, de configuração, tabelas de dados, documentos de gestão do projecto), explicitando principalmente as suas dependências. Os diagramas de instalação, por outro lado, são usados para modelar a arquitectura de um sistema informático da perspectiva dos seus componentes fisícos/hardware (e.g., computadores, adaptadores de rede, impressoras, routers, cablagem), explicitando as suas dependências de comunicação, assim como, que componentes são instaladas em cada nó computacional. Estes diagramas podem também ser aplicados na modelação de negócios e de organizações caso se considere que as componentes de “código” sejam procedimentos e regras de negócio e que os componentes não digitais constituam a infra-estrutura da organização através de um conjunto de recursos (humanos e outros) do negócio. (Na nossa opinião os diagramas de implementação constituem a parte mais limitada e mal explanada do UML. Há inúmeros aspectos de desenho e de organização que a sua 1 A especificação 1.3 do UML designa-os por “diagramas de implementação”. Todavia, a designação de “diagramas de arquitectura” parece-nos mais adequada tendo em conta que estes diagramas podem ser aplicados no desenho de diferentes tipos de arquitecturas. Por exemplo: arquitectura de sistemas de informação (que é a sua aplicação mais conhecida) ou arquitectura de negócios e de organizações. CENTRO ATLÂNTICO - COLECÇÃO T ECNOLOGIAS 2 actual versão não aborda, deixando-os em aberto, ao critério que os seus utilizadores venham a definir, caso a caso. No lado oposto desta abordagem de flexibilidade e de não definição, encontra-se, por exemplo, o EAB (Entreprise Application Blueprint) [Boar98] que propõe uma notação muito completa e rigorosa para desenho de arquitecturas de sistemas de informação, em particular para o desenho de sistemas, plataformas e suas inter-relações.) 8.2 Componentes e Nós 8.2.1 Componentes Uma componente representa uma peça de implementação de um sistema, na prática um conjunto de artefactos fisícos em formato digital, por exemplo ficheiros de código (fonte, binário ou executáveis) ou ficheiros de documentos relativos ao negócio. Definem-se pelo menos três tipos distintos de componentes: § § § Componentes de instalação: constituem a base dos sistemas executáveis (e.g., DLL, executáveis, controlos Active-X, classes Java). Componentes de trabalho: a partir dos quais são criados os componentes de instalação (e.g., ficheiros com código fonte, ficheiros de dados, documentos). Componentes de execução: criados como resultado da execução de um sistema (e.g., processos, threads, agentes de software). Estes componentes são representados nos diagramas de instalação. Uma componente de software é uma parte física de um sistema: existe de facto num determinado computador e não apenas na mente do analista, como acontece com o conceito de classe. Adicionalmente, uma componente implementa uma ou mais classes, as quais são representadas dentro do ícone de componente ou com relações explícitas de dependência de implementação, conforme ilustrado na Figura 8.1. Calculator c:Calculator Instância de componente (tipo de) componente wordProcessor.exe Realiza WordProcessor SpellChecker WordCounter wordProcessor.exe ≈ WordProcessor SpellChecker WordCounter Figura 8.1: Representação gráfica de componentes. Elementos que residam em (i.e., sejam implementados por) uma componente são apresentados dentro do símbolo da componente respectiva. Pode-se, se for conveniente, representar o tipo de visibilidade desses elementos à semelhança do que UML, PROCESSOS E F ERRAMENTAS CASE - BETA-BOOK 3 acontece com os pacotes. O significado da visibilidade depende do tipo de componente. Por exemplo, se for uma componente com código fonte, pode corresponder a controlar a acessibilidade aos seus construtores internos; se for uma componente com código executável, a visibilidade pode corresponder à possibilidade de código de outras componentes poderem aceder ou invocar o seu próprio código. O desenvolvimento de software baseado em componentes pressupõe a existência de componentes com um sentido mais restrito/exigente que este adoptado no UML. Ou seja, a noção de “componente” em UML é lata, mas inclui naturalmente a noção de componente de software encontrada por exemplo nas propostas do Java beans, Enterprise Java beans, ou Active-X. Um aspecto importante ligado à noção de componente tem a ver, como é analisado na Secção 6.4, com a noção de interface. Tipicamente as componentes de software (as do sentido restrito acima referido) implementam uma ou mais interfaces, e é através destas interfaces que providenciam as suas funcionalidades a outras componentes. A Figura 8.2 ilustra a relação (de realização) entre componentes e interfaces, tal como a relação de dependência entre componentes, que se faz através do conceito de interface. wordsmith.dll wordProcessor.exe ISpell realização (forma simples) interface dependência «interface» ISpell wordProcessor.exe wordsmith.dll spell() realização (forma expandida) Figura 8.2: Componentes e Interfaces. A especificação 1.3 do UML identifica os seguintes estereótipos para componentes: § § § § «document»: denota um documento. «executable»: denota um programa que possa ser executado num nó. «file»: denota um documento contendo código fonte ou dados. «libary»: denota uma biblioteca dinâmica ou estática. § «table»: denota uma tabela de uma base de dados. 8.2.2 Nós Um nó é um objecto fisíco que representa uma recurso de processamento, geralmente tendo capacidades de memória e de processamento. Os nós podem consistir em recursos computacionais (hardware), mas também em recursos humanos ou recursos de processamento mecânico. Os nós podem ser representados como tipos e como instâncias. Instâncias de nós podem conter instâncias de objectos e de componentes. CENTRO ATLÂNTICO - COLECÇÃO T ECNOLOGIAS 4 Associação de comunicação Servidor (tipo de) nó Monitor « Device » lisboa004:Kiosk « Processor » instância de nó Figura 8.3: Representação gráfica de nós. Um nó é representado como um cubo 3-dimensional conforme ilustrado na Figura 8.3. Dois nós podem-se encontrar ligados através de relações de associação. Estas especificam a existência de caminhos de comunicação entre os correspondentes nós e podem ser caracterizadas por um estereótipo de modo a explicitar o tipo de comunicação envolvido (e.g., o tipo de canal ou o tipo de rede). As propriedades dos nós (e.g., capacidade de memória principal, número de processadores, data de aquisição, …) é representada por marcas com valores. Por outro lado, podem-se definir estereótipos, com correspondentes ícones, para modelizar diferentes tipos de recursos de processamento. Para efeito dos exemplos descritos neste livro assume-se a existência de dois estereótipos de nós para representação de recursos computacionais: § «processor»: denota um nó que pode executar uma componente de software. § «device»: denota um nó que não tem capacidade para executar componentes de software, e.g., uma impressora, um scanner, ou um monitor. Assume-se que por omissão um nó é do estereótipo «processor» (e.g., nó Servidor da Figura 8.3). 8.2.3 Relações entre Nós e Componentes Um (tipo de) nó pode conter (tipos de) componentes. Tal facto pode ser traduzido pela inclusão dos componentes no símbolo do nó, ou pelo estabelecimento de uma relação de dependência, de estereótipo «support» entre o nó e as componentes suportadas, conforme ilustrado na Figura 8.4. UML, PROCESSOS E F ERRAMENTAS CASE - BETA-BOOK 5 Servidor Servidor Directório de Telefones Programa de Pesquisa ≈ Servidor Directório de Telefones ≈ «support» «support» Programa de Pesquisa Programa de Pesquisa Directório de Telefones Figura 8.4: Relação entre nós e componentes. Nós e componentes partilham um conjunto de semelhanças e diferenças. As semelhanças são que ambos podem (1) participar em relações de generalização, dependência e associação; (2) ser aninhados; (3) ter instâncias; e (4) participar em interacções. As diferenças são que as (1) componentes são coisas que participam na execução de um sistema; nós são coisas que suportam e executam componentes; e que as (2) componentes representam agrupamento físico de elementos lógicos; nós representam a instalação física de componentes. 8.3 Diagramas de Componentes Um diagrama de componentes ilustra as dependências entre várias componentes de software (incluam-se nesta definição lata, e entre outros: artefactos de código fonte, de código binário, de código executável, procedimentos de negócio e documentos). Um módulo de software pode ser representado por um estereótipo, por exemplo, para ter uma apresentação gráfica distinta de outros tipos de componentes. Um diagrama de componentes representa apenas tipos de componentes e nunca instâncias de componentes. Para ilustrar instâncias de componentes deve ser usado um diagrama de instalação (possivelmente uma versão simplificada sem nós). Entre outras motivações para a construção de modelos de componentes, salientam-se as seguintes: § § § Os clientes podem ver a estrutura final do sistema, mesmo antes deste estar concluído. A equipa de desenvolvimento tem uma visão da arquitectura física do sistema, pelo que pode trabalhar de forma mais controlada e sistemática. Os escritores técnicos (que produzem, por exemplo, a documentação do sistema, manuais de utilizador, manuais técnicos) podem entender melhor sobre o que estão a escrever, detalhar alguns aspectos do sistema, antes de este se encontrar concluído. Apresentam-se de seguida dois exemplos de aplicação de diagramas de componentes: um que ilustra as dependências de artefactos físicos referenciados numa página HTML, e um segundo exemplo que ilustra as dependências entre módulos de instalação constituintes de uma aplicação típica do Windows. 6 CENTRO ATLÂNTICO - COLECÇÃO T ECNOLOGIAS Exemplo 8.1: Diagrama de Componentes relativo a uma Página HTML. Considere a página Web Example1.html com uma referência a um applet Java e com o seguinte conteúdo: <html> <head> <title>The Animator Applet (1.1) - example 1</title> </head> <body> <h1>The Animator Applet (1.1) - example 1</h1> <applet codebase="." code=Animator.class width=460 height=160> </applet> <a href="Animator.java">The source.</a> <hr> </body> </html> O diagrama de componentes correspondente a este “mini-sistema” consiste nos seguintes ficheiros: example1.html, Animator.class, e Animator.java. A Figura 8.5 ilustra essas relações de dependência. Note-se em particular a relação de dependência explícita entre a componente Animator.java e a interface Java MouseListener.java definida no pacote java.awt. Example1.html Animator.class Animator.java java.awt.event MediaTracker MouseListener Figura 8.5: Diagrama de componentes do Exemplo 8.1. UML, PROCESSOS E F ERRAMENTAS CASE - BETA-BOOK 7 Exemplo 8.2: Diagrama de Componentes relativo à instalação de uma aplicação. Considere a aplicação WinCOR desenvolvida sobre ambiente MS-Windows e responsável pela gestão de correspondência (entrada e saída) de uma organização. A aplicação consiste num conjunto variado de componentes de instalação, nomeadamente: § wincor.exe: ficheiro que contêm o executável da aplicação § pblib32.dll, sde32.dll, sdemdb32.dll: bibliotecas com código binário que providenciam funcionalidades adicionais § wincor.hlp: ficheiro de ajuda sobre a aplicação. § wincor.ini: ficheiro de configuração da aplicação § entrada.db, saida.db: ficheiros/tabelas da base de dados de suporte A Figura 8.6 ilustra o respectivo diagrama de componentes para a situação descrita. Note-se nas dependências identificadas entre as diferentes componentes de instalação. Estas dependências referem que o executável wincor.exe (i.e., a aplicação WinCOR) apenas pode correr se todas as restantes componentes tiverem sido instaladas adequadamente e que o módulo sdemdb32.dll depende do módulo sde32.dll. «document» «library» cor.hlp pblib.dll «table» entrada.db «executable» wincor.exe {versão=3.2} «document» cor.ini «table» saida.db «library» «library» sde32.dll sdemdb.dll Figura 8.6: Diagrama de componentes do Exemplo 8.2. Neste exemplo houve o cuidado particular de se explicitar os estereótipos dos diferentes componentes envolvidos. CENTRO ATLÂNTICO - COLECÇÃO T ECNOLOGIAS 8 8.4 Diagramas de Instalação Um diagrama de instalação ilustra a configuração dos elementos de processamento e das componentes de software, processos e objectos neles suportados. Instâncias de componentes de software representam manifestações de execução das unidades de código. Na modelação de negócios, os elementos de processamento são as unidades organizacionais e os trabalhadores enquanto que as componentes de software são os processos e documentos usados pelas unidades organizacionais e pelos trabalhadores. Um diagrama de instalação consiste num conjunto de nós ligados por associações de comunicação. Os nós podem conter instâncias de componentes (de execução), o que significa que uma componente é instalada e executada num nó. Por outro lado, as componentes são compostas por objectos (note-se que um processo é apenas um caso particular de objecto: objecto activo). Seguem-se dois exemplos de diagramas de instalação. O primeiro exemplo diz respeito a uma versão simplificada do serviço 118 da Portugal Telecom numa versão cliente/servidor. O segundo exemplo representa o equipamento hardware existente tipicamente numa configuração doméstica. Exemplo 8.3: Diagrama de Instalação do serviço 118 da PT. Considere-se uma versão simplificada do serviço 118 da Portugal Telecom numa sua versão cliente/servidor em que o cliente é uma aplicação previamente instalada e configurada num PC com MSWindows. (Nota: existe também este serviço na versão Web em http://net118.telecom.pt/). 118-servidor:Servidor Directório de Telefones Programa de Pesquisa Resultados :PC * Programa de Apresentação 118 Figura 8.7: Diagrama de instalação do Exemplo 8.3. Pelo facto do diagrama de instalação apresentar componentes, todos os elementos apresentados têm de ser instâncias, neste caso são apresentadas instâncias de nós e de componentes. Outro aspecto relevante deste exemplo é a representação neste diagrama de instalação da existência de vários PC através do carácter “*” colocado no canto superior direito do nó “PC”. UML, PROCESSOS E F ERRAMENTAS CASE - BETA-BOOK 9 Exemplo 8.4: Diagrama de Instalação do Sistema de Trabalho Doméstico. A Figura 8.8 apresenta o diagrama de instalação correspondente a um sistema de trabalho doméstico constituído por um PC, com alguns equipamentos adicionais, por exemplo: uma impressora, um monitor, colunas de som, e um modem. O modem permite a ligação à Internet através de um determinado ISP (Internet Service Provider). Internet «device» Monitor «processor» ISP «device» Impressora «processor» PC «device» Modem «device» Coluna Som Figura 8.8: Diagrama de instalação (de tipos) do Exemplo 8.4. Caso se pretendesse ilustrar uma configuração particular do diagrama ilustrado e/ou ilustrar as componentes de software que deveriam existir numa determinada configuração ter-se-ia de desenhar um diagrama de configuração de nível de instâncias. A Figura 8.9 ilustra uma possível configuração (instanciação) desenhada a partir do diagrama da Figura 8.8. sTelepac:ISP :Monitor (ICL-5550) meuPC:PC :Modem (Zoom 56K) (PC XPTO, PIII 450MHz) :Impressora Windows 2000 Office 97 (HP LJ1100) Netscape Figura 8.9: Diagrama de instalação (de instâncias) do Exemplo 8.4. CENTRO ATLÂNTICO - COLECÇÃO T ECNOLOGIAS 10 8.5 Exercícios Ex.1. Pretende-se o diagrama de componentes correspondente ao programa expipes desenvolvido em linguagem C, com os seguintes módulos: ex-pipes.c util.c server.c client.c, e com dependências definidas pelo seguinte makefile: CC = gcc CFLAGS = -g ex-pipes : ex-pipes.o util.o server.o client.o $(CC) -g -o ex-pipes ex-pipes.o util.o server.o client.o Ex.2. Pretende-se o diagrama de componentes correspondente à página Web http://www.tvi.pt/ com o seguinte conteúdo: <html> <head> <meta http-equiv="content-type" content="text/html"> <title>TVI OnLine</title> </head> <frameset rows="296,*" border="0" frameborder="NO" framespacing="0"> <frame src="index_hdr.html" name="hdr" noresize> <frame src="index_ix.html" name="ix" noresize scrolling="NO"> </frameset> <noframes> <body bgcolor="#000000" background="HmPG/imagens/directoIX_BG.jpg"> </body> </noframes> </html> Tenha em consideração os componentes (ficheiros) representados a negrito. Ex.3. Pretende-se o diagrama de instalação da infra-estrutura computacional de apoio às suas aulas práticas. (i) Considere apenas os nós existentes e os seus tipos de comunicação. (ii) Alterar o diagrama produzido na alínea anterior de modo a incluir a descrição dos postos de trabalho e as componentes de software mais relevantes (e.g., servidor Web, ferramentas de trabalho (e.g., Rose, VisualStudio), servidor BD, sistema operativo). Ex.4. Considere o serviço 118 da PT conforme introduzido no Exemplo 8.3. Modifique o exemplo dado tendo em consideração que o serviço é acedido através de um cliente/browser Web. UML, PROCESSOS E F ERRAMENTAS CASE - BETA-BOOK 11 Ex.5. Pretende-se o diagrama de instalação para modelizar a seguinte situação: “Uma empresa industrial está estruturada em quatro departamentos: produção, comercial, controlo da qualidade, e administrativo-financeiro. Cada um destes departamentos tem um director respectivo. O director-geral é o responsável pela coordenação e supervisão de todos os departamentos. O departamento administrativo-financeiro está estruturado em duas secções, respectivamente a secção administrativa e a secção financeira.” Sugestões: (1) Considere que os recursos do negócio (unidades orgânicas e as pessoas) são nós do diagrama a desenhar. (2) Represente, através de estereótipos, o tipo das associações existentes entre nós.