[C con Clase] Clases

Steven Davidson srd4121 en njit.edu
Jue Jul 30 19:50:36 CEST 2009


Hola Franco,

franco muñoz rojas wrote:
> 
> Hola a todos, soy nuevo en esto de la programacion y tambien en el
> foro (este es mi primer mensaje).

Bienvenido a nuestra lista y a este "mundo" de C++.

> Lo que queria saber es si alguien me podria explicar bien sobre las 
> funciones y variables mienbro Publicas y Privadas, es decir ¿en que 
> momento se usan? ¿porque declararlas privadas o publicas?. Una 
> explicacion clara, gracias. Espero prontas respuestas.
> 

La idea en la Programación Orientada a Objetos es que cada objeto es 
autónomo y funciona por su propia cuenta. Para que un objeto realice 
alguna tarea nos comunicamos con ello a través de sus funciones miembro 
públicas. Los objetos existentes se basan en las clases que son tipos de 
datos que representan ideas o conceptos.

Como la idea es que cada objeto debe controlar su representación 
interna, entonces los datos miembro suelen ser privados, para 
protegerlos de influencias externas a tal objeto. Al esconder esta 
información, la única forma que nos queda por tratar ese objeto es 
"pidiendo" que cambie su estado - sus datos miembro privados. Esto 
conlleva a una comunicación y por tanto necesitamos un conjunto de 
funciones miembro públicas para que cualquier entidad (objeto o el 
programa) pueda invocarlas. Como la implementación de una clase y por 
tanto la de sus objetos está escondida, nuestros programas sólo 
necesitan conocer la forma de interactuar con ellos; es decir, sólo nos 
preocupamos por su uso y no por su funcionamiento interno.

Esto no significa que todas las funciones miembro deben ser públicas. El 
conjunto de las funciones públicas se llama la interfaz del objeto. Esta 
interfaz sirve para la comunicación con otros objetos y rutinas. Por lo 
tanto, si tienes una o varias funciones miembro que no sirve para 
comunicarse con el "exterior", entonces no deberían ser públicas. Algo 
parecido se puede decir de los datos miembro. A veces, por motivos de 
sencillez y velocidad de ejecución y simplemente porque puede ser un 
engorro tremendo esconder los datos, lo que conlleva a crear una 
interfaz para tratarlos, no nos interesa esconderlos. Por ejemplo,

struct punto2D
{
   double x,y;
};

Esto es tan sencillo que posiblemente no nos interese crear una clase, 
esconder los datos, y luego crear la interfaz para comunicarnos con 
objetos de tal tipo.

Sin embargo, es posible que sí nos interese modelar este concepto de un 
punto 2D y por tanto, deberíamos esconder la informacidn por si acaso 
algo exterior erróneamente use los datos miembro. Por ejemplo, la clase 
estándar 'complex' representa el concepto de un número complejo.

No quiero meterme en el tema de la protección 'protected', al menos que 
quieras :)

Te aconsejo que eches un vistazo al capítulo 32 de nuestro curso de C++. 
Puedes ir directamente a: http://c.conclase.net/curso/index.php?cap=032


Espero que esto aclare el tema.

Steven




Más información sobre la lista de distribución Cconclase