0% encontró este documento útil (0 votos)
34 vistas29 páginas

Paradigm As

Cargado por

lucas riveros
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
34 vistas29 páginas

Paradigm As

Cargado por

lucas riveros
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 29

Definición

 “Un paradigma de programación indica un método de realizar


cómputos y la manera en que se deben estructurar y organizar las
tareas que debe llevar a cabo un programa ”
 Los paradigmas fundamentales están asociados a determinados
modelos de cómputo.
 Tambien se asocian a un determinado estilo de programación
 Los lenguajes de programación suelen implementar, a menudo de
forma parcial, varios paradigmas.
Tipos de paradigmas
 Los paradigmas fundamentales están basados en diferentes
modelos de cómputo y por lo tanto afectan a las construccio-
nes más básicas de un programa.
 La división principal reside en el enfoque imperativo (indicar el
cómo se debe calcular) y el enfoque declarativo (indicar el qué
se debe calcular).
 El enfoque declarativo tiene varias ramas diferenciadas: el
paradigma funcional, el paradigma lógico, la programación
reactiva y los lenguajes descriptivos.
 Otros paradigmas se centran en la estructura y organización de
los programas, y son compatibles con los fundamentales:
 Ejemplos: Programación estructurada, modular, orientada a
objetos, orientada a eventos, programación genérica.
 Por último, existen paradigmas asociados a la concurrencia y a
los sistemas de tipado.
El zoo de los paradigmas

Modular Imperativo
Código

Módulos Procedimental

Procedimientos
Estructurado Declarativo
Control de flujo
Acciones Funcional
elementales

Orientado a Eventos
Lógico
Relación

Orientado a Objetos Reactivo

Datos Programación Programación


Genérica Concurrente
Paradigma Imperativo
 Describe cómo debe realizarse el cálculo, no el porqué.
 Un cómputo consiste en una serie de sentencias,
ejecutadas según un control de flujo explícito, que
modifican el estado del programa.
 Las variables son celdas de memoria que contienen
datos (o referencias), pueden ser modificadas, y
representan el estado del programa.
 La sentencia principal es la asignación.
 Es el estándar ‘de facto’.
 Asociados al paradigma imperativo se encuentran los paradigmas
procedural, modular, y la programación estructurada.
 El lenguaje representativo sería FORTRAN-77, junto con COBOL,
BASIC, PASCAL, C, ADA.
 También lo implementan Java, C++, C#, Eiffel, Python, ...
Paradigma Declarativo
 Describe que se debe cálcular, sin explicitar el cómo.
 No existe un orden de evaluación prefijado.
 Las variables son nombres asociados a definiciones, y
una vez instanciadas son inmutables.
 No existe sentencia de asignación.
 El control de flujo suele estar asociado a la composición
funcional, la recursividad y/o técnicas de reescritura y
unificación.
 Existen distintos grados de pureza en las variantes del paradigma.
 Las principales variantes son los paradigmas funcional, lógico, la
programación reactiva y los lenguajes descriptivos.
Programación Funcional
 Basado en los modelos de cómputo cálculo lambda (Lisp,
Scheme) y lógica combinatoria (familia ML, Haskell)
 Las funciones son elementos de primer orden
 Evaluación por reducción funcional. Técnicas:
recursividad, parámetros acumuladores, CPS, Mónadas.
 Familia LISP (Common-Lisp, Scheme):
 Basados en s-expresiones.
 Tipado debil.
 Meta-programación
 Familia ML (Miranda, Haskell, Scala):
 Sistema estricto de tipos (tipado algebraico)
 Concordancia de patrones.
 Transparencia referencial
 Evaluación perezosa (estruct. de datos infinitas)
Programación Lógica
 Basado en la lógica de predicados de primer orden
 Los programas se componen de hechos, predicados y
relaciones.
 Evaluación basada en resolución SLD: unificación +
backtracking.
 La ejecución consiste en la resolución de un problema de
decisión, los resultados se obtienen mediante la
instanciación de las variables libres.
 Lenguaje representativo: PROLOG
Programación Reactiva
(Dataflow)
 Basado en la teoria de grafos.
 Un programa consiste en la especificación del flujo de datos
entre operaciones.
 Las variables se encuentran ligadas a las operaciones que
proporcionan sus valores. Un cambio de valor de una variable
se propaga a todas las operaciones en que participa.
 Las hojas de cálculo se basan en este modelo.
 Lenguajes representativos: Simulink, LabView.
A := 10
B := A + 1
print B 11
A := 3
print B 4
Diagrama de flujo
#1 #2 #1 #2

mcd resto
A  Entrada #1 A  Entrada #1
B  Entrada #2 B  Entrada #2

A B NO
C  resto(A,B)
B  C A>B

SI
NO
C=0 A A-B
SI

Salida #1  B Salida #1  A

#1 #1
FORTRAN-77
 Imperativo, procedural, no estructurado

FUNCTION MCD(NA, NB) Paso por referencia


IA = NA
IB = NB Tipado implícito
1 IF (IB.NE.0) THEN
ITMP = IA
IA = IB
IB = MOD(ITMP, IB)
Saltos
GOTO 1
END IF
MCD = IA
RETURN
END
PASCAL
 Imperativo, procedural, estructurado

function MCD(a,b: integer): integer;


var c: integer;
begin Paso por valor
while b <> 0 do
begin Tipado explícito
c := a;
a := b;
b := c mod b
end;
MCD := b
end;
SCHEME, HASKELL, PROLOG
 Lenguajes funcionales y lógicos (recursividad)
 Scheme
(define (mcd a b) s-expresiones
(if (= b 0) a
(mcd b (modulo a b))))
tipado estricto
 Haskell
mcd :: Int ‐> Int ‐> Int concordancia
mcd a 0 = a de patrones
mcd a b = mcd b (rem a b)
predicados, unificación
 Prolog

mcd(A,0,D) :‐ A = D.
mcd(A,B,D) :‐ B > 0, C is A mod B, mcd(B,C,D).
Lenguajes de Programación
 Lenguaje artificial diseñado para expresar cómputos que
pueden ser llevados a cabo por una máquina.
 Basado en un modelo de cómputo (que puede o no coincidir con
el de la máquina en que se va a ejecutar)
 Define un nivel de abstracción más elevado (más cercano al
programador)
 Debe traducirse a un código que pueda entender el procesador:
el código máquina.
 Modos de traducción:
 Lenguaje Compilado
 Lenguaje Interpretado (Entorno interactivo)
 Lenguaje traducido a Código Intermedio (Java  Bytecodes,
.NET  IDL)
Estrategias de traducción
 Código compilado:
Código Máquina
Programa

Compilación Ejecución

Entorno
(SO)

Librerías Librerías
Módulos estáticas dinámicas
Estrategias de traducción
 Código interpretado:

Programa
(Sesión interactiva) Intérprete

Ejecución

Interpretación

I/O

Estado
Sesión
Comando actual
Resultado
Estrategias de traducción
 Código intermedio: (Pascal IDL, Java, .NET)
Código Máquina
Programa Intermedio Virtual

Compilación Interpretación Ejecución

Módulos
Estado

Interacción S.O.
Librerías estándard

Universal Específico
Generaciones
Generación Lenguajes Hardware Movimientos
Primera (1945-55) Código Máquina Relés, Válvulas de
vacío
Segunda (1955-68) FORTRAN Transistores, Prog. Estructurada
COBOL Memorias de y Modular
LISP ferrita Proceso por Lotes
Tercera (1968-1980) ALGOL Circuitos Ingeniería de
PASCAL integrados, Software
C Memorias de Orientación a
BASIC transistores Objetos
ADA Bases de Datos
Cuarta (1980-) C++ VLSI Comp. Distribuida
JAVA MultiCore Interfaces Gráficas
HASKELL Flash Multimedia
PYTHON Internet
Linea del Tiempo
Crisis del Software, Ingeniería del Software

Programación Procedimental Programación Estructurada y Modular

Orientación a Objetos

Programación Genérica

60s 70s 80s

Basic ADA Common Lisp

COBOL
ALGOL Pascal Modula-2

FORTRAN
C C++ Scheme
Prolog
LISP
Simula Smalltalk Objective C
Linea del Tiempo
Internet

Interfaces de Usuario Dispositivos Móviles

Computación Distribuida

90s 00s

Haskell Java Scala Clojure F#


Delphi

Perl PHP .NET Swift Go


Visual C++
C#
Eiffel Visual Basic Python R Kotlin

Erlang Ruby Javascript Rust


Evolución BASIC

Modula-2
VB
FORTRAN PASCAL
Delphi

ADA C#
Java
ALGOL
SIMULA Eiffel

JavaScript
C++ PHP
COBOL C

AWK Perl

SmallTalk TCL Python


PROLOG
Ruby

CLisp

LISP Scheme Objective-C


Scala
ML Haskell
Clean
Paradigmas BASIC

Modula-2
FORTRAN PASCAL VB
Delphi

ADA C#
Java
ALGOL
SIMULA Eiffel
Imperativo
JavaScript
Funcional PHP
Orient. Objeto
C++
Scripting C

AWK Perl

COBOL SmallTalk TCL Python


Ruby
PROLOG
CLisp

LISP Scheme Objective-C


