Ilustrados comunidad mundial educativa
Inicio | Escribenos
User: Pass: Recordar ó (Registrate!)

| !Publicar Articulo¡

El paradigma orientado a objetos

Resumen: Herencia y polimorfismo. El Paradigma Concurrente. El Paradigma Logico. El paradigma funcional. Programación Orientada a Objetos (P.O.O.). ¿Qué es la P.O.O.?. Elementos básicos. Métodos. Características. Abstraccion. Encapsulamiento. Herencia. Polimorfismo. Modelos. Híbridos. Atributos. C . Java.El paradigma orientado a objetos (ver) - Herencia y polimorfismo.
2,507 visitas
Rating: 0
Tell a Friend
Autor: Leandro del Teso

Indice
1. Introduccion
2. Herencia y polimorfismo
3. El Paradigma Concurrente
4. El Paradigma Logico
5. El paradigma funcional

1. Introduccion

1-programacion orientada a objetos (p.o.o.).
Un proyecto de software es complejo. Las gui, acceso transparente a datos ycapacidad de trabajo
En red, lo hacen mas complejo aun. Para enfrentarse a esta complejidad nace lapoo.

2-que es la poo?.
Es una tecnica o estilo de programacion que utiliza objetos como bloquefundamental de Construccion.

3-elementos basicos de la poo.
Bloques
Son un conjunto complejo de datos (atributos) y funciones (metodos) que poseenuna determinada
Estructura y forman parte de una organizacion.
Los atributos definen el estado del objeto; los metodos, su comportamiento.

Metodos
Es un programa procedimental que esta asociado a un objeto determinado y cuyaejecucion solo
Puede desencadenarse a traves del mensaje correspondiente.

Mensajes
Es simplemente una peticion de un objeto a otro para que este se comporte de unamanera
Determinada, ejecutando uno de sus metodos.
Los mensajes comunican a los objetos con otros y con el mundo exterior. A estatecnica de enviar
Mensajes se la conoce como paso de mensajes.
Clases
Es un tipo definido por el usuario que determina la estructura de datos y lasoperaciones
Asociadas con ese tipo.

4-caracteristicas.
Abstraccion
Significa extraer las propiedades esenciales de un objeto que lo distinguen delos demas tipos de
Objetos y proporciona fronteras conceptuales definidas respecto al punto devista del observador.
Es la capacidad para encapsular y aislar la informacion de diseno y ejecucion.

Encapsulamiento
Es el proceso de almacenar en un mismo compartimiento (una caja negra) loselementos de una
Abstraccion (toda la informacion relacionada con un objeto) que constituyen suestructura y su
Comportamiento. Esta informacion permanece oculta tanto para los usuarios comopara otros objetos
Y puede ser accedida solo mediante la ejecucion de los metodos adecuados.

Herencia
Es la propiedad que permite a los objetos construirse a partir de otros objetos.
La clase base contiene todas las caracteristicas comunes. Las sub-clasescontienen las
Caracteristicas de la clase base mas las caracteristicas particulares de lasub-clase.
Si la sub-clase hereda caracteristicas de una clase base, se trata de herenciasimple.
Si hereda de dos o mas clases base, herencia multiple.

Polimorfismo
Literalmente significa "cualidad de tener mas de una forma". En poo,se refiere al hecho que una
Misma operacion puede tener diferente comportamiento en diferentes objetos. Enotras palabras,
Diferentes objetos reaccionan al mismo mensaje de modo diferente.

5-ventajas.
Modelos
La poo permite realizar un modelo de sistema casi independientemente de losrequisitos del
Proyecto. La razon es que en la poo la jerarquia la establecen los datos, encambio en la
Programacion estructurada la jerarquia viene definida por los programas.
Este cambio hace que los modelos se establezcan de forma similar al razonamientohumano y, por lo
Tanto, resulte mas natural.

Modularidad
Un programa es modular si se compone de modulos independientes y robustos. Estopermite la
Reutilizacion y facilita la verificacion y depuracion de los mismos. En poo, losmodulos estan
Directamente relacionados con los objetos. Los objetos son modulos naturales yaque corresponden
A una imagen logica de la realidad.

Extensibilidad
Durante el desarrollo de sistemas, ocurre la aparicion de nuevos requisitos, poreso es deseable
Que las herramientas de desarrollo permitan anadirlos sin modificar laestructura basica del
Diseno. En poo es posible lograr esto siempre y cuando se hayan definido deforma adecuada la
Jerarquia de clases, los atributos y metodos.

Eliminacion de redundancia
En el desarrollo de sistemas se desea evitar la definicion multiple de datos yfunciones comunes.
En poo esto se logra mediante la herencia (evita la definicion multiple depropiedades comunes a
Muchos objetos) y el polimorfismo (permite la modificacion de metodosheredados). Solo hay que
Definir los atributos y los metodos en el antepasado mas lejano que loscomparte.

Reutilizacion
La poo proporciona un marco perfecto para la reutilizacion de las clases. Elencapsulamiento y la
Modularidad nos permiten utilizar una y otra vez las mismas clases enaplicaciones distintas. En
Efecto, el aislamiento entre distintas clases significa que es posible anadiruna nueva clase o
Un modulo nuevo (extensibilidad) sin afectar al resto de la aplicacion.

6-lenguajes en poo.
Puros
Son los que solo permiten realizar programacion orientada a objetos. Ej:smalltalk, java.

Hibridos
Son los que permiten la poo con la programacion estructurada. Ej: c , pascal.

7-poo en c y java.
A)tipos de clases
Una de las principales decisiones al trabajar con poo es la de seleccion declases. Existen 4

Tipos:

  • Manejadoras de datos o de estados: su responsabilidad principal es mantener informacion

De datos o estado. Se reconocen como los sustantivos en la descripcion de unproblema y
Generalmente son los bloques de construccion mas importantes de un diseno.

  • Pozos o fuentes de datos: estas clases generan datos o los aceptan para procesarlos mas

Adelante. A diferencia de los anteriores, estas clases no retiene los datospor un periodo de
Tiempo sino que los genera sobre demanda o los procesa cuando se le llama.

  • Vistas: se encargan de la presentacion de la informacion.
  • Auxiliares o de ayuda: guardan poca o ninguna informacion de estado, pero que asisten en

La ejecucion de tareas complejas.

B)sintaxis de una clase
C :
Class nombre_clase [: [public/protected/private] clase_madre]
{
[lista de atributos];
[lista de metodos];
};
 

Java:
[public] [final/abstract] class nombre_clase [extends clase_madre]
[implements interface1, [interface2,...]...]
{

[lista de atributos];
[lista de metodos];
};

C)modificadores de acceso a miembros de clases
Existen 3 tipos de usuarios de una clase:

  • La propia clase.
  • Usuarios genericos (otras clases, metodos, etc)
  • Clases derivadas.

Cada usuario tiene distintos privilegios o niveles de acceso.

C :
Private
Por defecto todo lo declarado dentro de la clase es privado y solo puede seraccedido por
Funciones miembro o por funciones amigas.
Public
Pueden ser accedidos por funciones miembro y no miembro de una clase.
Protected
Pueden ser accedidos por funciones miembro, por funciones amigas o por funcionesmiembro de sus
Clases derivadas.
Java:
Private
Solo puede ser accedida por metodos propios de la clase.
Private-protected
Pueden ser accedidos por las sub-clases, sin importar el paquete al quepertenezcan. Sin embargo,
Las sub-clases solo pueden modificar estos atributos para objetos de lasub-clase, no de la clase
Madre.
Protected
Permite el acceso a las sub-clases y a las clases del mismo paquete.
Friendly
Es el valor por defecto. Permite el acceso solo a clases del mismo paquete.
Public
Pueden ser accedidas por todos.

