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 Apagar
	bool 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.