Está en la página 1de 4

U.T.O. – F.N.I. ING. DE SISTEMAS – ING.

INFORMÁTICA

SIS – 2210 METODOLOGÍA DE LA PROGRAMACIÓN II


GUÍA DE LABORATORIO # 5

TEMA: ENCAPSULAMIENTO

OBJETIVOS.

 Comprender los conceptos respectos al encapsulamiento y al ocultamiento de datos.


 Entender las dos funciones fundamentales: Interfaz e Implementación.
 Distinguir los tipos de encapsulamiento.

FUNDAMENTO TEORICO.

El encapsulamiento, en el paradigma de la programación orientada a objetos y en este caso más


específico como lo es C++, consiste en no darle la oportunidad al usuario del programa, que modifique
atributos que le pertenecen a una clase en específica. Por ejemplo si tenemos una clase persona con
unos atributos como el nombre, la identificación, etc, de algun ciudadano entonces no nos interesa que
se modifiquen estos datos desde cualquier parte del programa ni que cualquier metodo fuera de la clase,
tenga acceso directamente a ellos (y además como una buena práctica de programación). Podemos
tambien darnos la idea como es la capsula de algún medicamento. No nos interesa que elementos lleva
por dentro solo interesa que nos sirve para curar alguna enfermedad. Pues es de este mismo modo que
actua el encapsulamiento en C++, no nos interesa que atributos tiene la clase sino que estos nos sirven
para algún fin(por ejemplo como plantilla para almacenar alguna información de un tipo en específico).

En un objeto podemos distinguir dos aspectos bien diferenciados:

 Estado -----------> Propiedades


 Comportamiento ---> Métodos

En P.O.O. los datos y los procedimientos que los gestionan están relacionados explícitamente y se
"encapsulan" en un objeto. La especificación de las propiedades de un objeto y los métodos de acceso
se realiza en la declaración de la clase de la que se instancia el objeto.

Formas de encapsular

1. Estándar (Predeterminado)
2. Abierto: Hace que el miembro de la clase pueda ser accedido desde el exterior de la Clase y
cualquier parte del programa.
3. Protegido: Solo es accesible desde la Clase y las clases que heredan (a cualquier nivel).
4. Semi cerrado: Solo es accesible desde la clase heredada.
5. Cerrado: Solo es accesible desde la Clase.

ACTIVIDAD DE CLASE.

1. Crear una clase que nos permita calcular el ara de un rectángulo, tomando como atributos la base y
la altura.

Página 1
Solución: Vamos a definir una clase y vamos a crear varios objetos de la misma. Empleando los métodos de la
clase modificaremos y consultaremos los atributos de los objetos de la clase.

#include <iostream>
using namespace std;

class rectangulo
{
private:
int base, altura;
public:
void dimensiones(int b, int h);
int area(void);
void leer(int &, int &);
};

void rectangulo::dimensiones(int b,int h)


{
base=b;
altura=h;
}

int rectangulo::area(void)
{
return base*altura;
}

void rectangulo::leer(int &b,int &h)


{
cout <<"ingrese los datos para base y altura: "<<endl;
cin >>b>>h;
}

int main()
{
int x,y;
cout << "Hello world!" << endl;
rectangulo rect1, rect2,rec;
rect1.dimensiones(10,20);
rect2.dimensiones(50,100);
rec.leer(x,y);
rec.dimensiones(x,y);
cout<< "El area del primer rectangulo es: " << rect1.area()<<endl;
cout<< "El area del segundo rectangulo es: "<< rect2.area()<<endl;
cout<< "El area del tercer rectangulo es: "<< rec.area()<<endl;
return 0;
}

2.- Declarar una clase Hora, con sus atributos hora, minuto, segundo y funciones miembro para
inicializar establecer la hora y mostrar la hora en formatos militar y estándar. Con este ejemplo vamos a
mostrar además el uso de los constructores
Solución.-
#include <iostream>

using namespace std;


//clase hora
class Hora

Página 2
{
public:
Hora();
void estableceHora (int, int, int);
void imprimeMilitar();
void imprimeEstandar();
void leeHora(int &, int &, int &);
private:
int hora;
int minuto;
int segundo;
};

//Constructor
Hora::Hora()
{
hora=minuto=segundo=0;
}

void Hora::estableceHora(int h, int m, int s)


{
if(h>=0 && h<24)
hora=h;
else
hora=0;
if(m>=0 && m<60)
minuto=m;
else
minuto=0;
if(s>=0 && s<60)
segundo=s;
else
segundo=0;
}

void Hora::imprimeMilitar()
{
if(hora<10) cout<<"0"; else cout<<"";
cout<< hora<<":";
if(minuto<10) cout<<"0"; else cout<<"";
cout<< minuto<<" ";

void Hora::imprimeEstandar()
{
if(hora==0 || hora ==12) cout<< hora<<":"; else cout <<hora%12<<":";
if(minuto<10) cout<<"0"; else cout<<"";
cout<< minuto<<":";
if(segundo<10) cout<<"0"; else cout<<"";
cout<< segundo<<":";
if(hora<12) cout<<" AM"; else cout<<" PM"<<endl;
}

void Hora::leeHora(int &h, int &m, int &s)


{
cout<< "\ningrese hora, minuto, segundo:"<<endl;
cin>>h>>m>>s;
}

Página 3
int main()
{
cout << "Hello world!" << endl;
int hr,minu,seg;
Hora h; //instancia del objeto h
cout<< "\nLa hora militar inicial es: ";
h.imprimeMilitar();
cout<< "\nLa hora estandar inicial es: ";
h.imprimeEstandar();
h.leeHora(hr,minu, seg);
h.estableceHora(hr, minu,seg);
cout<<"\n\nLa hora militar despues de estableceHora es:<<";" ";
h.imprimeMilitar();
cout<<"\n\nLa hora estandar despues de estableceHora es: ";
h.imprimeEstandar();
cout<<endl;
return 0;
}

PROBLEMAS PROPUESTOS.

1. Crear una clase llamada hora que tenga miembros dato del tipo int para horas, minutos y segundos.
Un constructor inicializará el dato a 0 y otro lo inicializará a valores fijos. Una función miembro deberá
visualizar la hora en formato hh:mm:ss. Otra función miembro sumará dos objetos del tipo hora
pasados como argumentos. La función principal main() crea dos objetos inicializados y un tercero que
no está inicializado. Sumar los dos valores inicializados y dejar el resultado en el objeto no inicializado
y visualizar el valor resultante de los tres objetos.

CUESTIONARIO.

1. ¿En qué consiste la composición y para qué se usa?

2. Una variable privada puede ser accedida desde (puede existir cero, una o varias opciones
correctas):
a) La clase desde la cual fue creada.
b) Una subclase de la clase desde la cual fue declarada.
c) Externamente, desde un objeto de la clase la cual fue declarada.

3.- ¿Cuándo es conveniente regular el acceso a una variable por medio de una propiedad?

4. ¿Cuáles son las diferencias principales entre clases y estructuras?

5. ¿Cuál es el nivel de acceso que se usa por defecto en miembros de clase sino se especifica lo
contrario?

Página 4

También podría gustarte