Una
primera diferencia respecto a los ejemplos anteriores es que se
ha sustituido la palabra struct (bien conocida en
C) por la palabra class, que es propia de C++. Ambas
palabras pueden ser utilizadas en la definición de las clases
de C++. Enseguida se verá la pequeña diferencia que
existe entre utilizar una palabra u otra.
La
palabra private precediendo a la declaración
de las variables o funciones miembro indica al compilador que el
acceso a dichos miembros sólo está permitido a las
funciones miembro de la clase, de forma que cualquier otra función
o el programa principal, tienen prohibido acceder a ellas mediante
los operadores punto (.) y flecha (->), y de cualquier
otra forma que no sea a través de las funciones miembro de
la clase que sean public.
La
palabra public precediendo a la declaración
de las funciones o variables miembro indica que dichas funciones
podrán ser llamadas desde fuera de la clase mediante el procedimiento
habitual en C para acceder a los miembros de las estructuras, es
decir mediante los operadores punto (.) y flecha (->).
No
es necesario poner las dos palabras public y private.
Se tienen las dos opciones siguientes:
1.
Definiendo la clase con la palabra struct la opción
por defecto es public, de modo que todas las variables
y funciones miembro son public excepto las indicadas
expresamente como private.
2.
Por el contrario, utilizando la palabra class la
opción por defecto es private, de modo que
todas las variables y funciones miembro son private
excepto las indicadas expresamente como public.
Si
se incluyen las dos palabras -public y private- es
igual utilizar struct o class. En lo sucesivo se utilizará
la palabra class, que se considera más segura
y más propia de C++.
La
solución que se utiliza habitualmente en C++ para resolver
el problema de la
encapsulación u ocultamiento de datos (data hidding)
es que las funciones miembro públicas sean el único
camino para acceder a las variables miembro (y funciones miembro)
privadas. De esta manera, el programador de la clase puede tomar
las medidas necesarias para que otros usuarios de la clase no modifiquen
datos o funciones sin estar autorizados para ello.
Las
funciones miembro públicas son habitualmente el interface
entre los datos contenidos en los objetos de la clase y los usuarios
de la clase. Estos usuarios no necesitan tener acceso a los detalles
internos de dichos objetos; sólo necesitan saber cómo
se utilizan las funciones miembro públicas. Esto facilita
también el mantenimiento y la mejora del programa: la clase
y sus funciones
miembro pueden ser sustituidas por una versión nueva, más
eficiente. En tanto en cuanto la declaración de las funciones
miembro públicas se mantenga igual, el cambio no tendrá
ninguna repercusión en los demás programas y funciones
que hacen uso de la clase.
En
el ejemplo anterior se puede ver ya cómo las funciones
miembro, que en este caso son todas públicas,
forman el interface utilizada para asignar y leer
los valores de las variables miembro de la clase que son privadas.
De esta manera se hace cumplir el principio de encapsulación.
|