mayo 03, 2006

Definiendo Clases y Objetos

Mexicali, Baja California a 3 de Mayo de 2006.


Introducción a Objetos y Clases

Todos sabemos lo que es un objeto: una piedra encontrada en la playa, un árbol de roble frente a una casa, o Bucéfalo-el caballo de Alejandro el Grande. Todos estos ejemplos de objetos, cada uno de ellos con sus propias características, y diferentes de otros objetos. Podemos describirle un objeto a alguien que jamás lo ha visto y transmitir una idea de cómo es el objeto. Por ejemplo, nunca hemos visto el caballo de Alejandro el Grande, quizás tu tampoco, pero leyendo la descripción de los historiadores, podemos saber y darnos una idea de como era bucéfalo. La imagen de Bucéfalo se formará en tu mente, basado en lo que sabemos sobre caballos de nuestra propia experiencia más la descripción hecha por algún historiador, lo cual nos lleva a un detalle sobre las características especiales y particulares que tenia Bucéfalo. Esto es, usamos nuestros conocimientos generales sobre caballos y la información particular sobre este caballo en particular (lo que distingue este caballo de otros) para construir la representación de Bucéfalo.

Esta combinación general/particular es un mecanismo muy poderoso de transmitir información. Es considerada uno de los mecanismos fundamentales que sostiene el lenguaje (representación simbólica) usada por humanos. Un mecanismo similar es usado por los Lenguajes de programación Orientada a Objetos (OO).

La Información general a cerca de un set especifico de objetos es conocida como una clase. En el ejemplo sabias que hay un tipo de objetos llamado caballo, los cuales tienen cuatro piernas, cabeza, una cola, dos orejas, son usados para montar, entre otras cosas. Si agrupas toda la información común de todos los caballos y agrupas esta información bajo el nombre abstracto de caballo, tienes una idea de lo que es una clase. Caballo es pues el nombre genérico para cualquier miembro del set de todos los caballos particulares.

La información Particular que diferencia un caballo de otros caballos es usado para construir una imagen mental de un caballo (o en el caso general de cualquier objeto) en nuestra mente. Por ejemplo: la clase caballo genérica tiene un color, el cual es una característica de la clase. Esto es, sabes que cualquier caballo tiene un color. No puedes predecir que color podría tener un caballo en particular sin más información a cerca del caballo. Esta información podría ser el color actual del caballo, el cual es en efecto el valor de la característica del color de la clase.

El mismo mecanismo general/particular es usado en Lenguajes de Programación OO para definir clases y objetos. Una clase es un tipo de información definida por el usuario que describe un set de objetos que comparten algunas características. Un objeto es un miembro de este set. Se dice que un objeto es una instancia de una clase al que pertenece. Un objeto no puede pertenecer a mas de una clase, un objeto no puede ser un caballo y una piedra a la ves. Veremos mas tarde cuando veamos herencia, que este enunciado se debe de entender de una forma.

Nota:
Por ejemplo puedes tener una clase mas general llamada Mamífero, que incluiría todos los Mamíferos, y por lo tanto todos los caballos. En términos matemáticos es un superset de la clase caballo. Por lo tanto, en este sentido, un caballo también es un mamífero. El echo es que las clases Mamífero y Caballo están relacionadas en una forma especial, mientras que las clases caballo y piedra no están relacionadas (presumiblemente).

Una clase es una manera de agrupar objetos que comparten un numero de características: atributos (como nombre, color, altura, peso, etc.) y el comportamiento (como habilidades para brincar, correr, nadar, etc.) Por ejemplo todos los objetos en la clase caballo tendrán un atributo llamado altura. Esto significa que todos los objetos en esa clase tienen una altura-el valor del atributo altura será diferente para cada instancia de la clase (ej. Para cada caballo en particular). Este es un concepto muy importante que se necesita entender: Todas las instancias de una clase (objetos) tienen todos los atributos definidos por la clase. Cada objeto individual tiene su propio valor(es) para estos atributos.

Formalmente una clase es un set de objetos que comparten una estructura de datos comunes y comportamiento. Un objeto es una estructura de datos (también conocido como estado) y el comportamiento asociado con el.

Definiendo una clase en Visual Basic .NET
Una clase es un tipo de dato definido por el usuario. Su declaración es similar a la declaración de estructuras. Puedes declararlas como parte de un modulo; sin embargo, por el echo de que las clases tienden a ser mas grandes (tienen mas líneas de código) que las estructuras, son declaradas en archivos separados (usando la misma extensión .vb).

Crear un proyecto de consola y dale el nombre sugerido
ClassExample1. Del menú del proyecto selecciona Add Class y cambia el filename de Class1.vb a Horse.vb. Introduce las lineas de código mostradas en negro en el siguiente ejemplo:

Public Class Horse
Public m_name As String
Public m_color As String
Public m_height As Single
End Class

Esta es la definición de una clase. Aparentemente no hay diferencias mayores entre una clase y una estructura (excepto la palabra Class, la cual reemplaza Structure). Una clase puede tener campos, el cual tiene la misma semántica de los campos en una estructura. En este ejemplo se tiene tres campos públicos m_name, m_color, y m_height.

Nota:
El prefijo m_ es una notación convencional usada por los campos clases y permanece para miembros de datos. Usaremos esta convención a través de este libro. Es de gran ayuda ya que nos permite distinguir entre campos y propiedades.

Todas las instancias de esta clase tendrán estos tres campos; cada instancia puede tner diferentes valores para los campos. Esto es similar en la vida real, donde todos los caballos tienen un nombre, altura, y color, pero cada caballo tiene sus propios valores para estos atributos. La idea detrás del paradigma Orientado-a-Objetos es de tratar y emular la vida real en una forma natural e intuitiva.

Puedes ahora usar la clase que definimos. Podemos declarar variables par este tipo de datos, los cuales son conocidos como variables objetos. Estas variables son los objetos o instancias del tipo de caballo. Podemos usar una variable declarada en esta forma para acceder a los miembros de la clase (campos, como en el ejemplo). Podemos cambiar los valores para estos campos, y en general usar las variables como las usarías en cualquier estructura, con una diferencia importante: Los Objetos tienen una tarea por-referencia semántica. Esto significa, que asignando una variable del tipo caballo a otra no va a hacer una copia del objeto, pero tendrá una referencia al mismo objeto que el primero.

Introducir el siguiente código en Sub Main, en Modulo1. El código ilustra un ejemplo de usar la clase caballo.




Module Module1
Sub Main ()
Dim h As horse = New Horse()
h.m_name= “Bucefalo”
h._m_color = “black”
h.m_height = 2

Dim g as Horse
g = h

g.m_height = 1.8
Console.WriteLine (“Altura para h es ahora {0}”, h.m_height)
End Sub
End Module

Primero declaramos una variabe nueva del tipo caballo y la inicializamos. Podriamos decir en otras palabras que creamos una instancia de un caballo, o creamos un objeto caballo. Esto es echo usando la palabra New . New (nuevo) es usado para crear un nuevo objeto de un tipo especifico. Es proseguido por el nombre de la clase y los paréntesis. El nuevo operador le da la instrucción al compilador de reservar la memoria requerida para un objeto de una clase especificada.

Bibliografía: VB .Net By Example. P. 238-241

No hay comentarios.: