Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 TEMA 8 DIAGRAMA DE ESTRUTURA OU ESTRUTUROGRAMA 1. Definição de Diagrama de Estrutura e Módulo Uma das características do desenho estruturado é produzir sistemas de fácil manutenção, através da criação de módulos pequenos e independentes, deixando os detalhes físicos (input, output, formatos) para os módulos mais baixos. Os sistemas modulares estão muito ligados à programação estruturada, uma das técnicas primárias que deu atenção à complexidade dos sistemas, criando um conjunto muito pequeno de instruções de programação para o desenvolvimento da codificação e reconhecendo que para desenvolver os detalhes de um problema, é muito importante ter firme compreensão de todo o problema primário. Estamos a falar da técnica que ficou conhecida como top-down approach (de cima para baixo) ou step wise refinement (refinamento passo a passo), que consiste em elaborar uma visão equilibrada partindo de uma visão geral de detalhes do problema. Fig.1: Exemplo de uma estrutura top-down Embora os sistemas desenvolvidos através da programação estruturada tivessem menos falhas do que os sistemas tradicionais, tornou-se ainda quase tão difícil como antes implementar as mudanças requeridas pelos usuários ou as adaptações do sistema. A razão principal deste fracasso é que a programação estruturada deixou de levar em consideração as amplas estruturas do sistema, que é onde uma grande parte da manutenção acontece, e também porque a abordagem top-down em que se baseia não tem regras que explicam onde o particionamento do problema em subprogramas deve ocorrer. Na análise e desenho estruturado de sistemas todos os conceitos da abordagem top-down permanecem válidos e outros novos foram adicionados, permitindo que uma visão mais ampla dos sistemas de grande porte seja obtida. A principal ferramenta utilizada no desenho estruturado para descrever a estrutura de um sistema é o diagrama de estrutura ou estruturograma. Estruturograma: é um grafo arborescente que representa a hierarquização do controlo num sistema. Um grafo é um objeto básico de estudo da teoria dos grafos. Tipicamente, um grafo é representado como um conjunto de pontos (vértices) ligados por retas (as arestas). Dependendo da aplicação, as arestas podem ser direcionadas, e são representadas por "setas" (http://pt.wikipedia.org/wiki/Grafo). Geral Editar Imprimir Entrada 2 O estruturograma é constituído de módulos, evocações e parâmetros. Um módulo é definido como uma colecção de instruções de programa com quatro atributos básicos: entrada e saída, função, lógica (ou mecanismos) e dados internos. Neste caso os atributos básicos significam: 1. Entrada e Saída: Entrada – o que é recebido pelo chamado (enviado pelo chamador). Saída – o que retorna do chamado (devolvido ao chamador). As Entradas e Saídas representam as informações que um módulo necessita e fornece. 2. Função: O que se faz com a entrada para se produzir à saída A função de um módulo é o que ele faz para a entrada produzir a saída Entrada, saída e função fornecem uma visão externa de um módulo. (caixa negra). 3. Lógica: A codificação de procedimentos ou a lógica pela qual ele executa as suas funções. A lógica representa as codificações de procedimentos ou algoritmos que executam a função. 4. Dados internos: É o seu espaço privado de trabalho, incluindo os dados sobre os quais só o próprio módulo faz referências. Dados internos representam o espaço, e é, a área interna de trabalho que um módulo faz referência. Lógica e dados internos representam uma visão interna do módulo. Um módulo tem mais atributos, como: � Ter nome pelo qual pode ser referenciado � O que um módulo faz interessa mais do que como ele faz (visão externa) � Pode usar ou ser usado por outros módulos; (não implica uma descrição ou codificação única, embora indique chamamento de tipo determinado) � Invocação – chamamento Em suma: Módulo: é um conjunto de instruções (lexicalmente contíguas), unificado por elementos definidores da respectiva fronteira e dotado de um identificador próprio, por exemplo, Procedure em Pascal. 2. Representação Gráfica de um Módulo Em um diagrama de estrutura, o módulo é representado por um rectângulo dentro do qual está contido o seu nome. 3 Fig.1: Exemplo de um diagrama de estrutura Módulo Invocação Item de dados de saída Item de dados Indicador (flag) de entrada Fig.2: Simbologia de um diagrama de estrutura O nome do módulo é uma declaração da sua função, i.e., o que ele faz cada vez que é chamado. Um módulo pré-definido é mostrado graficamente através da adição de linhas internas e paralelas às linhas verticais rectângulo. Este módulo não poderá ser escrito porque ele já existe em sistemas ou bibliotecas de aplicações. Pode apresentar macros e rotinas próprias do sistema operacional, como por exemplo, na figura 3. Fig.3: Módulo pré-definido 3. Conexões entre Módulos Um sistema é um conjunto de módulos organizados dentro de uma hierarquia, cooperando e se comunicando para realizar o trabalho. O símbolo que une os módulos é uma seta mostrando o “alvo”, ou o mesmo que uma chamada de um módulo. Movimento de Dados Designação de Função Ler A A Gravar A Validar nº telefone Get Hora do dia A B Indica que A chama B Designação de Função Calcular Juros Mensais Módulo Módulo Nome do Módulo 4 A – chama (invoca, executa) B B – executa a sua função B – retorna (volta) a A imediatamente após o ponto de A chamou B Por outras palavras a seta da invocação mostra uma chamada de uma sub-rotina, com a direcção da seta mostrando qual é o módulo que chamou outro. Esta representação (diagrama) não nos diz nada sobre a codificação de A ou de B, mas, aquele chamar B pode estar dentro de uma instrução IF ou dentro de instruções muito complexas. Tudo o que nos diz é que A é capaz de chamar B e que B está subordinado a A. Esta técnica do desenho estruturado dá-nos a estrutura do sistema sem nos envolver em detalhes. Fig.4: Exemplo de uma conexão entre módulos 4. Comunicação entre Módulos Quando um módulo chama o outro geralmente tem que dizer alguma coisa e esperar a resposta do outro. É como telefonar para alguém; geralmente telefonamos para dizer alguma coisa e esperamos obter uma resposta/reacção. Número de cartão Nome do doente Número está correcto Vejamos: O módulo Obter detalhes do doente chama o módulo Encontrar nome do doente e se comunicam da seguinte maneira: Monitor Geral Monitor Transformação Monitor Saida Monitor Entrada Deputor Leitor Exibidor Formatador Obter detalhes do doente Encontrar nome do doente 5 1. Obter detalhes do doente envia dados (nº do cartão) para Encontrar nome do doente. 2. Este após executar a sua função, devolve os dados (nome do doente) para Obter detalhes do doente. 3. Encontrar nome do doente também retorna uma chave (flag) (nº do doente está correcto) para Obter detalhes do doente. Esta flag é utilizado para dizer a quem chama, que tudo correu bem, porque às vezes Obter detalhes do doente pode inadvertidamente enviar um nº de cartão que não existe, ou pertence à outra unidade sanitária. Existem duas diferenças entre ligação de dados e controle ou flag 1. Os dadossão processados e o controle (flag) é mais testado do que processado. 2. Os dados relacionam-se com o problema e são as razões do processamento de dados (exemplo: idade do doente, idade da gravidez, nº de partos, etc). Mas o controle tende a ser um passo externo ao mundo do problema, pois ele comunica informações (situações) sobre parte dos dados (exemplo: nº do doente é válido) Fim do registo de pagamento 5. Definição de Dados Campos no Dicionário de Dados Dado composto é aquele que é formado por itens de dados menores. Existem 3 maneiras fundamentais pelas quais os dados compostos podem ser construídos: � Sequenciando os itens de dados; � Repetindo um único item de dados várias vezes; � Seleccionando entre vários itens de dados. No dicionário de dados isso é representado da seguinte maneira: Sequência: nº de telefone = 258-1-491557 = código do país + código da área + nº Fig.5: Exemplo de uma representação gráfica sequencial Repetição: Lista de Estudantes = {nome de estudante} Emitir Cheques para pessoal UEM Obter registo do empregado a pagar Número de Telefone Área Número País 6 Fig.6: Exemplo de uma representação gráfica repetitiva Selecção: Pedido de Reingresso = Aceite ou não aceite Fig.6: Exemplo de uma representação gráfica selectiva 6 . ACOPLAMENTO Usamos o diagrama de estrutura para avaliar a qualidade do projecto de sistemas. O primeiro método de medir a qualidade de um projecto é chamado acoplamento, ou seja, o o grau de interdependência entre dois módulos. Nosso objectivo é minimizar o acoplamento, isto é, tornar os módulos tão independentes quanto possível. Um acoplamento baixo, entre módulos, indica um sistema bem particionado e pode ser obtido de três maneiras: • eliminando relações desnecessárias; • reduzindo o número de relações necessárias; • enfraquencendo a dependências das relações necessárias. Um dos pontos cruciais da ligação entre módulos é que nenhum módulo tem que preocupar com detalhes da construção particular interna de qualquer outro. Os módulos são vistos pela sua função e aparência externa, isto é, caixas pretas. Para resumir, queremos um acoplamento fraco porque: • quanto menos conexões existirem entre módlulos, menor a chance do efeito em cadeia (um erro em um módulo aparece como sintoma num outro). • Queremos ser capazes de trocar um módulo com um mínimo de risco de ter de trocar outro módulo e queremos que cada mudança do usuário afecte o mínimo de módulos possível. Lista de Estudantes Nº + nome do Estudante Pedido de Reingresso Não Aceite Aceite 7 Existem cinco tipos diferentes de acoplamento que podem ocorrer entre dois módulos. Em ordem crescente de acoplamento eles são: 1. Acoplamento de dados boa ou solta 2. Acoplamento de imagens 3. Acoplamento de controle 4. Acoplamento comum 5. Acoplamento de conteúdo ruím ou rígida Nota: Dois módulos podem estrar ligados por mais de um tipo de acoplamento, ou pelo mesmo tipo em maior intensidade. 6.1 - ACOPLAMENTO DE DADOS Dois módulos são acoplados por dados se eles se comunicam por parâmetros de campos simples. É o melhor tipo de acoplamento, já que o módulo recebe apenas os dados que necessita para a sua actividade. Acoplamento de dados é a comunicação de dados necessária entre módulos. Uma vez que módulos têm de se comunicar, a ligação de dados é inevitável e é inofensiva desde que mantida à taxas mínimas. 6.2 - ACOPLAMENTO DE IMAGEM Dois módulos estão ligados por imagem se eles se referem à mesma estrutura de dados. Por estrurura de dados, deve-se entender um grupo composto de dados, tal como um registo constituído por vários campos. A figura seguinte mostra 3 módulos ligados por imagem. QUANT EMPRESTADA TAXA DE JUROS PRAZO TAXA DE REEMBOLSO CALCULAR A CONTA TOTAL DO CLIENTE CALCULAR REEMBOLSO DA HIPOTECA 8 6.3 - ACOPLAMENTO DE CONTROLE Dois módulos são acoplados por controle se um passa para o outro um grupo de dados destinados a controlar a lógica interna do outro. A figura abaixo mostra dois módulos ligados por controle. PRODUZIR RELATORIO DO CLIENTE ENCONTRAR O NOME DO CLIENTE Num. conta do cliente Nome do cliente Não existe este cliente Gravar registo de erro Num. de conta é inválido DADOS, FLAGS DESCRITIVOS E FLAGS DE CONTROLE Tipo de informação Representado por Tipo de nome Exemplo Preço dos ovos Dados Substantivo Idade do estudante Ovo está podre Flag descritivo Adjectivo BI é alfanumérico Ler próximo registo Flag de controle verbo Rejeitar este cliente 6.4 - ACOPLAMENTO COMUM Dois módulos possuem acoplamento comum, se eles se referem à mesma área de dados. 9 O acoplamento comum não é aconselhável por várias razões. Primeiro, um erro (ou má programação) em qualquer módulo que use uma área global pode aparecer em qualquer outro módulo que use aquela área. Segundo, módulos que referenciam dados globais geralmente o fazem através de nomes explícitos. Terceiro, áreas globais ou comuns podem algumas vezes sofrer abusos drásticos, como por exemplo, quando módulos diferentes usam a mesma área para armazenar diferentes grupos de informações. Quarto, programas com muitos dados globais são extremamente difíceis de entendê-los pelos técnicos encarregues da manutenção, porque é difícil de se saber quais dados são usados por um certo módulo. Quinto, é difícil descobrir que dados devem ser mudados se um módulo tem de ser alterado, também é difícil descobrir quais módulos devem ser alterados se um dado é modificado. 6.5 - ACOPLAMENTO DE CONTEÚDO Dois módulos apresentam acoplamento de conteúdo (ou patológico) se um faz referência ao interior do outro: por exemplo, se um módulo desvia a sequência de instruções para dentro de um outro ou se um módulo altera um comando do outro. Tal acoplamento torna o conceito de módulos-caixa preta sem sentido. ENCONTRAR NOME DO MATERIAL REMOVER STOCK TABELA DE MATERIAIS FLAG DE ERRO 3 NOME DO MATERIAL NAO EXISTE TAL Nº DE MATERIAL Nº DE UNIDADES ANTERIOR NOVO Nº DE UNIDADES STOCK INSUFICIENTE Nº DO MATERIAL NOME DO MATERIAL Nº DO MATERIAL Nº DE UNIDADES A SEREM REMOVIDAS 10 7 - DETERMINAÇÃO DO TIPO DE ACOPLAMENTO Já se sabe que dois módulos podem estar acoplados de mais de uma maneira. Neste caso, o acoplamento entre eles é definido pelo pior tipo que apresentam. Nível Coesão Acopla- mento Clareza Impleme- ntação Utilização em outros programas Modificabili- Dade Compreensi- bilidade Funcional Sequencial Comunicacional Procedural Temporal Lógica Coincidental Bom Bom Médio Variável Fraca Má Má Boa Boa Boa Média Média Má Fraca Boa Média Fraca Fraca Má Má Má Boa Boa Média Variável Média Fraca Fraca Boa Boa Média Variável Média Fraca Má 8 - COESÃO Coesão – representa o grau de relacionamento das actividades de um módulo (ou uma medida de força do relacionamento funcional dos elementos dentro de um módulo. Um elemento significa uma instrução, um grupo de instruções, uma definiçãode dados, ou uma chamada para outro módulo). Coesão é, portanto, a segunda maneira de avaliar se a segmentação de um sistema em módulos foi boa. Na verdade, ter certeza de que todos os módulos têm boa coesão é a melhor forma de minimizar o acoplamento entre os módulos. Isto também assegura que as funções do sistema reflectem as funções do problema original. 8.1 - ESCALA DE COESÃO BOA – ALTA COESÃO Funcional caixa preta Sequencial caixa quase Comunicacional preta Procedural caixa Temporal cinzenta Lógica caixa branca Coincidental ou transparente MÁ – BAIXA COESÃO 8.2 - COESÃO FUNCIONAL 11 Um módulo com coesão funcional contém elementos que contribuem para a execução de uma e apenas uma tarefa relacionada ao problema. Exemplos de módulos funcionalmente coesos são: Calcular o total Formatar a factura Imprimir a factura Note que cada um destes módulos tem um propósito forte e único. 8.3 - COESÃO SEQUENCIAL Um módulo sequencialmente coeso é aquele cujos elementos são envolvidos em actividades tais que os dados de saída de uma actividade servem como dados de entrada para a próxima. 8.4 - COESÃO COMUNICACIONAL Um módulo com coesão comunicacional é aquele cujos elementos contribuem para actividades diferentes, mas que usem a mesma entrada ou a mesma saída, sendo que sua ordem de execução é irrelevante. 8.5 - COESÃO PROCEDURAL Um módulo de coesão procedural é aquele cujos elementos estão envolvidas em actividades diferentes e possivelmente não relacionadas, nas quais o controlo flui de uma actividade para a outra. (como se deve lembrar, num módulo com coesão sequencial não é o controlo, mas os dados que fluem de uma actividade para a próxima). As actividades estão relacionadas apenas pela ordem de execução. OBTER TRANSACCAO VALIDA Transacção Transacção válida LER TRANSACCAO VALIDAR TRANSACCAO EDITAR A TRANSACCAO Coesão Sequencial Coesão Funcional 12 8.6 - COESÃO TEMPORAL Um módulo com coesão temporal é aquele cujos elementos estão envolvidos em actividades que estão relacionadas no tempo e não têm qualquer outra relação (não têm dados em comum e a ordem não é importante). 8.7 - COESÃO LÓGICA Um módulo logicamente coeso é aquele cujos elementos contribuem para actividades da mesma categoria geral, onde as actividades a serem executadas são seleccionadas fora do módulo. 8.9 - COESÃO COINCIDENTAL Um módulo coincidentemente coeso é aquele cujos elementos contribuem para actividades sem relação significativa entre si. Um módulo coincidentemente coeso é similar a um logicamente coeso: suas actividades não estão relaciondas por fluxos de dados ou fluxos de controle. No entanto, as actividades num módulo logicamente coeso são pelo menos da mesma categoria; num módulo coincidentemente coeso, nem isto é verdade. 8.10 - UMA ÁRVORE DE DECISÃO PARA COESÃO DE MÓDULOS O módulo pode ser considerado como executando uma função relacionada ao problemas? O que relaciona as actividades do módulo? DADOS FLUXO DE CONTROLE A sequencia é importante? A sequencia é importante? NENHUM DELES As actividades estão na mesma categoria geral? 1. Funcional 2. Sequencial 3. Comunicacional 4. Procedural 5. Temporal 6. Lógica 7. Coincidental S N S N S N S N 13 Nota: Para encontrar o nível de coesão, se todas as actividades de um módulo estão relacionadas em mais de um nível de coesão, é só assumir que o módulo tem a força do nível mais forte de coesão. 9 - FACTORIZAÇÃO Consiste na partição de um módulo em dois ou mais módulos do nível mais baixo. Há várias razões que levam à necessidade de factorização, a salientar: 1. redução do tamanho ou da complexidade do módulo; 2. tornar o módulo mais compreensível e permitir modificações e implementação fácies; 3. evitar a existência de uma mesma função em mais de um módulo; 4. permitir que os módulos tenham utilização generalizada (reusabilidade de módulos). Notas: Factoriza-se até que o módulo tenha coesão funcional. 30 linhas para descrever um módulo é aceitável. Quando se tem um módulo que exerce funções com muito poucas linhas usa-se o símbolo ▲ para mostrar que suas linhas de codificação podem ser integradas no módulo superior. Sistemas fisicamente dirigidos à entrada- o módulo superior (presidente) lida directamente com os módulos de leitura e edição de dados. Sistemas fisicamente dirigidos à saída- o módulo superior lida com dados de saída como seja a formatação física dos relatórios, ficheiros, ... O desejável é ter-se sistemas balançados onde o módulo presidente lida com módulos lógicos e não físicos. Fan out- número de módulos imediatamente subordinados. Fan in- número de módulos imediatamente superiores. 9.1 - TIPOS DE MÓDULOS A B C D Aferente Eferente Transformador Coordenador A B X X 14 9.2 - REPORTAGEM DE ERROS Forma de reportagem de erros- aconsedlha-se a definir módulo responsável pela reportagem de erros. Isto permite a uniformização das mensagens de reportagem de erros, para o mesmo erro, independentemente do local do programa onde ocorre. 9.3 - PROBLEMAS QUE PODEM SER ENFRENTADOS NA FASE DE DESENHO DO SISTEMA 1. Lidar com número elevado de alternativas. A solução é o uso de critérios de decisão e de qualidade: economia, manutenção, robustez, integridade, segurança, software, hardware. 2. Gestão das opiniões do pessoal envolvido no processo de desenvolvimento.
Compartilhar