domingo, 1 de agosto de 2010

UNIDAD 4 Clases y Objetos

Clases y Objetos







4.1 Definición de una clase




son atributos o funciones con las que se pueden realizar los procedimientos con diferente valor.



Una clase es un tipo de dato que contiene uno o más elementos dato llamados miembros dato, y cero, una o más funciones que manipulan esos datos (llamadas funciones miembro).




Las clases se definen en C++ mediante una construcci´on
class dividida en dos partes: una parte privada (private) que contiene algunos detalles
de la implementaci´on, y una parte p´ublica (public) que contiene todo el interfaz.
class NombreClase {
private:
// implementacion de la clase
// solamente los atributos
public:
// interfaz de la clase
};





4.2 Declaración de clases.




La lista de clases base se usa para derivar clases, de momento no le prestes demasiada
atención, ya que por ahora sólo declararemos clases base.
La lista de miembros será en general una lista de funciones y datos.
Los datos se declaran del mismo modo en que lo hacíamos hasta ahora, salvo que no
pueden ser inicializados, recuerda que estamos hablando de declaraciones de clases y no
de definiciones de objetos. En el siguiente capítulo veremos el modo de inicializar las
variables de un objeto.
Las funciones pueden ser simplemente declaraciones de prototipos, que se deben definir
aparte de la clase o también definiciones.






class nombre_clase


{


miembro1;


miembro2;...


funcion_miembro1();


funcion_miembro2();


...


};




4.3 Miembros de una clase


A los miembros de una clase se accede de igual forma que a los miembros de una estructura. Existen dos métodos para acceder a un miembro de una clase: el operador punto (.) y el operador flecha (->) que actúan de modo similar.


Función miembro es aquella que está declarada en ámbito de clase. Son similares a las funciones habituales, con la salvedad de que el compilador realizara el proceso de Decoración de nombre (Name Mangling en inglés): Cambiara el nombre de la función añadiendo un identificador de la clase en la que está declarada, pudiendo incluir caracteres especiales o identificadores numéricos. Además, las funciones miembro reciben implícitamente un parámetro adicional.



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.

4.5 Especificadores de acceso
Los especificadores de acceso permiten acceder a algunos miembros de la clase y restringir el acceso a otros. Hay tres especificadores de acceso en C++: public, private y protected. Cuando usted declara público ( public) un miembro de una clase, usted permite el acceso a tal miembro desde dentro y fuera de la clase. Los miembros de datos que son declarados protegidos ( protected ) son únicamente accesibles por funciones miembro de la clase, pero no se pueden acceder a ellos desde otras clases. Cuando un miembro de una clase es declarado privado ( private ) es ináccesible no sólo desde otras clases y otras partes del programa, sino también desde sus clases derivadas. Las clases derivadas se explicara posteriormente.

4.6 Creación de objetos

La base del encapsulamiento es la clase, a partir de ellas se le dan las características y comportamiento a los objetos. Lo primero es crear la clase y después en la función main que sigue siendo la principal crearemos los objetos de cada una de las clases. Las variables y funciones de una clase pueden ser publicas, privadas o protegidas. Por defecto si no se indica nada son privadas.
Estos modificadores nos indican en que partes de un programa podemos utilizar las funciones y variables.private: Solo tendrán acceso los de la misma clase donde estén definidos.public: Se pude hacer referencia desde cualquier parte del programa.protected: Se puede hacer referencia desde la misma clase y las subclases.

4.7 Puntero this.


Para cada objeto declarado de una clase se mantiene una copia de sus datos, pero todos
comparten la misma copia de las funciones de esa clase.
Esto ahorra memoria y hace que los programas ejecutables sean más compactos, pero
plantea un problema.
Cada función de una clase puede hacer referencia a los datos de un objeto, modificarlos
o leerlos, pero si sólo hay una copia de la función y varios objetos de esa clase, ¿cómo
hace la función para referirse a un dato de un objeto en concreto?
La respuesta es: usando el puntero this. Cada objeto tiene asociado un puntero a si
mismo que se puede usar para manejar sus miembros.







4.8 Constructores y destructores.


Los constructores son funciones miembro especiales que sirven para inicializar un
objeto de una determinada clase cuando se declara.
Los constructores tienen el mismo nombre que la clase, no retornan ningún valor y no
pueden ser heredados. Además deben ser públicos, no tendría ningún sentido declarar
un constructor como privado, ya que siempre se usan desde el exterior de la clase, ni
tampoco como protegido, ya que no puede ser heredado.


Si una clase posee constructor, será llamado siempre que se declare un objeto de esa
clase, y si requiere argumentos, es obligatorio suministrarlos.







Los destructores son funciones miembro especiales llamadas automáticamente en la ejecución del programa, y por tanto no tienen por qué ser llamadas explícitamente por el programador. Sus principales cometidos son:
Liberar los recursos computacionales que el objeto de dicha clase haya adquirido en tiempo de ejecución al expirar éste.
Quitar los vínculos que pudiesen tener otros recursos u objetos con éste.
Los destructores son invocados automáticamente al alcanzar el flujo del programa el fin del ámbito en el que está declarado el objeto. El único caso en el que se debe invocar explícitamente al destructor de un objeto, es cuando éste fue creado mediante el operador new, es decir, que éste vive en memoria heap, y no en la pila de ejecución del programa. La invocación del destructor de un objeto que vive en heap se realiza a través del operador delete o delete[] para arreglos.

No hay comentarios:

Publicar un comentario