AnteriorPosterior

2. Creando un objeto con C++

  Curso: Introducción a C++, por Nacho Cabanes (antiguo)

2. Creando un objeto con C++

Vamos a empezar por hacer algo frecuente: crear un objeto "pantalla", que nos aisle totalmente del hardware, del sistema operativo y del compilador que estemos utilizando. Así, luego podremos definir un objeto "ventana" (por ejemplo), que muestre la información accediendo al objeto "pantalla".

Si después queremos que nuestro programa funcione en otro entorno distinto, bastará con crear una nueva versión del objeto "pantalla", que internamente trabaje de forma distinta, pero externamente responda a los mismos mensajes que el objeto "pantalla" inicial.

Así, todo el resto del programa funcionará en el nuevo entorno sin ningún cambio adicional.

En nuestro caso, nos centraremos en un objeto que nos oculte el acceso directo a la pantalla, y que estará particularizado (inicialmente) para el compilador Turbo C++, bajo MsDos. Después del fuente están los comentarios sobre él.


 1: // 
2:
// pant01.cpp
3:
//
4:
// Introducción a C++
5:
// Jose Ignacio Cabanes
6:
// Primer ejemplo (en un sólo fuente)
7:
// Versión para TC++ (MsDos)
8:
//
9:
/////////////////////////////////////////////
10:

11: #include <conio.h>
12:
13: // ---------------------------------------------------------
14:
// CLASE : PantallaTexto
15:
// Oculta el funcionamiento de la pantalla en modo texto.
16:

17: class PantallaTexto {
18: char maxX, minX; // Coordenadas máxima y mínima (horizontal)
19:
char maxY, minY; // Coordenadas máxima y mínima (vertical)
20:
public:
21: void Borra(); // Borra toda la pantalla
22:
void Escribe(int X,
23: int Y, char *texto); // Escribe un mensaje en ciertas coordenadas
24:
int LeeTecla(); // Espera una tecla y la devuelve
25:
int LeerMaxX(); // Devuelve coordenada X máxima
26:
};
27:
28: // ==========================================================================
29:
// A continuación viene el desarrollo de las funciones (métodos)
30:

31: // ----------------- PantallaTexto - Borra -----------------
32:
// Borra toda la pantalla
33:

34: void
35: PantallaTexto::Borra() {
36: clrscr();
37: }
38:
39: // ----------------- PantallaTexto - Escribe ---------------
40:
// Escribe un mensaje en ciertas coordenadas
41:

42: void
43: PantallaTexto::Escribe(int X, int Y, char *texto) {
44: gotoxy(X, Y);
45: cputs(texto);
46: }
47:
48:
49: // ----------------- PantallaTexto - LeeTecla --------------
50:
// Espera una tecla y la devuelve
51:

52: int
53: PantallaTexto::LeeTecla() {
54: return getch();
55: }
56:
57:
58: // ----------------- PantallaTexto - LeerMax ---------------
59:
// Devuelve la coordenada horizontal máxima
60:

61: int
62: PantallaTexto::LeerMaxX() {
63: return maxX;
64: }
65:
66:
67: // ==========================================================================
68:
// Finalmente: un programa sencillo de ejemplo
69:

70: main() {
71: PantallaTexto pant; // Definimos un objeto de la clase "PantallaTexto"
72:

73: pant.Borra();
74: pant.Escribe(30,14, "Hola");
75: pant.LeeTecla();
76: return 0;
77: }

Como este fuente es el primero que hacemos, hay muchas cosas que comentar:

* Los números que aparecen al principio de cada línea no hay que teclearlos, son sólo una ayuda para que se puedan encontrar los errores más rápidamente.

* Ya en la primera línea, aparece texto después de una doble barra (//). Se trata de un comentario hasta fin de línea. Es un tipo de comentarios que existe en C++ y no en C: el comentario comienza después de // y termina cuando acaba la línea.

* Después definimos una clase de objetos: la clase PantallaTexto. Para eso usamos la palabra "class".

* Esta clase tiene ciertas variables (atributos), como por ejemplo las coordenadas máxima y mínima, que nos pueden interesar para poder saber si cierto texto cabrá en la pantalla, o para centrarlo.

* También será capaz de hacer ciertas cosas: borrarse o mostrar un texto, por ejemplo. Hemos añadido también la posibilidad de leer una tecla, que no está estrictamente relacionada con la pantalla, pero que nos va a resultar cómoda para hacer una pausa cuando queramos.

* Estas funciones (métodos) son públicas (lo que se indica con la palabra "public"): se podrá acceder a ellas desde fuera de la definición del objeto (desde un programa que use algún objeto de la clase PantallaTexto, por ejemplo). Por el contrario, las variables (atributos) son privadas: no se podrán leer ni modificar salvo desde los propios métodos del objeto. Esto DEBERIA HACERSE SIEMPRE ASI, para que el programa que use nuestro objeto sea independiente de cómo el objeto es internamente. (Nota: más adelante veremos más detalles sobre las partes públicas y privadas de una clase).

* Por eso, hemos definido el atributo "maxX" como "char", para que ocupe poco espacio en memoria, pero el método "LeerMaxX" devuelve un valor "int": si después nos damos cuenta de que no nos basta con un "char", porque trabajamos con pantallas capaces de mostrar muchísimo texto, redefinimos el dato "maxX" y lo convertimos en "int". El programa internamente se ha corregido, pero al usuario que emplea nuestro objeto pantalla no le afecta el cambio: antes leía un número entero y ahora sigue leyendo un número entero.

* Para detallar el funcionamiento interno de cada función (método), tenemos que indicar el nombre de la clase y el nombre del método, separados por dos símbolos de "dos puntos" (el conjunto :: se llama "operador de resolución de ámbito"):

void PantallaTexto::Borra()


* Ya en el programa de ejemplo, definimos un objeto de esta clase y accedemos a sus métodos empleando el nombre del objeto y el nombre del método, separados por un punto:

pant.Borra();

En C++, a esto se le suele llamar "Pasar un mensaje a un objeto": en nuestro caso, estamos pasando al objeto "pant" el mensaje de que se borre, a lo que el objeto responde siguiendo los pasos que se le han indicado en el método "Borra" (en nuestro caso, llamar a clrscr).

De hecho, si fueramos puristas, deberíamos haber creado incluso un objeto "aplicación", de modo que el programa fuese un conjunto de objetos que se envían mensajes unos a otros e interactuan.

Actualizado el: 07-05-2006 06:28

AnteriorPosterior