Buscar

tema_8_diagramadeestrtutura

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.

Continue navegando