Objetos en Objetos

Diagrama general

Esta artículo es una descripción de las bases del paradigma Orientado a Objetos (OO). Paradigma que se usa en la Programación Orientada a Objetos (POO). Pero es una descripción muy particular, en el sentido que se basa en la misma OO para describirla. Es, por decirlo así, una meta-descripción.

La descripción se basa en el siguiente diagrama UML. Se utiliza éste lenguaje gráfico de la misma forma en que podría usarse cualquier lenguaje orientado a objetos; lo explicado aquí es válido con cualquier representación, UML es sólo un accidente. Lo esencial es que estoy usando la orientación a objetos para describirle a si misma. Por otro lado, los puristas de objetos pueden objetar la existencia de Clase lo que implica que no es una descripción objetual pura, pero para ellos tengo una sorpresa al final del artículo.

Diagrama general

Diagrama general

Para abordar ésta descripción tomaré subdiagramas del anterior. Comencemos con los dos conceptos claves.

Clase - Objeto

Clase – Objeto

Los dos conceptos básicos de la OO son el objeto y la clase. en el diagrama se representan como dos clases que están relacionadas por la asociación instanciaDe, esto se lee como: un Objeto es una instancia de una Clase. Para entenderlo mejor daré un ejemplo:

Ejemplo de Clase - Objeto

Ejemplo de Clase – Objeto

En éste diagrama de objetos se puede ver el objeto firulais, que es una instancia de la clase Perro. Esto es más o menos como el caso de los conjuntos y sus elementos: La clase es el conjunto y el elemento es el objetos. La clase es algo así como el molde para hacer los objetos. Esto último quiere decir que con la clase Perro se pueden hacer muchos perros, como por ejemplo, un firulais y también una lassie.

Ejemplo de Clase - Objeto: Lassie

Ejemplo de Clase – Objeto: Lassie

Pero un objeto también puede tener atributos, como se ve en el siguiente diagrama de objetos.

Atributo - Valor

Atributo – Valor

Por ejemplo, en nuestra clase Perro podemos tener el atributo edad. Fíjese que es un nombre genérico, por el contrario en el objeto tenemos el valor específico, en nuestro ejemplo de firulais 2 años.

Ejemplo de las clases Atributo, Valor

Ejemplo de las clases Atributo, Valor

Repacemos: firulais es un objeto, que es una instancia de Perro. Firulais tiene el valor 2 del atributo edad, esto es, 2 es una instancia de edad.

En en diagrama general, el primero del artículo, se puede ver que en la columna izquierda están los conceptos generales y que en la columna derecha están todos los conceptos específicos correspondientes, las «instancias de».

Pero sigamos con la descripción. No sólo podemos almacenar datos en los objetos, sino que también podemos hacer cosas con ellos, esto le llamamos operaciones y mensajes.

Operación - mensaje

Operación – mensaje

Siguiendo con nuestro ejemplo de la clase Perro tendríamos una operación que se le puede hacer a cualquier perro: darDeComer cualquier Comida (esta última es una clase también). Entonces cuando la damos de comer a Firulais invocamos la operación, esto es, la enviamos el mensaje a firulais, «darDeComer(carne)».

Ejemplo de Operación y Mensaje

Ejemplo de Operación y Mensaje

Es de notar que mientras que la operación es general y pertenece a una clase, un mensaje se envía a un objeto particular con valores específicos: en vez de Comida está carne.

Veamos un poco más en detalle los métodos y los mensajes.

Método - Hilo

Método – Hilo

Una operación, a su vez, puede tener varios métodos. Un método es el algoritmo en si de la operación y está compuesto por una secuencia de varios mensajes. Por ejemplo darDeComer(:Concentrado) es un método que es la secuencia de los siguientes mensajes: Tomar el plato, lavar el plato; servir x cantidad de concentrado para perros en el plato; poner el plato en el sitio de alimentación (no es necesario llamar al perro). Esto se puede representar en un diagrama de objetos de la siguiente forma:

Ejemplo de Operación y Mensaje

Ejemplo de Operación y Mensaje

Además una misma operación puede tener varios métodos, esa es la base del polimorfismo. Por ejemplo, podríamos tener la misma operación pero en vez de concentrado le damos de comer carne:

Ejemplo de Operación y Mensaje

Ejemplo de Operación y Mensaje

Inclusive el objeto puede cambiar. Ahora veamos a definir como darle de comer concentrado a un gato:

Ejemplo del método de una operación

Ejemplo del método de una operación

