Clases
2. Clase
http://www.cplusplus.com/doc/tutorial/classes/
Clase
Una clase se puede considerar como un patrón de datos o colección de datos
.Recodemos el caso de estructuras, en principio existen muchas
similitudes , hasta incluso en la manera que se definen.
En C++ una clase tiene como objetivo crear un nuevo tipo de datos que hasta puede contener funciones como mienbros de la clase, y el conjunto de miembros se pueden manejar como si fuese un elemento único.
Es importante notar que las clases no se deben Inicializar .. ya
que no son variables sinó patrones de datos.
Algo también
importante de destacar que una diferencia fundamental con
estructuras, es ellas cada miembro podía se accedido sin
limitaciones , podríamos decir que los miembros eran publicos por
defecto, en clases esto no es así, existen especificadores o
modificadores de acceso que definen cuales de sus miembros se pueden
acceder, en principio TODOS los miembros de una clase son
PRIVADOS, salvo indicación contraria, pero, mas adelante
daremos mas detalles de esto.
- A los miembros de las clases se los suele llamar PROPIEDADES.
- A los miembros que son funciones se los suele llamar MÉTODOS.
Objeto
Un objeto es una variable creada a partir de una clase, un objeto es una instancia de la clase.
Recordemos para
el caso de la estructura , esto es similar creábamos una instancia a
partir de una estructura, el proceso de crear un objeto ( colección
de variables y funciones) partir de una clase se llama instanciar.
Es importante distinguir entre objetos y clases, la clase es simplemente una
declaración, no tiene asociado ningún objeto ( colección de
variables y funciones).
Para dar un ejemplo usemos una analogía, tomemos como que la clase sería como el tipo de variable ( int, float, etc)
int x => int sería equivalente a la clase y x sería el objeto !! ( ESTO ES SOLO UNA ANALOGÍA)
Un objeto es una unidad que engloba en sí mismo datos y
procedimientos o funciones necesarios para el tratamiento de esos datos.
Hasta
ahora habíamos hecho programas en los que los datos y las funciones
estaban perfectamente separadas, cuando se programa con objetos esto
no es así, cada objeto puede contener datos (Propiedades) y funciones (Métodos).
Un programa se construye como un conjunto de objetos, o incluso como un único objeto. Es importante notar que un objeto si se puede inicializar a diferencia de una clase.
class <identificador de clase> { <lista de miembros> // miembros o propiedades separados por ; } [<lista de objetos>]; //vemos que existe una similitudo con estrucutras
Un ejemplo:
class Televisor { bool m_bEncedido; //propiedades de la clase unsigned int m_uiCanal; unsigned int m_uiVolumen; } tv14pulgadas ; tv17pulgadas ; // existen 2 objetos para esta clase=>Instanciar
// estamos instanciado un objeto tv14pulgadas a partir de una clase teelvisor // estamos instanciado un objeto tv17pulgadas a partir de una clase teelvisor
Método
Se trata de otro concepto de POO, en C++ un método no es otra cosa que una función procedimiento perteneciente a un objeto, hasta ahora solamente hemos incorporado como miembros de la clase variables...bueno también pueden ser funciones.
Veamos un ejemplo.. supongamos que se quiere modificar la propiedad Volumen deberíamos estar seguro que el televisor esté encendido, esto es lo normal, también sería algo parecido si queremos cambiar de canal, veamos como sería:
# include <iostream> using namespace std; class Televisor { bool m_bEncedido; //miembros o propiedades de la clase public: // Todos los metodos y propiedades //pueden ser accedidos desde afuera unsigned int m_uiCanal; // la m_ indica que es un miembro unsigned int m_uiVolumen; void Encender() //Definicion del metodo { m_bEncedido=true; }void Apagar (); //Protipo de Apagarbool ModificarVolumen( unsigned int uiVolumen);//Prototipo bool ModificarCanal ( unsigned int uiCanal)//Definicion del metodo {if (m_bEncedido) {m_uiCanal=uiCanal; return true; } else return false; } } ; //Como solo tenía el prototipo defino el metodo bool Televisor::ModificarVolumen ( unsigned int uiVolumen) {if (m_bEncedido) {m_uiVolumen=uiVolumen; return true; } else return false; } // Como solo estaba el prototipo defino el metodo void Televisor::Apagar() //debo hacer ref. a la clase que pertenece {m_bEncedido=false; } int main() {Televisor tv14p; //Instancio el objeto tv14p con la clase Televisor //Enciendo el televisor tv14p.Encender(); //Modifico el volumen tv14p.ModificarVolumen(10); // cout << "El televisor está : "<< tv14p.m_bEncedido << endl; //ERROR !! cout << "El volumen es :" << tv14p.m_uiVolumen << endl; return 0; }
Observaciones:
-Vemos que algunos métodos están dentro de la definición de la clase y otros afuera, conviene declarar los métodos afuera para simplificar la lectura en la clase ,salvo que sean muy simples como sería el caso de Apagar, que en este caso esta afuera.
-Vemos que cuando se definen afuera los métodos de la clases, se utiliza el operador de ambito “::”, este es el que vincula el método a la clase, si esto no existiera ,parecería la definición de una función cualquiera .-
-Vemos que una línea del código esta comentada:
// cout << "El televisor está : "<< tv14p.m_bEncedido << endl; //ERROR !!
si no lo hiciéramos el compilador tiraría un error, ya que la propiedad o miembro m_bEncendido es de carácter privado y no se puede acceder, descomente esta linea y compile para ver el error, veremos en el ejemplo siguiente como alterar una propiedad, para ello definimos un método.