













Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
Este documento explora los paradigmas de programación, presentando conceptos fundamentales como la programación imperativa y declarativa. Se analizan las ventajas de la programación estructurada y se describe el proceso de diseño de algoritmos, incluyendo la codificación, depuración y verificación. Se explica la importancia de la documentación interna y externa, y se introducen métodos de representación de algoritmos como el pseudocódigo y los diagramas de flujo.
Typology: Schemes and Mind Maps
1 / 21
This page cannot be seen from the preview
Don't miss anything!














Un paradigma de programación es una manera o estilo de programación de software. Existen diferentes formas de diseñar un lenguaje de programación y varios modos de trabajar para obtener los resultados que necesitan los programadores.
Se trata de un conjunto de métodos sistemáticos aplicables en todos los niveles del diseño de programas para resolver problemas computacionales.
Los lenguajes de programación adoptan uno o varios paradigmas en función del tipo de órdenes que permiten implementar como, por ejemplo, Python o JavaScript, que son multi- paradigmas^1.
Los paradigmas de programación son los principios fundamentales de la programación de software. Lo más fácil es plantearlos como estilos de programación fundamentalmente diferenciados que, en consecuencia, generan códigos software que están estructurados de forma distinta.
(^1) https://profile.es/blog/que-son-los-paradigmas-de-programacion/
Figura 1-1 Clasificación de los paradigmas de Programación. El concepto clásico es el de la Programación Imperativa , en la que se define claramente en el código fuente qué pasos debe ejecutar un programa y en qué secuencia. Sus subtipos son la programación procedimental y la orientada a objetos. Según el principio de la Programación Declarativa , solo se describe lo que debe solucionar el software (es decir, solo el resultado y no los pasos individuales). Subtipos del paradigma declarativo son la programación funcional y la lógica. ¿Cómo se distinguen entre sí los citados paradigmas de software?
Programación imperativa: El paradigma de programación clásico Entre los paradigmas de programación de software, la programación imperativa (del latín imperare , ordenar) se considera el paradigma clásico. Los primeros lenguajes de programación y, por extensión, también los primeros programas informáticos, se basan completamente en este enfoque, que prevé una secuencia regularizada de órdenes o instrucciones determinadas. Este paradigma de programación es la base, por ejemplo, de los veteranos lenguajes Pascal y C, así como de todos los lenguajes ensambladores, entre otros. En la programación imperativa, el centro de atención radica, entre otras cosas, en trabajar lo más cerca posible del sistema. Como consecuencia, el código de programación resultante es fácil de comprender y, a la vez, muy abarcable. La programación estructurada , la procedimental y la modular son tres enfoques adicionales subordinados al paradigma de programación imperativa para escribir y estructurar código software.
Esta forma de programar se basa en un famoso teorema, desarrollado por Edsger Dijkstra, que demuestra que todo programa puede escribirse utilizando únicamente las tres estructuras básicas de control siguientes: ● Secuencia: el bloque secuencial de instrucciones, instrucciones ejecutadas sucesivamente, una detrás de otra.
● Selección: la instrucción condicional con doble alternativa, de la forma " if condición then instrucción-1 else instrucción-2".
● Iteración: el bucle condicional " while condición do instrucción", que ejecuta la instrucción repetidamente mientras la condición se cumpla.
Figura 1-2 Estructuras Básicas de Control Los programas que utilizan sólo estas tres instrucciones de control básicas o sus variantes (como los bucles for, repeat o la instrucción condicional switch-case ), pero no la instrucción goto , se llaman estructurados.
Ésta es la noción clásica de lo que se entiende por programación estructurada (llamada también programación sin goto) que hasta la aparición de la programación orientada a objetos se convirtió en la forma de programar más extendida. Esta última se enfoca hacia la reducción de la cantidad de estructuras de control para reemplazarlas por otros elementos que hacen uso del concepto de polimorfismo. Aun así, los programadores todavía utilizan las estructuras de control (if, while, for, etc.) para implementar sus algoritmos porque en muchos casos es la forma más natural de hacerlo.
Una característica importante en un programa estructurado es que puede ser leído en secuencia, desde el comienzo hasta el final sin perder la continuidad de la tarea que cumple el programa, lo contrario de lo que ocurre con otros estilos de programación. Este hecho es importante debido a que es mucho más fácil comprender completamente el trabajo que realiza una función determinada si todas las instrucciones que influyen en su acción están físicamente contiguas y encerradas por un bloque. La facilidad de lectura, de comienzo a fin, es una consecuencia de utilizar solamente tres estructuras de control, y de eliminar la instrucción de transferencia de control goto.
La visión moderna de la programación estructurada: la segmentación
La realización de un programa sin seguir una técnica de programación produce frecuentemente un conjunto enorme de sentencias cuya ejecución es compleja de seguir, y de entender, pudiendo hacer casi imposible la depuración de errores y la introducción de mejoras. Se puede incluso llegar al caso de tener que abandonar el código preexistente porque resulte más fácil empezar de nuevo.
Cuando en la actualidad se habla de programación estructurada, nos solemos referir a la división de un programa en partes más manejables (usualmente denominadas segmentos o módulos). Una regla práctica para lograr este propósito es establecer que cada segmento del programa no exceda, en longitud, de una página de codificación, o sea, alrededor de 50 líneas.
Así, la visión moderna de un programa estructurado es un compuesto de segmentos, los cuales puedan estar constituidos por unas pocas instrucciones o por una página o más de código. Cada segmento tiene solamente una entrada y una salida, asumiendo que no poseen bucles infinitos y no tienen instrucciones que jamás se ejecuten. Encontramos la relación entre ambas visiones en el hecho de que los
Figura 1-3 Diseño descendente o top-down
El carácter autocontenido de los módulos o librerías hace que pueda ocultarse el funcionamiento interno de las funciones contenidas en un módulo, ya que para utilizarlas basta con saber con qué nombre y argumentos se invocan y qué tipo de valores devuelven. Al reunirlas en un módulo, se realza la relación entre las mismas separándolas del resto del programa.
Esta ocultación de los detalles se denomina encapsulación y se alcanza dividiendo el código del programa en dos ficheros diferenciados: un fichero (con extensión ".h") que incluye la declaración de los tipos de datos y de las funciones gracias a lo cual se sabe cómo acceder y utilizar cada una de las mismas y otro (con extensión ".c") que contiene el código de cada una de las funciones declaradas en el .h.
Al compilar este último queda transformado en código objeto (al cual ya no se puede acceder para su lectura o modificación) y puede distribuirse conjuntamente con el fichero de declaración (el que acaba en .h), para su uso por parte de terceros sin riesgo alguno de alteración de la funcionalidad original (ésta quedó encapsulada u oculta).
Esto es así porque para hacer uso de las funciones incluidas en el módulo únicamente necesitaremos conocer la información que nos proporciona el fichero de declaración: el nombre, tipos de datos de los argumentos y valores de retorno de las funciones. No es necesario conocer los detalles de implementación (sentencias que se ejecutan dentro de una función).^3
(^3) https://www.mheducation.es/bcv/guide/capitulo/8448148703.pdf
Ventajas de la Programación Estructurada^4
Un programa de computadora es un conjunto de instrucciones (órdenes dadas a la máquina) que producirán la ejecución de una determinada tarea. En esencia, un programa es un medio para conseguir un fin.
El proceso de programación es, por consiguiente, un proceso de solución de problemas y el desarrollo de un programa requiere las siguientes fases:
(^4) https://es.wikipedia.org/wiki/Programaci%C3%B3n_estructurada
Figura 1-5 Bloques de un programa
Instrucciones y tipos de instrucciones El proceso de diseño del algoritmo o posteriormente de codificación del programa consiste en definir las acciones o instrucciones que resolverán el problema. Las acciones o instrucciones se deben escribir y posteriormente almacenar en memoria en el mismo orden en que han de ejecutarse, es decir, en secuencia. Un programa puede ser lineal o no lineal. Un programa es lineal si las instrucciones se ejecutan secuencialmente, sin bifurcaciones, decisión ni comparaciones.
Figura 1-6 Programa Lineal Un programa es no lineal cuando se interrumpe la secuencia mediante instrucciones de bifurcación.
Figura 1-7 Programa no Lineal
Tipos de Instrucciones Las instrucciones disponibles en un lenguaje de programación dependen del tipo de lenguaje. Por ello, en este apartado estudiaremos las instrucciones —acciones— básicas que se pueden implementar de modo general en un algoritmo y que esencialmente soportan todos los lenguajes. Dicho de otro modo, las instrucciones
básicas son independientes del lenguaje. La clasificación más usual, desde el punto de vista anterior, es:
El amplio conocimiento de todos los elementos de programación y el modo de su integración en los programas constituyen las técnicas de programación que todo buen programador debe conocer.
Escritura de algoritmos/programas La escritura de un algoritmo mediante una herramienta de programación debe ser lo más clara posible y estructurada, de modo que su lectura facilite considerablemente el entendimiento del algoritmo y su posterior codificación en un lenguaje de programación. Los algoritmos deben ser escritos en lenguajes similares a los programas escritos en el lenguaje de programación estructurado; por ejemplo, Pascal. Un algoritmo constará de dos componentes: una cabecera de programa y un bloque algoritmo. La cabecera de programa es una acción simple que comienza con la palabra algoritmo. Esta palabra estará seguida por el nombre asignado al programa completo. El bloque algoritmo es el resto del programa y consta de dos componentes o secciones: las acciones de declaración y las acciones ejecutables. Las declaraciones definen o declaran las variables y constantes que tengan nombres. Las acciones ejecutables son las acciones que posteriormente deberá realizar la computación cuando el algoritmo convertido en programa se ejecute.
algoritmo cabecera del programa sección de declaración sección de acciones
Cabecera del programa o algoritmo Todos los algoritmos y programas deben comenzar con una cabecera en la que se exprese el identificador o nombre correspondiente con la palabra reservada que señale el lenguaje. En los lenguajes de programación, la palabra reservada suele ser program. En Algorítmica se denomina algoritmo.
algoritmo DEMO
Declaración de variables En esta sección se declaran o describen todas las variables utilizadas en el algoritmo, listándose sus nombres y especificando sus tipos. Esta sección comienza con la palabra reservada var (abreviatura de variable ) y tiene el formato
var tipo-1 : lista de variables- tipo-2 : lista de variables- . . tipo-n : lista de variables-n
donde cada lista de variables es una variable simple o una lista de variables separadas por comas y cada tipo es uno de los tipos de datos básicos (entero, real, char o boolean). Por ejemplo, la sección de declaración de variables
var entera : Numero_Empleado real : Horas real : Impuesto real : Salario
o de modo equivalente var entera : Numero_Empleado real : Horas, Impuesto, Salario
declara que sólo las tres variables Hora, Impuesto y Salario son de tipo real. Es una buena práctica de programación utilizar nombres de variables significativos que sugieran lo que ellas representan, ya que eso hará más fácil y legible el programa.
Dim var1 As String var1 = "Paradigmas de Programación" VB 6.0/VB .NET (VB, Visual Basic)
var nombre : string [20]; en Turbo Pascal var cadena : nombre [20]; en pseudocódigo
Comentarios La documentación de un programa es el conjunto de información interna externa al programa, que facilitará su posterior mantenimiento y puesta a punto. La documentación puede ser interna y externa. La documentación externa es aquella que se realiza externamente al programa y con fines de mantenimiento y actualización; es muy importante en las fases posteriores a la puesta en marcha inicial de un programa. La documentación interna es la que se acompaña en el código o programa fuente y se realiza a base de comentarios significativos. Estos comentarios se representan con diferentes notaciones, según el tipo de lenguaje de programación.^5
Para representar un algoritmo se debe utilizar algún método que permita independizar dicho algoritmo del lenguaje de programación elegido. Ello permitirá que un algoritmo pueda ser codificado indistintamente en cualquier lenguaje. Para conseguir este objetivo se precisa que el algoritmo sea representado gráfica o numéricamente, de modo que las sucesivas acciones no dependan de la sintaxis de ningún lenguaje de programación, sino que la descripción pueda servir fácilmente para su transformación en un programa, es decir, su codificación. Los métodos usuales para representar un algoritmo son:
_1. Diagrama de Flujo,
(^5) AGUILAR JOYANES, LUIS. Fundamentos de Programación: Algoritmos, estructura de datos y objetos. Cuarta Edición, McGraw Hill.
_4. Lenguaje español, inglés…
Los métodos 4 y 5 no suelen ser fáciles de transformar en programas. Una descripción en español narrativo no es satisfactoria, ya que es demasiado prolija y generalmente ambigua. Una fórmula, sin embargo, es un buen sistema de representación.
Pseudocódigo El pseudocódigo es un lenguaje de especificación (descripción) de algoritmos. El uso de tal lenguaje hace el paso de codificación final (esto es, la traducción a un lenguaje de programación) relativamente fácil. Los lenguajes APL Pascal y Ada se utilizan a veces como lenguajes de especificación de algoritmos. El pseudocódigo nació como un lenguaje similar al inglés y era un medio de representar básicamente las estructuras de control de programación estructurada que se verán en capítulos posteriores. Se considera un primer borrador , dado que el pseudocódigo tiene que traducirse posteriormente a un lenguaje de programación. El pseudocódigo no puede ser ejecutado por una computadora. La ventaja del pseudocódigo es que, en su uso, en la planificación de un programa, el programador se puede concentrar en la lógica y en las estructuras de control y no preocuparse de las reglas de un lenguaje específico. Es también fácil modificar el pseudocódigo si se descubren errores o anomalías en la lógica del programa, mientras que en muchas ocasiones suele ser difícil el cambio en la lógica, una vez que está codificado en un lenguaje de programación. Otra ventaja del pseudocódigo es que puede ser traducido fácilmente a lenguajes estructurados como Pascal, C, FORTRAN 77/90, C++, Java, C#, etc.
El pseudocódigo original utiliza para representar las acciones sucesivas palabras reservadas en inglés —similares a sus homónimas en los lenguajes de programación—, tales como start, end, stop, if-then-else, while-end, repeat-until, etc. La escritura de pseudocódigo exige normalmente la indentación (sangría en el margen izquierdo) de diferentes líneas. Una representación en pseudocódigo —en inglés— de un problema de cálculo del salario neto de un trabajador es la siguiente:
similares a las del idioma inglés, el uso del pseudocódigo se ha extendido en la comunidad hispana con términos en español como inicio, fin, parada, leer, escribir, si- entonces- si_no, mientras, fin_mientras, repetir, hasta_que , etc. Sin duda, el uso de la terminología del pseudocódigo en español ha facilitado y facilitará considerablemente el aprendizaje y uso diario de la programación.
Diagramas de flujo Un diagrama de flujo ( flowchart ) es una de las técnicas de representación de algoritmos más antigua y a la vez más utilizada, aunque su empleo ha disminuido considerablemente, sobro todo, desde la aparición de lenguajes de programación estructurados. Un diagrama de flujo es un diagrama que utiliza los símbolos (cajas) estándar mostrados en la Figura 1-9 y que tiene los pasos de algoritmo escritos en esas cajas unidas por flechas, denominadas líneas de flujo, que indican la secuencia en que se debe ejecutar. Los símbolos estándar normalizados por ANSI (abreviatura de American National Standars Institute) son muy variados. En la figura 1-8 se representa una plantilla de dibujo típica donde se contemplan la mayoría de los símbolos utilizados en el diagrama; sin embargo, los símbolos más utilizados representan:
Proceso Decisión Conectores Fin Entrada/salida Dirección del flujo
Figura 1-8 Plantilla típica para diagrama de flujo