gravatar

Conceptos básicos de la POO - Parte 3



Clases

Gambas, al igual que la mayoría de los lenguajes que soportan POO actualmente, se basa exclusivamente en el concepto de clase como "mecanismo" para crear objetos.

Una clase es una representación abstracta de un tipo de objeto, frecuentemente presente en el dominio del problema que se intenta resolver, que define el comportamiento y la estructura de los datos que tendrán los objetos que se crearán a partir de ella.

Por ejemplo, en un sistema para gestionar clientes debería existir una clase “Cliente” constituida tanto de la información que el sistema debe manejar acerca de ellos, como de las operaciones que afectarán a esa información, porque los clientes son un elemento de esa realidad que se debe modelar.

Si el sistema debe permitir que los clientes realicen pedidos de los diversos artículos en venta, probablemente, existirán también una clase “Artículos” y una clase “Pedidos”.

Es posible hacer una analogía parcial entre las clases y las plantillas que se usan en los procesadores de texto: las plantillas definen una estructura que compartirán todos los documentos que se vayan a crear a partir de ella (la analogía es aún más cercana si consideramos que una plantilla de documentos puede contener macros), del mismo modo una clase define la estructura de datos y el comportamiento que compartirán todas sus instancias (los objetos creados a partir de esa clase).

Entonces, una clase es un molde para crear objetos de forma similar a como una plantilla de un procesador de textos es un molde para crear documentos.

Las clases también son la "unidad de programa" fundamental en programación orientada a objetos. Es decir, que son el elemento fundamental que permite la modularización de los programas.

En efecto, en todos los lenguajes que soportan POO a través del concepto de clase, ésta es la unidad de programa que permite la modularización. Así como en la programación estructurada los programas se modularizan en primer lugar mediante funciones y procedimientos, en la POO las clases constituyen el nivel fundamental de modularización de los programas. Por supuesto, en la POO las funciones y procedimientos continúan siendo un elemento importante en la modularización, pero respecto del diseño interno de cada clase, ya que funciones y procedimientos son la forma de implementar los métodos, es decir, el comportamiento de los objetos.

Así, en una clase el comportamiento se expresa por medio de métodos (cuya implementación se realiza a través de funciones y procedimientos) y la estructura de datos se expresa por medio de atributos (que se implementan mediante variables, arreglos, u otras estructuras de datos propias del lenguaje).

En Gambas para definir una clase se debe crear un archivo con extensión “class”, prescindiendo de la palabra reservada “Class” que en otros lenguajes se usa para  definir clases (en Gambas la palabra “Class” tiene otro uso).

Una clase es también un tipo que se añade al lenguaje y que permite diseñar una solución en los términos en que se plantea el problema. Así, el compilador o intérprete puede darle a las clases un tratamiento similar al que le da a cualquier tipo de datos nativo, por ejemplo, la verificación de tipos.

En Gambas, esta es la apariencia de una clase extremadamente simple, denominada Perro:

'clase Perro PRIVATE $nombre AS String PRIVATE $raza AS String PRIVATE $propietario AS String PUBLIC SUB _new(nombre AS String, raza AS String, propietario AS String) $nombre = nombre $raza = raza $propietario = propietario END PUBLIC SUB ladrar() AS String RETURN "Guau" END PUBLIC SUB obtNombre() AS String RETURN $nombre END PUBLIC SUB obtPropietario() AS String RETURN $propietario END PUBLIC SUB obtRaza() AS String RETURN $raza END

Observe que la clase perro tiene un método llamado _new que tiene como parámetros las variables "nombre", "raza" y "propietario" de tipo String. Este método que se ejecutará al momento de crear cada objeto Perro, que exige el paso de argumentos (parámetros reales) y que devuelve la referencia al nuevo objeto, es el "constructor" de la clase Perro.

PRIVATE lassie AS Perro ... lassie = NEW Perro("Lassie", "Collie", "Eric Knight") PRINT lassie.obtNombre() & ": " & lassie.ladrar()

La salida de este programa es:

Lassie: Guau

Note que para crear un objeto perro se utiliza una variable de referencia de tipo Perro y que se llama mediante la palabra clave NEW al constructor de la clase Perro. El constructor literalmente crea el objeto, es decir, le asigna el espacio de memoria necesario a todas sus variables y métodos, y luego asigna a los miembros del objeto los valores que recibe como parámetros.

Un poco más adelante estudiaremos la "anatomía" de una clase.


Los comentarios están habilitados para que los lectores puedan participar en la corrección del libro, realizar preguntas puntuales o sugerencias. Todo comentario fuera de estos objetivos será eliminado. Por favor, tenga en cuenta lo siguiente:

- Cumpla las normas de etiqueta.

- Realice críticas constructivas.

- No sea redundante.