TRABAJO FINAL-Programacion Estructurada.

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 19

UNIVERSIDAD DEL CАRIBE.

Аsignаturа
Programación Estructurada.
Tema:
Optimización y Eficiencia en Programación Estructurada: Principios,
Métodos y Herramientas.

Sustentаntes:
Einstel Luis Mendieta Diclo ID: A00149834.
Melvin Ramírez Mateo ID: A00135112.
Fabiana Sánchez Moreta ID: A

Fаcilitаdоr:

Marcos Esmiz Pimentel Carrión.

SАNTО DОMINGО, D.N. REPÚBLICА DОMINICАNА


2024.
INDICE.

Presentacion………………………………………………………………………

Introducción……………………………………………………………………….

Fundamentos de Programación Estructurada……………………………...

Optimización de Código………………………………………………………..

Técnicas de Optimización en Programación


Estructurada……………………………………………………………………..

Herramientas para la Optimización…………………………………………...

Estudio de Casos………………………………………………………………..

Conclusión………………………………………………………………………..

Referencias………………………………………………………………………..

Bibliografías……………………………………………………………………..

Anexos……………………………………………………………………………..
Introducción.

La optimización del código y la mejora de la eficiencia son pilares fundamentales en el


desarrollo de software moderno. En este sentido, la programación estructurada emerge
como un enfoque sólido y efectivo para abordar estos desafíos de manera sistemática y
eficiente.

La programación estructurada se basa en el principio de dividir un programa en partes


más pequeñas y manejables, conocidas como módulos o funciones, que realizan
tareas específicas. Esta división facilita la comprensión del código, ya que cada módulo
se centra en una tarea concreta, lo que promueve la claridad y la legibilidad del mismo.
Además, esta modularidad facilita la reutilización de código, lo que a su vez contribuye
a la eficiencia del desarrollo.

Otro aspecto crucial de la programación estructurada es su enfoque en el control de


flujo mediante estructuras de control como bucles y condicionales. Estas estructuras
permiten escribir código de manera lógica y ordenada, lo que facilita su mantenimiento
y depuración. Al evitar prácticas como el uso excesivo de instrucciones de salto, la
programación estructurada fomenta la construcción de programas más robustos y
menos propensos a errores.

Además, la programación estructurada fomenta el uso de técnicas de optimización de

código, como la eliminación de redundancias, la simplificación de algoritmos y la


minimización del uso de recursos computacionales. Estas prácticas no solo mejoran la
eficiencia del programa, sino que también contribuyen a su mantenibilidad a largo
plazo.

Este trabajo tiene como objetivo explorar los principios, métodos y herramientas
relacionados con la optimización y eficiencia en el contexto de la programación
estructurada. Se analizarán los fundamentos de la programación estructurada, se
discutirá la importancia de la optimización del código y se presentarán técnicas y
herramientas para mejorar la eficiencia en el desarrollo de software.

Fundamentos de Programación Estructurada:

Principios básicos de la programación estructurada.

La programación estructurada se basa en principios como la secuencialidad, la


