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