¿Por qué?
Hardware
|
|
|
|
|
|
|
|
¿Qué?
Software es la información que suministra el desarrollador a la computadora para que manipule de forma automática la información que suministrará el usuario
— Brad Cox
|
|
Sistema de Información
Un sistema de información es un conjunto de elementos orientados al tratamiento y administración de datos e información, organizados y listos para su uso posterior, generados para cubrir una necesidad o un objetivo
— Sistema Información
Wiki |
|
|
¿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 |
|
¿Cómo?
Lenguajes de Programación
Lexicografía | Sintaxis | Semántica |
---|---|---|
|
|
|
al margen de la popularidad de cada lenguaje y su evolución tiempo |
Clasificación por el 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, … |
Clasificación por el Sistema de Tipos
Lenguajes Fuertemente Tipados | Lenguajes Debilmente Tipados | Lenguajes con Inferencia de Tipos |
---|---|---|
Java, … |
Javascript, … |
Typescript, … |
Clasificación por la Ejecución
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, … |
Paradigmas del Software
…'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 |
Paradigmas Imperativo vs Declarativo
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, … |
|
|
Paradigmas spaguetti vs Estructurado
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 |
Programación spaguetti | Programación Estructurada | |
---|---|---|
|
|
int key; int values[]; int i = 0; boolean end = false; while (!end) if (values[i]==key){ System.out.println(key); end = true; } else if (i==value.length-1) end = true; else i++; int key; int values[]; int i = 0; while (i<values.length-1 && values[i]!=key) i++; if (values[i]==key) System.out.println(key); |
Paradigmas orientados a Procesos, a Datos y 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 |
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, … |
Mi conjetura es que la orientación a objetos será en los 80 lo que la programación estructurada en los 70. Todo el mundo estará a favor suyo. Cada productor prometerá que sus productos lo soportan. Cada director pagará con la boca pequeña el servirlo. Cada programador lo practicará. Y nadie sabrá exactamente lo que es!
— Rentsch
Object-Oriented Programming. SIGPLAN Notices vol. 17(12). 1982 |
X es bueno. Orientado a Objetos es bueno. Ergo, X es Orientado a Objetos
— Stroupstrup
The C++ Programming Language. 1988 |
|
|
Principio Abierto/Cerrado: diseño abierto a la extensión, cerrado a la modificación de B. Meyer que conduce a la Inversión de Dependencias y cumplimiento del Principio de Sustitución de Liskov, herencia vs composición/delegación |
Otros Paradigmas
|
|
|
|
Bibliografía
Obra, Autor y Edición | Portada | Obra, Autor y Edición | Portada |
---|---|---|---|
Ponente
|
|
|