D)atributos
Las variables declaradas dentro de un metodo son locales a el; las declaradas enel cuerpo de la
Clase son miembros de ella y son accesibles por todos los metodos de la clase.
Los atributos miembros de la clase pueden ser: atributos de clase (declaradocomo static) o
Atributos de instancia.
C :
[static]tipo_dato nombre_dato; (no se puede inicializar un dato miembro de unaclase)
Java:
[modificador_de_acceso] [static] [final] [transient] [volatile] tipo_datonombre_dato [= valor];
Final
Implica que un atributo no puede ser sobreescrito o redefinido, es decir que nose trata de una
Variable sino de una constante.
Transient
Son atributos que no se graban cuando se archiva un objeto, o sea no formanparte permanente del
Estado de este.
Volatile
Se utiliza cuando la variable puede ser modificada por distintos threads.Basicamente implica que
Varios threads pueden modificar la variable en forma simultanea, y volatileasegura que se vuelva
A leer la variable, por si fue modificada, cada vez que se la vaya a usar.

E)metodos
Dentro de los metodos pueden incluirse:

  • Declaraciones de variables locales.
  • Asignaciones a variables.
  • Operaciones matematicas.
  • Llamados a otros metodos.
  • Estructuras de control.
  • Excepciones.

C :
Se puede declarar y definir dentro de la clase:
Class nombre_clase
{
tipo_dato dato;
[modificador_de_acceso]:
tipodato_devuelto nombre_metodo(parametros)
{
cuerpo_metodo;
};
}

Tambien, se puede declarar dentro de la clase y definirlo fuera:
Class nombre_clase
{
tipo_dato dato;
[modificador_de_acceso]:
tipodato_devuelto nombre_metodo(parametros);
};
Tipodato_devuelto nombre_clase :: nombre_metodo(parametros)
{
cuerpo_metodo;
}
Java:
En java se debe declarar y definir la funcion dentro de la clase:
Class nombre_clase
{
tipo_dato dato;
[modificador_de_acceso] [static] [abstract] [final] [native] [syncronized]tipodato_devuelto
nombre_metodo (parametros)[throws exepcion1 [,exepcion2]]
{
cuerpo_metodo;
}
}
Static

Al igual que con los atributos, un metodo declarado como static es compartidopor todas las
Instancias de la clase.
Abstract
Son aquellos de los que se da la declaracion pero no la implementacion, paragenerar una clase
Abstracta.
Final
Es un metodo que no puede ser redefinido por las sub-clases herederas.
Native
Es un metodo que esta escrito en otro lenguaje que no es java.
Syncronized
Permite sincronizar varios threads para el caso en que dos o mas quieran accederen forma
Concurrente.
Throws
Sirve para indicar que la clase genera determinadas execpciones.
Llamada a metodos
Se llama a un metodo de la misma clase simplemente con el nombre del metodo ylos parametros
Entre parentesis.
Cuando se necesita llamar a un metodo de un objeto de otra clase, se utiliza:
Nombre_objeto.nombre_metodo(parametros)

F)metodos o funciones miembros
Funciones simples (c y java)
Son los vistos anteriormente, se pueden definir dentro o fuera de la clase.
Funciones en linea (inline) (c )
Se crean definiendo la funcion dentro de la clase (declaracion implicita) odefiniendo la funcion
Fuera de la clase pero anteponiendo la palabra reservada inline (declaracionexplicita).
Funciones constructores (c y java)
Es una funcion especial que sirve para inicializar objetos de una clase. Engeneral, tienen el
Mismo nombre de la clase que inicializa, no devuelven valores, pueden admitirparametros, pueden
Existir mas de un constructor (e incluso no existir), si no se define ningunconstructor el
Compilador genera uno por defecto, se llaman al momento de crear un objeto.

  • Constructores por defecto: es un constructor que no acepta argumentos. Si no se define,

El compilador genera uno que asigna espacio de memoria y lo pone en cero.

  • Constructores con argumentos: inicializan un objeto con los valores del argumento. Pueden

Existir varios que se diferencian por la cantidad y tipo de argumentos.

  • Constructores copiadores: crea un objeto a partir de uno existente. Toma como unico

Parametro otro objeto del mismo tipo. Si no se declara el compilador generauno por defecto
Asignandole al nuevo objeto los valores del objeto a la izquierda del operador=.
En java se puede inicializar el objeto tras la creacion fisica del mismo,asignandole los valores
Que se le dara.
Funcion destructor (c )
Cumplen la funcion inversa a la del constructor eliminando el espacio dealmacenamiento que
Ocupo el objeto al ser creado. Caracteristicas: tienen el mismo nombre de laclase, van
Precedidos por el caracter ~, solo existe un destructor por clase, no admitenargumentos, no
Retornan ningun valor, el compilador llama a un destructor cuando el objeto salefuera de ambito.
Funciones amigas (c )
Es una funcion no miembro que puede acceder a las parte private de una clase. Sedeclaran
Anteponiendo la palabra reservada friend.
Tambien se pueden declarar como amigas a las clases. En este caso todas lasfunciones de la clase
Amiga pueden acceder a las partes privadas de la otra clase.
Funciones sobrecargadas (c y java)
Es una funcion que tiene mas de una definicion. Las funciones sobrecargadastienen el mismo
Nombre, pero deben tener un numero distinto de argumentos o diferentes tipos deargumentos. Las
Definiciones operan sobre funciones distintas.
Las unicas funciones miembro que no se pueden sobrecarga son los destructores.
Funciones operador (c )
Permiten sobrecargar un operador existente (ej: suma) para utilizarlos conobjetos. Se declara
Poniendo la palabra reservada operator seguida por el operador especifico y lalista de
Argumentos y el cuerpo de la funcion.
Restricciones:

  • El operador debe ser uno valido para c y no se puede cambiar el simbolo.
  • Funciona solo al utilizar objetos de clase.
  • No se puede cambiar la asociatividad de los operadores, es decir para que sirven.
  • No se puede cambiar un operador binario para funcionar con un unico objeto.
  • No se puede cambiar un operador unario para que funcione con dos objetos.

G)objetos
C :
Se pueden crear en forma estatica (nombre_clase objeto1) o dinamica(nombre_clase *objeto2;
Objeto2= new nombre_clase;)
Java:
Solo se crean los objetos en forma dinamica: nombre_clase objeto1=newnombre_clase();

H)arrays de objetos
Se pueden crear arrays de objetos de la misma forma que se crea un array normal.
C :
Estatico: nombre_clase objeto[10];
Dinamico: nombre_clase *objeto;
Objeto=new nombre_clase[10];
Java:
Nombre_clase objeto=new nombre_clase[10];

I)puntero this
Es un puntero al objeto asociado con la invocacion de una funcion miembro.Normalmente no se
Explicita ya que el lenguaje realiza esta operacion transparente y en formaautomatica.
Igualmente hay casos en los que se debe usar el puntero this explicitamente:

  • Como argumento en una llamada a una funcion para pasar un puntero al objeto asociado con

La invocacion de la funcion miembro.
Ej: f(this);

  • Hacer una copia del objeto asociado con la invocacion o asignar un nuevo valor al objeto.

