ManyComics
Powered by PHP
Powered by MySQL
manycomics.com 
Portada   Postales   Informática   Blog   Contactar   Autor
 Ingeniería del Software   Sistemas Operativos   Aplicaciones 

 
Estás en: ManyComics > Informática > Ingeniería del Software > Clases

Clases y objetos


  Mientras que un objeto es una entidad que existe en el tiempo y en el espacio, una clase representa sólo una abstracción, «la esencia» del objeto, si se puede decir así. UML
Grady Booch

Sin pretender escribir un tratado sobre clases y objetos (para profundizar en estos temas existe abundante bibliografía), trataré de ofrecer, a grandes rasgos, una pequeña introducción a algunos conceptos básicos de la Orientación a Objetos (OO).

Clases


Comencemos con algunos ejemplos: Marte, la pirámide de Keops, la carretera N1, Carlos Bergante, la sota de espadas... son objetos. Un objeto refleja algún aspecto del mundo que intentamos representar como base para la construcción de una determinada aplicación (cuenta con unos límites definidos y significado para ésta).

Una clase representa la esencia de un grupo de objetos (planeta, monumento, vía, persona, naipe... son clases a las que pertenecen los objetos antes citados como ejemplo), sus propiedades, las operaciones aplicables a éstos, sus comportamientos.

Clases
Una representación de las clases Bicicleta, Planeta, Libro y Naipe

En su libro "Software Engineering. A Practitioner's Approach" [PRE01], Pressman define clase como una "descripción generalizada (por ejemplo, una plantilla, un patrón o un prototipo) que describe una colección de objetos similares". Por su parte, los creadores de UML, en "The Unified Modeling Language. Reference manual." [RUM99], dan su definición del concepto de clase como "descriptor de un conjunto de objetos que comparten los mismos atributos, operaciones, métodos, relaciones y comportamiento", y la de los objetos como "entidades discretas, con límites bien definidos y con identidad, que encapsulan el estado y el comportamiento".

Con el término instancia definimos un objeto concreto de una clase. Por ejemplo, Marte, Tierra, Saturno y Urano son objetos de la clase Planeta, se dice que son instancias de la clase Planeta; a su vez el rey de copas y la sota de espadas son instancias de la clase Naipe.

Instancias de una clase
Instancias de la clase Naipe

Las propiedades de los objetos vienen dadas por los valores que tomen una serie de descriptores definidos por las clases a las que éstos pertenezcan. Estos descriptores se denominan atributos. Por ejemplo, supongamos que tenemos una clase Persona con la que queremos representar a las personas del mundo real; cualquier persona contará con una serie de propiedades que de alguna forma la definen: nombre, apellido, altura, peso, fecha de nacimiento, ... que deberán quedar reflejadas como atributos de la clase Persona (no se trata de incluir como atributos todas las propiedades de una persona, sino tan sólo las relevantes para el modelo que estemos construyendo; no tiene sentido que por ejemplo se incluya como atributo el Número de Identificación Fiscal si estamos modelando un sencillo listín telefónico, pero sí podrá ser necesario si se trata de modelar un sistema que permita a una empresa un tratamiento de clientes).

Una operación es una función aplicable a los objetos de una clase. La implementación de una operación para una clase contituye un método de ésta (normalmente usaremos indistintamente los términos operación, método y servicio, también se suele hablar de funciones miembro; personalmente prefiero hablar de métodos). La interacción con los objetos se lleva a cabo mediante lo que se llama paso de mensajes al objeto en cuestión. Al pasar un mensaje a un objeto estaremos activando un método de éste, es decir, ejecutando una operación concreta de la clase a la que pertenece el objeto, de modo que éste iniciará un comportamiento determinado.

En "Object-Oriented modeling and design" [RUM91], Rumbaugh plantea la pregunta: "Si los objetos son el tema central del modelado de objetos ¿por qué preocuparse por las clases?". Pues bien, aquí entra en juego el concepto de abstracción y las ventajas que nos proporciona; en palabras de Rumbaugh: "es posible escribir operaciones una sóla vez para cada clase de tal manera que, todos los objetos de la clase se beneficien de la reutilización del código" (las ventajas son aún mayores si a ésto añadimos el concepto de herencia, por el que se beneficiarán también todos los objetos de las subclases que hereden los métodos).

Veamos un ejemplo de la representación de clases (conceptualmente, mostrando atributos y mostrando tanto atributos como métodos) para una clase Bicicleta:

Clase

Y a continuación una instancia de la clase, el objeto miBicicleta:

Bicicleta  miBicicleta:Bicicleta       
 piñones = 6
 platos = 3
 piñónActual = 5
 platoActual = 2
 velocidad = 0
 frenoDelantero = 0
 frenoTrasero = 0
 alturaSillín = 20

Mi bicicleta: Una instancia de Bicicleta
(ops!, sí, la que aparece en la foto es realmente mi bicicleta ;-D)

Herencia

Las asociaciones describen relaciones entre clases. A través de una relación es-un (is-a) entre dos clases, la generalización se convierte en un potente mecanismo que permite derivar una clase de otra (que llamaremos superclase), de modo que esta nueva clase (subclase) hereda las características de la superclase, pudiendo añadir además sus propios atributos y métodos. En UML esta relación se representa mediante una línea con un triángulo vacío en el extremo correspondiente a la superclase.

