Busqueda

Referencias

Alonso Amo, F. Martínez Normand, L. y Segovia Pérez, J. (2005). Introducción a la Ingeniería del Software: modelos de desarrollo de programas. Madrid, Delta Publicaciones. Recuperado de https://elibro.net/es/ereader/biblioibero/170188?page=19.
Bourque, P. & Fairley, R. E. (2004). Guide to the Software Engineering Body of Knowledge Versión 3.0.
 SwebokRecuperado de https://cs.fit.edu/~kgallagher/Schtick/Serious/SWEBOKv3.pdf     

codigofacilito. (2018, 5 octubre). ¿Qué es la programación funcional? YouTube. https://www.youtube.com/watch?v=kFQEL9Z24ZM    


EDteam.(2019, 20 junio). ¿Qué es la                           programacion  orientada a objetos? YouTube. https://www.youtube.com/watch?v=DlphYPc_HKk

hdeleon.net. (2021, 26 marzo). Programación Imperativa VS Programación Declarativa. YouTube. https://www.youtube.com/watch?v=ZAttg3J4CK8         

               
Paradigmas de Programación. (s. f.).           https://ele.chaco.gob.ar/pluginfile.php/1072964/mod_resource/content/1/Programaci%C3%B3n%20Imperativo%20y%20Declarativo.pdf



PARADIGMAS DE PROGRAMACIÓN

De acuerdo a la definición de Alonso Amo, F. Martínez Normand, L. y Segovia Pérez, J. (2005). "Un paradigma de programación es un modelo básico de construcción de programas. Un modelo que permite producir programas conforme con unas directrices específicas, tales como diseñar un programa mediante una secuencia de instrucciones que operan sobre unos datos de entrada y producen un resultado de salida, etc."

Un paradigma de programación indica un método de realizar cómputos y la manera en que se deben estructurar y organizar las tareas que debe llevar a cabo un programa. 

Programar es mucho más complejo que definir una serie de instrucciones para ser ejecutadas por una computadora. La programación generalmente es tan diversa como uno se lo pueda imaginar. A esta diversidad en el mundo de la programación se le conoce como paradigmas o estilos de programación. Las características de un lenguaje de programación dictaminan el paradigma al cual pertenece.

Segun Ambler (1992), determina que un "Paradigma de Programación es, pues, una colección de modelos conceptuales que juntos modelan el proceso de construcción de un programa y determinan, al final, su estructura"














Elaboración propia
Los paradigmas de programación los podemos dividir en Paradigma
Imperativo, Paradigma declarativo, Paradigma Funcional y Paradigma Orientado a Objetos.



Fuente: https://www.youtube.com/watch?v=ZAttg3J4CK8



PARADIGMA IMPERATIVO



Se basa en dar instrucciones a la computadora de cómo hacer las cosas en forma de algoritmos. En este paradigma se expresa como debe solucionarse un problema especificando una secuencia de acciones a realizar a través de uno o más procedimientos denominados subrutinas o funciones.

Elaboración propia







PROGRAMACIÓN PROCEDIMENTAL


Divide las tareas de las que se debe ocupar un programa en tareas parciales más pequeñas que se describen en el código por separado. Estos se denominan como procedimientos, dependiendo del lenguaje de programación, o también como subprogramas, rutinas o funciones. El sentido y el propósito de esta distribución es hacer que el código de programa sea más claro y evitar las repeticiones innecesarias de código. De esta forma, se crean principios básicos de programación que también se pueden reutilizar en otros programas.



Elaboración propia


Esta basado en el concepto de "llamado de procedimientos", tambien conocido como rutinas, subrutinas, metodos o funciones que contienen una serie de pasos computacionales. Cualquier procedimiento puede ser llamado en cualquiero punto durante la ejecución del programa, incluyendo otros procedimientos o el mismo.


LENGUAJES DE PROGRAMACIÓN POR PROCEDIMIENTOS

  • C
  • Basic
  • COBOL
  • Matlab
  • Pascal

PROGRAMACIÓN MODULAR

La programación modular es la técnica de programación basada en la filosofía del diseño descendente, que consiste en dividir el problema original en diversos subproblemas (y estos a su vez en otros más pequeños, obteniendo una estructura jerárquica o en árbol) que se pueden resolver por separado, para después recomponer los resultados y obtener la solución al problema. Un subproblema se denomina módulo y es una parte del problema que se puede resolver de manera independiente

Cada uno de los componentes de programa se diseña, desarrollan y prueban con total independencia los unos de los otros. El código fuente se divide específicamente en bloques parciales lógicos independientes los unos de los otros para proporcionar más transparencia y facilitar el proceso de debugging (resolución de errores). Los bloques parciales individuales, denominados módulos, se pueden probar por separado antes de vincularlos posteriormente a una aplicación conjunta.

Un módulo es una colección estática de declaraciones definidas en un ámbito de visibilidad particular y oculto al resto del programa con el que se comunica por una sección de interfaz donde se incluyen la lista de exportaciones. Usando módulos se construyen las unidades en que se ha de descomponer cualquier programa mínimamente importante. Los módulos se conectan entre sí dando lugar a una estructura modular en árbol que permite resolver el problema de programación planteado.

Un módulo actúa como una caja negra con la cual el resto del programa interactúa a través de una sección de interfaz. La interfaz (o vista pública) es una colección de declaraciones de constantes, tipos, variables, procedimientos, funciones, etc. La otra sección principal de un módulo es la implementación (o vista privada) que incluye el código de los procedimientos y demás elementos constitutivos de la parte ejecutable del módulo.


Fuente: https://cdn.website-editor.net/a521e7378eaf452c9af12c6f4ca8de19/files/uploaded/TEMA%252028%2520-%2520PROGRAMACI%25C3%2593N%2520MODULAR.pdf



PROGRAMACIÓN ESTRUCTURADA


A medida que un programa aumenta de tamaño, aumenta a su vez la complejidad para leerlo, su tiempo de desarrollo, de mantenimiento y disminuye su calidad si no se tiene un correcto orden y estructura del programa.

Es por esto que surgió un paradigma de programación llamado programación estructurada, que consiste en mejorar la claridad, calidad y acelerar el tiempo de desarrollo, utilizando únicamente subrutinas y 3 estructuras de control: Secuencial, de Selección (IF y SWITCH) y de Iteración (ciclos FOR y WHILE).

La programación estructurada es una teoría de programación que consiste en construir programas de fácil comprensión, es especialmente útil, cuando se necesitan realizar correcciones o modificaciones después de haber concluido un programa o aplicación. Al utilizar la programación estructurada, es mucho más sencillo entender la codificación del programa, que se habrá hecho en diferentes secciones. 

Se basa en una metodología de desarrollo de programas llamada refinamiento sucesivos: Se plantea una operación como un todo y se divide en segmentos más sencillos o de menor complejidad, una vez terminado todos los segmentos del programa, se procede a unificar las aplicaciones realizadas por el grupo de programadores. Si se ha utilizado adecuadamente la programación estructurada, esta integración debe ser sencilla y no presentar problemas al integrar la misma, y de presentar algún problema, será rápidamente detectable para su corrección. 



La representación gráfica de la programación estructurada se realiza a través de diagramas de flujo, el cual representa el programa con sus entradas, procesos y salidas.



Fuente: https://www.lifeder.com/diagrama-de-flujo/



La programación estructurada propone segregar los procesos en estructuras lo más simple posibles, las cuales se conocen como secuencia, selección e interacción, que están disponibles en todos los lenguajes modernos de programación imperativa en forma de sentencias, combinando esquemas sencillos se pueden llegar a construir sistemas amplios y complejos pero de fácil entendimiento. 

Para la solución de un problema en particular, se inicia considerando las funciones que tiene que cumplir el programa en general y después se va desmembrando estas funciones en subfunciones más pequeñas hasta llegar al caso último o más particular y que ya no se pueda subdividir en casos más pequeños. Una vez que ya se tiene el programa desmembrado de lo general a lo particular, se empieza a programar estas funciones pequeñas, particulares o módulos, de esta manera, siempre podremos construir nuevos módulos o unidades insertando el nombre del módulo donde corresponda y desarrollándolo a parte.

La modificación de los módulos es más fácil y se pueden referenciar cuantas veces se requiera, con lo que se ahorra tiempo en la programación, un programa tiene un diseño estructurado si cumple las dos siguientes condiciones:

  • El teorema de Estructura
  • Está debidamente documentado 
El teorema de Estructura dice que “un programa cumple el teorema de estructura si y sólo (ó) si es propio y contiene únicamente las tres estructuras básicas de control” que son la secuencial, la alternativa y la repetitiva, un programa es propio si y sólo si cumple: que tenga un solo punto de entrada y un solo punto de salida y que entre dos puntos de control del programa exista al menos un camino. 

La programación estructurada es un estilo con el cual él se busca que el programador elabore programas sencillos y fáciles de entender, la programación estructurada hace uso de tres estructuras básicas de control que son: Estructura Secuencial, Estructura Selectiva y la Estructura Repetitiva (ó Iterativa)

La programación estructurada se basa un teorema fundamental, el cual afirma que cualquier programa, no importa el tipo de trabajo que ejecute, puede ser elaborado utilizando únicamente las tres estructuras básicas.

Fuente: https://disenowebakus.net/estructuras-control.php

Estructura Secuencial: Indica que las instrucciones de un programa se ejecutan una después de la otra, en el mismo orden en el cual aparecen en el programa. Se representa gráficamente como una caja después de otra, ambas con una sola entrada y una única salida. 

Estructura Selectiva: También conocida como la estructura: verdadero - falso, plantea la selección entre dos alternativas con base en el resultado de la evaluación de una condición; equivale a la instrucción IF de todos los lenguajes de programación 

Estructura Repetitiva (Iterativa): También llamada la estructura hacer – mientras - que, corresponde a la ejecución repetida de una instrucción mientras que se cumple una determinada condición.


 

PARADIGMA DECLARATIVO


La programación declarativa un programa se describe en términos de proposiciones y afirmaciones que son declaradas para describir el problema, sin especificar los pasos para resolverlo; en este tipo de programas, el estado no puede ser modificado ya que todos los tipos de datos son inmutables. Consiste en decirle a un programa lo qué tiene que hacer en lugar de decirle cómo debería hacerlo.

En este tipo de paradigmas, un programa se construye mediante hechos, reglas, restricciones, ecuaciones, transformaciones y otras propiedades derivadas del con- junto de valores que configuran la solución. A partir de esta información, el sistema informático debe proporcionar la estruc- tura de control apropiada que incluya el orden de evaluación del programa que compute una solución. Aquí no existe la necesidad de describir las diferentes eta- pas a seguir para alcanzar una solución como en el caso procedimental. (Alonso Amo, F. Martínez Normand, L. y Segovia Pérez, J, 2005, p. 23). 


En la práctica, este enfoque implica proporcionar un lenguaje específico de dominio (DSL, del inglés Domain-specific lenguage) para expresar lo qué el usuario quiere y resguardarlos de las arquitecturas o construcciones de bajo nivel (bucles, condicionales, asignaciones) que materializan el estado final deseado. 

La programación declarativa es un término que agrupa los siguientes paradigmas de programación: 

  • Programación lógicala programación lógica es una programación por descripción. El programa se construye describiendo el área de aplicación, esto es, se señala el qué se desea (mediante hechos que son verdaderos) pero no el cómo obtenerlo, esto está implícito. Un programa lógico se configura como un conjunto de hechos (asertos o 4 proposiciones), y de reglas lógicas previamente establecidas, que obtienen conclusiones en base a una serie de preguntas lógicas. El control es inherente al sistema, el que permite investigar las preguntas lógicas. Esta capacidad es el concepto clave que subyace en la Programación Lógica (descriptiva). Al separar el control y la lógica, el programa lógico se transforma en un conjunto de declaraciones formales de especificaciones que deben ser correctas por definición. 


  • Programación funcional: Todo se resuelve por medio de la evaluación de funciones matemáticas. Es un estilo de programación cuyo método básico es la aplicación de funciones a sus argumentos.

  • Lenguajes de dominio específico (DSLs). Lenguajes descriptivos para un propósito específico, tales como HTML, CSS («Hojas de estilo en cascada», es un lenguaje de diseño gráfico) y SQL (el lenguaje SQL sirve para el acceso a la información almacenada en las bases de datos. Es un lenguaje sencillo de consulta, que permite realizar operaciones de selección, inserción, actualización y borrado de datos, así como operaciones administrativas sobre las bases de datos).

Tomado de:

Paradigmas de Programación. (s. f.).                           https://ele.chaco.gob.ar/pluginfile.php/1072964/mod_resource/content/1/Programaci%C3%B3n%20Imperativo%20y%20Declarativo.pdf




PARADIGMA FUNCIONAL



El paradigma funcional de tipo procedimental, está basado en el modelo matemá- tico de composición funcional. En este modelo, el resultado de un cálculo es la entrada del siguiente, y así sucesivamente hasta que la composición produce el resultado deseado. (Alonso Amo, F. Martínez Normand, L. y Segovia Pérez, J, 2005, p. 33) 


Transparencia referencial


Decir que una función tiene transparencia referencial, quiere decir que se comporta como una función matemática, en el sentido de que si recibe un valor de entrada siempre producirá el mismo valor de salida, y que el resultado del cálculo de la función únicamente se devuelve por el nombre de la función y no por alguno de sus argumentos.


Funciones de orden superior

La programación funcional incorpora también el concepto de función de orden superior como objeto de primera clase, lo que significa que las funciones pueden ser tratadas como datos (pueden pasarse como parámetros, ser calculadas y devueltas como valores normales, y mezcladas en el cálculo con otras formas de datos). El carácter de orden superior es una característica fundamental que tienen que tener las funciones que participen en la construcción de un programa funcional.


Tipos de datos en la programación funcional

En general, los programas funcionales utilizan muy pocos tipos de datos primarios o básicos. Los más usuales son: 

  • Datos atómicos, que son números enteros, reales, booleanos y cadenas de carac- teres. Ejemplo: 28, 43.76, T (cierto) ó NIL (falso), Programación, Vicente.
  • Identificadores, que son los nombres de las variables y de las funciones. Ejemplo: x, suma(x).
  • Listas. Conjuntos de elementos que corresponden a un tema común. Ejemplo: La lista de alumnos de una clase (Luis Pérez, Andrés Martínez, Rosa Gómez, ...).


Programas Funcionales

Un programa funcional es pues, “un conjunto compuesto de funciones que juntas definen un objetivo específico de aplicación”. El concepto de función, desde el punto de vista informático, es una pieza indivi- dual de codificación que siempre efectúa el mismo conjunto de operaciones, pero que puede operar con diferentes datos, y proporcionar algún tipo de resultado, que se conoce como "valor de la función".



Fuente: https://www.youtube.com/watch?v=kFQEL9Z24ZM



PARADIGMA ORIENTADO A OBJETOS





La Orientación a Objetos está constituyendo una filosofía de diseño y desarrollo de software de gran trascendencia para la producción de software eficiente y barato. Su modelo de análisis, diseño y programación, que configura las fases funda- mentales del ciclo de vida de un sistema informático, se ha asentado como la estructura metodológica de los años 90, y se presenta educacionalmente como paradigmática en el desarrollo de aplicaciones. 


La Orientación a Objetos se puede definir como ʺuna disciplina de ingeniería de desarrollo y modelado de software que permite construir más fácilmente sistemas complejos a partir de componentes individualesʺ [Khoshafian, 1990].

La Orientación a Objetos proporciona mejores herramientas para:


• Modelar el mundo real de un modo más cercano a la perspectiva del usuario.
• Interactuar fácilmente con un entorno computacional, usando metáforas fami- liares. 
• Construir componentes reutilizables de software y librerías específicas de estos componentes fácilmente extensibles. 
• Modificar y ampliar con facilidad la implementación de estos componentes sin afectar al resto de su estructura.


En cuanto a los elementos fundamentales que configuran el Paradigma Orientado a Objetos, algunos autores [Khoshafian, 1990] los centran en tres: 

Los Tipos Abs- tractos de Datos, La Herencia y la Identidad de los Objetos. Mientras que otros [Meyer, 1988] señalan siete aspectos básicos a considerar para una verdadera orien- tación al objeto: 

• Estructura modular basada en objetos, dado que los sistemas en esta metodología son modularizados sobre la base de sus estructuras de datos. 
• Abstracción de Datos, porque los objetos se describen como implementaciones de tipos de datos abstractos.
• Gestión automática de memoria, de forma que los objetos no utilizados sean desasignados por el propio sistema sin intervención del programador. 
• Clases, en las que cada tipo abstracto no simple sea un módulo. 
• Herencia, que permita que una clase sea definida como una extensión o restric- ción de otra. 
• Polimorfismo y enlace dinámico, de forma que las entidades del programa pue- dan referenciar en tiempo de ejecución a objetos de diferentes clases. 
• Herencia múltiple para que se pueda declarar una clase como herencia de varias.


Lenguajes OO



Algunos lenguajes orientados a objetos, como C++, Object LISP, etc., son estén- siones de lenguajes convencionales que fueron diseñados básicamente como imperativos, por lo que estas extensiones no consideran a los objetos como entida- des activas que reciben mensajes, más bien invocan a procedimientos o funciones que pasan objetos; no obstante, incorporan las características más relevantes del PaOO, en particular: la encapsulación de datos, el polimorfismo con enlace dinámi- co, la genericidad y la herencia.

Alonso Amo, F. Martínez Normand, L. y Segovia Pérez, J. (2005). Introducción a la Ingeniería del Software: modelos de desarrollo de programas. Madrid, Delta Publicaciones. Recuperado de https://elibro.net/es/ereader/biblioibero/170188?page=82.



Fuente: https://www.youtube.com/watch?v=DlphYPc_HKk

CONSTRUCCIÓN DE LENGUAJES DE PROGRAMACIÓN


Los lenguajes de construcción incluyen todas las formas de comunicación mediante las cuales un humano puede especificar una solución ejecutable a un problema. Los lenguajes de construcción y sus implementaciones (por ejemplo, los compiladores) pueden afectar a los atributos de calidad del software en cuanto a rendimiento, fiabilidad, portabilidad, etc. Pueden contribuir seriamente a las vulnerabilidades de seguridad.

El tipo más sencillo de lenguaje de construcción es un lenguaje de configuración, en el que los ingenieros de software eligen entre un conjunto limitado de opciones predefinidas para crear instalaciones de software nuevas o personalizadas. Los archivos de configuración basados en texto que se utilizan en los sistemas operativos Windows y Unix son ejemplos de ello, y las listas de selección tipo menú de algunos generadores de programas constituyen otro ejemplo de lenguaje de configuración.

Los lenguajes de conjuntos de herramientas se utilizan para construir aplicaciones a partir de elementos de conjuntos de herramientas (conjuntos integrados de partes reutilizables específicas de la aplicación); son más complejos que los lenguajes de configuración.

Los lenguajes de conjuntos de herramientas pueden definirse explícitamente como lenguajes de programación de aplicaciones, o las aplicaciones pueden estar simplemente implícitas en el conjunto de interfaces de un conjunto de herramientas.

Los lenguajes de scripting son tipos de lenguajes de programación de aplicaciones muy utilizados. En algunos lenguajes de scripting, los scripts se denominan archivos por lotes o macros.

Los lenguajes de programación son el tipo de lenguajes de construcción más flexible. También contienen la menor cantidad de información sobre áreas de aplicación y procesos de desarrollo específicos, por lo que son los que requieren más formación y destreza para su uso eficaz. La elección del lenguaje de programación puede tener un gran efecto en la probabilidad de que se introduzcan vulnerabilidades durante la codificación- por ejemplo, el uso acrítico de C y C++ son elecciones cuestionables desde el punto de vista de la seguridad.

Hay tres tipos generales de notación utilizados para los lenguajes de programación:

- lingüística (por ejemplo, C/C++, Java)
- formal (por ejemplo, Event-B)
- visual (por ejemplo, MatLab)

Las notaciones lingüísticas se distinguen, en particular, por el uso de cadenas textuales para representar construcciones de software complejas. La combinación de cadenas textuales en patrones puede tener una sintaxis similar a la de una frase. Si se utiliza correctamente, cada cadena de este tipo debe tener una fuerte connotación semántica que proporcione una comprensión intuitiva inmediata de lo que sucederá cuando se ejecute la construcción de software.

Las notaciones formales se basan menos en los significados intuitivos y cotidianos de las palabras y las cadenas de texto y más en definiciones respaldadas por definiciones precisas, inequívocas y formales (o matemáticas).

Las notaciones de construcción formal y los métodos formales son la base semántica de la mayoría de las notaciones de programación de sistemas, en las que la precisión, el comportamiento en el tiempo y la capacidad de comprobación son más importantes que la facilidad de adaptación al lenguaje natural. Las construcciones formales también utilizan formas definidas con precisión para combinar símbolos que evitan la ambigüedad de muchas construcciones en lenguaje natural.

Las notaciones visuales se basan mucho menos en las notaciones textuales de las construcciones lingüísticas y formales y, en cambio, se basan en la interpretación visual directa y en la colocación de entidades visuales que representan el software subyacente. 

La construcción visual tiende a estar algo limitada por la dificultad de hacer declaraciones "complejas" utilizando sólo la disposición de iconos en una pantalla. Sin embargo, estos iconos pueden ser herramientas poderosas en los casos en los que la tarea principal de programación es simplemente construir y "ajustar" una interfaz visual para un programa, cuyo comportamiento detallado tiene una definición subyacente.

Tomado de: 




PROGRAMACIÓN DECLARATIVA

PARADIGMAS DE PROGRAMACIÓN

PARADIGMAS