Final: Paradigmas Flashcards
¿Qué es un Paradigma?
Un paradigma es un conjunto de teorías cuyo núcleo central se acepta sin cuestionar y se suministra la base y modelo para resolver problemas y avanzar en el conocimiento.
¿Qué es un Concepto?
Un concepto es una idea que se puede expresar o prohibir en un lenguaje.
¿Qué es un modelo de programación?
Un modelo de programación es un conjunto de técnicas de programación y principios de diseño aplicados a un lenguaje.
Dado un problema, queremos un lenguaje con conceptos y un modelo de programación que faciliten resolverlo.
¿Qué 3 elementos tiene un paradigma de programación?
Un paradigma de programación tiene 3 elementos:
- Los conceptos centrales.
- El mecanismo de razonamiento, que incluye a los conceptos favorecidos y los conceptos prohibidos del paradigma.
- El mecanismo de comunicación, que incluye el vocabulario (términos y conceptos específicos, como “objeto”, “clase”, etc) y la notación (sintaxis).
¿Hay un overlap entre paradigma y lenguaje?
En general, no está restringido que un lenguaje tenga un overlap al 100% con un paradigma. Sino que muchos lenguajes combinan paradigmas, dependiendo de qué estamos resolviendo.
Poder tomar múltiples perspectivas a la hora de hallar una solución, ¿es bueno o malo?
Poder tomar múltiples perspectivas es bueno para tener múltiples puntos de vista para hallar una solución, y también es bueno para componentizar sistemas, porque cada uno se expresa en su paradigma natural.
Al mismo tiempo, es terrible si lo mezclamos sin criterio: hay conceptos que interactúan positivamente y otros que interactúan negativamente.
¿Cuál es la diferencia entre imperativo y declarativo?
- Imperativo: Describe instrucciones a ejecutarse, paso a paso, para variar el estado del programa. El estado final debería ser la solución al problema.
- Declarativo: Describe el problema que se quiere solucionar. El sistema usa esta descripción para intentar hallar un algoritmo que resuelva el problema.
La diferencia no es binaria, sino que algo es “más/menos declarativo que otra cosa”. Todo sistema declarativo se implementa sobre una base más imperativa para dar instrucciones al hardware, aunque el usuario no tenga acceso a estas capacidades.
¿Qué es la semántica y qué 3 tipos hay?
De ser posible, dé ejemplos.
La semántica es el significado de un programa.
Se tienen:
- Semántica operativa
: estado y transformaciones del mismo. El problema es que se tiene al programador como intérprete humano.
- Semántica denotacional
: A qué objeto matemático corresponde. El problema es que suele ser un objeto matemático extremadamente complejo.
- Semántica axiomática
: Pre y post condiciones.
Ejemplo semántica operativa:
- mismo resultado que si se ejecuta un código de ordenamiento.
- existen muchas posibles, y demostrar que dos son equivalentes es dificil.
Ejemplo semántica axiomática: listaOrdenada = sort(lista)
- pre: “lista” es una lista
- post: “listaOrdenada” es permutación de lista
- post: si i,j son índices tal que i < j, el elemento en i es menor que el elemento en j.
Explique el paradigma de Programación Estructurada
El control de flujo de un programa se puede expresar con 3 primitivas:
- Secuencia
- Alternativa
- Repetición
Cualquier otro control de flujo está prohibido (como el GOTO).
Hoy en día se integra por defecto a nivel lenguaje.
Explique el Paradigma de Programación Modular
Un módulo es un conjunto de código con una interfaz definida que cumple un propósito discreto.
- Archivos separados de interfaz/implementación, visibilidad, namespaces, etc.
- Permite limitar acceso a estado/operaciones
- En general, “X es objeto” implica que X también es módulo, pero no al revés.
Explique el Paradigma de Programación Orientada a Objetos
- Se tiene un estado y comportamiento agrupado en una sola entidad.
- Los objetos encapsulan su estado, ocultándolo a otros.
- Los objetos solicitan a colaboradores que apliquen su comportamiento relevante.
- Si se palica correctamente, permite analizar estado/comportamiento de un objeto sin considerar a otros.
Para la comunicación entre objetos, se tienen mensajes (que el objeto decide cuándo procesas y como responder) y métodos (donde un invocador espera la respuesta síncronamente).
Explique el Paradigma de la Programación Funcional y las Funciones Matemáticas.
La Programación Funcional está basada en funciones matemáticas.
Al evaluar una función matemática:
- Todas sus entradas son visibles.
- Todas sus salidas son visibles.
- Para cada entrada, siempre se retorna la misma salida.
- Permite analizar su comportamiento de forma local y atemporal, pudiendo reordenar el flujo de datos (concurrencia) y mover el flujo de datos (sistemas distribuidos).
Explique el PAradigma de la Programación Lógica
El paradigma de programación lógica está basado en predicados.
Un programa es:
- Axiomas/base de datos (predicados que siempre son ciertos)
- Reglas de inferencia (Si X e Y se cumplen, A se cumple)
- Consultas
Busca asignaciones de variables para deducir si la consulta es verdadera, a partir de las reglas y los axiomas.
Podemos obtener una solución con un mínimo de especificación, a costa de que el algoritmos usado es fuerza bruta.
Explique el Modelo Relacional
El modelo relacional es un esquema de bases de datos, conceptualmente similar a la programación lógica.
Tiene una base de datos más grande pero muy pocas reglas.
Explique dos combinaciones favorables de paradigmas
✅Una combinación favorable entre paradigmas es la de objetos-funcional:
- Objetos: Sistemas que se comunican por mensajes, encapsulando su estado.
- Funcional: Dado un estado, determina predeciblemente el siguiente estado.
Típico para sistemas distribuidos donde cada nodo debe conocer el estado de una simulación.
✅Otra combinación común es la de lógico-funcional:
- Lógico: Búsqueda de soluciones dentro de ciertas reglas
- Funcional: Análisis/manipulación de flujo de datos
Búsqueda eficiente dentro de estructuras simbólicas complejas (sistemas de deducción/planificación).