[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