image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image

JN

Jefferson Napomuceno30/09/2023 13:53
Compartilhe

Artigo de Revisão - CARACTERÍSTICAS DA PROGRAMAÇÃO ESTRUTURADA E DESENVOLVIMENTO DE ALGORITMOS ATRAVÉS DE DIVISÃO MODULAR E REFINAMENTOS SUCESSIVOS.

    Resumo: A programação estruturada é uma abordagem que busca melhorar a qualidade e a eficiência no desenvolvimento de softwares. Ela utiliza sequência, seleção e iteração como blocos fundamentais de código para criar algoritmos independentes da área de aplicação e da linguagem de programação utilizada. A decomposição gradativa dos problemas em subproblemas menores e o uso de subprogramas, como procedimentos e funções, contribuem para a organização e clareza do código, tornando-o mais fácil de manter e reutilizar. A programação estruturada tem sido uma maneira eficaz de enfrentar a crise do software e desenvolver programas sólidos e confiáveis.

    Abstract: Structured programming is an approach that seeks to improve the quality and efficiency of software development. It uses sequence, selection and iteration as fundamental blocks of code to create algorithms independent of the application area and programming language used. The gradual decomposition of problems into smaller subproblems and the use of subprograms, such as procedures and functions, contribute to the organization and clarity of the code, making it easier to maintain and reuse. Structured programming has been an effective way to face the software crisis and develop solid and reliable programs.

    Palavras Chaves: hardware, software, programação estruturada, modular, refinamentos sucessivos, Características Básicas, subprogramas, subalgoritmo, Modularização, Abstratos.

    Introdução

    Desde os primórdios da computação, o alto custo do equipamento eletrônico (hardware) era o principal desafio enfrentado pelos pioneiros da área. No entanto, com o passar dos anos, observamos uma mudança drástica nesse cenário. Os computadores modernos estão cada vez mais rápidos e acessíveis, tornando a tecnologia de hardware mais amigável e eficiente. No entanto, em contrapartida, a

    tecnologia de software não seguiu o mesmo ritmo de desenvolvimento. A "crise do software" emergiu como um conceito preocupante no final dos anos 60 e foi introduzida por Edsger W. Dijkstra, uma figura notável na área da computação, em 1972, durante o Prêmio Turing da Association for Computing Machinery. Nesse contexto, os problemas encontrados no processo de desenvolvimento de software começaram a ser percebidos e continuam a assombrar os projetistas até os dias de hoje. Entre esses desafios, podemos citar a baixa produtividade dos programadores, a falta de uma "metodologia formal" para o desenvolvimento de software e a baixa qualidade dos códigos, tornando programas quase impossíveis de serem mantidos. As soluções para a crise de software têm se concentrado em aprimorar as técnicas, métodos e ferramentas utilizadas no desenvolvimento. Nesse sentido, a programação estruturada desempenhou um papel fundamental na busca por soluções eficazes. A história das linguagens de programação está intrinsecamente ligada à evolução das tecnologias de hardware e software. A medida que a capacidade dos computadores aumentava, foi possível lidar com problemas mais complexos de forma eficiente. Nesse texto abordamos sobre os principais conceitos da programação estruturada, uma abordagem que busca tornar mais fácil a compreensão e o desenvolvimento de algoritmos por meio de mecanismos de controle da execução de programas. Esses mecanismos são a sequência, seleção e iteração, que constituem blocos fundamentais de código, permitindo descrever algoritmos de forma independente da área de aplicação, sua complexidade e a linguagem de programação utilizada. A programação estruturada se destaca pela sua capacidade de modular a resolução de problemas, dividindo-os em subproblemas menores e mais simples. Cada subproblema pode ser analisado de forma individual e independente, o que facilita o trabalho com problemas complexos e possibilita a reutilização de módulos. Essa abordagem também favorece o desenvolvimento colaborativo, permitindo que diferentes equipes trabalhem em partes específicas de um programa. Portanto, este artigo de revisão explorará as características da programação estruturada e desenvolvimento de algoritmos através de divisão modular e refinamentos sucessivos da programação estruturada e como essa abordagem tem contribuído para superar os desafios enfrentados no desenvolvimento de software, abrindo caminho para soluções mais eficientes e de maior qualidade. Ao entender o potencial da programação estruturada, podemos avançar em direção a um cenário de software mais sólido e confiável, alinhado com os avanços tecnológicos que estão transformando o mundo da computação.

    O que é programação?

    A programação é o processo de criar, codificar, depurar e manter programas de computador através da escrita de código em uma linguagem de programação. Essas instruções são interpretadas e executadas pelo computador para realizar tarefas específicas. Antes, os computadores entendiam apenas a linguagem de máquina, que consistia em sequências complexas de uns e zeros. Para facilitar a programação, surgiu a linguagem Assembly, que utilizava palavras em inglês para representar as instruções.

    O que é programação estruturada?

    A programação estruturada é um paradigma de programação que visa melhorar a qualidade, clareza e eficiência no desenvolvimento de programas de computador. Ela utiliza sub-rotinas e três estruturas básicas: sequência, seleção (if e switch) e iteração (laços for e while).Uma característica importante da programação estruturada é evitar o uso do comando "goto", que permite saltos incondicionais no código, pois isso pode levar a um código confuso e difícil de manter.

    Vantagens da programação estruturada.

    A programação estruturada oferece diversas vantagens em relação a modelos anteriores: Facilita a compreensão do código, pois os programas podem ser lidos sequencialmente, sem a necessidade de acompanhar saltos incondicionais. Torna a estrutura do programa mais clara, com instruções mais relacionadas entre si. Reduz o esforço necessário nas fases de testes e depuração, facilitando a detecção e correção de erros. Minimiza os custos de manutenção, tornando mais fácil modificar e estender os programas posteriormente. Permite a criação mais rápida e simples de programas, otimizando o rendimento dos programadores. 

    Linguagens de programação estruturada.

    As linguagens de programação estruturada mais comuns são C e Cobol. Algumas outras linguagens também utilizam elementos da programação estruturada, mas podem combinar com outros paradigmas, como PHP e Go.

    Diferença entre programação estruturada e orientada a objetos.

    A principal diferença entre a programação estruturada e orientada a objetos está na forma como os programas são organizados. Enquanto a programação estruturada se concentra em procedimentos e funções definidas pelo usuário, a programação orientada a objetos se baseia em conceitos como classes e herança, permitindo uma abordagem mais modular e reutilizável. A Programação Estruturada é uma abordagem fundamental na criação de algoritmos para computadores, oferecendo uma disciplina de desenvolvimento que favorece a compreensão da solução através de mecanismos de codificação bem definidos. 

    image

    Fonte da tabela: Tabela 1. Comparativo entre programação orientada a objetos e programação estruturada.<Programação Orientada a Objetos e Programação Estruturada (devmedia.com.br)>

    Características Básicas: Sequência, Condição e Repetição.

    A programação estruturada adota uma abordagem que privilegia o uso de estruturas de controle bem definidas. Estas estruturas incluem sequência, que permite executar uma série de tarefas em ordem; condição, que possibilita escolher um caminho de execução baseado em condições lógicas; e repetição, que permite executar um conjunto de tarefas repetidamente até que uma condição seja satisfeita. O uso consciente dessas estruturas aumenta significativamente a legibilidade e compreensão dos blocos de código, tornando-os mais fáceis de serem mantidos e evitando o uso desnecessário de desvios incondicionais ("GOTO").

    Refinamentos Sucessivos.

    A medida que nos deparamos com problemas cada vez mais complexos, a sua resolução pode se tornar um desafio. Para enfrentar essa complexidade, utilizamos uma técnica conhecida como "dividir-para-conquistar". Essa abordagem consiste em quebrar o problema em subproblemas menores e mais fáceis de gerenciar. A partir das soluções encontradas para esses subproblemas, construímos a solução geral para o problema original. Se algum subproblema ainda for muito complexo, podemos dividi-lo em subproblemas ainda menores, seguindo essa estratégia de forma sucessiva. A maioria das linguagens de programação oferece suporte para essa técnica, permitindo a criação de "subprogramas". Um subprograma não pode ser executado diretamente como um programa independente; ele precisa ser invocado ou chamado de algum ponto específico do código do programa principal. Quando isso acontece, o controle da execução é transferido para o subprograma. Após a conclusão da execução do subprograma, o controle volta ao ponto de invocação no programa principal. Os subprogramas podem chamar outros subprogramas, criando uma hierarquia de chamadas. Além disso, um subprograma pode chamar a si mesmo, resultando em uma chamada recursiva. Essa abordagem concentra-se principalmente no fluxo de controle do programa. Para tornar o uso de subprogramas mais flexível, eles podem ser parametrizados, o que significa que seu funcionamento pode ser definido em termos de parâmetros cujos valores são especificados quando o subprograma é invocado. Isso permite que o mesmo subprograma seja reutilizado em diferentes situações, manipulando conjuntos de dados variados, mas com o mesmo processo de processamento. Os parâmetros definidos no subprograma são chamados de parâmetros formais, enquanto os valores fornecidos durante a invocação são chamados de parâmetros reais. Durante a invocação, os valores dos parâmetros reais são vinculados aos parâmetros formais, redirecionando o fluxo de execução para o subprograma, onde ele é executado com os valores fornecidos .Alguns subprogramas, ao finalizar a execução, redirecionam simplesmente o controle de volta ao ponto de invocação, possivelmente causando apenas efeitos secundários, como alterações na interface do usuário ou gravação de dados em um arquivo. Esses subprogramas são conhecidos como "procedimentos". Outros subprogramas, além de redirecionar o controle, podem retornar um valor específico. Esses subprogramas são chamados de "funções". As funções são frequentemente usadas como parte de uma expressão, pois seu retorno é usado para computar um resultado. Um programa que utiliza subprogramas é referido como um "programa estruturado". Ao dividir o programa em subprogramas, é importante considerar o escopo das variáveis e constantes, ou seja, em que partes do código elas podem ser acessadas e modificadas. O controle de visibilidade dessas variáveis e constantes varia entre as diferentes linguagens de programação. 

    Subprogramação (ou Modularização).

    A medida que os programas se tornam maiores e mais complexos, a subprogramação surge como uma solução para simplificar e melhorar a clareza do código. Subprogramas, como procedimentos, funções, módulos ou métodos, são utilizados para encapsular partes do programa e resolver subproblemas específicos. Isso permite que o programa principal seja composto por chamadas aos subprogramas, facilitando a análise e manutenção do código. A modularização também promove a reutilização de trechos de código, reduzindo a quantidade de trabalho necessário para desenvolver novos sistemas. Texto aborda a técnica de Refinamentos Sucessivos na programação, também conhecida como abordagem top-down. Essa abordagem envolve a divisão do problema inicial em subproblemas menores e sucessivamente em partes ainda mais simples, até que cada parte possa ser resolvida por meio de algoritmos claros e bem-definidos. Cada algoritmo que resolve um subproblema é chamado de subalgoritmo. A subprogramação é uma ferramenta essencial nessa abordagem, que contribui de diversas formas com o desenvolvimento de programas:

    Estruturação do Programa:

    Através da divisão do problema em partes menores (modularização), tornando o código mais organizado e facilitando a compreensão.

    Facilitação da Correção: Ao isolar as partes do programa em subalgoritmos, torna-se mais fácil identificar e corrigir erros em trechos específicos do código.

    Facilitação da Modificação: Com o código dividido em módulos, alterações em um subalgoritmo não afetam o funcionamento de outros, tornando a manutenção do software mais eficiente. 

    Melhoria na Legibilidade: O código fica mais legível e claro, uma vez que cada subalgoritmo tem um objetivo específico, permitindo que cada parte seja analisada independentemente. A subprogramação é amplamente suportada pelas linguagens de programação, que oferecem mecanismos para criar e utilizar subalgoritmos. Alguns exemplos desses mecanismos incluem procedimentos e funções em linguagens como C, Pascal, Visualg, entre outras. Os subalgoritmos podem receber dados de entrada, produzir dados de saída e conter qualquer tipo de comando aceito em um algoritmo comum. A comunicação entre o programa principal e os subalgoritmos é feita por meio de parâmetros, que podem ser passados por valor (criando uma cópia dos dados) ou por referência (utilizando o mesmo espaço de memória). A criação de procedimentos e funções permite uma abordagem modular e reutilizável na resolução de problemas complexos. Através da subprogramação, é possível criar algoritmos genéricos para tarefas repetitivas, evitando repetição de código e simplificando o desenvolvimento. Por fim, o texto destaca que o uso consciente da subprogramação é fundamental para um código bem estruturado e de fácil manutenção. A abordagem top-down, aliada à subprogramação, torna o processo de desenvolvimento mais organizado e eficiente, possibilitando a resolução de problemas de forma mais elegante e estruturada. 

    Tipos Abstratos de Dados

    Os Tipos Abstratos de Dados (TAD) são modelos matemáticos acompanhados de operações definidas sobre o modelo. Podem ser considerados generalizações de tipos primitivos de dados e são usados para encapsular tipos de dados, de forma semelhante ao que os procedimentos fazem com operações primitivas como adição e subtração. A Programação Estruturada utiliza TAD para facilitar a organização e localização da definição do tipo de dados e suas operações em uma única seção do programa. Dessa forma, o código é mais organizado e fácil de manter, tornando o desenvolvimento mais eficiente. Em resumo, a Programação Estruturada é caracterizada pela decomposição gradativa dos programas, pela programação orientada a procedimentos e pelo uso de tipos abstratos de dados, proporcionando uma abordagem eficaz para o desenvolvimento de algoritmos e soluções em linguagens de programação diversas. Na prática, esses elementos chaves tornam a programação estruturada uma abordagem sólida e eficiente para enfrentar os desafios da criação de softwares complexos e de alta qualidade.

    Aplicando o Conceito

    Com base no que abordamos no artigo revisado, segue o exemplo do conceito sendo aplicado, no algoritmo abaixo do cálculo da equação de segunda grau na linguagem em C#, usando quatro subprogramas. Caso no futuro tenha necessidade de fazer manutenção fazer fica mais fácil de refinar o código, pois esta bem estruturado.

    image

    Figura 1.Exmplo de Codigo C#, equação de segundo grau.

    Conclusão

    Concluindo, podemos observar que ao longo da história da computação, os desafios enfrentados pelos pioneiros foram transformados com a evolução das tecnologias de hardware e software. Enquanto o hardware se tornou cada vez mais rápido e acessível, a crise do software emergiu como um conceito preocupante, revelando problemas como a baixa produtividade dos programadores, a falta de metodologias formais e a baixa qualidade do código. Nesse cenário, a programação estruturada desempenhou um papel fundamental na busca por soluções mais eficazes. Através da decomposição dos problemas em subproblemas menores e mais simples, a abordagem de refinamentos sucessivos, ou dividir-para-conquistar, tornou possível lidar com problemas complexos de maneira eficiente. A modularidade proporcionada pela programação estruturada permitiu reutilizar módulos de código, facilitando o trabalho com problemas cada vez mais desafiadores. Além disso, a utilização de subprogramas, como procedimentos e funções, contribuiu para a clareza e organização do código, possibilitando o desenvolvimento colaborativo e a manutenção mais eficiente dos programas. O uso de tipos abstratos de dados também trouxe uma abstração mais sofisticada para a programação estruturada, permitindo encapsular operações e dados em estruturas bem definidas. Compreender e aplicar os conceitos da programação estruturada tem sido uma maneira eficaz de enfrentar a crise do software, permitindo o desenvolvimento de programas sólidos, confiáveis e de alta qualidade. Ao integrar técnicas como a decomposição de problemas, a modularização e a utilização de tipos abstratos de dados, a programação estruturada nos guia em direção a um cenário de software mais avançado e alinhado com os avanços tecnológicos que moldam o mundo da computação. Ao nos apropriarmos desses conceitos, estamos capacitados a criar soluções mais eficientes e robustas, abrindo caminho para um futuro promissor na área da programação. 

    Referências

    – Artigos on-line

    1.Bertol, Introdução à Programação Estruturada, Devmedia, 2012. Disponível em:.Acesso em:30 julho.2023. 2.RodrigoDavy, O que é programação estruturada? Entenda!, Platzi, 2019. Disponível em:.Acesso em:30 Julho.2023. 3.Ivan L. M. Ricarte, Programação estruturada, Unicamp, 2003. Disponível em:.Aces so em:30 julho.2023. 4.Carolina Miguel, Programação Estruturada(Modularização/SubProgramação), SlidePlayer, 2014. Disponível em:.Acesso em:30 julho.2023. 5.Igor, Programação Orientada a Objetos e Programação Estruturada, DevMedia, 2015. Disponível em:< https://www.devmedia.com.br/programacao-orientada-aobjetos-e-programacao-estruturada/32813>.Acesso em:30 julho.2023. – Autoria desconhecida 6.Refinamento sucessivo de programas e passagem de parâmetros, liesenberg.biz. Disponível em:.Acesso em:30 julho.2023

    Compartilhe
    Comentários (0)