Anterior

Tema 6 - Introducción a las clases (1)

  Curso: C++ para gente que conoce C

Tema 6. Introducción a las clases y la programación orientada a objetos


En C, cuando cuando queremos manejar un bloque de información formados por datos de distinto tipo, podemos emplear un registro (struct). C++ llega más allá: cada uno de estos elementos puede tener no sólo datos, sino también operaciones asociadas. Por ejemplo, si estamos creando un juego de "matar marcianos", tendremos objetos que interactúan: marcianos, nuestra nave, disparos, etc.

Por ejemplo, tendremos varios "marcianos", es decir varios objetos que pertenecen a una misma clase, llamada "marciano". Cada uno de estos marcianos tendrá datos como su posición X o su posición Y, pero también tendrá una serie de "cosas que podrá hacer" funciones, como moverse a su próxima posición, o disparar.

Podríamos declarar la clase "Marciano" así:
 class Marciano {
 int posicionX, posicionY;
 void mover();
 void disparar();
 }; 
A estos datos (posicionX, posicionY) les llamaremos "variables miembro" y a estas "cosas que puede hacer" (mover, disparar) las denominaremos "funciones miembro o métodos".


Los marcianos son un ejemplo muy aplicable, en el que se podrían poner a prueba la mayoría de los conceptos que intervienen en la programación orientada a objetos. Pero a la vez, no es fácil de programar para un principiante, porque normalmente un juego de marcianos debería crearse en modo gráfico. Por eso, empezaremos por un ejemplo "más feo" pero que es fácil de aplicar en modo texto: un número complejo.

Los números complejos son el simbolismo que se emplea para dar solución a las raíces de números negativos, que no se pueden resolver usando números reales. Se llama "i" a la raíz de -1, de modo que raíz(-4) equivaldría al número complejo "2i": raíz(-4) = raíz(4) * raíz(-1) = 2 * i

Un número complejo, en general, puede tener tanto "parte imaginaria" (ese número que multiplica a "i", 2 en el ejemplo anterior) como "parte real", un segundo número que no multiplica a "i": el número complejo 3 + 2i tiene como parte real 3 y como parte imaginaria 2.

En este primer acercamiento nos limitaremos a crear una clase "número complejo" que sólo sepa hacer tres cosas:
  • Indicar un valor para la parte real del número
  • Indicar un valor para la parte imaginaria del número
  • Mostrar en pantalla el valor del número complejo
Lo podríamos conseguir así:

#include <iostream>
using namespace std;

class Complejo {
 private:
 float real, imag;
 public:
 void setReal(float valor);
 void setImag(float valor);
 void escribir();
};

void Complejo::setReal(float valor) {
 real = valor;
}

void Complejo::setImag(float valor) {
 imag = valor;
}

void Complejo::escribir() {
 cout << real << "+" << imag << "i";
}

int main()
{
 Complejo c1;

 c1.setImag(2);
 c1.setReal(3);
 c1.escribir();

 return 0;
}

 


Comentarios básicos sobre este fuente:
  • Primero declaramos cómo sera la clase, y más adelante detallamos qué hará cada uno de sus métodos.
  • Los componentes de una clase son privados si no se indica lo contrario. En nuestro caso, lo razonable es que las variables sean privadas (es interesante ocultar los detalles, por si más adelante queremos cambiar algo), pero los métodos que acceden a las variables si deben ser públicos, para que el resto del programa los pueda utilizar.
  • Para declarar los métodos indicamos el nombre de la clase y el nombre del método, separados por el "operador de resolución de ámbito" ( :: )
  • En el fuente, declaramos un objeto de la clase "Complejo", y para acceder a sus métodos usamos un punto (c1.escribir), al igual que en los "struct" del lenguaje C.

Notas sobre estilo: Siguiendo las normas de estilo más habituales, haremos lo siguiente:
  • Escribir comenzando con mayúscula los nombres de las clases: Complejo
  • Escribir en minúsculas los nombres de objetos, de variables y de métodos (si son nombres formados por varias palabras, las palabras estarán juntas y cada palabra intermedia comenzará en mayúsculas: numeroDeOpciones)
  • Los métodos que dan un valor a una variable miembro comenzarán con la palabra "set": setReal
  • Los métodos que leen el valor de una variable miembro (no los hemos usado aún) comenzarán con la palabra "get": getImag

Si quieres ver más recomendaciones de estilo, es fácil encontrar muchas en Internet, como por ejemplo ésta:

geosoft.no/development/cppstyle.html

Actualizado el: 08-11-2007 00:13

Anterior