Practicas LPR - Grupo 27

viernes, noviembre 10, 2006

Conceptos del paradigma de Orientación a Objetos

El objetivo de la abstracción de los datos, es proporcionar a los usuarios una visión abstracta de los datos, es decir, el sistema esconde ciertos detalles del cómo se almacenan y mantienen los datos (Tomar los mas interesante en un determinado nivel). Los objetos son descritos como implementaciones de tipos de datos abstractos. Es una descripción o especificación simplificada de un sistema que hace énfasis en algunos detalles significativos y suprime los irrelevantes. la abstracción debe enfocarse más en qué es un objeto y qué hace antes, de pensar en la implementación. Por ejemplo, un automóvil puede abstraerse como un objeto que sirve para desplazarse a mayor velocidad, sin importar cómo lo haga. Una característica de la abstracción es que un objeto puede abstraerse de diversas forma, dependiendo del observador. Así, el automóvil que se mencionaba puede ser visto como un objeto de colección por un coleccionista, una herramienta de trabajo por un corredor profesional, una mercancia por un vendedor, etc. (http://www.lawebdelprogramador.com).

La encapsulación se refiere a impedir el acceso a determinados métodos y propiedades de los objetos estableciendo así que métodos y propiedades de estos pueden ser utilizados desde el resto del código. Esto se consigue en otros lenguajes de programación utilizando modificadores de acceso, que definen si cualquiera puede acceder a esa función o variable (public) o si está restringido el acceso a la propia clase (private). Para acceder al valor de las variables private o modificar su valor se añaden también funciones cuyo único cometido es este, y a las que normalmente se les da el nombre de getVariable y setVariable. (http://www.wikilearning.com/).

Una de las ventajas mayores que ofrece la programación orientada a objetos es la posibilidad que una clase herede toda la funcionalidad de otra clase, añadiendo extra funcionalidad particular. La clase que toma prestada la funcionalidad de otra se llama subclase, mientras la que presta su funcionalidad se llama superclase. Este concepto se llama herencia. Una vez hecha esta asociación, la subclase tiene aceso a todos métodos y propiedades de la superclass. (http://www.iua.upf.es).

El hecho que existe heréncia entre varios objetos nos permite tener un nuevo concepto: el polimorfismo. Cuando estamos creando una relación padre-hijo entre clases, la subclase no solo extiende las funcionalidades de la superclase: efectivamente, cada subclase es una superclase. Como toda la funcionalidad del padre existe en el hijo, podemos usar el hijo en cualquier sitio que podriamos usar el padre. El contrario no es cierto: el padre no tiene toda la funcionalidad presente en el hijo (el hijo ha implementado funcionalidad adicional), así que el padre no se puede usar donde el hijo. El polimorfismo es un concepto muy importante porqué permite crear funcionalidad sobre objetos genericos. Luego, esta funcionalidad la interpretarán los objetos especificos según sus propias necesidades. (http://www.iua.upf.es).



Conceptos de Programación Declarativa

Cláusulas de Horn:
La programación lógica trata de representar conocimiento a través de predicados en forma de hechos y reglas (cláusulas de Horn).
Un predicado o su negación es un
literal.
Un literal positivo es un hecho.
Una cláusula o regla es una consecuencia lógica: si se cumplen ciertos literales, se puede afirmar un cierto hecho. Se representa de la siguiente manera:
a1 - b1, ... , br
.
.
.
ak - b1, ... , br

Dónde las ai son las conclusiones (literales positivos) y las bj son las premisas (literales negativos).
Si no hay bi se llama hecho en lugar de cláusula.
Si no hay ai se llama cláusula negativa y sirve como consulta.
Si no hay premisas ni conclusión tenemos un cláusula vacía.

Unificación:
Los conceptos de sustitución e instanciación son nociones básicas en el motor de un intérprete lógico.
Una sustitución es una lista de pares variable - término y la aplicación de una sustitución a un termino lógico es una instancia de dicho término.
Las sustituciones son utilizadas en programación lógica para, mediante su aplicación a las variables contenidas en una cláusula, obtener la expresión de la veracidad de una relación lógica particular a partir de la veracidad de una relación lógica más general incluida en el programa. Más formalmente, dicho concepto se conoce como unificación.
Un unificador de dos términos lógicos T1 y T2 es una sustitución θ , tal que T1θ = T2θ.

Resolución:

El sistema de resolución es un sistema sin ningún axioma y con una sola regla que se denomina regla de resolución. A partir de una pregunta y una sentencia del programa se obtiene una nueva pregunta. Es un demostrador de teoremas.
Este proceso suele representarse en forma arborescente con árboles de resolución, dónde se indican las sustituciones que han sido utilizadas y el conjunto de expresiones a las que han sido aplicadas. Cada una de las expresiones que constituyen los nodos del árbol se denominan objetivos ( conjunto de cuestiones en las que hemos descompuesto el problema representado por la pregunta ).
Cuando no queda ningún objetivo por resolver es que hemos conseguido demostrar nuestro teorema.

Control:
La idea central del paradigma de progamación lógica se sintetiza en la ecuación informal de Kowalski: algoritmo = lógica + control.
La programación lógica contempla el control como parte del modelo de cómputo. Esto libera al programador del uso de estructuras de control.
El control del orden en prolog se hace o bien mediante el orden de las sentencias y literales, o bien mediante cortes. Ya sean cortes verdes (que no alteran el significado declarativo del programa y generalmente expresan determinismo) o cortes rojos (que sí afectan a la semántica declarativa del programa)

Fuentes:
-
"Programación Lógica" de M. Vilares - M. Alonso - A. Valderruten (pags. 49-54, 67-71, 96) Ediciones Tórculo
- Transparencias de programación lógica y funcional . Prof. Jesús Almendros (Universidad de Almería)
- Apuntes de programación lógica de Marisa Navarro ( Facultad de Informática de San Sebastián)