gratiszona

clases y encapsulacion en el lenguaje c

Encapsulacion.
Los metodos son una interface a traves de la cual se manipulan los datos almacenados en una clase. Usando estos metodos, podemos manipular y extraer datos de un objeto Caja sin saber que tipos de datos se usan para almacenar los datos. Esto se conoce como encapsulacion de datos y es un concepto muy importante en la programacion orientada a objetos. Encapsulacion es la habilidad de una parte de un programa para ocultar sus datos al resto del codigo, impidiendo asi accesos incorrectos o conflictos con los nombres de otras variables.
En el ejemplo anterior, cada clase tenia solo una seccion, etiquetada como public. Pero podemos utilizar tambien la etiqueta private. Asi, la palabra public hace que los campos (variables o funciones) que le siguen en la clase puedan ser accedidas desde cualquier parte del programa, mientras que la palabra private indica que los campos que le siguen solo son accesibles por el codigo que forma parte de la misma clase.
Si no se indica lo contrario, por defecto en una clase todos los elementos son privados. Veamos un ejemplo:
# include <iostream.h>
class Caja {
double longitud, anchura, altura;
public:
void set (double dim1, double dim2, double dim3);
void print (void);
double getLongitud (void);
};
void Caja:: set (double dim1, double dim2, double dim3) {
longitud = dim1;
anchura = dim2;
altura = dim3;
};
void Caja:: print (void) {
cout << 'longitud = ' << longitud <<'\n';
cout << 'anchura = ' << anchura <<'\n';
cout << 'altura = ' << altura <<'\n';
};
double Caja:: getLongitud (void) {
return longitud;
};
main () {
double longitud;
Caja pequeña, mediana, grande;
pequeña.set(5, 4, 10);
mediana.set (10, 6, 20);
grande.set (20, 10, 30);
pequeña.print();
mediana.print();
grande.print();
longitud = grande.getLongitud();
cout << 'longitud de la caja grande = ' << longitud <<'\n';
}
La ventaja de las funciones miembro es que la funcion llamada puede automaticamente acceder a los datos del objeto para el cual fue llamado. Asi, en grande.print(), el objeto grande es el 'substrato': las variables longitud, altura y anchura que son utilizadas en el codigo de la funcion se refieren al objeto grande.
La seccion privada de una clase es la parte de los datos que no puede ser accedida desde fuera de la clase, esta escondida para cualquier acceso externo. Las variables longitud, anchura y altura del ejemplo, que son parte del objeto grande, no estan disponibles para su uso EN EL LENGUAJE Cualquier lugar del programa principal.
Se introduce la palabra public para indicar que puede accederse a todo lo que le sigue desde fuera de esta clase. En este caso, hemos declarado tres funciones publicas, que pueden ser llamadas desde la funcion main. Por supuesto, estas funciones, llamadas funciones miembro, tienen acceso a la parte privada de la clase. Por tanto, desde el programa principal solo se puede acceder a las dimensiones de una caja llamando a las estas funciones.
Una vez declaradas las funciones dentro de la clase, debemos definirlas para establecer que accion realizan. Esto se hace de la forma habitual, salvo que el nombre de la clase se antepone, seguido del operador::, al nombre de la funcion. La definicion de una funcion se denomina la implementacion de la funcion. Es necesario especificar el nombre de la clase porque se puede utilizar el mismo nombre para funciones de otras clases y el compilador debe saber a que clase corresponde cada implementacion.
Los datos privados de la clase son accesibles para las funciones miembro y en la implementacion de estas pueden ser modificados y leidos en la forma habitual. Esto se puede hacer con los datos privados que forman parte de la clase a la que pertenece la funcion, pero los datos privados de otras clases estan escondidos y no se puede acceder a ellos a traves de funciones miembro de esta clase. Esta es la razon por la que se antepone el nombre de la clase al nombre de la funcion cuando se define esta.
En la parte privada de una clase se pueden incluir variables y funciones y otras variables y funciones en la parte publicas. En la mayor parte de las situaciones practicas, las variables se incluyen en la parte privada y las funciones solo en la parte publica de la clase.
EN EL LENGUAJE C++ tenemos tres ambitos de validez para las variables: local, file y clase. Las variables locales estan localizadas en una unica funcion y las variables de fichero se pueden utilizar EN EL LENGUAJE Cualquier lugar del fichero que sigue a su definicion. Una variable cuyo ambito es una clase se puede utilizar en el ambito de utilizacion de la clase y en ningun otro sitio.
Mas funciones.
La idea basica de la programacion orientada a objetos es definir tipos de dato abstractos y las operaciones o metodos que pueden actuar sobre ellos. Añadamos al ejemplo anterior una funcion que calcule el volumen de un objeto de la clase Caja:
# include <iostream.h>
class Caja {
double longitud, anchura, altura;
public:
void set (double dim1, double dim2, double dim3);
double volumen (void);
};
void Caja:: set (double dim1, double dim2, double dim3) {
longitud = dim1;
anchura = dim2;
altura = dim3;
};
double Caja:: volumen (void) {
return longitud * anchura * altura;
};
main () {
double longitud; Caja pequeña, mediana, grande;
pequeña.set(5, 4, 10);
mediana.set (10, 6, 20);
grande.set (20, 10, 30);
cout << 'El volumen de la caja grande es ' << grande.volumen() << '\n';
}
Esto impide que al calcular el volumen de una caja mezclemos las dimensiones de dos objetos distintos.
Anterior: clases
Siguiente: clases constructores y destructores

Tal vez te interese sobre lenguaje c: