Paradigmas de programación

 Introducción  Programación imperativa  Programación declarativa
   

Introducción
 ¿Qué es un paradigma de programación?

Es un modelo de programación Representa:
 

Programación lógica Programación funcional

Los elementos de los p programas g  (p. p  e. datos) Qué se computa y cómo se computa (p. e. flujos de ejecución o de datos) U  modelo Un d l  de d  computador d  (más ( á  o menos abstracto) b )

 Programación concurrente  Programación orientada a objetos
  

Que reflejan:

 

Programación orientada a componentes Programación orientada a agentes Programación g  orientada a aspectos p

 Programación orientada a servicios

Puede estar orientado a un dominio específico de problemas Los lenguajes de programación actuales pueden soportar más de  un paradigma Los paradigmas están ligados a la evolución tecnológica de la  programación

Tecnología de la Programación

Paradigmas de Programación ‐ 1

Tecnología de la Programación

Paradigmas de Programación ‐ 2

Programación imperativa (1)
 Concepto

Programación imperativa (2)
 Programación estructurada

Describe la computación en términos de sentencias que cambian  el estado del programa El estado está representado p  por p  variables (globales) g  que q   representan celdas de memoria (o registros del computador) Estrechamente ligado a la arquitectura más habitual de los  actuales computadores (de programa almacenado o de Von  Neumann) Es el más antiguo g  aunque q  ha evolucionado hacia la actual  programación procedural estructurada Ensamblador (bajo nivel) Antiguos Cobol y Fortran (alto nivel)

Uso exclusivo de tres esquemas de composición de sentencias  que combinados permiten resolver cualquier problema de  computación:  Secuencial, condicional e iterativo

Se eliminan los inconvenientes de los saltos como mecanismo para  controlar el flujo de ejecución ( ("código código espagueti espagueti"). ).

  

 Lenguajes representativos
 

Programación por refinamientos sucesivos La estructura del texto ayuda a entender el programa Lenguaje representativo  Algol

Tecnología de la Programación

Paradigmas de Programación ‐ 3

Tecnología de la Programación

Paradigmas de Programación ‐ 4

Programación imperativa (y 3)
 Programación procedural

Programación declarativa (1)
 Concepto
 

Abstracción de acciones y principio de localidad
 

Procedimientos (o subrutina) y ámbitos de las variables Módulos (o librerías) que agrupan procedimientos Tipos abstractos de datos que encapsulan un tipo y sus operaciones

Describe qué computación se hace sin decir cómo se hace Lenguajes (dominios específicos)
Expresiones p  regulares, g  p parte de SQL Q  (p. p  e. SELECT), HTML/XML, etc.

Abstracción de datos

 Paradigmas derivados

Lenguajes L j  representativos t ti Ada, Pascal, C, etc. El flujo de ejecución del programa es determinado por eventos  que ocasionan la invocación (llamada) de procedimientos

Programación lógica
Declaración de hechos y reglas, la computación consiste en inferir nuevos  hechos a partir de los hechos y reglas declarados

 Programación orientada a eventos

Lenguaje representativos
PROLOG

Dominio de aplicación
Inteligencia artificial

Tecnología de la Programación

Paradigmas de Programación ‐ 5

Tecnología de la Programación

Paradigmas de Programación ‐ 6

p ( . ) :. Tecnología de la Programación Paradigmas de Programación ‐ 9 Tecnología de la Programación Paradigmas de Programación ‐ 10 Programación orientada a objetos (1)  Concepto  Programación orientada a objetos (y 2)  Paradigmas derivados    Describe la computación en términos de objetos y su  interrelación. etc  (la mayoría no son puros)  Dominio de aplicación Uso general pero históricamente ligado a la inteligencia artificial Tecnología de la Programación Paradigmas de Programación ‐ 8 Programación declarativa (y 4)  Ejemplo Haskell --Sumar Sumar elementos de una lista sumar :: [Int] -> Int sumar [] = 0 sumar (x:xs) = x + sumar(xs) --Algoritmo de ordenación quicksort qs::Ord a=>[a]->[a] qs [] = [] qs (p:xs) ( ) = qs [x|x<-xs.n] t deja solo los --numeros numeros primos) eratostenes :: [Int] -> [Int] eratostenes [] = [] eratostenes (x:xs) | not (null xs) && x^2 > last xs = (x:xs) | otherwise = x: eratostenes [y | y <. Haskell  Erlang. JBeans. OO  etc. es decir. padrede(carlos. j  representando p  un cambio en el estado del programa p g  (p. ActiveX. Yes % pablo es abuelo de maria? ?.  Lenguajes: CORBA. padrede(C. % juan es padre de maria padrede(pablo. OO  programación funcional OO. debora). Erlang  etc.B) :. Lisp.x>=p] [ | < > ] --Criba de eratostenes (de una lista dada [2.  Programación orientada a componentes  La computación se realiza mediante unidades de composición  (componentes) desarrolladas previamente que pueden ser  instaladas de forma independiente. pueden ser el resultado de una  expresión o un argumento de otra función  Lenguajes representativos  Lisp  Scheme.padrede(B.padrede(A. Python. l l pueden Lenguaje: JADE (Java Agent DEvelopment Framework) Describe la computación en términos de aspectos transversales a las  clases de objetos Lenguaje: AspectJ Paradigmas de Programación ‐ 12  Programación g  orientada a aspectos p   Tecnología de la Programación Paradigmas de Programación ‐ 11 Tecnología de la Programación . Ada. ) . % A y B son hermanos si el padre de A es también el padre de B y si A y % B no son lo mismo hermanode(A. marcela).) etc ) La mayoría de lenguajes actuales soportan la OO Java.Programación declarativa (2)  Ejemplo de PROLOG %% declaraciones padrede(juan.padrede(X. marcela).x<p] [ | < < ] ++ [ [p] ] ++ qs [x|x<-xs. y `mod` x /= 0] Programación concurrente  Concepto  Divide la computación en partes (procesos/threads) que se  ejecutan paralelamente   En un procesador (ejecución en tiempo compartido. etc.B) padrede(C. ( ). modificar  una variable global. A \== B. C (POSIX). . Ada.A). maria). juan). etc. Lisp. padrede(C.B) :.xs. C++.C). ). padrede(X maria). pretendiendo reflejar la realidad física del  problema Uso mayoritario en la industria del software El resto de paradigmas pueden ser OO (programación  procedural OO..hermanode(juan. Yes ?. denominándose entonces programación paralela  Lenguajes representativos  La mayoría de lenguajes actuales soportan la concurrencia Java. %% consultas % juan es hermano de marcela? ?. (p  e. etc.B). maria) X = juan Tecnología de la Programación Paradigmas de Programación ‐ 7 Programación declarativa (3)  Paradigmas derivados  Programación funcional  Describe la computación en términos de funciones que el  computador debe evaluar  La evaluación no tiene efectos laterales (funcional puro) Efecto lateral: cualquier cosa hecha en una función que persista después de su  ejecución. preemptive o no) En varios procesadores (máquina multicore/multiprocesador o sistema  distribuido).abuelode(pablo. % A es abuelo de B si A es padre de C y C es padre B abuelode(A. % pablo es padre de juan padrede(pablo. J . p % A es hijo de B si B es padre de A hijode(A. p ( .B).A) ( . hacer una I/O)  Basado en funciones de orden superior Las funciones son un dato más. maria). Programación orientada a agentes   Lenguajes representativos   Describe la computación mediante entidades (agentes) que pueden  actuar autónomamente con el fin de alcanzar objetivos definidos. Scheme  Haskell.  d  cooperar con otros t  agentes t  para alcanzarlos.

com/ws"> <productId>827635</productId> p p </getProductDetails> </soap:Body> </soap:Envelope> <!– Respuesta del proveedor --> <! > <soap:Envelope xmlns:soap="http://schemas.50</price> price 96. Black Polyester. UDDI  etc ) WSDL. etc.com/ws"> <getProductDetailsResult> <productName>Toptimate 3-Piece Set</productName> <productId>827635</productId> <description>3-Piece luggage set.  WSDL  UDDI.xmlsoap.50 /price <inStock>true</inStock> </getProductDetailsResult> </getProductDetailsResponse> </soap:Body> /soap:Body </soap:Envelope> Tecnología de la Programación Paradigmas de Programación ‐ 14   Describe la computación en términos de servicios que pueden  representar procesos Estrechamente relacionado con las Service Oriented Architecture (SOA) Muy utilizado actualmente Estándares relacionados con Web Services (XML.xmlsoap.org/soap/envelope/"> <soap:Body> <getProductDetails xmlns="http://warehouse.</description> <price>96.)  Lenguajes representativos   Dominio de aplicación Web programming Tecnología de la Programación Paradigmas de Programación ‐ 13 . SOAP.Programación orientada a servicios (1)  Concepto  Programación orientada a servicios (y 2)  Ejemplo SOAP <!– Solicitud de información de un p producto a un p proveedor --> <soap:Envelope xmlns:soap="http://schemas.example.org/soap/envelope/"> <soap:Body> <getProductDetailsResponse xmlns="http://warehouse.example.