selección (mediante estructuras de control condicionales) y la iteración (mediante
estructuras de control repetitivas). Estos principios promueven la claridad y la
organización del código, facilitando su comprensión y mantenimiento.
La programación estructurada es un paradigma de programación que se basa en la
idea de construir programas utilizando estructuras de control y datos bien definidas.
Aquí tienes los fundamentos clave de la programación estructurada:
1. Estructuras de Control:
Secuenciales: Las instrucciones se ejecutan en secuencia, una tras otra, de arriba
hacia abajo.
Selectivas (Condiciones): Se utilizan para tomar decisiones basadas en condiciones
lógicas. Ejemplos de estructuras selectivas incluyen if, if-else, y switch-case.
Iterativas (Bucles): Permiten repetir un bloque de código múltiples veces hasta que se
cumpla una condición. Ejemplos de bucles son for, while y do-while.
2. Modularidad:
Funciones/Procedimientos: La división del código en funciones o procedimientos más
pequeños, cada uno realizando una tarea específica. Esto promueve la reutilización del
código y facilita el mantenimiento.
Encapsulamiento: Ocultar los detalles de implementación de una función o
procedimiento, y solo exponer una interfaz clara para su uso. Esto mejora la legibilidad
y la capacidad de mantenimiento del código.
3. Tipos de Datos:
Tipos de datos simples: Como enteros, flotantes, caracteres, etc., que representan
valores individuales.
Tipos de datos estructurados: Como arreglos, estructuras y registros, que permiten
agrupar datos relacionados.
4. Programación sin Goto:
La programación estructurada evita el uso excesivo de la instrucción goto, que puede
llevar a código difícil de entender y mantener.
5. Top-Down Design (Diseño de Arriba hacia Abajo):
En el diseño de programas estructurados, se comienza con una visión general del
problema y se divide progresivamente en subproblemas más pequeños y manejables.
6. Legibilidad y Mantenibilidad:
Los programas estructurados tienden a ser más fáciles de entender y mantener debido
a su organización lógica y modularidad.
7. Eficiencia:
La programación estructurada promueve el uso eficiente de los recursos del sistema y
la optimización del código mediante la aplicación de algoritmos y estructuras de datos
adecuados.
8. Herramientas y Lenguajes:
Muchos lenguajes de programación modernos, como C, Python y Java, están
diseñados con los principios de la programación estructurada en mente y proporcionan
herramientas y construcciones específicas para su implementación.
9. Pruebas y Depuración:
Al dividir el código en módulos más pequeños y funciones claras, se facilita la prueba y
depuración del software, lo que ayuda a identificar y corregir errores de manera más
eficiente.

Ventajas y desventajas de la programación estructurada.

La programación estructurada ofrece una serie de ventajas y desventajas que afectan


tanto al proceso de desarrollo de software como a la calidad del código resultante. Aquí
hay algunas de ellas:

Ventajas:
Claridad y legibilidad del código: La programación estructurada utiliza estructuras de
control bien definidas y funciones modularizadas, lo que hace que el código sea más
fácil de entender y mantener.
Facilita la depuración y el mantenimiento: La división del código en módulos más
pequeños y la reducción del uso de estructuras complejas como goto simplifican la
tarea de depurar y mantener el software.
Reutilización de código: La modularidad promovida por la programación estructurada
facilita la reutilización de funciones y procedimientos en diferentes partes del programa
o en proyectos futuros.
Mayor eficiencia: Al seguir estructuras de control bien definidas y evitar la
redundancia, la programación estructurada tiende a producir código más eficiente en
términos de uso de recursos del sistema.
Mejora la colaboración: El código estructurado es más fácil de comprender para otros
desarrolladores, lo que facilita la colaboración en proyectos de software.

Desventajas:
Limitaciones en la resolución de problemas complejos: La rigidez de las
estructuras de control y la modularidad pueden dificultar la resolución de problemas
altamente complejos o que requieren soluciones altamente flexibles.
Dificultad para representar relaciones complejas: Algunos problemas pueden ser
más difíciles de modelar con las estructuras de control lineales de la programación
estructurada, lo que puede llevar a soluciones menos elegantes o menos eficientes.
Posible redundancia de código: Aunque la modularidad promueve la reutilización de
código, también puede resultar en la creación de múltiples funciones o procedimientos
similares, lo que puede conducir a la redundancia y al aumento del tamaño del
programa.
No es adecuada para todos los problemas: Algunos problemas pueden beneficiarse
más de enfoques de programación más flexibles, como la programación orientada a
objetos o la programación funcional, en lugar de la programación estructurada.
Mayor complejidad en la gestión de grandes proyectos: A medida que un proyecto
crece en tamaño y complejidad, puede volverse más difícil gestionar todas las
interacciones entre los módulos y las estructuras de control en un enfoque puramente
estructurado.
Desventajas:
Limitaciones en la resolución de problemas complejos: La rigidez de las
estructuras de control y la modularidad pueden dificultar la resolución de problemas
altamente complejos o que requieren soluciones altamente flexibles.
Dificultad para representar relaciones complejas: Algunos problemas pueden ser
más difíciles de modelar con las estructuras de control lineales de la programación
estructurada, lo que puede llevar a soluciones menos elegantes o menos eficientes.
Posible redundancia de código: Aunque la modularidad promueve la reutilización de
código, también puede resultar en la creación de múltiples funciones o procedimientos
similares, lo que puede conducir a la redundancia y al aumento del tamaño del
programa.
No es adecuada para todos los problemas: Algunos problemas pueden beneficiarse
más de enfoques de programación más flexibles, como la programación orientada a
objetos o la programación funcional, en lugar de la programación estructurada.
Mayor complejidad en la gestión de grandes proyectos: A medida que un proyecto
crece en tamaño y complejidad, puede volverse más difícil gestionar todas las
interacciones entre los módulos y las estructuras de control en un enfoque puramente
estructurado

