¿Por qué?
Arquitectura de von Neumann
imagen con partes de la computadora instrucciones de ensamblador/código máquina
-
Entrada/Salida, Procesos y Datos
-
Dispositivos, Procesador, Memoria
-
Interrupciones entre dispositivo y procesador
-
dispositivos:
-
entrada: teclado, ratón, joystick, …
-
salida: pantalla, impresora, …
-
entrada/salida: red
-
-
-
Código máquina
-
0100101001010
-
de ahí viene codificar en vez de programar!!!
-
¿Qué?
-
Programar: instrucciones para manipular los datos
-
Entrada/Salida
-
Procesos
-
Datos
-
-
Programación, conjunto resultante, acción, …
-
Programa,
-
En Tiempo de Compilación, fuera del tiempo de ejecución
-
-
Proceso, hilo de ejecución
-
En Tiempo de Ejecución, desde el inicio al final de la ejecución
-
Aplicación/Componente, sistema distribuido, comunicaciones
-
¿Para qué?
-
Efectividad
-
Eficacia
-
Eficiencia
-
-
Programador
-
Desarrollar en Lenguajes Java y JavaScript
-
Comprender el 80% de muchos otros
-
con criterio
-
escalón para diseño y pruebas, desarrollador
-
¿Cómo?
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 |
|
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
1994 |
Según el Nivel Semántico
Saltar de código ensamblador a lenguaje de alto nivel
Bajo nivel | Medio nivel | Alto nivel |
---|---|---|
Enfocados a la máquina |
Enfocados a la máquina y al desarrollador |
Enfocados al desarrollador |
|
|
|
código binario, ensamblador, … |
C, C++, … |
Java, Javascript, Scala, PHP, Basic, … |
Según la Traducción para la Ejecución
De ensamblador a alto nivel
Interpretado | Compilado | Hibrido |
---|---|---|
Javascript, Typescript, … |
C/C++, … |
Java |
Lenguaje | Tiempo de desarrollo | Tiempo de ejecución | Portabilidad |
---|---|---|---|
Interpretado |
Bajo |
Alto |
Alta |
Compilado |
Alto |
Bajo |
Bajo |
Híbrido |
Medio |
Medio |
Alta |
Portabilidad: facilidad de migración sobre otros sistemas operativos/ plataformas/ hardware, … |
Según el Sistema de Tipos
Hueco semántico (teoría de lenguajes de gabriel) Poner otros ejemplos a variable?!? Traer enlace estático y dinámico
No hay tipos primitivos Eiffel y Smalltalk Hay tipos primitivos distintos: Java, Javascript Distinta clasificación
Programación parametrizada Inferencia de tipos
Lenguajes Fuertemente Tipados | Lenguajes Debilmente Tipados | Lenguajes con Inferencia de Tipos |
---|---|---|
Java, … |
Javascript, … |
Typescript, … |
Según el Fundamento Matemático
máquina de turing, mutabilidad teoría de funciones, inmutabilidad
aclarar función pura vs impura
Matemática | Modelo | Paradigma | Enfoque | Lenguajes |
---|---|---|---|---|
|
Máquina de Turing |
Paradigma Imperativo |
basado en asignación de valores a variables para cambios de estado |
Cobol, Fortran, C, Ada, … |
Cálculo Lambda |
Paradigma Funcional |
basado en funciones puras como reglas de correspondencia matemáticas (inyectivas, biyectivas, suprayectivas) entre valores del conjunto origen y valores del conjunto imagen |
Lisp, FP, Scheme, ML, Haskell, … |
|
Cláusulas de Horn |
Paradigma Lógico |
basado en hechos y predicados lógicos con el algoritmo de Unificacion para las reglas de sustitución |
Prolog, … |
|
|
Según los Saltos de Ejecución
teorema de programación estructurada codigo de algoritmo y máquina de estados
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 |
1968 |
F.L. Bauer |
Ingeniería del Software |
OTAN, Munich |
1972 |
O.J. Dahl, E.W. Dijkstra, C.A.R.Hoare |
Structured Programming |
Academic Press |
1972 |
E. W. Dijkstra |
The Humble Programmer Desprecio por el programador, la calidad, … subcontratación, … |
ACM Turing Lecture |
1974 |
D. Knuth |
Structured Programming with go to Statements |
Computing Surveys, Volume 6, Number 4, pages 261-301 |
cambiar código de búsqueda a primo
Programación spaguetti | Programación Estructurada |
---|---|
|
{ 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") } |
Según el Bloque Organización
1 función 2 modular 3 basado objetos: TAD’s 3 orientado a objeto
grupos de función o ramillete de funciones + datos función de orden superior vs polimorfismo
posible transformación de imperativo orientado a objetos a imperativo orientado a procesos posible transformación de imperativo orientado a objetos a funcional orientado a objetos posible transformación de funcional orientado a objetos a funcional orientado a procesos
31 por clases con polimorfismo estático en interfaces 32 por clases con polimorfismo estático en herencia 32 por prototipos con polimorfismo dinámico por prototipos
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 |
Paradigma Orientado a Procesos | Paradigma Orientado a Datos | Paradigma Orientado a Objetos |
---|---|---|
Preponderancia de las operaciones sobre los datos |
Preponderancia de los datos sobre las operaciones (1ª forma normal, 2ª forma normal, …, Boyce-Codd) |
Equilibrio entre datos y operaciones, conformando una clase de objetos reinstanciable |
C, Pascal, … |
SQL (4GL), … |
Smalltalk, C++, Java, CLOS, Python, … |
Según la Ejecución
secuencial o concurrente
Otros criterios
|
|
|
|
Tendencias
Eje |
Variables |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ejes según fundamento y bloque de construcción | |
---|---|
|
|
|
Ejes según ejecución y sistemas de tipos | |
---|---|
|
|
Programación imperativa |
Programación funcional |
|
|
|
|
|
Lenguajes de Programación
Lexicografía | Sintaxis | Semántica |
---|---|---|
|
|
|
al margen de la popularidad de cada lenguaje y su evolución tiempo |
Errores en Programación
|
|
Tipos de error en tiempo de compilación | ||
---|---|---|
|
|
|
Tipos de error en tiempo de ejecución | |
---|---|
|
|
|
|
|
|
Itinerario
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Bibliografía
Obra, Autor y Edición | Portada | Obra, Autor y Edición | Portada |
---|---|---|---|
Ponente
|
|
|