AnteriorPosterior

4. Separando la interfaz y la implementación.

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

4. Separando la interfaz y la implementación.


Una vez que lo hemos visto funcionar todo junto, vamos a hacerlo usando tres ficheros distintos:

  • En uno tendremos el "resumen" de la clase, también llamado "interfaz de la clase": los nombres (y los tipos) de cada atributo y cada método.
  • En otro estará la "implementación" de la clase: los detalles sobre lo que hace cada método.
  • Finalmente, en un tercer fuente estará el "main" de un pequeño programa de prueba.

Se parecerá mucho a lo que tendríamos si simplemente partiéramos el fuente en tres trozos, pero aparecerá alguna novedad"¦

Veamos en primer lugar cómo quedaría el fichero de cabecera:

 1: //
2:
// pant03.h
3:
//
4:
// Introducción a C++
5:
// Jose Ignacio Cabanes
6:
//
7:
// Tercer ejemplo (en dos fuentes)
8:
// Versión para TC++ (MsDos)
9:
//
10:
/////////////////////////////////////////////
11:

12: #ifndef _PANT3_H
13: #define _PANT3_H
14:
15: // ---------------------------------------------------------
16:
// CLASE : PantallaTexto
17:
// Oculta el funcionamiento de la pantalla en modo texto.
18:

19: class PantallaTexto {
20: char maxX, minX; // Coordenadas máxima y mínima (horizontal)
21:
char maxY, minY; // Coordenadas máxima y mínima (vertical)
22:

23: public:
24: PantallaTexto(); // Método constructor
25:
void Borra(); // Borra toda la pantalla
26:
void Escribe(int X,
27: int Y, char *texto); // Escribe un mensaje en ciertas coordenadas
28:
int LeeTecla(); // Espera una tecla y la devuelve
29:
int LeerMaxX(); // Devuelve coordenada X máxima
30:
int LeerMinX(); // Devuelve coordenada X mínima
31:
int LeerMaxY(); // Devuelve coordenada Y máxima
32:
int LeerMinY(); // Devuelve coordenada Y mínima
33:
~PantallaTexto(); // Método destructor
34:
};
35:
36: #endif

Los cambios no son grandes: poco más que incluir un bloque "#ifndef... #endif" para evitar que este fichero se puda incluir varias veces si usamos a la vez varios fuentes que dependan de él.


El cuerpo de las clase quedaría en otro fichero, que tiene que incluir el anterior (indicado entre comillas, por tratarse de un fichero nuestro, no uno original del compilador):

 1: //
2:
// pant03.cpp
3:
//
4:
// Introducción a C++
5:
// Jose Ignacio Cabanes
6:
//
7:
// Tercer ejemplo (en dos fuentes)
8:
// Versión para TC++ (MsDos)
9:
//
10:
/////////////////////////////////////////////
11:

12: #include
<conio.h>
13: #include
"pant03.h"
14:
15:
16:
// ==========================================================================
17:
// A continuación viene el desarrollo de las funciones (métodos)
18:

19:
20:
// ----------------- PantallaTexto -------------------------
21:
// Método constructor: valores iniciales
22:

23: PantallaTexto
::PantallaTexto() {
24: maxX
= 80; minX = 1;
25: maxY
= 25; minY = 1;
26:
}
27:
28:
29:
// ----------------- PantallaTexto - Borra -----------------
30:
// Borra toda la pantalla
31:

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

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

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

59:
int
60: PantallaTexto
::LeerMaxX() {
61:
return maxX;
62:
}
63:
64:
65:
// ----------------- PantallaTexto - LeerMinX ---------------
66:
// Devuelve la coordenada horizontal máxima
67:

68:
int
69: PantallaTexto
::LeerMinX() {
70:
return minX;
71:
}
72:
73:
74:
// ----------------- PantallaTexto - LeerMaxY ---------------
75:
// Devuelve la coordenada vertical máxima
76:

77:
int
78: PantallaTexto
::LeerMaxY() {
79:
return maxY;
80:
}
81:
82:
83:
// ----------------- PantallaTexto - LeerMinY ---------------
84:
// Devuelve la coordenada vertical mínima
85:

86:
int
87: PantallaTexto
::LeerMinY() {
88:
return minY;
89:
}
90:
91:
// ----------------- PantallaTexto -------------------------
92:
// Método destructor: no usado esta vez
93:

94: PantallaTexto
::~PantallaTexto() {
95:
// Aquí liberaríamos el espacio reservado, etc.
96:
}


Y el programa que lo usara podría ser
 1: 
2: //
3:
// usapant.cpp
4:
//
5:
// Introducción a C++
6:
// Jose Ignacio Cabanes
7:
//
8:
// Tercer ejemplo (en dos fuentes)
9:
// Versión para TC++ (MsDos)
10:
//
11:
/////////////////////////////////////////////
12:

13: #include <conio.h>
14: #include "pant03.h"
15:
16: // ==========================================================================
17:
// Finalmente: un programa sencillo de ejemplo
18:

19: main() {
20: PantallaTexto pant; // Definimos un objeto de la clase "PantallaTexto"
21:

22: pant.Borra();
23: pant.Escribe(30,14, "Hola");
24: pant.LeeTecla();
25: return 0;
26: }



Este fuente (formado realmente por 3 ficheros) se puede compilar con Turbo C++ 1.01 para MsDos tecleando el nombre del compilador y a continuación el de los dos fuentes que no son ficheros de cabecera (el fichero de cabecera no es necesario indicarlo, porque se incluye automáticamente):

TCC USAPANT.CPP PANT03.CPP

Obtenemos un fichero llamado USAPANT.EXE.


De igual modo, podríamos compilarlo con Borland C++ 5.5 para Windows tecleando desde el símbolo del sistema la orden:

BCC32 USAPANT.CPP PANT03.CPP

Actualizado el: 07-05-2006 06:22

AnteriorPosterior