Optimización de Código:

Importancia de la optimización en programación.

La optimización del código es crucial para mejorar el rendimiento, reducir el consumo


de recursos y garantizar una experiencia de usuario óptima. La optimización del código
puede contribuir significativamente a la eficiencia y escalabilidad de una aplicación.
La optimización de código es un proceso mediante el cual se mejora el rendimiento, la
eficiencia y/o la legibilidad del código sin cambiar su funcionalidad. Aquí tienes algunos
enfoques y técnicas comunes para optimizar el código:
1. Perfil de rendimiento:
Identifica las partes del código que consumen más tiempo de ejecución o recursos.
Utiliza herramientas de perfilado para obtener datos precisos sobre el rendimiento del
código.
2. Algoritmos eficientes:
Utiliza algoritmos y estructuras de datos eficientes para resolver el problema.
Considera algoritmos con menor complejidad temporal (O(n)).
3. Evita la redundancia:
Elimina duplicación de código.
Revisa bucles y condicionales para asegurarte de que no estén repitiendo operaciones
innecesarias.
4. Optimización de bucles:
Reduce el número de iteraciones en bucles cuando sea posible.
Evita calcular valores dentro de bucles si se pueden calcular fuera de ellos.
Utiliza bucles paralelos cuando sea posible para aprovechar múltiples núcleos de CPU.
5. Optimización de memoria:
Reduce el uso de memoria asignando solo la cantidad necesaria.
Reutiliza variables y estructuras de datos en lugar de crear nuevas.
Libera la memoria de objetos no utilizados para evitar fugas de memoria.
6. Uso de operaciones de bajo nivel:
En lenguajes de bajo nivel como C o C++, utiliza operaciones de bajo nivel para
optimizar partes críticas del código.
Aprovecha las características específicas del hardware si es necesario para mejorar el
rendimiento.
7. Paralelización:
Divide el trabajo en tareas independientes y ejecútalas en paralelo para aprovechar
múltiples núcleos de CPU o incluso sistemas distribuidos.
8. Uso de librerías optimizadas:
Utiliza bibliotecas optimizadas para operaciones comunes como álgebra lineal,
procesamiento de imágenes o cálculos numéricos.
9. Optimización de entrada/salida (E/S):
Minimiza la cantidad de E/S realizadas.
Utiliza técnicas como la lectura/escritura en bloque y el almacenamiento en búfer para
reducir el tiempo de E/S.
10. Mantenibilidad:
Asegúrate de que el código optimizado siga siendo legible y mantenible.
Documenta cualquier optimización compleja para futuras referencias.

Métodos para mejorar la eficiencia del código en programación estructurada .


Se presentan diversos métodos para mejorar la eficiencia del código en programación
estructurada, como la optimización de algoritmos, la gestión eficiente de la memoria y
la selección adecuada de estructuras de datos.
Técnicas de Optimización en Programación Estructurada.

Uso eficiente de estructuras de datos.

La selección adecuada de estructuras de datos es fundamental para optimizar el


rendimiento del código. Se deben elegir estructuras que se ajusten a los requisitos del
problema y que permitan realizar operaciones de manera eficiente.

Algoritmos optimizados para operaciones comunes.

Se presentan algoritmos eficientes para realizar operaciones comunes, como


búsqueda, ordenación y manipulación de datos. Estos algoritmos están diseñados para
minimizar el tiempo de ejecución y el consumo de recursos.

Reducción de la complejidad temporal y espacial.

Se discuten técnicas para reducir la complejidad temporal y espacial de los algoritmos


y estructuras de datos utilizados en programación estructurada. Estas técnicas incluyen
la optimización de bucles, la eliminación de redundancias y la minimización del uso de
recursos.

