¿Por qué?
Matemática | Ingeniería |
---|---|
|
|
Arquitectura de von Neumann: | |
---|---|
|
|
|
¿Qué?
Programa | Proceso |
---|---|
|
|
Lenguaje | Lenguaje de Programación |
---|---|
|
|
Lexicografía | Lenguaje Natural | Lenguaje de Programación |
---|---|---|
|
|
|
Sintáxis | Lenguaje Natural | Lenguaje de Programación |
---|---|---|
|
|
|
Semántica | Lenguaje Natural | Lenguaje de Programación |
---|---|---|
|
|
|
¿Para qué?
Objeto | Capacidad cualitativa | Capacidad cuantitativa |
---|---|---|
Ser humano |
Muy buena: reconocimiento de patrones, asociaciones, recursividad, … |
Muy mala: pequeña, errores por cansancio, desmotivación, … y muy lentos |
Hardware |
Muy mala: ningún computador superó la prueba de Turing |
Muy buena: sin errores y a toda velocidad |
|
Sistema Información | Gestión de un Sistema de Información | |
---|---|---|
|
|
|
¿Cómo?
Historia de los Lenguajes de Programación
No confundir popularidad actual de cada lenguaje y su evolución en el tiempo tiempo con su relevancia, número de proyectos, tipos de proyectos, … |
Paradigmas de Programación
…'ciencia normal' significa investigación basada firmemente en una o más realizaciones científicas pasadas, realizaciones que alguna comunidad científica particular reconoce, durante cierto tiempo, como fundamento para su práctica posterior. […] Voy a llamar, de ahora en adelante, a las realizaciones que comparten esas dos características, 'paradigmas', término que se relaciona estrechamente con 'ciencia normal'. Paradigma es un conjunto de prácticas y saberes que definen una disciplina científica durante un período específico
— Thomas S. Kuhn
La estructura de las revoluciones científicas (1962) |
En su famoso libro The Structure of Scientific Revolutions de 1970, el historiador Thomas Khun extendió la definición de la plabra para abarcar un conjunto de teorías, estándares, métodos que juntos representan una forma de organizar el conocimiento, esto es, una forma de ver el mundo
— Budd
Programación Orientada a Objetos (1994) |
|
|
|
Según el Nivel Semántico
Lenguajes de Bajo nivel: | Lenguajes de Medio nivel: | Lenguajes de Alto nivel: |
---|---|---|
|
||
|
|
|
Lenguajes de Bajo Nivel | |
---|---|
|
|
Según la Traducción para la Ejecución
Compilado | Interpretado | Hibrido | Transpilado |
---|---|---|---|
|
|
|
|
|
|
|
|
Tiempo de compilación | Tiempo de ejecución |
---|---|
|
|
Según el Sistema de Tipos
Tipo | Sistema de Tipos |
---|---|
|
|
Lenguajes Fuertemente Tipados | Lenguajes Debilmente Tipados | Lenguajes con Inferencia de Tipos |
---|---|---|
Java, …
|
Javascript, …
|
Typescript, …
|
Inferencia de tipos | Programación parametrizada |
---|---|
|
|
Evitan la verbosidad y/o duplicidad del software en lenguajes fuertemente tipados |
|
Originarios de la programación funcional que nación con tipado dinámico y evolucionó a tipado estático |
Según el Fundamento Matemático
Modelo Matemático | Paradigma de Programación | |
---|---|---|
Máquina de Turing |
|
|
|
|
|
|
|
Pardigma Declarativo | ||
---|---|---|
|
|
Paradigma Imperativo
Año | Autor | Publicación | Referencia |
---|---|---|---|
1966 |
Bohm, C., Giuseppe J |
Flow Diagrams, Turing Machines and Languages with Only Two Formation Rules |
Communications of the ACM 9 (5): 366-371 |
1968 |
E. Dijkstra |
Go To Statement Considered Harmful |
Communications of the ACM 11 (3): 147-148 |
1972 |
O.J. Dahl, E.W. Dijkstra, C.A.R.Hoare |
Structured Programming |
Academic Press |
1974 |
D. Knuth |
Structured Programming with go to Statements |
Computing Surveys, Volume 6, Number 4, pages 261-301 |
|
{ int key; int values[]; int i = 0; while (i<values.length-1 && values[i]!=key){ i++; } String found = "no"; if (values[i]==key){ found = "si"; System.out.println("La clave buscada " + found + " se encuentra en los valores") } |
{ int key; int values[]; int i = 0; boolean exit = false; String found = "no"; while (!exit) { if (values[i] == key) { exit = true; found = "si"; } else if (i == values.length) exit = true; } else { i++; } } System.out.println("La clave buscada " + found + " se encuentra en los valores") } |
Paradigma Funcional
Matemática | |||
---|---|---|---|
|
|||
|
|
|
|
Función "Pura"? | Función | Procedimiento |
---|---|---|
|
|
|
Haskell, …, paradigma funcional |
C, Java, Javascript, …, paradigma tradicional, imperativo orientado a procesos |
Paradigma Imperativo |
Paradigma Funcional |
|
|
Programación imperativa | Programación funcional |
---|---|
|
|
|
|
Programación Funcional en Java
|
|
Según el Bloque Organizativo
|
|
|
|
|
|
Paradigma Orientado a Procesos
|
|
|
|
|
|
Orientado a Procesos |
Mutable |
Inmutable |
Iterativo |
||
Recursivo |
Paradigma Orientado a Objetos
Año | Autor | Publicación | Referencia |
---|---|---|---|
1962 |
O.J. Dahl, K. Nygaard |
Simula Primer lenguaje orientado a clases |
Conferencia de Trabajo en Lenguajes de Simulación IFIO TC 2, Oslo |
1971 |
A. Kay, A. Goldberg, D. Ingalls |
Smalltalk Comunidad generadora del 1ªLOO, interfaz de ventanas, patrones de diseño, arquitectura MVC, xUnit, … |
Xerox Palo Alto Research Center (PARC) |
1972 |
O.J. Dahl, E.W. Dijkstra, C.A.R.Hoare |
Structured Programming Simula!!! |
Academic Press |
1987 |
Barbara Liskov |
Data Abstraction and Hierarchy |
OOPSLA |
Características fundamentales | Caracterísiticas accesorias |
---|---|
|
|
|
|
|
|
Soluciones |
Mutable |
Inmutable |
Iterativo |
||
Recursivo |
Según la Ejecución de Procesos
Concurrencia | |
---|---|
|
|
Paradigma de la programación concurrente | ||
---|---|---|
|
|
|
Procesos concurrentes | Programa concurrente | Sistema concurrente |
---|---|---|
|
|
|
Relaciones entre procesos | ||
---|---|---|
|
|
|
Interacciones entre procesos | |
---|---|
|
|
|
Estados de un proceso | |
---|---|
|
- Un proceso se duerme a sí mismo, cuando las condiciones del estado del sistema lo obligan
|
Modelos de concurrencia | |
---|---|
|
|
|
|
Arquitecturas de sistemas concurrentes
Sistemas multiprocesador | |
---|---|
|
|
|
|
Sistemas uniprocesador | Modelos Concurrentes en Arquitecturas |
---|---|
|
|
Multiprocesamiento | |
---|---|
|
|
Multiprogramación | |
---|---|
|
|
|
|
También son posibles enfoques híbridos, por ejemplo, los procesadores de un sistema distribuido pueden multiprogramarse. |
Aplicación de la Multiprogramación | |
---|---|
|
|
Planificación, (scheduling) | Despacho (dispatching) |
---|---|
|
|
Abstracción de la programación concurrente
“La abstracción de la programación concurrente es el estudio de las secuencias de ejecución intercalada de las instrucciones atómicas de los procesos secuenciales“.
— Ben-Ari
1990 |
|
Inctrucciones atómicas | |
---|---|
|
|
Tipos de instrucciones atómicas | |
---|---|
|
|
|
|
Intercalación | |
---|---|
|
|
Indeterminismo | |
---|---|
|
|
|
|
|
|
Propiedades de corrección
Corrección de un programa concurrente | |
---|---|
|
|
Propiedades de seguridad | Propiedades de vitalidad | Propiedades de justicia |
---|---|---|
|
|
|
|
|
|
Programación No Bloqueante
Programación Bloqueante | Programación No Bloqueante |
---|---|
|
|
|
|
Programación Asíncrona No Bloqueante | |
---|---|
|
|
|
|
|
|
|
|
Según otros criterios
|
|
|
|
Tendencias
Variables | Pasado | Actualidad |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
¿En el caso de que fuera conveniente, arregla los problemas de los proyectos como para justificar la inversión de tiempo/esfuerzo, … que absorbe actualmente … o desde siempre? ¿Gestión, Requisitos, Análisis, …? |
Errores en Programación
|
|
Tipos de error en tiempo de compilación | ||
---|---|---|
|
|
|
Tipos de error en tiempo de ejecución | |
---|---|
|
|
|
|
|
|
Itinerario
|
|
|
|
|
|
Bibliografía
Autor, Obra y Editorial | Portada | Autor, Obra y Editorial | Portada |
---|---|---|---|
|
|
|
|
Ponente
|
|
|