Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 LINGUAGEM E TÉCNICA DE PROGRAMAÇÃO I Profa. Gisele Busichia Baioco gisele@ft.unicamp.br Modularização de Programas Conceitos Fundamentais 1 Introdução No final da década de 60, um conjunto de problemas no desenvolvimento de programas levou a chamada “crise do software”. Os custos com as atividades de programação mostravam a cada ano uma clara tendência a se elevarem muito em relação aos custos dos equipamentos. Essa tendência era devida, em grande parte, ao rápido avanço tecnológico na fabricação dos equipamentos de computação, em contrapartida com a lenta evolução das técnicas aplicadas ao desenvolvimento de programas. A ausência de uma metodologia para a construção de programas conduz a um software geralmente com erros e com alto custo de desenvolvimento que, conseqüentemente, exige um custo elevado para sua correção e manutenção futuras. A programação estruturada é hoje o resultado de um uma série de estudos e propostas de disciplinas e metodologias para o desenvolvimento de programas. Conceitos associados como técnicas de refinamentos sucessivos e modularização de programas integram o ferramental para a elaboração de programas visando, principalmente, os aspectos de confiabilidade, legibilidade, manutenibilidade e flexibilidade. 2 Decomposição de Problemas Computacionais A decomposição de um problema é fator determinante para a redução da complexidade. Nesse caso, complexidade é sinônimo de variedade, ou seja, a quantidade de situações diferentes que um problema pode apresentar. Assim, quando um problema é decomposto em subproblemas, divide-se a complexidade e, por conseqüência, simplifica-se a resolução. Outra vantagem da decomposição é permitir focalizar a atenção em um problema pequeno de cada vez, o que no final produzirá uma melhor compreensão do todo. É conveniente que se adote critérios para orientar o processo de decomposição de um problema: • Dividir o problema em suas partes principais; • Analisar a divisão obtida para garantir coerência; • Se alguma parte ainda permanecer complexa, decompô-la também; • Analisar o resultado final para garantir entendimento e coerência. Após a decomposição de um problema complexo em subproblemas, pode-se construir um subalgoritmo ou módulo para cada subproblema. 3 Modularização – Módulos de Programas A modularização de programas consiste em decompor um programa em módulos correspondentes aos subproblemas determinados pela decomposição de problemas. 2 Um módulo é um grupo de comandos, constituindo um trecho de algoritmo, com uma função bem definida e o mais independente possível em relação ao restante do algoritmo. Uma descrição estrutural de modularização de programas pode ser feita por meio do diagrama hierárquico seguinte: Módulo Principal Submódulo 1 . . . Submódulo N A maneira mais intuitiva de proceder a modularização de programas é definindo-se um módulo principal de controle e módulos específicos para as funções do algoritmo. No diagrama anterior, o módulo principal tem a função de receber os dados, escrever os resultados e exercer o controle da execução das funcionalidades do algoritmo. A implementação das funcionalidades propriamente ditas é delegada aos módulos específicos. As linguagens de programação atuais dispõem de recursos que facilitam a construção e manipulação de módulos. Estes recursos permitem não só a modularização dos comandos dos programas, como também a modularização dos dados utilizados. Assim, surgem os conceitos de objetos globais e locais a um módulo, os quais podem ser variáveis, arquivos, outros módulos, etc: • Objetos globais são entidades que podem ser usadas em módulos internos a outro módulo do algoritmo onde foram declaradas; • Objetos locais são entidades que só podem ser usadas no módulo do algoritmo onde foram declaradas. Esses objetos não possuem qualquer significado fora deste módulo. Um módulo pode usar objetos globais em relação a ele. Porém, não pode usar objetos declarados em módulos que não o abrangem. A comunicação entre módulos deve ser feita utilizando-se objetos globais ou transferência de parâmetros. A utilização de modularização traz benefícios como: • A independência do módulo permite uma manutenção mais simples e evita efeitos colaterais em outros pontos do algoritmo; • A elaboração do módulo pode ser feita independentemente e em época diferente do restante do algoritmo; • Testes e correções dos módulos podem ser feitos em separado; • Um módulo independente pode ser utilizado em outros algoritmos que requeiram o mesmo processamento. 4 Subprogramas (ou Subrotinas) Um recurso muito utilizado para se implementar a modularização de programas é o uso de subprogramas (ou subrotinas). Basicamente, os subprogramas têm três objetivos: • evitar que uma certa seqüência de comandos necessária em vários locais de um algoritmo tenha que ser escrita repetidamente nestes locais; • dividir e estruturar um algoritmo em partes fechadas e logicamente coerentes – modularização de programas; • aumentar a legibilidade de um algoritmo. 3 Subprogramas são módulos hierarquicamente subordinados a um algoritmo, comumente chamado de módulo principal. Da mesma maneira, um subprograma pode conter outros subprogramas aninhados, como esquematizado no diagrama a seguir: MP S4 S3 S2 S1 S1.1 3 S1.2 S4.1 S4.2 Tendo em vista os conceitos de objeto local e global, o subprograma S1.2 declarado dentro do subprograma1, é conhecido apenas em S1. Entretanto, o subprograma S2, declarado no módulo principal, é conhecido em todo o algoritmo e pode ser ativado dentro de S1. Os subprogramas são criados por declarações em um algoritmo. Para serem executados, necessitam de ativação provocada por um comando de chamada. Essas declarações são constituídas por um cabeçalho e por um corpo. O corpo contém declarações locais e os comandos do subprograma. A ativação de um subprograma é feita por meio das informações que fazem parte do cabeçalho, ou seja, o seu nome e a indicação dos parâmetros formais. Quando ativado, um subprograma pode ou não retornar um valor. Quando existe o retorno de valor, o subprograma é classificado como função; quando não retorna valor, o subprograma é classificado como procedimento.
Compartilhar