Ej: void t::g (t &a, t &b)
{ ...
a= *this;
...
*this= b;
}

  • Devolver una referencia al objeto asociado con la invocacion de la funcion miembro o

Constructor.
Ej: t& t::f (int a)
{ ...
return *this;
}
C :
This->nombre_objetomiembro
Java:
This.nombre_objetomiembro

2. Herencia y polimorfismo

1-herencia.
Herencia es la propiedad de que los ejemplares de una clase hija extiendan elcomportamiento y los datos asociados a las clases paternas. La herencia essiempre transitiva, es decir que una sub-clase hereda caracteristicas desuperclases alejadas muchos niveles.

2-beneficios de la herencia.
Reusabilidad del software
Cuando el comportamiento se hereda de otra clase, no es necesario reescribir elcodigo que lo define.
Comparticion de codigo}
Muchos usuarios o proyectos distintos pueden usar las mismas clases. Por otrolado, la herencia reduce el tiempo de escritura y el tamano final del programa.

Consistencia de la interfaz}
El comportamiento de una clase madre que heredan todas sus clases hijas sera elmismo, de esta manera se asegura que las interfaces para objetos seran similaresy no solo un conjunto de objetos que son parecidos pero que actuan e interactuande forma diferente.

Componentes de software
La herencia nos permite escribir componentes de software reutilizables.

Modelado rapido de prototipos
Cuando un sistema se construye casi totalmente de componentes reutilizables, sepuede dedicar mas tiempo a la realizacion de aquellas partes nuevas. A esteestilo de programacion se lo conoce como ‘modelado rapide de prototipos’ o‘programacion exploratoria’.

Ocultacion de informacion
Un programador puede reutilizar un componente conociendo solamente la naturalezae interfaz del mismo y sin la necesidad de conocer los detalles tecnicosempleados para su realizacion.

Polimorfismo
Permite al programador generar componentes reutilizables de alto nivel quepuedan adaptarse a diferentes aplicaciones mediante el cambio de sus partes debajo nivel.

3-heuristicas para crear sub-clases.
Para saber si una clase debe convertirse en una subclase de otra mediante laherencia hay que aplicar la regla del es-un y es-parte-de.

Es-un
Se dan entre dos conceptos cuando el primero (la sub-clase) es un ejemplarespecificado del segundo (la clase base). Ej: un avion es un transporte.

Es-parte-de
Se da entre dos conceptos cuando el primero (la sub-clase) es una parte delsegundo (la clase base), sin ser ninguno, en esencia, la misma cosa. Ej: unmotor es parte de un auto.

Distintos tipos de herencia
A)especializacion
Es la forma de herencia mas comun y cumple en forma directa la regla es-un.

B)especificacion
Se trata de un caso especial de sub-clasificaion por especializacion, exceptoque las sub-clases no son refinamientos de un tipo existente, sino mas bienrealizaciones de una especificacion incompleta. Es decir, que la superclasedescribe un comportamiento que sera implantado solo por las sub-clases.

C)construccion
Se da cuando la sub-clase ha heredado casi completamente su comportamiento de lasuperclase y solo tiene que modificar algunos metodos o los argumentos de ciertamanera.

D)generalizacion
Esta es la opuesta a la creacion de sub-clases por especializacion. Se debeevitar; solo deben aplicarse cuando no se pueden modificar las clases existenteso se deben anular metodos de las mismas.

E)extension
Agrega una capacidad totalmente nueva a un objeto existente. Se distingue de lageneralizacion, ya que esta debe anular al menos un metodo de la clase base,mientras que la extension solo agrega metodos nuevos.

F)limitacion
Es una variante de la especificacion en donde el comportamiento de la sub-clasees mas reducido o esta mas restringido que que el comportamiento de lasuperclase. Tambien se da en situaciones en las que las clases existentes nopueden modificarse.

G)variacion
Se da cuando do o mas clases tienen implantaciones similares, pero no parecehaber ninguna relacion jerarquica entre los conceptos representados por lasclases. Ej: codigo del mouse y de la placa de video.

H)combinacion
Se da cuando una sub-clase resulta de la combinacion de caracteristicas de dos omas clases.

4-herencia y jerarquia de clases
C y java utilizan un sistema de herencia jerarquica.una clase hereda de otra,creando asi muevas clases a partir de clases existentes. Solo se pueden heredarclases, no funciones ordinarias ni variables.
Una sub-clase deriva de una clase base. La clase derivada puede a su vez serutilizada como clase base para derivar mas clases, conformandose asi lajerarquia de clases.

Caracteristicas de las clases derivadas
Una clase derivada o sub-clase:

  • Puede a su vez ser una clase base, dando lugar a la jerarquia de clase.
  • Los miembros heredados por una clase derivada, pueden a su vez ser heredados por mas clases derivadas a ella.
  • Hereda todos los miembros de la clase base, pero solo podra acceder a aquellos que los especificadores de acceso de la clase base lo permitan. Las clases derivadas solo pueden acceder a los miembros public, protected y private-protected (en java) de la clase base, como si fueran miembros propios.
  • No tienen acceso a los miembros private de la calse base.
  • Pueden anadir sus propios datos y funciones miembros.

Los siguientes elementos de la clase base no se heredan:

  • Constructores y destructores.
  • Funciones y datos estaticos de la clase.
  • Funciones amigas y operadores sobrecargados (solo c ).

Sintaxis de una clase derivada
C :
Class clase_derivada : [public / protected / private] clase_base [, [public /protected / private]clase_base2]
{
cuerpo clase derivada;
};
Java:
Class nombre_derivada extends nombre_base
{
cuerpo clase derivada;

}

Especificadores de acceso

C :

Si no se especifica el tipo de derivacion, c supone que el tipo de herenciaes private.

Si en la derivacion especificamos:

  • Public

Los miembros public pasan a ser public en la clase derivada. Los miembrosprotected pasan a ser protected. Y los privados permanecen privados en la clasebase.

Clase base
 

public

 

protected

Private
Clase derivada
Public
Protected
Private
  • Protected

Todos los miembros public y protected de la clase base son miembros protected en la derivada.

Clase
Public
Protected
Private
Clase
public
 

protected

Private
  • Private

Todos los miembros public y private son miembros private en la clase derivada.

Clase
public
protected
Private
Clase
Public
Protected
Private

 

Java:

Para analizar los tipos de herencia en java hay que tener en cuenta queexisten 5 distintos tipos de clases:

  • Clase base.
  • Clases derivadas del mismo paquete.
  • Clases derivadas en distinto paquete.
  • Clases del mismo paquete.
  • Clases en distinto paquete.

 

 

 

Miembros declarados como…

 

 

 

  Private Private-protected Protected Friendly Public
Clase base.

S

S

S

S

S

Clases derivadas del mismo paquete.

N

R

S

S

S

Clases del mismo paquete.

N

N

S

S

S

Clases derivadas en distinto paquete.

N

R

R

N

S

Clases en distinto paquete.

N

N

N

N

S

 

 

 

Tipo de acceso:
  • S: acceso posible.
  • N: acceso denegado.
  • R: reservado a las subclases. Acceso posible si el miembro se refiere a un objeto de la subclase y no a uno de la clase base.

Redefinicion de metodos

Cuando se hace heredar una clase de otra, se pueden redefinir ciertos metodosa fin de refinarlos, o bien de modificarlos. El metodo lleva el mismo nombre yla misma signatura, pero solo se aplica a objetos de la sub-clase o susdescendientes.