Herramientas para la Optimización.

Existen varias herramientas útiles para la optimización de código en el contexto de la


programación estructurada. Estas herramientas pueden ayudarte a identificar áreas de
mejora en tu código y a realizar ajustes para mejorar su rendimiento y eficiencia. Aquí
hay algunas de las herramientas más comunes:
1. Profilers (Perfiladores):
Visual Studio Profiler (Visual Studio): Proporciona análisis detallados del rendimiento
del código, identificando las funciones que consumen más tiempo de CPU o recursos.
gprof (GNU Profiler): Una herramienta de línea de comandos para analizar el
comportamiento del programa, identificando las partes del código que consumen más
tiempo de CPU.
2. Compiladores con optimización:
GCC (GNU Compiler Collection): Un conjunto de compiladores de código abierto que
incluye optimizaciones para mejorar el rendimiento del código.
Clang: Otro compilador de código abierto que proporciona opciones de optimización
para mejorar el rendimiento del código.
3. Herramientas de análisis de código estático:
Linters: Identifican problemas potenciales en el código, como errores de estilo, uso
incorrecto de variables y otras prácticas de codificación que podrían afectar el
rendimiento.
SonarQube: Analiza automáticamente el código en busca de problemas de calidad,
incluida la eficiencia del código.
4. Analizadores de flujo de código:
Valgrind: Herramienta de análisis de memoria que detecta fugas de memoria, errores
de acceso a memoria y otras vulnerabilidades.
Coverity: Herramienta de análisis estático que encuentra defectos de seguridad,
rendimiento y calidad del código.
5. Herramientas de gestión de dependencias:
CMake: Un sistema de construcción de código abierto que simplifica el proceso de
construcción y compilación del código.
Make: Una herramienta estándar de construcción que automatiza el proceso de
compilación de programas.
6. Herramientas de pruebas de rendimiento:
Apache JMeter: Una herramienta de pruebas de carga que evalúa el rendimiento de
aplicaciones web y servicios.
Gatling: Una herramienta de pruebas de carga de código abierto diseñada para
evaluar el rendimiento de aplicaciones web.
7. Profilers específicos del lenguaje:
Algunos lenguajes de programación tienen sus propias herramientas de perfilado
integradas. Por ejemplo, en Python puedes usar cProfile o line_profiler, mientras que
en Java tienes VisualVM y YourKit.
8. Análisis de dependencias y complejidad:
NDepend (para .NET): Herramienta que analiza la arquitectura y la calidad del código
en proyectos .NET, identificando dependencias no deseadas y áreas de complejidad.

Compiladores y optimizadores de código.

Los compiladores y optimizadores de código son herramientas fundamentales en el


proceso de desarrollo de software, ya que ayudan a traducir el código fuente escrito por
los programadores en lenguaje de máquina entendible por la computadora. Además,
los optimizadores de código pueden mejorar el rendimiento y la eficiencia del programa
resultante al aplicar diversas técnicas de optimización durante el proceso de
compilación. Aquí tienes algunos compiladores y optimizadores de código populares:
1. GCC (GNU Compiler Collection):
Lenguajes compatibles: C, C++, Objective-C, Fortran, Ada, entre otros.
Plataformas compatibles: Disponible en varias plataformas, incluyendo Linux, macOS
y Windows.
Características: Es un compilador de código abierto que ofrece varias opciones de
optimización, incluyendo optimizaciones de tamaño y rendimiento, así como opciones
específicas para arquitecturas de procesadores.
2. Clang:
Lenguajes compatibles: C, C++, Objective-C, Objective-C++.
Plataformas compatibles: Amplia compatibilidad con sistemas operativos, incluyendo
Linux, macOS y Windows.
Características: Compilador de código abierto con un enfoque en la velocidad de
compilación y la precisión del diagnóstico. Proporciona varias opciones de optimización
para mejorar el rendimiento del código.
3. Microsoft Visual C++ Compiler:
Lenguajes compatibles: C, C++, C++/CLI.
Plataformas compatibles: Principalmente utilizado en entornos Windows.
Características: Proporciona herramientas de desarrollo integradas en Visual Studio y
ofrece opciones de optimización para mejorar el rendimiento del código, así como
opciones específicas para la plataforma Windows.
4. Intel C++ Compiler (ICC):
Lenguajes compatibles: C, C++.
Plataformas compatibles: Principalmente utilizado en sistemas basados en
procesadores Intel.
Características: Especialmente optimizado para procesadores Intel, proporciona
opciones de optimización avanzadas para mejorar el rendimiento del código en
arquitecturas Intel.
5. LLVM (Low Level Virtual Machine):
Lenguajes compatibles: Variedad de lenguajes a través de su infraestructura,
incluyendo C, C++, Objective-C, Swift, entre otros.
Plataformas compatibles: Amplia compatibilidad con sistemas operativos, incluyendo
Linux, macOS y Windows.
Características: LLVM es un marco modular que incluye el compilador Clang, así
como un conjunto de herramientas para análisis y optimización de código.
6. Oracle Solaris Studio:
Lenguajes compatibles: C, C++, Fortran.
Plataformas compatibles: Principalmente utilizado en sistemas Solaris, pero también
es compatible con Linux.
Características: Proporciona un conjunto de herramientas completo que incluye un
compilador, depurador y analizador de rendimiento, con opciones de optimización para
mejorar el rendimiento del código en sistemas Sun/Oracle SPARC y x86.
7. Optimizadores específicos del lenguaje:
Algunos lenguajes de programación tienen optimizadores específicos integrados en sus
compiladores. Por ejemplo, en el caso de Python, el intérprete CPython utiliza un
optimizador llamado "PEP 510: Specialize functions with guards".