Scala
ML Haskell
Clean
Evolución Histórica
 FORTRAN (Formula Translating) 1957
 Orientado al cálculo científico
 Proceso de arrays
 GOTO asignado
 Versiones II, III, IV, 66 (subrutinas), 77, 90 (array slicing,
recursividad, modularidad, sobrecarga, TADs), 96-03-08
(paralelismo, orientación a objeto)
 COBOL (Common Business Oriented Languaje) 1959:
 Orientado al mundo empresarial
 Sintaxis basada en lenguaje natural: 400 palabras reservadas,
con verbos, nombres, modificadores, etc.
 Código auto-modificable: ALTER X TO PROCEED TO Y
 Especificación detallada de valores numéricos (PIC)
 Modularidad mediante Copybooks
Familias y Evolución Histórica
 LISP (List Processing) 1958, McCarthy
 Orientado a la investigación (Inteligencia Artificial)
 Basado en s-expresiones
 Código y datos intercambiables
 Tipado débil
 Familia Lisp:
 Common Lisp , 1984 (Generalización, Orientación a Objeto)
 Scheme, 1975 (Simplificación, Closures)
 Clojure, 2007
 Familia ML:
 Sistema de tipado Hindler-Millner
 Haskell, 1990
 Clean (1987), Scala (2003)
Ejemplo programa COBOL
IDENTIFICATION DIVISION.
PROGRAM-ID. PerformFormat4.
AUTHOR. Michael Coughlan.
* An example program using the PERFORM..VARYING format.
* Pay particular attention to the values produced by the
* WITH TEST BEFORE and WITH TEST AFTER loops.
* Note that the PERFORM within a PERFORM produces the same
* results as the PERFORM..VARYING..AFTER

DATA DIVISION.
WORKING-STORAGE SECTION.
01 LoopCount PIC 9 VALUE ZEROS.
01 LoopCount2 PIC S9 VALUE ZEROS.

PROCEDURE DIVISION.
Begin.
DISPLAY "Start WHILE Iteration of LoopBody"
PERFORM LoopBody WITH TEST BEFORE
VARYING LoopCount FROM 1 BY 2
UNTIL LoopCount GREATER THAN 5.
DISPLAY "Finished WHILE iteration. LoopCount = " LoopCount.
...
Ejemplo programa LISP
(defun simplify (expression)
(simplify-2 (rules) expression))

(defun simplify-2 (rules expression)


(cond
((null rules) expression)
(T (simplify-2 (cdr rules) (apply-rule (car rules) expression)))))

(defun apply-rule (rule expression)


(substitute (car rule) (cadr rule) expression))

(defun substitute (pattern replacement expression)


(cond
((null expression) ())
((occurs-at-front pattern expression)
(substitute-at-front pattern replacement expression))
(T (cons (car expression)
(substitute pattern replacement (cdr expression))))))

(defun occurs-at-front (pattern expression)


(cond ((null pattern) T) ((null expression) nil)
((matches (car pattern) (car expression))
(occurs-at-front (cdr pattern) (cdr expression)))
(T nil)))
Familias y Evolución Histórica
 ALGOL (Algorithmic Languaje) 1958/60/68 N.Wirth
 Familia de lenguajes, diseñados por un comité de expertos
 Bloques de código, recursividad, funciones internas, paso de
parámetros
 Arrays dinámicos, paralelismo, definición de operadores
 Familia ALGOL
 PASCAL, 73  Modula-2, 80
 Delphi/ Free-Pascal, 93
 ADA, 83
 C, 74  C++, 80
 Objective-C, 86
 C#, 95
 Java, 95
Orientación a objeto
 SIMULA, 67
 Ortodoxa:
 SmallTalk, 80  Objective-C, 86
 Eiffel, 86
 Parcial
 ADA, 83 (Genericidad)
 C++, 80 (Templates)
 Java, 95 (Interfaces)
 C# , 2001 (.NET)
 Basada en prototipos
 JavaScript, 96
 Python, 91
Lenguajes de Scripting
 Cliente (navegador):
 HTML / CSS
 ACMEScript: JavaScript, ActionScript (Flash), 1995
 Java (applets), 1995
 Servidor
 PHP, ASP, 1995
 Java (servlets), 2000
 Ruby, 1995
 Propósito general
 Perl, 1987
 Tcl/Tk, 1989
 Python, 1991
Otros lenguajes
 Programación lógica:
 PROLOG, 1972
 Concurrencia
 Erlang, 1986
 Oz , 1991
 Bases de Datos
 SQL (No es Turing-completo)
 Minimalistas
 Forth, 1970
 APL (1964)  J (1990)
 BrainFuck

También podría gustarte