Constructores
Cuando se construye una calse hija, es necesario tambien llamar al constructorde la clase madre. Esta invocacion puede ser implicita o explicita.
Es implicita si el constructor de la madre no toma parametros. En este caso, yasea que el constructor de la hija sea implicito o no, la llamada al constructorde la madre es automatica.
Si el constructor de la madre necesita parametros, hay que pasarselos. Esnecesario definir un constructor en la hija y este debe llamar al constructor dela madre enviando los parametros.
Para realizarlo se sigue el siguiente ordem:

  • Llamar al constructor de la clase madre.
  • Construir los miembros de la clase hija.
  • Ejecutar las instrucciones contenidas en el cuerpo del constructor de la clase hija.

C :

Derivada :: derivada (tipo1 x, tipo2 y) : base (x,y) [, base2 (x,y) ]

{

cuerpo del constructor;

}

En herencia multiple, el orden real de invocacion de constructores se da deacuerdo al orden en que fueron declaradas las clases. C utiliza el siguienteorden de inicializacion:

  • Primero, se inicializan todas las clases bases virtuales.
  • Las clase bases no virtuales se inicializan en el orden en que aparecen en la declaracion de clases.
  • Por ultimo, se ejecuta el constructor de la clase derivada.

Java:

En la definicion del constructor de la clase derivada se utiliza la palabrasuper para simbolizar la llamada al constructor de la clase base.

Class hija extends madre

{

public hija (tipo1 x)

{

super (y);

cuerpo del constructor;

]

}

Destructores
Al contrario que con los constructores, una funcion destructor de una clasederivada se ejecuta antes que el destructor de la clase base. (los destructoresno se heredan)

Clases bases virtuales
Es una clase que es compartida por otras clases base con independencia delnumero de veces que esta se produce en la jeraquia de derivacion.
Supongamos que la clase base a, la cual tiene sus propios miembros. Definimosdos clases derivadas de esta b y c, tambien con sus propios metodos y losheredados. Definimos tambien una clase d, derivada de b y c (derivacionmultiple). Este tipo de jerarquia puede dar lugar a problemas ya que la clase dheredara las funciones miembro de b y c, pero tambien derivara las de a dosveces.
Para evitar este problema, debemos definir a las clases clases base como comoclases vituales, lo cual significa que solo una copia de los miembros ambiguospasara a la clase derivada.

Class a
{…}
Class b : virtual public a
{…}
Class c : virtual public a
{…}
Class d : public b , public c
{…}

5-polimorfismo
Consiste en llamar a un metodo segun el tipo estatico de una variable, basandoseen el nucleo para llamar a la version correcta del metodo. El polimorfismo serealiza por estos metodos:

  • Sobrecarga de funciones (c y java)

En este caso el compilador determina que funcion debe utilizarse en tiempo decompilacion ya que conocera el objeto implicado. Este tipo de ligadura, se laconoce como ligadura temprana, estatica o previa.
Cuando existen punteros implicados, el compilador no sabe a que objeto se estareferenciando. En este caso se produce una ligadura dinamica.

  • Con funciones virtuales (c )

Cuando varias sub-clases derivan de una clase base, estas pueden emplear lasfunciones que heredan de la misma forma, pero otras pueden requerir elementosadicionales o incluso formatos totalmente nuevos. Para enfrentar esto, existen 3soluciones posibles:

  • Definir las funciones con distintos nombres. (es facilmente realizable peron no es ideal porque genera complejidad)
  • Sobrecargar la funcion. Esto es util cuando la jerarquia de clases es pequena.
  • Identificar aquellas funciones miembro de la clase base que se puedan llegar a utilizar en clases derivadas y declararlas como virtuales.

En este ultimo caso, la ligadura se lleva a cabo en tiempo de ejecucion.
La funcion debe ser declarada como vitual en la primer clase en la que estapresente. La palabra clave virtual permite definir la funcion bajo el mismonombre tanto en la clase base como en la derivada. Al utilizar funcionesvirtuales se pueden utilizar punteros a la clase base para referenciar objetosde una clase derivada.

Funcion virtual pura
Es una funcio virtual declarada en una clase base que no esta definida y notiene cuerpo. Deben definirse luego en la clase derivada.
C :
Virtual tipo nombre_funcion (parametros) = 0;

Java:
Se llaman metodos abstractos y se declaran pero no se escribe su implementacion.

Abstract metodoabstracto ();
Clases abstractas
Son clases que se disenan para ser heredadas y solo se pueden utilizar comoclases base. No pueden ser instanciadas.}
C :
Una clase es abstracta si tiene al menos una funcion virtual pura.
Java:
Deben declararse como abstract.
Abstract nombre_clase
{

abstract void metodo_abstracto ();

}

Pasos para obtener polimorfismo en c

  • Crear una jerarquia de clases con las funciones miembro importantes definidas como virtuales. Si las clases base son tales que no se pueden implementar estas funciones en ellas, declarar funciones virtuales puras.
  • Proporcionar implementaciones concretas de clases virtuales en las clases derivadas. Cada clase derivada tiene su propia version de las funciones.
  • Manipular instancias de las clases derivadas a traves de punteros.

3. El Paradigma Concurrente

Concurrencia
Se dice que dos o mas procesos son concurrentes si estan construidos de maneratal que pueden ejecutarse al mismo tiempo y compartiendo rescursos.
Considerando un entorno multi-thread, cada hilo representa un proceso individualejecutandose en un sistema. Generalmente, cada hilo controla un unico aspectodentro de un programa. Todos los hilos comparten los mismos recursos.
Hay que distinguir multi-hilo de multi-proceso. El multi-proceso se refiere ados o mas programas que se ejecutan "aparentemente" a la vez, bajo elcontrol del sitema operativo. Los programs no necesitan tener relacion unos conotros. Multi-hilo se refiere a dos o mas tareas que se ejecutan"aparentemente" a la vez, dentro de un mismo programa.

Programas de flujo unico
Un programa de flujo unico (single-thread) utiliza un unico flujo de control(thread) para controlar su ejecucion.

Programas de flujo multiple
La utilizacion de hilos en java permite una gran flexibilidad a la hora deplantearse el desarrollo de aplicaciones. La simplicidad para crear, configurary ejecutar hilos de ejecucion permite que se puedan implementar aplicaciones muypoderosas y portables.
Mientras un programa de flujo unico realiza su tarea ejecutando instrucciones enforma secuencial, un programa de flujo multiple permite que cada hilo comience ytermine tan pronto como sea posible.

1-planificacion de hilos.
Cada hilo tiene asociada una prioridad que es utilizada por el sistema (entiempo de ejecucion)como ayuda para determinar que hilo debe ejecutarse en uninstante determinado.

Un hilo en ejecucion, continua ejecutandose hasta que realiza una operacionde bloqueo, o hasta que es desalojado. Un hilo puede ser desalojado por otrohilo de mayor prioridad que se hace ejecutable, o porque el planificador dehilos provoca un crecimiento en un hilo de baja prioridad para que este tomealgunos ciclos del cpu, evitando asi la inanicion.

Un hilo tiene inicialmente la prioridad del hilo que lo creo. Estos valorespueden modificarse mediante: setpriority() con un valor de parametros entre lasconstantes min_priority y max_priority de la clase thread. El metodogetpriority() devuelve el valor de la prioridad de un hilo.