Los compiladores y optimizadores de código pueden ayudar a mejorar el rendimiento


del código al realizar optimizaciones automáticas, como la eliminación de código
muerto, la reordenación de instrucciones y la generación de código optimizado para el
hardware de destino.
Perfiladores de rendimiento.

Los perfiladores de rendimiento son herramientas que permiten identificar cuellos de


botella y áreas de mejora en el código mediante el análisis del tiempo de ejecución y el

uso de recursos durante la ejecución del programa .

Herramientas de análisis estático.

Las herramientas de análisis estático pueden ayudar a identificar posibles problemas


de rendimiento y optimización en el código fuente mediante la detección de patrones de
uso ineficiente de recursos y la identificación de oportunidades de optimización.
Las herramientas de análisis estático son herramientas de software que examinan el
código fuente o el código objeto sin ejecutarlo. Estas herramientas ayudan a identificar
posibles problemas en el código, como errores de sintaxis, malas prácticas de
programación, vulnerabilidades de seguridad y oportunidades de optimización. Aquí
tienes algunas herramientas de análisis estático ampliamente utilizadas:
1. Linters:
ESLint (JavaScript): Herramienta de análisis estático para identificar problemas en el
código JavaScript, como errores de sintaxis, convenciones de codificación no
cumplidas y problemas de seguridad.
Pylint (Python): Un linter para Python que busca errores de programación, problemas
de estilo y otros problemas en el código Python.
RuboCop (Ruby): Un linter para el lenguaje de programación Ruby que ayuda a
mantener un código Ruby consistente y de alta calidad.
2. Analizadores de calidad de código:
SonarQube: Una plataforma de código abierto para la inspección continua de la
calidad del código fuente para detectar errores de programación, vulnerabilidades de
seguridad, duplicación de código y más.
CodeClimate: Ofrece análisis de calidad del código para varios lenguajes, incluidos
JavaScript, Python, Ruby, PHP, Java, y otros.
Coverity: Un análisis estático de código que encuentra defectos de seguridad,
rendimiento y calidad del código en C, C++, C#, Java y otros lenguajes.
3. Herramientas específicas del lenguaje:
Checkstyle (Java): Herramienta de análisis estático para verificar el cumplimiento de
las convenciones de codificación de Java, como el estilo de sangría, el uso de nombres
de variables y la estructura de los comentarios.
StyleCop (C#): Herramienta de análisis estático que verifica si el código C# sigue las
convenciones de codificación definidas en las directrices de estilo.
Flake8 (Python): Una combinación de linters PyFlakes, pycodestyle (anteriormente
conocido como pep8), y McCabe que verifica la calidad del código Python.
4. Análisis de seguridad:
Bandit: Herramienta de análisis estático para encontrar problemas de seguridad en
código Python, incluyendo vulnerabilidades de inyección de código y problemas de
manejo de autenticación.
FindBugs (Java): Analiza el código Java buscando posibles errores de programación,
incluyendo vulnerabilidades de seguridad y problemas de rendimiento.
Brakeman (Ruby on Rails): Analiza el código Ruby on Rails en busca de posibles
vulnerabilidades de seguridad, incluyendo problemas de inyección de código y
autenticación insegura.

Estudio de Casos.

Ejemplos de código antes y después de la optimización.

Se presentan ejemplos de código que han sido optimizados utilizando las técnicas y
herramientas discutidas anteriormente. Se comparan el código original con el código
optimizado para demostrar las mejoras en eficiencia y rendimiento.

Análisis de la mejora en eficiencia y rendimiento.

Se analizan los resultados obtenidos después de la optimización, incluyendo


mediciones de tiempo de ejecución, consumo de recursos y otros indicadores

relevantes de rendimiento. Se evalúa el impacto de las técnicas de optimización en la


eficiencia del código.
Conclusión.

La convergencia entre la programación estructurada y la optimización del código es un


punto crucial en el desarrollo de software de alta calidad y rendimiento. Al emplear los
principios de programación estructurada para organizar y clarificar el código, y al aplicar
técnicas de optimización para mejorar su eficiencia y rendimiento, se construye una
base sólida para crear aplicaciones que sean tanto eficientes como mantenibles a largo
plazo.

La optimización del código es un proceso continuo y dinámico que no se detiene en la


fase inicial del desarrollo, sino que evoluciona junto con las necesidades del proyecto y
las tecnologías disponibles. En este sentido, es fundamental estar al tanto de las
últimas tendencias y avances en optimización, como el aprovechamiento del
paralelismo y la concurrencia para aprovechar al máximo los recursos de hardware, la
adaptación del código para diferentes plataformas y arquitecturas, y las medidas de
seguridad para proteger el software contra vulnerabilidades.

Además, la optimización del código no solo se trata de mejorar el rendimiento en


términos de velocidad de ejecución, sino también de minimizar el consumo de recursos,
como memoria y energía, para garantizar una experiencia de usuario óptima y eficiente.
Esta consideración es especialmente relevante en el contexto actual, donde la
sostenibilidad y la eficiencia energética son temas cada vez más importantes en la
industria del software.

la optimización del código es un proceso integral que abarca aspectos técnicos,


prácticos y éticos del desarrollo de software. Al seguir mejorando nuestras prácticas de
optimización del código y estar abiertos a nuevas investigaciones y avances en el
campo, podemos ofrecer software de mayor calidad, rendimiento y seguridad a
nuestros usuarios, contribuyendo así al avance y la excelencia en la industria del
software.
Referencias.

La optimización del código es un aspecto fundamental en el desarrollo de software que


abarca mucho más que simplemente mejorar el rendimiento de una aplicación. Es un
proceso que influye en múltiples aspectos del ciclo de vida del software y que impacta
directamente en la experiencia del usuario, la eficiencia del sistema, la utilización de
recursos y, en última instancia, en el éxito del producto final.

Aquí tienes algunas referencias que podrían ser útiles para obtener más información
sobre las herramientas y técnicas mencionadas:
Herramientas de Análisis Estático:
Pylint.
Bandit.
McCabe.
Plataformas de Análisis de Calidad del Código:
SonarQube.
CodeClimate.
Coverity.
Compiladores y Optimizadores de Código:
GCC (GNU Compiler Collection)
Clang.
Microsoft Visual C++ Compiler.
Intel C++ Compiler (ICC).
LLVM (Low Level Virtual Machine).
Oracle Solaris Studio.
BIBLIOGRAFIAS.

http//es.Wikipedia.org>wiki>Programacion_Estructurada.
https://ndmarketingdigital.com/que-hace-un-algoritmo-mas-eficiente/.

https://unirfp.unir.net.
https://es.wikipedia.org/wiki/Programaci%C3%B3n_estructurada.

https://unirfp.unir.net/revista/ingenieria-y-tecnologia/programacion-
estructurada/.
ANEXOS.

También podría gustarte