Programación D: clases y objetos

Las clases son la característica central de la programación D que admite la programación orientada a objetos y, a menudo, se denominan tipos definidos por el usuario.

Una clase se usa para especificar la forma de un objeto y combina la representación de datos y métodos para manipular esos datos en un paquete ordenado. Los datos y funciones dentro de una clase se denominan miembros de la clase.

Definiciones de clase D

Cuando define una clase, define un plano para un tipo de datos. En realidad, esto no define ningún dato, pero define lo que significa el nombre de la clase, es decir, en qué consistirá un objeto de la clase y qué operaciones se pueden realizar en dicho objeto.

Una definición de clase comienza con la palabra clave classseguido del nombre de la clase; y el cuerpo de la clase, encerrado por un par de llaves. Una definición de clase debe ir seguida de un punto y coma o de una lista de declaraciones. Por ejemplo, definimos el tipo de datos Box usando la palabra claveclass como sigue -

class Box { 
   public: 
      double length;   // Length of a box 
      double breadth;  // Breadth of a box 
      double height;   // Height of a box 
}

La palabra clave publicdetermina los atributos de acceso de los miembros de la clase que le siguen. Se puede acceder a un miembro público desde fuera de la clase en cualquier lugar dentro del alcance del objeto de la clase. También puede especificar los miembros de una clase comoprivate o protected que discutiremos en una subsección.

Definición de objetos D

Una clase proporciona los planos de los objetos, por lo que básicamente un objeto se crea a partir de una clase. Declaras objetos de una clase con exactamente el mismo tipo de declaración que declaras variables de tipos básicos. Las siguientes declaraciones declaran dos objetos de la clase Box:

Box Box1;          // Declare Box1 of type Box 
Box Box2;          // Declare Box2 of type Box

Ambos objetos Box1 y Box2 tienen su propia copia de miembros de datos.

Acceso a los miembros de datos

Se puede acceder a los miembros de datos públicos de los objetos de una clase mediante el operador de acceso directo a miembros (.). Probemos con el siguiente ejemplo para aclarar las cosas:

import std.stdio;

class Box { 
   public: 
      double length;   // Length of a box 
      double breadth;  // Breadth of a box 
      double height;   // Height of a box 
}
  
void main() { 
   Box box1 = new Box();    // Declare Box1 of type Box 
   Box box2 = new Box();    // Declare Box2 of type Box 
   double volume = 0.0;     // Store the volume of a box here  
   
   // box 1 specification 
   box1.height = 5.0; 
   box1.length = 6.0; 
   box1.breadth = 7.0; 
   
   // box 2 specification 
   box2.height = 10.0; 
   box2.length = 12.0; 
   box2.breadth = 13.0;
   
   // volume of box 1 
   volume = box1.height * box1.length * box1.breadth; 
   writeln("Volume of Box1 : ",volume);
   
   // volume of box 2 
   volume = box2.height * box2.length * box2.breadth; 
   writeln("Volume of Box2 : ", volume); 
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Volume of Box1 : 210 
Volume of Box2 : 1560

Es importante tener en cuenta que no se puede acceder directamente a los miembros privados y protegidos mediante el operador de acceso directo de miembros (.). En breve aprenderá cómo se puede acceder a miembros privados y protegidos.

Clases y objetos en D

Hasta ahora, tienes una idea muy básica sobre las clases y los objetos D. Hay más conceptos interesantes relacionados con las clases y objetos D que analizaremos en varias subsecciones que se enumeran a continuación:

No Señor. Concepto y descripción
1 Funciones de miembros de clase

Una función miembro de una clase es una función que tiene su definición o su prototipo dentro de la definición de la clase como cualquier otra variable.

2 Modificadores de acceso a clases

Un miembro de la clase puede definirse como público, privado o protegido. Por defecto, los miembros se asumirán como privados.

3 Constructor y destructor

Un constructor de clase es una función especial en una clase que se llama cuando se crea un nuevo objeto de la clase. Un destructor también es una función especial que se llama cuando se elimina el objeto creado.

4 El este puntero en D

Cada objeto tiene un puntero especial this que apunta al objeto en sí.

5 Puntero a clases D

Un puntero a una clase se hace exactamente de la misma manera que un puntero a una estructura. De hecho, una clase es en realidad solo una estructura con funciones en ella.

6 Miembros estáticos de una clase

Tanto los miembros de datos como los miembros de función de una clase se pueden declarar como estáticos.