2-la clase thread.
Es la clase que encapsula todo el control necesario sobre los hilos. Un objetode la clase thread actua como el panel de control de un hilo de ejecucion (elthread propiamente dicho).

Metodos de clase
Se utilizan para saber el estado del hilo y para replanificarlo.
Public static void currentthread()
Devuelve el objeto thread que representa al hilo en ejecucion.
Public static void sleep(long milisegs) throws interruptedexception
Duerme al hilo por el tiempo indicado en ms. Si el hilo se interrumpe mientrasduerme, se lanza una excepcion.
Public static void yield()
Dice a la jvm que el hilo actual no necesita ejecutarse en el presente momento.La maquina puede o no acatar esta sugerencia.

Metodos de instancia

  • Creacion de un hilo

Thread objeto = new thread();

Luego de crear un hilo, se puede configurar seteando su prioridad inicial ynombre.

  • Arranque de un hilo

Objeto.start();

El metodo lanza un nuevo hilo basado en los datos del objeto thread. Luegollama al metodo run del hilo, con lo que el hilo se activa, y en donde seejecutan todas las tareas del hilo.

  • Otros

Suspend()
Detiene al hilo sin destruirlo.
Resume()
Activa a un hilo suspendido.
Interrupt()
Se utiliza para detener a un hilo cuando se requiere gestionar su finalizacion.
Setname(string)
Permite nombrar a un hilo.
Getname()
Devuelve un string con el nombre del hilo.
Isalive()
Devuelve un 1 si el hilo esta ejecutando su metodo run().
Como obtener hilos de ejecucion

Existen dos formas de hacerlo:

  • Extender la clase thread, redefiniendo el metodo run:

Class mihilo extends thread

{

atributos;

public void run()

{

se redefine el metodo run;

}

}

  • Implementando la interfaz runnable:

Las interfaces proporcionan un forma de agrupar el trabajo de infraestructurade una clase. La interfaz define el trabajo y la clase lo implementa. Unainterfaz solo puede contener metodos abstractos y variables estaticas y finales.Tambien una interfaz tiene la propiedad de poder heredar en forma multiple deotras interfaces.

Interfaz runnable:
Public interface runnable

{

public abstract void run();

}

Una clase que implementa una interfaz debe implementar todos los metodosdefinidos en la interfaz.

La interfaz runnable fuerza a que se redefina el metodo run().
Para poder ejecutar el proceso como hilo, se requiere crear una instancia dethread primero:
Public class mihilo implements runnable
{

thread h;

public void run()

{

redefinicion del metodo run();

}

}

A diferencia del primer caso, utilizando este metodo queda disponible laherencia simple (extends) que podemos utilizar para heredar alguna otra clase.

3-grupos de hilos.
Todo hilo de ejecucion en java debe pertenecer a un grupo. Es la clasethreadgroup la que define e implementa la capacidad de un grupo de hilos.
Los grupos de hilo permiten que se pueda manejar un conjunto de hilos como unsolo objeto.cuando se crea un hilo, es decir en el constructor, debe indicarseel grupo al que pertenecera. Si no se indica un grupo, el sistema asigna uno pordefecto, el mismo grupo en que se encuentra el hilo que lo creo. Si no seespecifica ningun grupo, todos seran miembros del grupo "main".
La clase thread cuenta con constructores que permiten especificar el grupo delhilo que se esta creando en el mismo momento de instanciarlo.
Tambien existe el metodo setthreadgroup().

4-scheduling.
Es un metodo que utiliza una lista de procesos que monitoriza a todos los hilosque se estan ejecutando en todos los programas y decide cuales deben ejecutarsey cuales deben encontrarse preparados para su ejecucion. El scheduler utilizados caracteristicas de los hilos para decidir: la prioridad del hilo y elindicador de hilo demonio.

Existen dos tipos de scheduling:

  • Preemptivo

Proporciona un periodo fijo de tiempo de cpu a los hilos que estan corriendoen el sistema. El scheduler decide cual sera el hilo a ejecutarse y lo llama conresume(). Cuando pasa su periodo de tiempo, llama a suspend() y ejecuta elsiguiente hilo de la lista.

  • No preemptivo

Decide que hilo debe correr y lo ejecuta hasta que finalice. El hilo tiene elcontrol total del cpu mientras este en ejecucion.

Hilos demonios
Son hilos de prioridad baja y proporcionan un servicio basico a los programascuando la actividad de la maquina es reducida. Son utiles cuando un hilo debeejecutarse en segundo plano durante largos periodos de tiempo.

Setdaemon()
Pone a un hilo de usuario como demonio.

Isdaemon()
Devuelve si un hilo es o no demonio.
Regla basica
Si solamente hay hilos demonios ejecutandose, la aplicacion termina.

5-sincronizacion.
Cuando dos o mas hilos necesitan utiliza el mismo objeto, existe la posibilidadde que sus operaciones se interfieran y se corrompan los datos. Esas operacionespotencialmente interferentes se denominan zonas criticas. La interferencia puedeevitarse sincronizando al acceso a esas zonas criticas.
Todos los objetos tienen un bloqueo asociado que puede ser adquirido y liberadopara evitar la interferencia mediante el uso de metodos y sentenciassynchronized.

Metodos synchronized
Una clase cuyos objetos se deben proteger de interferencias en un entorno conmultiples hilos declara generalmente sus metodos modificadores comosynchronized.
Si un hilo invoca a un metodo synchronized sobre un objeto, en primer lugar seadquiere el bloqueo de ese objeto, se ejecuta el cuerpo del metodo y despues selibera el bloqueo. Si otro hilo quiere invocar un metodo synchronized sobre unobjeto bloqueado, debe esperar (bloqueado) hasta que el bloqueo del objeto selibere. La posesion de los bloqueos es unica por hilo. Esto impide que un hilose bloquee por un bloqueo que posee, es decir cuando llama a un metodosynchronized sobre un objeto cuyo bloqueo posee por haber invocado a otro metodosynchronized con anterioridad.

El bloqueo se libera porque:

  • Se llega a una sentencia return.
  • Se alcanza el final del cuerpo del metodo.
  • Se lanza una excepcion.

Public class ejemplo

{

tipo atrib1;

public synchronized tipo metodo1()

{

cuerpo metodo;

}

}

Metodos estaticos sincronizados
Es una segunda forma de obtener sincronizacion. Todos los objetos tienenasociado un objeto class. Los metodos estaticos sincronizados adquieren elbloqueo del objeto class de su clase. Dos hilos no pueden ejecutar metodosestaticos sincronizados de la misma clase al mismo tiempo. Si se comparten datosestaticos entre hilos, su acceso debe ser protegido utilizando metodos estaticossincronizados.

El bloqueo entre metodos de instancia y estaticos es independiente, es decirque se puede seguir invocando a metodos sincronizados de un objeto mientras unhilo tiene el bloqueo del objeto class en un metodo estatico sincronizado.

La sentencia synchronized

Una tercera opcion. La sentencia synchronized nos permite ejecutar codigosincronizado que adquiere el bloqueo de cualquier objeto. Tiene dos partes: unobjeto cuyo bloqueo se va a adquirir y una sentencia que se ejecuta cuando seadquiere el bloqueo.

La forma general de la sentencia es:

Synchronized (expr)

{

sentencias;

}