En este diagrama vemos por ejemplo que una Autopista es una ViaInterurbana, y ésta a su vez es una Vía.

Ejemplo de herencia
Herencia: Subclases de Via

En el siguiente diagrama tomemos como ejemplo la clase VehiculoMotor. Podemos considerar que un vehículo de motor cuenta con las propiedades de un vehículo (su superclase es Vehiculo) pero además atributos y métodos propios dado que se caracteriza además por tener un motor de combustión; si por ejemplo tiene un atributo centimetrosCubicos público, será una propiedad que heredará la clase Automóvil y a su vez Motocicleta (una Motocicleta es un Automóvil y éste es un VehiculoMotor).

Vehículo
Herencia: Subclases de Vehiculo

El concepto de herencia es de gran utilidad, sin embargo debe evitarse en la medida de lo posible contar con generalizaciones demasiado anidadas.

Hasta aquí esta pequeña introducción; hay muchos más conceptos, así que para profundizar en ellos (polimorfismo, clases abstractas, agregación, composición, cualificadores, atributos y métodos públicos, protegidos y privados, etc.) te remito a la abundante bibliografía sobre Orientación a Objetos. Para empezar puedes echar un vistazo a los libros referenciados en esta página :-)

Composición
Agregación y composición

Notas, observaciones, citas...

+ Importancia del modelo de objetos.

..., el más importante es el modelo de objetos porque es necesario para describir qué está cambiando o transformándose antes de describir cuándo o cómo cambia.
...
El modelo de objetos es el más importante de los tres modelos. Se hará hincapié en construir un sistema en torno a los objetos y no en torno a la funcionalidad, porque el modelo de objetos se corresponde con el mundo real de manera más fiel y, por tanto, es más flexible frente al cambio. Los modelos de objetos proporcionan una representación gráfica intuitiva del sistema y son valiosos para comunicarse con el cliente y para documentar la estructura del sistema.
James Rumbaugh
Modelado y diseño orientados a objetos.
Metodología OMT.
 
Observación: OMT es una metodología guiada por los datos. Sorprende ver que su creador, Rumbaugh, es también uno de los creadores de RUP (Proceso Unificado de Rational), unos cuantos años después, si tenemos en cuenta que RUP es guiado por los casos de uso en lugar de por los datos. Entramos en el ya antiguo debate metodológico: ¿por dónde empezar?, ¿datos o procesos?, ¿qué debería guiar un proceso de desarrollo de software?. Personalmente me atrae la idea de al menos comenzar por los datos, por un modelo conceptual, sin embargo, ya orientando el desarrollo hacia el usuario final, he encontrado de gran utilidad la utilización de casos de uso, sobre todo para la especificación inicial de lo que se pretende que haga el sistema a construir. En palabras de Rumbaugh [RUM91], incluso como consejo para usar OMT, "no hay que empezar a construir el modelo de objetos anotando clases, asociaciones y herencias. En primer lugar hay que comprender el problema que se debe resolver. El contenido de un modelo de objetos está determinado por su relevancia para la solución", y ahí, precisamente en la comprensión del problema a resolver, es donde veo de gran utilidad el empleo de casos de uso.

+ No deben utilizarse ID's.

Algunos medios de implementación tales como muchas bases de datos, exigen que el objeto tenga un identificador único que se reconozca a cada objeto. Los identificadores de objetos explícitos no son necesarios en el modelo de objetos, cada uno posee su propia identidad única. ... Los identificadores son un artefacto de la computadora y no tienen un significado intrínseco más allá de la identificación de un objeto.

No hay que confundir los identificadores internos con atributos del mundo real. Los identificadores internos son solamente una comodidad de implementación y no tienen significado en el dominio del problema.

James Rumbaugh
Modelado y diseño orientados a objetos.
Metodología OMT.
 

Referencias bibliográficas.



Google

Desaparición.
¿Puedes facilitar algún dato?
Persona desaparecida
>más información<
Get Firefox!

Desaconsejable
Una práctica común, pero desafortunada en la programación orientada a objetos consiste en "tomar prestada" una clase que sea similar a una clase deseada y modificarla entonces, cambiando e ignorando algunas de sus características, aun cuando la nueva clase no sea una clase especial de la clase original. Esta práctica puede dar lugar a la confusión conceptual y a que se incorporen a los programas suposiciones ocultas.

Modelado y diseño orientados a objetos.
Metodología OMT.
Rumbaugh, Blaha, Premerlani, Eddy, Lorensen

OO preUML
Para quien se acabe de incorporar al mundo OO a través del lenguaje de modelado UML y lea esta página, sólo recordarle que el mundo de las clases y objetos no empieza con UML (pudiera dar la impresión :-?, pero no es así), existe documentación anterior que podrá resultar muy útil a quien desee aclarar determinados conceptos.

Libros:
Ingeniería del Software
Ingeniería del Software: Un enfoque práctico
Roger S. Pressman


    Powered by Apache Recomendado
800x600
 
[Portada ManyComics] [Postales virtuales] [Informática] [Blog] [Contactar] [Autor]

© Javier Mtz. de Ibarreta, 2000-2008