| Artículos | 01 SEP 2002

Programación Orientada a Objetos con Object Pascal

Tags: Histórico
José R. García.
Para quienes han utilizado con anterioridad lenguajes de programación estructurados tradicionales, la Programación Orientada a Objetos (en adelante POO) puede ser quizás un tanto desconcertante, fundamentalmente debido a la desinformación que suele haber en torno a este tema. Son muchos los productos erróneamente etiquetados como “orientado a objetos”, cuando en realidad no lo son. Ciertamente es bastante sencillo confundir los términos “desarrollado usando POO” y “orientado a objetos”, si no se conoce profundamente qué es la POO en realidad. Esto es así debido fundamentalmente a las interfaces de usuario gráficas que nos brindan los sistemas operativos actuales; con ellas es fácil dar a una aplicación la apariencia de estar basada en objetos, aun cuando el desarrollo haya sido llevado a cabo mediante un lenguaje estructurado convencional.
No obstante, aquellos que comienzan su aprendizaje en el arte de la programación, asimilan con facilidad todos estos nuevos conceptos. Tal es así, que en algunos centros de enseñanza, la POO se presenta al alumno recién iniciado sin necesidad de pasar por un curso de programación estructurada o similar. Apoyándonos en este hecho, vamos a dar un repaso a la POO, desde el punto de vista del Object Pascal: el lenguaje de programación que utilizaremos para trabajar con Delphi.

Elementos fundamentales en la POO
El término orientado a objetos, aplicado al software, indica que se están empleando los diferentes conceptos que veremos a continuación, tales como clases y objetos, y sus diferentes características. Podemos decir, además, que un programa estructurado no tiene por qué ser orientado a objetos. Sin embargo, todo programa orientado a objetos es un programa estructurado (o al menos debería serlo).
En la POO existen una serie de elementos básicos gracias a los cuales se construye todo lo demás.
Las clases. Una clase es un tipo de dato compuesto por otros tipos de datos, tanto simples como compuestos, llamados miembros, y procedimientos o funciones denominados métodos. Una clase es tan sólo una especie de molde. La clase en sí no almacena valores en los miembros que la componen, al igual que un molde no define el color que tendrá la pieza que con él se construya, aunque sí la forma que tendrá.
Los objetos. También llamados instancias, son elementos creados a partir de una clase. Se puede afirmar que si una clase es un molde, un objeto es una pieza creada con dicho molde. Una vez que tenemos un objeto, podríamos colorearlo y modificar su aspecto en general. Mientras que el color del molde no importa, el color de un objeto creado con dicho molde sí es relevante. Un objeto puede tener métodos, los cuales habrán sido definidos en la clase a la que pertenece. Dichos métodos permiten al objeto efectuar operaciones, al igual que un juguete eléctrico que ha sido creado a partir de un molde puede realizar movimientos, emitir sonidos, etc.
Las interfaces. Todo elemento en la vida real tiene una o más interfaces para comunicarse o interactuar con otros elementos. Por ejemplo, una casa tiene un timbre para que una persona pueda indicar a los ocupantes de la casa que desea comunicarse con ellos. El timbre es un medio de comunicación, y forma parte de la interfaz de la casa con el exterior. Podemos decir que la casa tiene múltiples interfaces: la que permite que la gente del exterior se comunique con la del interior (timbre, portero automático, teléfono, etc.), la que permite suministrar electricidad a los habitantes de la misma, etc. De todo ello podemos deducir que una interfaz puede englobar diferentes mecanismos de comunicación, es decir, el timbre en sí no es una interfaz, sino que forma parte de la interfaz de comunicación con el exterior. Como es lógico, todo objeto debería tener al menos una interfaz, formada por uno o más elementos de comunicación. Un objeto que no tiene interfaz alguna no es generalmente demasiado útil.
Aunque son muchísimas las características que distinguen la POO de la programación tradicional, hay tres que dejan ver con suma claridad su potencia y superioridad: la encapsulación, herencia y polimorfismo.

Encapsulación
En la programación estructurada convencional la norma general de trabajo consiste en crear procedimientos y funciones, a los que llamaremos pasando como parámetros ciertos valores y, en ocasiones, variables sobre las que intervendrán. Gracias a lenguajes como C o Pascal, podemos declarar tipos compuestos por varios datos a su vez, como es el caso de las estructuras y uniones del C o los registros del Pascal:

type
TCliente = record
Nombre : string;
NIF : string;
Email : string;
end;

Mediante estos tipos de datos podemos almacenar en una sola variable la información, por ejemplo, relativa a un cliente, y usando matrices o listas podemos manejar un número elevado de estos. Para operar con estos datos compuestos es necesario crear procedimientos o funciones en nuestro programa que los reciban como parámetro:

procedure EnviarEmailCliente (Cliente : TCliente);
Para ejecutar este procedimiento utilizaríamos el siguiente código (usaremos una supuesta variable Cliente1, de tipo TCliente):

EnviarEmailCliente (Cliente1);

Gracias al procedimiento EnviarEmailCliente, podríamos emitir todas las facturas del cliente enviado como parámetro. Hasta aquí todo parece normal, pero deberíamos tener en cuenta que el tipo de dato TCliente no tiene absolutamente nada que ver con el procedimiento EnviarEmailCliente, salvo que este último tiene un parámetro de ese tipo. Si en un futuro decidimos modificar el tipo TCliente, habremos de tener presentes todos los procedimientos y funciones que lo utilizan, ya que posiblemente haya que modificarlos también.
En un lenguaje orientado a objetos como el Object Pascal existe un tipo de dato compuesto similar a los registros del Pascal convencional: la clase. El identificador de una clase en Object Pascal es class. Como hemos comentado anteriormente, una clase permite incluir en su interior datos, al igual que los registros, procedimientos y funciones. El objetivo de estos procedimientos y funciones es manipular los datos que contiene la clase. Cuando un procedimiento o función pertenece a una clase, se le denomina método. Gracias a esto, a la hora de crear un programa usando clases, encontraremos que no hay que definir procedimientos ni funciones sueltas similares al EnviarEmailCliente que hemos visto con anterioridad, sino que por el contrario definiremos métodos incluidos en la propia clase. Siendo así, el ejemplo anterior quedaría de la siguiente manera:

type
TCliente = class
Nombre : string;
NIF : string;
procedure EnviarEmail;
end;

procedure TCliente.EnviarEmail;
En este caso podemos observar que ha cambiado el nombre del procedimiento. En lugar de llamarse EnviarEmailCliente, ahora responde al nombre de EnviarEmail. ¿Por qué? El motivo es que ahora forma parte de la propia clase TCliente, por lo que su anterior nombre es un tanto redundante, ya que se sobreentiende que dicho procedimiento sirve para manipular un TCliente. No obstante, para eliminar cualquier tipo de duda al respecto de esta forma de incorporar procedimientos a un programa, veremos cómo sería una llamada al método anterior:

Cliente1.EnviarEmail;

Como podemos ver, la variable Cliente1 ha pasado de ser un parámetro del procedimiento EnviarEmailCliente a ser el objeto sobre el

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información