La expresion expr debe tener el valor de una referencia a objeto. Cuando seobtiene su bloqueo, se ejecutan las sentencias y luego, al terminar el cuerpo,se libera. Si se produce una excepcion en el interior, tambien se libera.
La sentencia synchronized tiene varias ventajas. En primer lugar, permitedefinir una region de codigo sincronizada mas pequena que un metodosincronizado.
En segundo lugar, la sentencia synchronized permite sincronizarnos sobre objetosdistintos de this. Es decir, que podemos trabajar sobre bloqueos distintos alactual.

Disenos de sincronizacion

  • Sincronizacion en la parte cliente

Requiere que todos los clientes de un objeto compartido utilicen sentenciassynchronized para adquirir el bloqueo del objeto compartido antes de acceder ael.

  • Sincronizacion en la parte del servidor

Es mejor hacer que los objetos compartidos protejan su propio acceso marcandosus metodos como synchronized. Esto hace imposible que un cliente utilice unobjeto de forma no sincronizada.

6-comunicacion entre hilos.
Lo que torna posible la comunicacion entre hilos es la sincronizacion al evitarla interferencia. El mecanismo de bloqueo de synchronized es suficiente paraevitar que los hilos se interfieran y corrompan objetos, pero tambiennecesitamos una forma de comunicacion entre ellos.
Wait, notify y notifyall
Con este fin, el metodo wait() deja a un hilo esperando hasta que ocurre algunacondicion, y los metodos de notificacion notify() y notifyall() indican a loshilos que esperan que ha ocurrido algo que podria satisfacer esa condicion.
Estos tres metodos se definen en la clase object y son heredados por todas lasclases pero se aplican a objetos particulares.
Al aplicar estos metodos hay que tener en cuanta:

  • Todo debe ejecutarse dentro de codigo sincronizado.
  • Cuando se aplica un wait() sobre un hilo, se libera simultaneamente el bloqueo sobre el objeto.
  • La condicion de prueba debe estar siempre en un bucle.
  • Los metodos de notificacion son invocados por codigo sincronizado.

Al utilizar notifyall(), se despiertan todos los hilos en espera. Notify(),selecciona a un hilo solo para despertarlo.

Puede haber multiples hilos esperando sobre el mismo objeto. Si estos hilosesperan por condiciones diferentes, hay que utilizar notifyall(). Si usamosnotify() corremos el riesgo de despertar a un hilo que esta esperando por unacondicion diferente a la satisfecha por el hilo.

El uso de notify() es un optimizacion que solo se puede aplicar cuando:

  • Todos los hilos estan esperando por la misma condicion.
  • Solo un hilo como mucho se puede beneficiar de que la condicion se cumpla.
  • Esto es valido para todas las posibles subclases.

7-finalizacion de la ejecucion de un hilo.
Un hilo que ha empezado a ejecutarse es un hilo vivo. Un hilo continua vivohasta que termina, lo cual puede ocurrir de 4 maneras:

  • El metodo run retorna normalmente.
  • El metodo run finaliza bruscamente.
  • El metodo destroy se invoca sobre el hilo.
  • Cuando el programa termina.

Interrupcion de un hilo

Al interrumpir un hilo, mediante interrupt hacemos que el hilo pongaatencion, generalmente para detener su ejecucion, si bien una interrupcion nofuerza al hilo a detenerse.
Interrumpir un hilo normalmente no afectara a lo que esta haciendo, pero algunosmetodos (como sleep y wait) lanzaran una excepcion.

Espera a que un hilo finalice
Utilizando el metodo join logramos que un hilo espere a que otro finalice paraejecutarse o continuar su ejecucion. Se usa generalmente en el main para queeste espere mientras se ejecutan los hilos lanzados; una vez finalizados loshilos, se continua con la secuencia del main.

8-applets.
Es una aplicacion accesible en un servidor de internet, que se transporta por lared, se instala automaticamente y se ejecuta como parte de un documento web.

Appletviewer
Un applet es una minima aplicacion java disenada para ejecutarse en un navegadorweb. Por lo tanto, no necesita preocuparse por donde se realizan las llamadas.El applet asume que el codigo se esta ejecutando dentro de un navegador.
Appletviewer es el minimo navegador que crea un espacio de navegacion en dondese ejecutara el applet. El navegador espera como argumento el nombre del ficherohtml que debe cargar, ya que no se le puede pasar un programa java directamente.Este fichero contiene una marca en donde se especifica el codigo que se debecargar.
Ej:
<html>
<applet code=holamundo.class width=300 height=100>
</applet>
</html>
Ciclo de vida de un applet
Primero se carga el applet en el navegador. Luego se carga la clase queimplementara el applet. Despues se crea el marco o el area grafica en dondeactuara el applet. Se llama a los metodos que hacen funcionar al applet. Y porultimo se destruye el applet.

Metodos para escribir applets

  • Init()

Se llama al crearse el applet (solo una vez). La clase applet no hace nadacon este metodo. Las clases derivadas deben sobrecargarlo para cambiar todos lasinicializaciones que deban realizarse solo una vez. Estas pueden ser: cargarimagenes y sonido, el resize del tamano del applet, asignacion de valores a lasvariables globales, creacion de hilos, etc.

  • Destroy()

Las clases derivadas deberian sobrecargar este metodo para hacer una limpiezafinal. Los applet multithread debera usarlo para matar a los hilos que quedasenactivos del applet.

  • Start()

Llamada para activar el applet. Se realiza cada vez que el usuario visita elapplet o se cambia su tamano.

  • Stop()

Llamada para detener definitivamente el applet. Se llama cuando el usuariosale de la pagina, reduce la ventana a un icono o cierra la ventana delnavegador.

  • Resize (int width, int height)

Se utiliza para modificar el tamano del applet.

  • Paint (graphics g)

Se llama para refrescar el area de dibujo del applet.

  • Update (graphics g)

Se llama cuando se necesita actualizar la pantalla realmente. Se limpia elarea y se llama a paint().

  • Repaint ()

Se utiliza para redibujar la pantalla. El metodo no deberia ser sobrecargado,y puede o no llevar parametros. Si se encuentra sin parametro, se llamainternamente al update(). Y si tiene parametros, se dibuja lo que digan.

  • Getparameter(string param)

Devuelve los valores cargados al applet via la marca applet de html.

  • Getdocumentbase()

Devuelve la ruta en donde se ha recogido el html que contiene al applet.

  • Getcodebase()

Indica la ruta en donde se ha cargado el codigo bytecode del applet.

  • Print(graphics g)

Saca por impresora el mapa de bits del dibujo.

Componentes awt
El awt proporciona varios componentes utiles para construir una gui para unapplet o una aplicacion comun. Entre ellos: controles basicos, manejo de texto,despliegue de graficos e imagenes, toma de decisiones, presentacion de menues yconduccion de dialogos, entre otros.
Todos los componentes (excepto los menues) son subclases directas o indirectasde la clase component de awt. Podemos clasificarlos en :

  • Componentes estandar

Son integramente preelaborados y con un aspecto bien definido. Requieren depoco control para que realicen su tarea correctamente.

  • Componentes no estandar o personalizados
  • Contenedores

Pueden abarcar y controlar otros componentes colocados en ellos. Ej:scrollpane.

4. El Paradigma Logico

1-introduccion.

Una forma de razonar para resolver problemas en matematicas se fundamenta enla logica de primer orden. El conocimiento basico de las matematicas se puederepresentar en la logica en forma de axiomas, a los cuales se la agregan reglasformales para deducir cosas verdaderas (teoremas). Los lenguajes que utilizanesta logica se llaman lenguajes declarativos, porque todo lo que tiene que hacerel programador para solucionar un problema es describirlo via axiomas y reglasde deduccion.

