Download UNIDAD 1: PARADIGMAS DE PROGRAMACIÓN

Document related concepts

Ocaml wikipedia , lookup

Oz (lenguaje de programación) wikipedia , lookup

Programación funcional wikipedia , lookup

Scala (lenguaje de programación) wikipedia , lookup

Función de orden superior wikipedia , lookup

Transcript
PROGRAMACION ORIENTADA A OBJETOS
ANALISTA PROGRAMADOR UNIVERSITARIO
PLAN 2008 – AÑO 2012
UNIDAD ACADEMICA SAN SALVADOR
UNIDAD 1: PARADIGMAS DE PROGRAMACIÓN
UNIDAD 1: PARADIGMAS DE PROGRAMACIÓN
CONCEPTOS
Paradigmas

Thomas Kuhn, en su libro publicado en 1962, The Structure of Scientific Revolutions,
refiere el concepto a la forma en que un científico percibe al mundo y a la estructura de
teorías y suposiciones que modifican esta percepción.
Otro punto importante para nuestro interés es el señalamiento que hace Kuhn acerca
de cómo el éxito de un paradigma es consecuencia de su efectividad para resolver
algún problema. En breve, un paradigma es el resultado de un proceso social en el
cual un grupo de personas desarrolla nuevas ideas y crea principios y prácticas
alrededor de estas ideas, y no solamente un conjunto de prácticas y conocimientos
objetivamente validado.

Un paradigma está constituido por los supuestos teóricos generales, las leyes y las
técnicas para su aplicación que adoptan los miembros de una determinada comunidad
científica. Esto es:
 Las leyes explícitamente establecidas y los supuestos teóricos. Por ejemplo,
las leyes de movimiento de Newton forman parte del paradigma newtoniano
y las ecuaciones de Maxwell forman parte del paradigma que constituye la
teoría electromagnética clásica.
 El instrumental y las técnicas instrumentales necesarios para hacer que las
leyes del paradigma se refieran al mundo real. La aplicación en astronomía
del paradigma newtoniano requiere el uso de diversos telescopios, junto con
técnicas para su utilización y diversas técnicas para corregir los datos
recopilados.
 Un componente adicional de los paradigmas lo constituyen algunos
principios muy generales que guían el trabajo dentro del paradigma.

Podemos decir que, los paradigmas son marcos de referencia que imponen reglas sobre
cómo se deben hacer las cosas, indican qué es válido dentro del paradigma y qué está
fuera de sus límites. Un paradigma distinto implica nuevas reglas, elementos, límites y
maneras de pensar, o sea implica un cambio.

Los paradigmas pueden ser considerados como patrones de pensamiento para la
resolución de problemas.

Un paradigma es un modelo o esquema fundamental que organiza nuestras opiniones
con respecto a algún tema en particular. Los paradigmas establecen límites adoptados
por los miembros de una comunidad científica para resolver problemas sustentados por
los principios, leyes, supuestos teóricos y técnicas que la conforman.
Paradigmas de Programación

Robert Floyd los definió como un proceso de diseño que va más allá de una gramática,
reglas semánticas y algoritmos, sino que es un conjunto de métodos sistemáticos
aplicables en todos los niveles del diseño de programas. Esto es
Representan un enfoque particular o filosofía para la construcción del software. No
es mejor uno que otro sino que cada uno tiene ventajas y desventajas. También hay
situaciones donde un paradigma resulta más apropiado que otro.
Prof Adj Ing Ariel Alejandro Vega
1
PROGRAMACION ORIENTADA A OBJETOS
ANALISTA PROGRAMADOR UNIVERSITARIO
PLAN 2008 – AÑO 2012
UNIDAD ACADEMICA SAN SALVADOR
UNIDAD 1: PARADIGMAS DE PROGRAMACIÓN

Los paradigmas de programación son propuestas tecnológicas adoptadas por la
comunidad de desarrolladores que se enfocan a resolver uno o varios problemas
definidos y delimitados.

Un paradigma de programación es un modelo básico de diseño y desarrollo de
programas, que permite producir programas con unas directrices específicas, tales
como: estructura modular, fuerte cohesión, alta rentabilidad, etc.

Un paradigma de programación es una colección de modelos conceptuales que en
conjunto modelan el proceso de diseño y determinan la estructura de un programa. Esa
estructura conceptual de modelos está pensada de forma que los modelos determinan la
forma correcta de los programas y controlan el modo en que el desarrollador piensa y
formula soluciones, que luego son implementadas en un lenguaje de programación. Para
que este proceso sea efectivo las características del lenguaje deben reflejar
adecuadamente los modelos conceptuales de ese paradigma. Cuando un lenguaje refleja
bien un paradigma particular, se dice que soporta el paradigma, y en la práctica un
lenguaje que soporta correctamente un paradigma, es difícil distinguirlo del propio
paradigma, por lo que se identifica con él.
PARADIGMAS DE PROGRAMACIÓN
Paradigma Imperativo

En el paradigma imperativo se describen sentencias que modifican el estado de un
programa. En este paradigma se expresa como debe solucionarse un problema
especificando una secuencia de acciones u algoritmos a realizar a través de uno o más
procedimientos denominados subrutinas o funciones. Dentro de esta categoría se
engloban la programación estructurada que restringe el uso de la instrucción goto, la
programación modular y la programación orientada a objetos. Cada una de estas
extensiones o evoluciones han permitido mejorar el mantenimiento y la calidad de los
programas imperativos.
Paradigma Declarativo

Al paradigma imperativo se le contrapone el paradigma declarativo en el que se
describe la lógica de computación necesaria para resolver un problema sin describir
un flujo de control de ningún tipo. Efectivamente, en la programación declarativa no
es necesario definir algoritmos ya que se detalla la solución del problema en lugar de
cómo llegar a esa solución.
En la programación declarativa, la solución es alcanzada a través de mecanismos
internos de control pero no se especifica exactamente como llegar a ella. Las variables
son utilizadas con transparencia referencial, es decir una expresión puede ser
sustituida por el resultado de ser evaluada en el programa sin alterarlo semánticamente.
Dentro de esta categoría se engloban la programación, la programación lógica y la
programación restringida o con restricciones entre otras.
Diferencias principales
La principal diferencia entre ambos paradigmas radica en que en la programación imperativa
se describe paso a paso un conjunto de instrucciones que han de ejecutarse con la finalidad de
variar el estado del programa y resolver un problema para hallar una solución. Es decir, se
describe un algoritmo en el que se detallan los pasos secuenciales necesarios a seguir para la
resolución de un problema.
Prof Adj Ing Ariel Alejandro Vega
2
PROGRAMACION ORIENTADA A OBJETOS
ANALISTA PROGRAMADOR UNIVERSITARIO
PLAN 2008 – AÑO 2012
UNIDAD ACADEMICA SAN SALVADOR
UNIDAD 1: PARADIGMAS DE PROGRAMACIÓN
En la programación declarativa solo se describe el problema pero no los pasos necesarios para
llegar a su solución, la cual es hallada mediante mecanismos internos de inferencia de
información a partir de la descripción del problema en sí.
El siguiente cuadro describe las principales diferencias entre ambos paradigmas
¿Cómo diferenciar una de la otra?
Podemos diferenciarlas sin temor a equivocarnos en los siguientes supuestos:
 Un programa que describe que problemas deben resolverse pero no como, está
programado con programación declarativa

Cualquier programa que evita los efectos secundarios o es referencialmente
transparente, está programado con programación declarativa

Todo lo que no cuadre con las dos afirmaciones anteriores usa programación imperativa
o una mezcla de ambas
PARADIGMA IMPERATIVO
Los elementos más importantes de este paradigma son:

Variables: Son elementos que se crean en memoria para almacenar un valor que puede
cambiar a lo largo de la ejecución del programa. El funcionamiento del paradigma
imperativo sería imposible sin las variables, ya que los estados de un programa son
representados y diferenciados por su conjunto de variables y sus contenidos.

Tipos de datos: Son abstracciones que representan el conjunto válido de valores que
puede almacenar una variable.

Expresiones: Aunque son la forma fundamental de programar instrucciones, en la
programación imperativa su papel más importante está en las sentencias de asignación.
Una sentencia de asignación sirve para modificar el valor de una variable y así cambiar
el estado de un programa. Las asignaciones pueden utilizar operadores. Los operadores
empleados pueden ser matemáticos, lógicos o una combinación de ambos.

Estructuras de Control: Las estructuras de control son mecanismos que un lenguaje
requiere para realizar dos tareas indispensables:
1. Seleccionar una opción entre dos o más flujos de control alternativos (sentencia si,
según, etc.)
2. Iterar la ejecución de una serie de sentencias. Las sentencias de iteración
representan el verdadero poder del cómputo, ejecutan un bloque de sentencias
desde cero hasta un número teóricamente infinito de veces (sentencias mientras,
repetir, para, etc.)
Prof Adj Ing Ariel Alejandro Vega
3
PROGRAMACION ORIENTADA A OBJETOS
ANALISTA PROGRAMADOR UNIVERSITARIO
PLAN 2008 – AÑO 2012
UNIDAD ACADEMICA SAN SALVADOR
UNIDAD 1: PARADIGMAS DE PROGRAMACIÓN
PARADIGMA FUNCIONAL
Es un tipo de paradigma declarativo. Está basado en el concepto matemático de función:
El paradigma funcional considera al programa como una función matemática, donde el dominio
representaría el conjunto de todas las entradas posibles (inputs) y el rango sería el conjunto de
todas las salidas posibles (outputs). La forma en que funciona puede ser entendida como una
caja negra
Al observar la figura anterior, podríamos pensar que cualquier tipo de programación podría ser
clasificada como programación funcional y esto es relativamente cierto a excepción de unos
puntos claves:
En los lenguajes funcionales no existe el concepto de variables y consecuentemente tampoco
existen operaciones de asignación. Aunque podría parecer que los parámetros de una función se
comportan como una variable (puesto que pueden llevar un nombre y su uso es de hecho
parecido al de las variables), esto es incorrecto: El valor de los parámetros es dado como fijo al
inicio de la función.
La existencia de una propiedad llamada transparencia referencial (Referential transparency) que
indica que una función sólo depende de sus parámetros y que tendrá efecto únicamente en su
resultado, por lo que podríamos llamar a una función arbitrariamente sin tener efectos
colaterales en el resto de las computaciones.
Una función puede ser utilizada como parámetros y resultados de cualquier otra función. Los
lenguajes más utilizados dentro de este paradigma son Standard ML,Haskell y Scheme.
PARADIGMA LÓGICO
El paradigma lógico difiere de forma importante de otros paradigmas. No sólo en su sintaxis o
semántica, sino que en él la lógica representa conocimiento, el cual es manipulado mediante
inferencias. A diferencia de los demás paradigmas, trabajar en este significa especificar qué
hacer y no cómo hacerlo, por ello son llamados lenguajes declarativos. El proceso general de la
programación lógica es que a partir de un conjunto de reglas (axiomas) e inferencias podamos
comprobar nuevas proposiciones que nos sean relevantes. Este proceso está basado en reglas de
lógica de primer orden. Al ser un paradigma bastante abstracto vale la pena esclarecerlo a través
de algunos ejemplos. Para ello se utilizará nociones de SQL el cual se estima es ampliamente
conocido. Definamos un conjunto de películas mexicanas inmortales con algunos de sus
atributos:
Prof Adj Ing Ariel Alejandro Vega
4
PROGRAMACION ORIENTADA A OBJETOS
ANALISTA PROGRAMADOR UNIVERSITARIO
PLAN 2008 – AÑO 2012
UNIDAD ACADEMICA SAN SALVADOR
UNIDAD 1: PARADIGMAS DE PROGRAMACIÓN
TITULO
FURIA DE TITANES 2
LA PASION DE CRISTO
ESTELAR
Sam Worthington
Jim Caviezel
GENERO
Acción
Drama
ESTRENO
2012
2004
Ahora, suponiendo este conjunto, vamos a realizar algunas operaciones sobre él. Primero, una
consulta que devuelve el conjunto ordenado de forma descendente por su fecha de estreno:
TITULO
LA PASION DE CRISTO
FURIA DE TITANES 2
ESTELAR
Jim Caviezel
Sam Worthington
GENERO
Drama
Acción
ESTRENO
2004
2012
Después tratemos de seleccionar un subconjunto de películas a través de predicados, que son
consultas que involucran el operador where. En el ejemplo se seleccionan todas las películas
que no sean del género “Drama”.
TITULO
LA PASION DE CRISTO
ESTELAR
Jim Caviezel
GENERO
Drama
ESTRENO
2004
En estos dos ejemplos, hemos declarado únicamente que es lo que queríamos hacer con nuestro
conjunto, pero no definimos aspectos como, cuantas veces iterar alguna instrucción,
especificaciones para hacer cada comparación, etc. Esta es la idea subyacente en la
programación lógica. El lenguaje de programación más conocido es Prolog.
PARADIGMA ORIENTADO A OBJETOS
Es un tipo de paradigma imperativo en el cual las variables claves de desarrollo son entidades
denominadas objetos, las cuales a su vez agrupan internamente conjuntos de variables
denominadas atributos y conjuntos de funciones o procedimientos denominados operaciones.
Las operaciones de los objetos definen sus responsabilidades o comportamiento. El conjunto de
los valores asignados a los atributos del objeto se denomina estado. El otro aspecto fundamental
de este paradigma es el estudio de las interrelaciones entre objetos. Cuando un objeto necesita
un servicio (un método de un objeto) que brinda otro objeto, el primero se lo solicita por medio
un mensaje. De esta forma una aplicación orientada a objetos es una secuencia de mensajes que
los objetos se envían entre sí para colaborar en la realización de una tarea específica. La forma
en que se realiza el envío y respuesta de mensajes depende del lenguaje de programación, a esto
se denomina protocolo de mensajes.
EJEMPLOS DE LENGUAJES PARA DIVEROSS PARADIGMAS
Algunos lenguajes de programación pueden soportar múltiples paradigmas de programación.
Por ejemplo, C++ puede ser empleado para desarrollar software utilizando para ello un modelo
Prof Adj Ing Ariel Alejandro Vega
5
PROGRAMACION ORIENTADA A OBJETOS
ANALISTA PROGRAMADOR UNIVERSITARIO
PLAN 2008 – AÑO 2012
UNIDAD ACADEMICA SAN SALVADOR
UNIDAD 1: PARADIGMAS DE PROGRAMACIÓN
de programación puramente orientado a objetos o bien puramente estructurado. En casos como
el de C++, los programadores los deciden que paradigma utilizar.
Por otro lado, algunos lenguajes han sido diseñados para soportar un único paradigma de
programación, ese es el caso de Smalltalk que soporta únicamente la programación orientada a
objetos o Haskell que solo soporta la programación funcional.
Algunos paradigmas prohíben el uso de ciertos mecanismos o técnicas. Por ejemplo, en la
programación funcional se elimina el uso del efecto secundario en las funciones mientras que
en la programación estructurada se desaprueba o incluso elimina el uso de la sentencia goto.
Es realmente común el diseño de lenguajes que soporten múltiples paradigmas de
programación. Estos lenguajes son aquellos que soportan al menos dos paradigmas. Dentro de
esta categoría podemos encontrar nuevas caras y viejos conocidos:

Scala: Imperativo, orientado a objetos, funcional, genérico y concurrente

Erlang: Funcional, concurrente y distribuido

Perl: Imperativo, orientado a objetos y funcional

PHP: Imperativo, orientado a objetos, funcional y reflexivo

JavaScript: Imperativo, orientado a objetos (prototipos) y funcional

Java: Imperativo, orientado a objetos, reflexivo y genérico

Python y Ruby: Imperativo, orientado a objetos, reflexivo y funcional

C++: Imperativo, orientado a objetos, funcional y genérico

C#: Imperativo, orientado a objetos, funcional (lambda), reflexivo y genérico
Prof Adj Ing Ariel Alejandro Vega
6