¿Por qué?

Hardware

telar

  • La humanidad gracias a sus herramientas y, en particular, al conocimiento (ciencias, ingenierías, …​), ha construido grandes sistemas artificiales: acueductos, telares con tarjetas perforadas, red eléctrica, red telefónica, …​ para automatizar tareas, o sea, simplificar y reutilizar

    • 8000 aec., Los sumerios construyen telares para cubrirse

    • 1642 ec., Blaise Pascal construye la Pascalina, primera calculadora mecánica girando ruedas

    • 1801 ec., Jacquard construye el primer telar mecánico y automático con tarjetas perforadas para definir los dibujos

    • 1842 ec., Charles Babbage y Ada Lovalace trabajan sobre la Máquina Analítica, con las tarjetas perforadas de los telares …​ pero no llegó a funcionar aunque Ada ya escribió las primeras líneas de código de la historia.

    • 1884 ec., Hollerith desarrolló la Máquina Tabular de tarjetas perforadas para ordenar el registro de propiedad en la Conquista del Oeste

    • 1936 ec., Konrad Zuse, ingeniero alemán, diseñó y fabricó la Z1, la que para muchos es la primera computadora programable de la historia

telarMecanico

pascalina

tarjetaPerforada

maquinaTabular

primeraComputadora

¿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
informacionRecursiva
  • Programas en lenguajes de programación: Javascript, Java, Scala, PHP, C, C/C++, Python, R#, …​

  • Scripts para la creación, gestión y consultas de las tablas de las bases de datos: SQL, 4GL, …​

  • Scripts para la generación de páginas dinámicas en aplicaciones Web: JSP, PHP, ASP, …​

  • Presentaciones en lenguajes de publicación para aplicaciones Web: HTML, CSS, …​

  • Datos de configuración en diversos formatos: texto libre, XML, JSON, YAML, …​

  • Multimedia en formatos de imagen, sonido o video para elementos gráficos en la Interfaz de Usuario: png, waw, mpeg, …​

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
  • Gestión (CRUD), es el tratamiento de la información, Informática!!! crud

  • altas (Create) de información en el sistema

  • bajas (Delete) de información en el sistema

  • modificaciones (Update) de información en el sistema

  • consultas (Read) de información en el sistema

¿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

  • Efectividad en la gestión de sistemas de información, requeridos por clientes para diferentes usuarios, con

    • Eficacia, sin errores en cálculos, filtrados, secuencias de acciones, …​

    • Eficiencia, con escaso consumo de recuros:

      • hardware y energía eléctrica

      • tiempo de los usuarios para aprender y explotar el producto software

software

¿Cómo?

Lenguajes de Programación

lenguajesProgramacion
Lexicografía Sintaxis Semántica
  • palabras reservadas (if, function, package/module/unit/namespace, …​) para la estructura de las sentencias

  • símbolos (+, /, (, ), …​) para operadores, signos de puntuación, …​ e

  • identificadores del desarrollador (customer, date, …​) para

  • Compromiso entre la legibilidad y concisión (azucar sintáctico)

    • actualmente muchos comparten la propuesta de C

  • Constructores para la organización de miles/millones de líneas de código:

    • asignación o no,

    • bucles o no,

    • funciones o no,

    • clases/objetos o no,

    • …​ determinando su paradigma

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

ensamblador

c

javascript

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
fuerte
debil
inferencia

Java, …​

Javascript, …​

Typescript, …​

Clasificación por la Ejecución

Interpretado Compilado Hibrido
interprete
compilador
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

paradigma

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

Fundamentos

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, …​

  • Se llama conjuntamente Pardigma Declarativo, unión del Paradigma Funcional y Lógico, enfrentado al Paradigma Imperativo, porque carece de variables con estado y, por tanto, de bucles.

    • Sus soluciones son eminentemente recursivas, declarando la solución de un problema como alguna operación sobre la solución del problema en un grado menos.

ParadigmasFundamento

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

goto

  • Enfocado en la demostración de la corrección del software basada en la lógica de precondiciones, postcondiciones e invariantes de las estructuras de control de flujo de ejecución

    • Algoritmos como bloques recursivamente anidados de sentencias simples, secuenciales, alternativas e iterativas, sin sentencia GOTO!!!

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
  • Orientación a Objetos = clases + herencia

    Emplear las consultas de tipo durante la ejecución para implantar un enunciado de conmutación [estructura de control de flujo swicht o if/then/else encadenados] en un campo de tipo destruye toda la modularidad de un programa y anula los objetivos de la programación orientada a objetos. También es propensa a errores; […] La experiencia demuestra que los programadores que se formaron con lenguajes como Pascal o C encuentran esta trampa muy difícil de resistir. Una razón es que este estilo requiere menos premeditación […]; en este contexto, semejante falta de premeditación muchas veces no es más que una chapuza.”
    — Stroupstrup
    The C++ Programming Language. 1993
pooMal

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

pooBien

Otros Paradigmas

  • Paradigma Concurrente,

  • Paradigma Orientado a Eventos,

  • Paradigma Orientado a Aspectos, …​

  • Paradigmas Exotéricos:

    • bidimensionales, bioinspirados, multicriteriales,

    • multiparadigma: Leda, …​, Javascript!?!, …​

Paradigmas

TabalaPeriodicaLenguajes

Bibliografía

Obra, Autor y Edición Portada Obra, Autor y Edición Portada

Ponente

  • Luis Fernández Muñoz

setillo

  • Doctor en Inteligencia Artificial por la UPM

  • Ingeniero en Informática por la UMA

  • Diplomado en Informática por la UPM

  • Profesor Titular de ETSISI de la UPM