Final: Paradigmas Flashcards

1
Q

¿Qué es un Paradigma?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

¿Qué es un Concepto?

A

Un concepto es una idea que se puede expresar o prohibir en un lenguaje.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

¿Qué es un modelo de programación?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

¿Qué 3 elementos tiene un paradigma de programación?

A

Un paradigma de programación tiene 3 elementos:

  1. Los conceptos centrales.
  2. El mecanismo de razonamiento, que incluye a los conceptos favorecidos y los conceptos prohibidos del paradigma.
  3. El mecanismo de comunicación, que incluye el vocabulario (términos y conceptos específicos, como “objeto”, “clase”, etc) y la notación (sintaxis).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

¿Hay un overlap entre paradigma y lenguaje?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Poder tomar múltiples perspectivas a la hora de hallar una solución, ¿es bueno o malo?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

¿Cuál es la diferencia entre imperativo y declarativo?

A
  • 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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

¿Qué es la semántica y qué 3 tipos hay?
De ser posible, dé ejemplos.

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Explique el paradigma de Programación Estructurada

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Explique el Paradigma de Programación Modular

A

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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Explique el Paradigma de Programación Orientada a Objetos

A
  • 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).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Explique el Paradigma de la Programación Funcional y las Funciones Matemáticas.

A

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).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Explique el PAradigma de la Programación Lógica

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Explique el Modelo Relacional

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Explique dos combinaciones favorables de paradigmas

A

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).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Explique dos combinaciones no favorables de paradigmas

A

Una combinación negativa es la de funcional-objetos, cuando:

  • Funcional: Firma de una función dice qué datos usa y profuce ⇒ comunicación de datos local visible.
  • Objetos: encapsulamiento, el contrato se cumple ocultando cómo sucede por dentro.

Genera un conflicto entre comunicación de datos visible y local, y comunicación de datos oculta y posiblemente no-local.

Otra combinación negativa es la de objetos-relacional:

  • Objetos: Grafo de entidades, interactuando de a pares.
  • Relacional: Conjunto de hechos, interactuando en conjuntos.

o

  • Objetos: Concepto básico de herencia
  • Relacional: Simulacro de herencia (tabla por clase instanciable, tabla por clase con estado, tabla por árbol de clases?)

Hay un conflicto de representación: Object-relational impedance mismatch.

16
Q

Explique el concepto de Programación Funcional de hoy en día

A

La programación funcional hoy en día se usa en sistemas con cambios de estado complejos, en programación concurrente o en sistemas distribuidos.

La programación funcional es un paradigma de programación basado en funciones matemáticas y declarativo. Se piensa en la ejecución de programas como la evaluación de funciones matemáticas.

17
Q

Programación funcional: explique funcion

A

Función: Para cada elemento del dominio A, asocia exactamente UN elemento del codominio B.

18
Q

Programación funcional: explique predictibilidad

A

Predictibilidad: Cuando una función siempre produce la misma salida para una determinada entrada.

Algunas dependencias rompen la predictibilidad:

  • Aleatoriedad
  • Operaciones de entrada o salida
  • Estado Variable
19
Q

Programación funcional: explique inmutabilidad

A

La inmutabilidad significa que la acción de evaluar una función no modifica el estado del programa. En lugar de actualizar valores, se crean nuevos valores.

  • Hay problemas con el estado mutable:
    • Condiciones de carrera
    • Acción a distancia
    • Cada mutació puede romper invariantes
  • Las funciones no pueden cambiar su entrada o contexto (no tienen entradas indirectas)
  • En lenguajes más estrictos, no se puede realizar asignaciones dentro de la definición de una función.
20
Q

¿Cuál es la relación entre predictibilidad e inmutabilidad?

A

Si tenés inmutabilidad, tenés predictibilidad.

Si tenés predictibilidad, tenés inmutabilidad.

21
Q

¿Para qué se usan las funciones de orden superior?
Dé ejemplos

A

Usamos funciones de orden superior en programación funcional, para no usar ciclos y acumuladores que cambian el estado.

Ejemplo:

  • derive: evalúa la derivada
  • compose: composición de funciones
  • map: crea una copia y aplica una función
  • filter: crea una copia y filtra los elementos para los cuales la función devuelve verdadero
  • reduce: usa una función para combinar un valor inicial con todos los elementos
22
Q

¿Cómo sé si una función es funcional?

A

Debe cumplir:

  • Predecible
  • Argumentos inmutables
  • Sin entradas implícitas
  • Sin efectos colaterales
  • Variables internar inmutables
  • No necesita tener argumentos, pero sí tiene que tener un valor de retorno.