Clases y Objetos
4.1 Definición de una clase
Una clase es un tipo definido por el usuario. Las clases son el bloque de construcción fundamental de los programas orientados a objetos.
Una clase contiene la especificación de los datos que describen un objeto junto con la descripción de las acciones que un objeto conoce cómo ha de ejecutarse.
Una clase incluye también todos los datos necesarios para describir los objetos creados a partir de la clase. Estos datos se conocen como atributos o variables.
La definición de una clase significa que se debe dar a la misma un nombre, darle nombre a los elementos que almacenan sus datos y describir las funciones que realizarán las acciones consideradas en los objetos. No reserva espacio en memoria.
Las definiciones o especificaciones no son código de programa ejecutable. Se utilizan para asignar almacenamiento a los valores de los atributos usados por el programa y reconocer las funciones que utilizará el programa. Normalmente se sitúan en archivos diferentes de los archivos de código ejecutables, utilizando un archivo por cada clase.
Formato:
class nombre_clase
{
listas_de_miembros
};
Donde:
nombre_clase = Definido por el usuario que identifica a la clase (identificadores válidos).
listas_de_miembros = Funciones y datos miembros de la clase.
Ejemplo:
Class Punto
{
public :
int Leerx();
void Fijarx(int);
private:
int x;
int y;
};
Las palabras reservadas public y prívate se llaman especificadores de acceso.
4.2 Declaración de clases
Una declaración de una clase consta de una palabra reservada class y el nombre de la clase. Una declaración de la clase se utiliza cuando el compilador necesita conocer una determinada clase definida totalmente en alguna parte del programa.
Ejemplo:
class Punto;
4.3 Miembros de una clase.
Otro tipo de miembro es un miembro de clase. Sólo hay una copia de un miembro de clase, que se utiliza para toda la clase. Todas las variables declaradas dentro de una clase, pero fuera de una función, son propiedades de la clase. En el siguiente ejemplo, la clase Person tiene dos propiedades, age y username, de tipo Number y String, respectivamente:
Asimismo, todas las funciones declaradas dentro de una clase se consideran un método de la clase. En el ejemplo de la clase Person, puede crear un método denominado getInfo():
class Person
{
public var age:Number;
public var username:String;
public function getInfo():String
{
// Definición del método getInfo()
}
}
Los miembros de clases se declaran con la palabra clave static. Por ejemplo, puede declarar el miembro de clase species con el siguiente código:
class Person
{
public static var species:String = "Homo sapiens";
// ...
}
4.4 Ámbito referente a una clase.
Una clase actúa como cualquier otro tipo de dato con respecto al ámbito. Todos los miembros de una clase se dice que están en el ámbito de esa clase; cualquier miembro de una clase puede referenciar a cualquier otro miembro de la misma clase.
Las funciones miembro de una clase tienen acceso no restringido a los miembros dato de esa clase. El acceso a los miembros dato y funciones de una clase fuera del ámbito de la clase está controlado por el programador. La idea es encapsular la estructura de datos y funcionalidad de una clase, de modo que el acceso a la estructura de datos de la clase desde fuera de las funciones miembro de la clase, sea limitada o innecesaria.
El nombre de la clase tiene que ser único dentro de su ámbito.
4.5 Especificadores de acceso.
Un principio fundamental en programación orientada a objetos es la ocultación de la información que significa que a determinados datos del interior de una clase no se puede acceder por funciones externas a la clase.
Se utilizan tres diferentes especificadores de acceso para controlar el acceso a los miembros de la clase son: public, private, protected.
Se utiliza el siguiente formato general en definiciones de la clase, situando primero las funciones de la clase, situando primero las funciones miembros públicas, seguidas por los miembros protegidos y privado (este orden no es obligatorio).
class nombre_clase {
public:
//miembros públicos
protected:
//miembros protegidos
private:
//miembros privados
};
El especificador public define miembros públicos, que son aquellos a los que se puede acceder por cualquier función. A los miembros que siguen al especificador private sólo se puede acceder por funciones miembro de la misma clase o por funciones y clases amigas. A los miembros que siguen al especificador protected se puede acceder por funciones miembro de la misma clase o clases derivadas de la misma, así como por amigas. Los especificadores pueden aparecer en cualquier orden.
Si se omite el especificador de acceso, el acceso por defecto es privado
4.6 Creación de objetos
Una vez que una clase ha sido definida, un programa puede contener una instancia de clase, denominada objeto de clase.
Formato:
nombre_clase identificador;
Así, la definición de un objeto Punto es:
Punto P;
El operador punto se utiliza con los nombres de las funciones miembro para especificar que son miembros de un objeto.
Se puede asignar un objeto de una clase a otro; por defecto C++ realiza una copia bit a bit de todos los miembros dato. Todos los miembros físicamente contenidos en el área de datos del objeto fuente se copian en el objeto receptor. Por ejemplo, el siguiente código crea un punto (Punto) llamado P2 y lo inicializa con el contenido de P:
Punto P;
//……
Punto P2;
P2 = P;
4.7 Puntero this.
En C++ se define this dentro de un objeto como un puntero al objeto en que está contenido. Se declara implícitamente como:
class_name *this;
y se inicializa para apuntar al objeto para el cual se llama a la función miembro. Este puntero es muy útil cuando se trabaja con punteros y especialmente en listas linkadas cuando se necesita referenciar un puntero al objeto que se está insertando en la lista. La palabra this está disponible para este propósito y puede ser utilizada en cualquier objeto. Realmente la forma apropiada de referenciar a cualquier variable en una lista es a través del uso del puntero predefinido this, escribiendo this -> variable_name, pero el compilador supone que se está usando, y podemos omitir el puntero.
4.8 Constructores y destructores
Constructor
Un constructor es una función miembro de propósito específico que se ejecuta automáticamente cuando se crea un objeto de una clase. Sirve para inicializar los miembros dato de una clase.
Un constructor tiene el mismo nombre que la clase y no devuelve un valor, pero si puede tener cualquier números de parámetros.
Ejemplo.
class Rectangulo
{
private:
int Izdo;
int Superior;
int Dcha;
int Inferior;
public:
Rectangulo(int I, int S, int D, int Inf); //Constructor
};
Constructor por defecto
Es un constructor que no tiene parámetros. Normalmente inicializa los miembros dato asignándoles valores por defecto.
C++ crea automáticamente un constructor por defecto cuando no existen otros constructores. Sin embargo, tal constructor no inicializa los miembros dato de la clase a un valor previsible, de modo que siempre es conveniente crear su propio constructor por defecto, darle la opción de inicializar los miembros dato con valores previsibles.
Constructores alternativos
Un constructor con parámetros se denomina constructor alternativo.
Ejemplo.
Punto P(50,250); //define e inicializa P
Destructor
En una clase se puede definir también una función miembro especial conocida como destructor, que se llama automáticamente siempre que se destruye un objeto de la clase. El nombre del constructor es el mismo que el nombre de la clase, precedida del carácter ~. Al igual que un constructor, un destructor se debe definir sin ningún tipo de retorno; al contrario que un constructor, no puede aceptar parámetros. Solo puede existir un destructor.
Ejemplo.
class Demo
{
private:
int datos;
public:
Demo () {datos = 0;} //constructor
~Demo () {} //destructor
};
El uso mas frecuente de un destructor es liberar memoria que fue asignada por el constructor. Si un destructor no se declara explícitamente C++ crea un vacío automáticamente.
Si un objeto tiene ámbito local, su destructor se llama cuando el control pasa fuera de su bloque de definición. Si un objeto tiene ámbito de archivo, el destructor se llama cuando termina el programa principal. Si un objeto se asignó dinámicamente, el destructor se llama cuando se invoca el operador delete.
No hay comentarios:
Publicar un comentario