Y a esto se le llama polimorfismo por sobrecarga. Existe también polimorfismo por sobreescritura, que es que cuando se sobreescribe el método de la clase que se extiende. Por ejemplo si tuviéramos un darDeComer en la clase Mamífero, el método de la clase Perro sobrescribiría el de mamífero.

Traigo otra vez el diagrama de operación-Mensaje.

Método - Hilo

Método – Hilo

esto para llamar la atención sobre la clase Hilo. Ésta es la instancia de Método. Realmente es el proceso que «corre» todos los mensajes del método. Utilicé el término «hilo», aunque no es de la terminología de objetos, pues este proceso es realmente un proceso liviano, comparte memoria con otros hilos.

Ahora veamos las clases Asociación y Enlace.

Asociación - Enlace

Asociación – Enlace

Una asociación es una especialización de la clase Relacion (que es abstracta). Una relación «une» dos clases para indicar que los dos objetos respectivos están vinculados por un Enlace. Por ejemplo, si tenemos la clase Perro esta puede estar relacionada con la clase Humano con una relación dueñoDe, lo que quiere decir que Firulais puede tener un dueño humano Tommy. En el respectivo diagrama de objetos:

Ejemplo de asociación y enlace

Ejemplo de asociación y enlace

Estos enlaces son normalmente implementados en los lenguajes OO por referencias o apuntadores (punteros).

No hay que perder la idea de que éste articulo no es una descripción de como usar UML. Es una descripción de una semántica en OO para un lenguaje OO. Por decirlo de otra forma, estos diagramas serían las estructuras de datos de un interpretador o compilador de un lenguaje OO. Es por eso que se usan diagramas de objetos para representar algo que normalmente se hace con diagramas de clases.

Finalmente tenemos las extensión (herencia).

Extensión

Extensión

La extensión es una relación entre dos clases que se usa para expresar «es un» en el sentido de que la superclase es más general y la subclase, más específica, es una extensión. En términos prácticos quiere decir que la subclase hereda todos los atributos, operaciones y relaciones de la superclase.

Un ejemplo para entender. La clase Perro es una extensión de la clase Mamífero. Mamífero es la superclase y Perro la subclase. Mamífero es más general y perro es una especialización de la anterior. Cómo mamífero tiene la operación lactar no es necesario definirla en la clase Perro para que Firulias pueda lactar. En un diagrama de objetos:

Ejemplo de Extensión

Ejemplo de Extensión

Una consideración, mientras que las asociaciones tienen su instanciación en los enlaces, la extensión no tiene instanciación. Es una relación exclusiva entre clases. Con lo que en los languajes objetuales puros, los que no tienen clases no debería existir la herencia.

Y esto nos trae a la sorpresa que les tengo a los puristas de la OO. Veamos el siguiente diagrama.

Extensión entre la clase Clase y la clase Objeto

Extensión entre la clase Clase y la clase Objeto

En este diagrama hay una extensión entre la clase Objeto y Clase. Esto es, una clase es una especialización de la más general clase Objeto. O sea que, en últimas todo es un objeto, hasta las clases. Como les gusta a los puristas. Y en lenguajes como Smalltalk, objetual puro, implementan de esta forma las clases.

¿Pero en principio por que se usan las clases? Se supone que es para evitar la paradoja de Rusell, la de conjuntos que se contienen y no contienen al mismo tiempo. Las clases en últimas son especializaciones de los conjuntos. ¿Pero al poner las clases, como en el último diagrama, heredando de los objetos no volveríamos a introducir la paradoja? Por eso puse esta extensión en rojo, y tal vez sea un tema interesante a tratar por algún matemático muy especializado.

Las conclusiones que podemos sacar de esta forma de representar objetos en objetos son muchas, pero la que más me gusta es que la Orientación a Objetos en tan poderosa que puede representarse a si misma, es autoreferente.

Comments
3 Responses to “Objetos en Objetos”
  1. aztlek dice:

    Esta es la base del lenguaje meta-meta-meta-orientado a objetos de Raulito el Geek http://raulito.nitcom.com/node?page=26

  2. el3ctron dice:

    chévere su artículo @Aztlek ! un saludo!

Trackbacks
Check out what others are saying...
  1. Información Bitacoras.com…

    Valora en Bitacoras.com: Esta artículo es una descripción de las bases del paradigma Orientado a Objetos (OO). Paradigma que se usa en la Programación Orientada a Objetos (POO). Pero es una descripción muy particular, en el sentido que se basa en la …..



Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: