Publicado el 12 de Diciembre del 2018
1.309 visualizaciones desde el 12 de Diciembre del 2018
347,5 KB
37 paginas
Creado hace 11a (04/02/2013)
Asignatura 780014
Programación Avanzada
TEMA 1 – PARADIGMAS DE PROGRAMACIÓN
Paradigmas de Programación
Como primera idea
Un paradigma de programación (PdP) es una
forma de pensar a la hora de programar
Por ejemplo, nuevos lenguajes han inducido nuevos PdP
Fortran (1957 - imperativo)
Lisp (1959 - funcional)
Prolog (1972 - lógico)
Simula (1979 - orientado a objetos)
PdP en el ciclo de desarrollo software
Paradigmas de Programación
Programación concurrente.
Programación declarativa.
Programación distribuida.
Programación de tiempo real.
Programación estructurada.
Programación funcional.
Programación imperativa.
Programación lógica.
Programación modular.
Programación orientada a módulos.
Programación orientada a objetos.
Programación orientada a procedimientos.
Programación cliente/servidor.
UTILIDAD Y CUMPLIMIENTO DE LOS PDP
Establecer clasificaciones
Ayuda a comprender la evolución, relaciones y características
de los lenguajes de programación
Describir lenguajes
En base a los paradigmas que cumplen
Establecer características de un nuevo
lenguaje
Planificar sus características para que se ajuste a lo deseado
Niveles de cumplimiento de un paradigma
Paradigma no permitido
Un PdP no puede ser utilizado o conseguido con este lenguaje porque
las construcciones del mismo no lo permiten.
Paradigma permitido
Es posible programar siguiendo el paradigma pero no es sencillo o
cómodo porque el lenguaje no favorece su utilización.
Paradigma soportado
Cuando es la recomendación más común para el lenguaje, cuando la
programación habitual lo sigue e incluso resulta complejo y difícil no
cumplir el paradigma.
Paradigma obligatorio
Será imposible no seguir el paradigma porque no hay construcciones
en el lenguaje que permitan salir de la norma que define el
paradigma.
Niveles de cumplimiento de un paradigma
Pascal, y la programación estructurada.
Soporta la programación estructurada aunque es posible utilizar la
orden "goto" y romper con este PdP.
Java, y la programación orientada a objetos
No es posible realizar ni un solo programa que no defina una clase y
use objetos.
C, y la programación estructurada
"return“ y "break“ permiten romper los bloques de código y
funciones en contra de la programación estructurada.
Fortran, y la programación orientada a objetos
Paradigma no permitido ya que no existe ninguna forma de crear
objetos
Ejemplos de niveles de cumplimiento
Esta tabla presenta ejemplos de posibles niveles de
cumplimiento de algunos lenguajes y paradigmas
Relaciones entre PDP
Se pueden observar las relaciones entre los PDP
desde distintas perspectivas según se atienda a los
distintos matices de cada paradigma
Perspectiva de clasificación
Perspectiva evolutiva
Perspectiva de relación con el hardware.
Perspectiva de clasificación
Podemos agrupar paradigmas según la
clasificación que crean sobre los lenguajes
Paradigmas generales
Establecen una partición sobre el total de los lenguajes de
programación
Paradigmas complementarios
Pares de paradigmas con la particularidad de que no cumplir uno
implica cumplir el otro
Un ejemplo muy claro de este tipo de paradigmas son el
paradigma imperativo y el declarativo.
Perspectiva de clasificación
Paradigmas específicos
Establecen una partición que afecta a todos los lenguajes
Cada lenguaje, cumple o no el paradigma
En este caso, el hecho de no cumplir el paradigma no tendrá
relevancia ninguna para la caracterización de un lenguaje.
Un ejemplo de este tipo de paradigmas es la programación en
tiempo real
Perspectiva de clasificación
Clasificaciones de lenguajes solapadas
Perspectiva de clasificación
La clasificación también puede ser según el tipo de
restricciones que el paradigma establece en los
lenguajes que lo cumplen: dos categorías:
Paradigmas orientados a establecer la misión del lenguaje o
“Paradigmas de Objetivo”
Paradigmas orientados a establecer la forma que deberán
tener los programas de un lenguaje o “Paradigmas de
Estructura”
Paradigmas de objetivo
Establecen el significado de las sentencias
En su traducción a código máquina
Y en su representación de conceptos modelados en la fase de
diseño.
Un ejemplo de este tipo de paradigmas:
P. de tiempo real, que describe capacidades que no forman parte
de ningún otro paradigma
Más ejemplos:
Programación Concurrente, Declarativa, Distribuida, Funcional,
Imperativa, Lógica.
Paradigmas de estructura
Establecen recomendaciones de estructura de
programas para evitar problemas inherentes u
obtener ventajas
Ejemplos de estos paradigmas:
Programación Estructurada.
Programación Modular.
Programación Orientada a Módulos.
Programación Orientada a Objetos.
Programación Orientada a Procedimientos.
Perspectiva evolutiva
La evolución de los paradigmas es la evolución de la
programación.
Paradigma imperativo -> declarativo contrapuesto
Paradigmas sin organización -> paradigma estructurado ->
orientado a objetos -> orientado a aspectos
Paradigma secuencial -> paradigma concurrente ->
programación distribuida -> cliente/servidor
Perspectiva de relación con el hardware
los lenguajes de programación son siempre
abstracciones del HW
clasificar los paradigmas en función de su cercanía
al HW
imperativo VS declarativo
Descripción de algunos PdP
Veremos los más importantes:
Programación imperativa
Programación declarativa
Programación concurrente
Programación orientada a objetos
Programación de tiempo real
Programación imperativa
Lenguajes orientados a la acción (máquina de
Von Neumann)
describen “cómo” obtener los resultados
Sentencias de asignación y sentencias de control
de flujo
Ejemplos:
Fortran (1957), Algol (1960), Pascal (1971), C (1972), C++
(1985), o Java (1995)
Programación imperativa
Fortran
Programación declarativa
Los programas describen “qué” se desea realizar con
la memoria, pero no el manejo directo sobre ella
Se pueden dividir en dos: funcionales y lógicos
P.Funcional: se modelan mediante funciones y expresiones. No
hay procedimientos explícitos. Uso extensivo de la recursión.
P.Lógica: hechos y relaciones como medio para representar las
tareas que se quieren realizar.
Programación funcional
Ventajas:
Gran expresividad
Extensibilidad
Facilidad de corrección
Ausencia de efectos laterales
Inconvenientes:
Ineficiente (primeras implementaciones)
Complicada
Ejemplos:
LISP (1959), APL (1962), ISWIM (1966), SCHEME (1975), FP
(1977), HOPE (1980), MIRANDA (1985), ML (1986),
HASKELL (1988), CAML(), HUGS()
Programación lógica
Basada en el razonamiento lógico
Sistemas que tratan responder a las demandas del
usuario
Manejan relaciones entre datos (hechos) en vez de
funciones
Ejemplo:
PROLOG (1972)
Programación concurrente
Capaces de realizar simultáneamente varias tareas
Algoritmos que permitan dividir el trabajo en tareas
Uso de técnicas, lenguajes, librerías y hardware
específico, para conseguir el paralelismo
Dos enfoques distintos de paralelismo:
Programación concurrente de memoria compartida
Programación concurrente distribuida.
Programación de memoria común
Múltiples tareas de ejecución simultánea sobre una
única máquina con una única memoria.
El comportamiento es independiente del número de
procesadores.
El rendimiento aumenta con el número de procesadores.
La concurrencia plantea problemas nuevos
Programación distribuida
Se supera la barrera de la máquina única y la
memoria única.
Los procesos intercambian información a través de
una red de comunicaciones.
El paradigma más utilizado es el que implementa el
modelo Cliente-Servidor
Programación orientada a objetos
Evolución del Paradigma Estructurado
El Objeto como entidad central del paradigma
Objeto = tipo de datos que engloba características
(estructuras de datos) del objeto del mundo real
Los objetos modelan las características (atributos) y los
algoritmos para manipularlas (métodos).
Programación orientada a objetos
Ventajas:
Encapsulación => alto grado de reutilización del código
(se incrementa con la herencia).
Representación más directa del mundo real en el código
(abstracción).
Se adapta mejor a la informática distribuida y a los modelos
cliente/servidor.
Se pueden crear desarrollos más flexibles y el proceso es
más rápido.
Programación orientada a objetos
Lenguajes O.O.:
Simula (1967)
Smalltalk (1980)
Eiffel (1988)
Muchos de los actuales:
C++, Objetive C, CLOS, Ada o Java.
Programación de tiempo real
Proporciona las técnicas para controlar el
funcionamiento de sistemas bajo ciertas
restricciones de tiempo
Control permanente y simultáneo sobre la ejecución
Manejo de interrupciones para cumplir las
restricciones.
Necesitan acceder directamente al HW de E/S.
Aplicaciones de control donde el sistema reacciona
ante un cambio de estado.
Ejemplos de programas
Modula-2
(* Copyright (C) 1987, 1990 Jensen & Partners
International *)
IMPLEMENTATION MODULE Strings;
PROCEDURE Assign ( source : ARRAY OF
CHAR ;
VAR dest : ARRAY OF CHAR ) ;
BEGIN
Str.Copy(dest,source) ;
END Assign ;
PROCEDURE Insert ( substr : ARRAY OF
CHAR;
VAR str : ARRAY OF CHAR ;
inx : CARDINAL ) ;
BEGIN
Str.Insert ( str,substr,inx ) ;
END Insert ;
PROCEDURE Pos ( substr : ARRAY OF
CHAR;
VAR str : ARRAY OF CHAR ) :
CARDINAL ;
BEGIN
RETURN Str.Pos(str,substr) ;
END Pos ;
PROCEDURE Copy ( str : ARRAY OF CHAR ;
inx : CARDINAL ;
len : CARDINAL ;
VAR result : ARRAY OF CHAR ) ;
BEGIN
Str.Slice(result,str,inx,len) ;
END Copy ;
PROCEDURE Concat ( s1,s2 : ARRAY OF
CHAR ;
Comentarios de: Tema 1 - Paradigmas de programación - Programación Avanzada (0)
No hay comentarios