Este concepto de programacion logica esta ligado historicamente a prolog(programmation en logique), desarrollado por la universidad de marseille en1972. Prolog es utilizado para el desarrollo de aplicaciones de ia debido a suforma de representar el conocimiento, facilitando las busquedas en bd, laescritura de compiladores, la construccion de sistemas expertos, elprocesamiento de lenguaje natural, busqueda de patrones y programacionautomatica.

2-logica proposicional.
Utiliza una unica regla de inferencia llamada principio de resolucion, mediantela cual la prueba de un teorema se puede hacer automaticamente. Esta regla seaplica sobre las formulas surgidas de la logica de primer orden (lpo) y lademostracion de teoremas mediante esta regla de inferencia se lleva a cabo porla reduccion al absurdo.

Esta logica utiliza preposiciones y nexos para expresar verdades oconocimiento. Cuenta con un lenguaje formal medianete el cual es posiblerepresentar los predicados, que describen fragmentos de comnocimiento; y cuentacon un conjunto de reglas de inferencia que aplicadas a los predicados permitenderivar en nuevo conocimiento.

3-conceptos elementales.
Constantes individuales
Son simbolos (nombres) que se usan para referir a un objeto individual fijo.Tambien son llamados sujetos logicos y deben cumplir que:

  • Todo nombre debe referir a un objeto.
  • Ningun nombre puede referir a mas de un objeto.
  • Un objeto puede tener mas de un nombre.

Simbolos de predicado
Denotan una propiedad o una relacion entre objetos.
Ej: juan es padre de ana.
Los sujetos logicos son llamados los argumentos del predicado.
En prolog: es_padre_de(juan,ana)

Aridad
Numero de constantes individuales que necesita el predicado para formar unaoracion. Si la aridad es 1, entoces el predicado es una propiedad.(ej:mujer(ana)). Si la aridad es 2 o mas, el predicado es una relacion entre susargumentos.

Enunciados atomicos
Es un enunciado formado por un predicado de aridad n seguido por n-argumentos.
Ej: mayor(juan, ana)

Enunciados atomicos combinados
Son enunciados atomicos simples unidos por conectivos logicos para generarenunciados mas complejos. Los conectivos logicos pueden ser: and, or, not,si…entonces (implicacion).

Predicados con consecuente
Una conclusion s a partir de las premisas p, q, r,…es una demostracion paso apaso que muestra que s debe ser verdadera cuando p, q, r,…son todasverdaderas.

4-introduccion a prolog.

Prolog es un lenguaje declarativo, no imperativo. Es decir, que cada lineadel programa es una declaracion y no una orden. Fue hecho para representar yutilizar el conocimiento que se obtiene sobre determinado dominio.

Prolog forma un lenguaje a partir de un alfabeto que contiene solo dos tiposde simbolos:

  • Simbolos logicos: entre los que se encuentran los simbolos proposicionales (true y false); los simbolos para los conectores logicos and(, coma), or (; punto y coma), not (~) y if(:- dos puntos y coma) y los simbolos auxiliares de escritura ([], (), ,).
  • Simbolos no logicos: agrupados en el conjunto de simbolos constantes; el conjunto de variables individuales; el conjunto de simbolos de relaciones y funciones n-arias.

Calculo de relaciones

Prolog trabaja con relaciones. Para definirlas se utilizan las clausulas dehorn. Estas constan de dos partes: consecuente (representa el objetivo que sequiere probar o demostrar) y antecedente (la/s condicion/es que se tienen queverificar para que se cumpla el consecuente).

  • Estructura: conclusion si condicion. La resolucion de estas clausulas se da invocando a un procedimiento que se encarga de comprobar que valor de verdad tiene la condicion y luego asignar el resultado logico de esa evaluacion al objeto que se halla a la izquierda de la implicacion si.
  • Tipos:

Afirmacion

 


 

s hecho

Solo tiene conclusion. Implica que estamos afirmando algo que no necesita serprobado.

Implicacion

 


 

s p, q, r,… regla

Es un predicado con consecuente. Cuando escribimos esto manifestamos que unobjeto puede poseer cierta propiedad o que puede existir cierta relacion conotros objetos , si se cumple con la condicion.

Negacion

 


 

p, q, r,… objetivo

Es en realidad la clausula que queremos probar del conjunto de sentencias delprograma. Para hacerlo, se niega la clausula que se desea probar y se la agregaa las clausulas del programa. Lugo se aplican las reglas de resolucion y, alderivarse una clausula nula, queda demostrado que la clausula original esverdadera.

5-control en prolog.

Por control se entiende la forma en que el lenguaje busca las respuestas. Enprolog el control respeta 2 normas:

  • Orden de metas: escoger la meta del extremo izquierdo.
  • Orden de reglas: seleccionar la primer regla aplicable.

Para cumplir con cada submeta, estas son reemplazadas por todas y cada una delas reglas que la satisfagan.

Backtracking

Es un mecanismo de busque que utiliza prolog.

Para obtener las soluciones a los objetivos, prolog utiliza esta tecnica deborrado que consiste en reemplazar cada submeta por los consecuentes de todaslas reglas que la satisfacen.

Lo que hace es lo siguiente: primero toma la submeta del extremo izquierdo(p) y la borra, esto quiere decir que la reemplaza por la primer regla aplicableque la satisfaga (p1). Luego toma la siguiente submeta (s) y la reemplaza por laprimer regla aplicable (s1); y asi con todas las submetas hasta que se llega aun hecho o se alcanza una contradiccion (exito o fracaso). Si se llega a unexito, prolog devuelve ese resultado. Luego de esto, o si se produce un fracaso,prolog vuelve al paso anterior , es decir recupera la submeta original (s), y lareemplaza por la segunda regla aplicable que la satisfaga (s2). Cuando seterminan todas las reglas de esa submetas, prolog retrocede otro paso (vuelve ap) y comienza a aplicar todo el ciclo ahora con la segunda regla aplicable a p(p2).

p p1 s s1

s2

...

sn

 

p2 s s1

s2

sn

El corte

Prolog devuelve los resultados en forma no determisnista, es decir quedevuelve todos los resultados posibles. Esto significa que se tienen en reservaen todo momento los diversos puntos de eleccion que se superaron para unposibleretroceso posterior. El corte ( ! ) es una regla que permite suprimir puntos deeleccion, e incluso, hacer un programa totalmente determinista.
El borrado de la meta del corte devuelve verdadero y suprime todos los puntos deeleccion que estaban almacenados, impidiendo el backtracking a las submetasanteriores a su aparicion.

6-estructura de un programa en prolog.
Domains
Aqui se definen los objetos y los tipos de datos correspondientes.

Tipos de datos

  • Symbol: secuencia de caracteres. Pueden estar encerrados o no entre comillas. Si no estan encerrados, deben comenzar con minuscula.
  • Char: acepta cualquier caracter. Debe estar encerrado entre comillas simples.
  • Integer: acepta numeros desde el –32768 al 32767.
  • Real: acepta numeros con signo y decimales. Tambien puede contener numeros en notacion cientifica.
  • String: acepta una secuencia de caracteres encerrados entre comillas dobles. La diferencia con symbol es que la forma de almacenamiento de los string hace que su busqueda sea mas rapida.

Domains

persona=symbol

Predicates
Aqui se definen como seran las relaciones entre los objetos del domain y elvalor que se les asignara a las clauses
Predicates

sabe(persona)

trabaja(persona)

inteligente(persona)

Clauses
Aqui se definen las reglas y hechos que evaluara prolog para encontrar lassoluciones pedidas en el goal.
Clauses

sabe(jose)

sabe(ana)

inteligente(ana)

inteligente(carlos)

inteligente(silvia)

tiene_lindas_piernas(silvia)

trabaja(x) if sabe (x)

Goals

Es la meta u objetivo a buscar. Existen dos tipos"

  • Internos: se especifica en el program y este se detiene al encontrar el primer valor que los cumpla. Devuelve solo valores true o false.
  • Externos: se trabaja a traves de la ventana de dialogos buscando resultados en forma interactiva. Devuelve todos los valores que verifiquen el objetivo.

Goal

trabaja (x) and write ("la persona que trabaja es: ", x) and n1

7-objetos compuestos.
Se usan cuando se requiere mas detalle o informacion. Los hechos con objetoscompuestos son de la forma:
Predicado(argumento, functor(componente1, componente2))
Un functor es un predicado que actua como argumento de otro predicado. A losargumentos del functor se le dicen componentes.
Trabaja(juan, panaderia(sucursal, 12))
Cuando se trabaja con objetos compuestos hay que declarar cada functor y losdominios de todos sus componentes.

Ej:
Domains
lugar = panaderia(nombre_area, numero)

taller (nombre_area, numero, categoria)
nombre, nombre_area, categoria = symbol

numero = integer

Predicates

trabaja(nombre, lugar)

Clauses

trabaja(juan, panaderia(sucursal, 12))

trabaja (ricardo, taller (seccion, 97, c))

8-listas.
Es un conjunto de elementos encerrados entre corchetes y separados por comas.
[elem1, elem2,..., Elem-n]
Tambien se la puede encontrar como: [h, t] en donde h (head)es el primerelemento de la izquierda; y t (tail), el resto de la lista. Asi las manejaprolog a las listas con h y t.
Identificacion de la cabeza y la cola
En un primer lugar el sistema busca una clausula que identifica el objetivo.Debe coincidir el predicado, el numero de argumentos tiene que ser el mismo ylos propios argumentos deben coincidir directamente o a traves de lasinstanciaciones correctas. Cuando la encuentra, devuelve la clausula con losvalores instanciados y luego parte la lista en cabeza y cola.

Ej:
Empresa ([gerentes, contadores, secretarios])
Agregamos mas detalles...
Empresa([ruiz, gomez, rodriguez], [wazowsky, baggins], [dupont, salinas, lione])
Mas detalles...(utilizamos functores)
Empresa

(

gerentes ([ruiz, gomez, rodriguez])

contadores ([wazowsky, baggins])

secretarios ([dupont, salinas, lione])

)

Para manejar listas es conveniente usar funciones recursivas.

Funciones recursivas
Si del lado derecho de una clausula aparece un predicado que tambien figura enel lado izquierdo, se dice que la clausula tiene llamado recursivo, es decir sellama a si misma para verificar que se cumple esa misma propiedad como parte dela condicion que define la regla, y sobre algun valor posible de sus variables.
Ej:
Ruta(ciudad1, ciudad2) :- ruta(ciudad2, ciudad1)

5. El paradigma funcional

1-la programacion funcional en pocas palabras.
La programacion funcional tiene como objeto imitar las funciones matematicas lomas posible. Un lenguaje funcional posee la propiedad matematica detransparencia referencial, lo que significa que una expresion representa siempreel mismo valor. Esto permite razonar sobre la ejecucion de un programa ydemostrar matematicamente que es correcto.
Las variables de un lenguaje funcional son como las variables en algebra.Inicialmente representan un valor desconocido que, una vez calculado, ya nocambia.
En un programa funcional, el orden de evaluacion de las subexpresiones no afectaal resultado final, por lo tanto las subexpresiones pueden ejecutarse en formaparalela para hacer mas eficiente el programa.
Cuando se aplica una funcion, los argumentos que esta toma pueden ser:

  • Evaluados antes de llamar la funcion (evaluacion estricta).
  • Evaluados dentro e la funcion hasta el ultimo momento y solo si se requieren para calcular el resultado final (evaluacion postergada).

2-conceptos basicos del lenguaje scheme.
Es un lenguaje de alto nivel, de proposito general, que soporta operacionessobre datos estructurados, asi como operaciones sobre datos convencionales. Esaplicado en ia, compiladores, editores de pantalla, paquetes graficos, etc.

Esta formado por un pequeno nucleo de formas sintacticas (una biblioteca deprocedimientos primitivos) con las que se construyen todas las otras formas.Cuenta con administracion automatica de memoria, facilidades de alto nivel dee/s y un sistema de programacion interactivo.
Los programas son de alta transportabilidad y ejecutables en maquinas de pocopoder.

3-bases de la programacion funcional.
Funciones matematicas
Son una correspondencia entre un dominio y un rango. Una definicion de funcionespecifica el dominio y rango, de manera implicita o explicita, junto con unaexpresion que describe lacorrespondencia.
Las funciones son aplicadas a un elemento del dominio y devuelven, uno delrango.
Las funciones matematicas no producen efectos laterales. Dado un un mismoconjunto de argumentos, una funcion matematica producira siempre el mismoresultado.

Calculo lambda
Separa la tarea de definir una funcion de la de darle un nombre. Una funcionlambda en una funcion anonima en la que se especifica los parametros y laexpresion de correspondencia.
Ej: la siguiente expresion representa el cubo de 2:
(λ(x)x.x.x)(2)

Funciones de orden mayor
En matematica, algunas funciones complejas se definen en base a otras funciones.Se dice que una funcion es de orden mayor si toma alguna funcion como argumentoy/o regresa una funcion como resultado.
Scheme soporta este tipo de expresiones ya que los procedimientos son objetos deprimera clase. Un objeto de primera clase es aquel que cumple con lo siguiente:

  • Puede ser almacenado en estructuras de datos.
  • Puede ser enviado como argumento a una funcion.
  • Puede ser devuelto como argumento de una funcion.

 

 

Trabajo enviado por:
Leandro del teso
Leandrodelteso@yahoo.com.ar

Articulos relacionados:
VRML: Virtual Reality Markup Language
Resumen:
El VRML es un lenguaje computacional. Aunque presenta similitudes con otros lenguajes de cómputo como BASIC o "C", el VRML ha sido diseñado en forma específica para manej...
Determinantes de Matrices en Visual C++2005
Resumen:
Este trabajo presenta paso a paso el desarrollo de este Programa.
Programas para el desarrollo de la inteligencia (ppt)
Resumen:
Los programas para el desarrollo de la inteligencia son aquellos que permiten desarrollar habilidades, solucionar problemas y seguir en los estudios de la inteligencia hu...
Introducción a XML (Extensible Markup Language)
Resumen:
¿Qué es XML?. Estructura de XML. Estructuras lógicas. Aplicaciones de XML. Utilidades de XML. Desarrollo de aplicaciones con XML. Instalación (Requerimientos de Hardware ...
Curso de Diseño de Páginas Web - HTML
Resumen:
Estructura básica de un documento HTML. Dando forma al texto del documento HTML. Caracteres especiales. Enlaces. Imágenes. Alineación y dimensionado de imágenes. Fondos y...
Copyright © 2011 ilustrados.com, Monografias, tesis, bibliografias, educacion. Tofos los temas y publicaciones son propiedad de sus respectivos autores ©