1. POO
Clases
-‐ Abstracción
de
Datos
Gloria
Isabel
Bautista
Lasprilla
bautistalasprilla.gloriaisabel@gmail.com
gloria@utbvirtual.edu.co
gbautista@unitecnologica.edu.co
2. § La Programación Orientada a Objetos (POO) encapsula datos (atributos)
y funciones (métodos) en paquetes llamados clases.
§ Los datos y las funciones de una clase se encuentran íntimamente
ligados entre sí.
§ A partir de una clase un programador puede construir un objeto.
§ Una clase se puede reutilizar muchas veces para definir objetos y usar
sus métodos.
§ Las clases en C++ son la evolución natural del tipo de dato struct
proveniente de C.
Definición
3. § Esto significa que aunque los objetos de una clase pueden saber cómo
comunicarse entre sí, a través de interfaces bien definidas, por lo general
a las clases no se les permite saber cómo se implementan otras clases; los
detalles de implementación están ocultos dentro de las mismas clases.
§ “Es posible conducir un automóvil de manera efectiva sin conocer los
detalles de cómo funcionan internamente los sistemas del motor”
Propiedad
de
ocultar
información
4. C C++
Programación
por
Procedimientos POO
Programación
orientada
a
Acciones Programar
con
Orientación
a
Objetos
Unidad
de
Programación:
Función Unidad
de
Programación:
Clase
Comparativo
§ Los programadores en C se concentran en escribir funciones.
§ Los programadores en C++ se concentran en crear sus propios tipos definidos por
el usuario llamados clases.
§ Cada clase contiene datos expresados como atributos de un objeto, y el conjunto
de métodos que procesan esos atributos.
§ A los datos que componen una clase se les llaman atributos o datos miembros del
objeto.
§ A los procesos que componen una clase se les llama métodos.
5. Implementación del tipo de dato abstracto Tiempo mediante una clase
#ifndef TIEMPO_H
#define TIEMPO_H
class Tiempo
{
public:
Tiempo ( );
void estableceHora (int, int, int);
void imprimeUniversal ( );
void imprimeEstandar ( );
private:
int hora, minuto, segundo;
};
Tiempo::Tiempo ( )
{
hora = minuto = segundo = 0;
}
Definición del objeto Tiempo
El constructor inicializa cada atributo en cero y garantiza
que todos los objetos Tiempo comiencen en un estado
consistente
Directivas de preprocesador, previene la inclusión múltiple
del archivo de encabezado, #ifndef significa “si no está
definido”, se define mediante la directiva #define
Tiempo.h
Atributos del objeto Tiempo
Métodos de la clase Tiempo
6. void Tiempo::estableceHora (int h, int m, int s)
{
hora = ( h >= 0 && h < 24 ) ? h : 0 ;
minuto = ( m >= 0 && m < 60 ) ? m : 0 ;
segundo = ( s >= 0 && s < 60 ) ? s : 0 ; }
void Tiempo::imprimeUniversal ( )
{ cout<<hora<<“:”<<minuto<<“:”<<segundo; }
void Tiempo::imprimeEstandar ( )
{
cout<<(( hora == 0 | | hora == 12 ) ? 12 : hora%12 );
cout<<“:”<<minuto<<“:”<<segundo;
cout<<( hora < 12 ? “ AM” : “ PM” );
}
#endif
Método estableceHora
Permite un nuevo valor para Tiempo
de acuerdo con la hora universal,
realiza la validación de los valores
de datos y establece los valores no
válidos en cero
Método imprime
Escribe en pantalla el objeto Tiempo
en formato universal
Imprime Tiempo en formato
estándar
Directiva de preprocesador, donde indica que ya está
definido.
7. int main ( )
{
Tiempo t ;
t . imprimeUniversal ( );
cout<<“nLa hora Estándar inicial es: “;
t . imprimeEstandar ( );
t . estableceHora ( 13, 27, 6 );
cout<<“nLa hora Universal después de establece: “;
t . imprimeUniversal ( );
cout<<“nLa hora Estándar después de establece: “;
t . imprimeEstandar ( ); return 0;
}
Definición de un objeto t de la clase Tiempo.
Llamado al método imprimeUniversal, muestra los valores
iniciales del objeto t de la clase Tiempo.
Modifica hora.
Muestra los valores después de modificar.
El ejecutable que prueba la clase Tiempo
8. § Un constructor es una función miembro especial que tiene el mismo
nombre de la clase y no devuelve un tipo de dato.
§ El constructor se invoca entonces cada vez que se define un objeto de
dicha clase (esto significa que se crea la instancia).
§ Los constructores pueden sobrecargarse para producir distintas maneras
de inicializar a los objetos de una clase.
§ Constructor de copia
§ Destructor
§ Es una buena práctica de Ingeniería de Software asegurarse de que un
objeto se inicializa por completo antes de que el código cliente invoque a
las funciones miembro del objeto.
Constructores
9. § Los especificadores de acceso a miembros public y private controlan el
acceso a los datos y a las funciones miembro de una clase.
§ El modo de acceso predeterminado para las clases es private, de
manera que todos los miembros después del encabezado y antes del
primer especificador de acceso a miembros son privados.
§ Es posible repetir los especificadores de acceso a miembros public,
private y protected, pero hacerlo no es común y puede resultar confuso.
Control
de
acceso
a
los
miembros
10. § Un destructor es otro tipo de función miembro especial de una clase,
se representa con el carácter (~) seguido por el nombre de la clase.
§ Un destructor no recibe parámetros ni devuelve valor.
§ El compilador llama implícitamente a los constructores y destructores.
§ El orden en el que ocurren estas llamadas a función depende del
orden en el que la ejecución introduce y rebasa el alcance en el que
estos objetos se crean.
Destructores
11. La clase Vendedor
#ifndef VENDEDOR_H_INCLUDED
#define VENDEDOR_H_INCLUDED
#include <iostream>
using namespace std;
class Vendedor
{
public:
Vendedor();
void obtieneVentas();
void estableceVentas(int, double);
void imprimeVentas();
private:
double totalVentas();
double ventas[12];
};
Definición del objeto Vendedor
Métodos de la clase Vendedor
Atributo del objeto Vendedor
Método privado de la clase Vendedor
12. Vendedor::Vendedor()
{
for(int i = 0; i < 12; i++)
ventas[i] = 0.0;
}
void Vendedor::obtieneVentas()
{
double cantVentas;
for(int i = 1; i <= 12; i++)
{
cout<<"nIntroduzca monto de ventas del mes "<<i<<": ";
cin>>cantVentas;
estableceVentas(i, cantVentas);
}
}
Constructor del objeto Vendedor
Implementación del método
obtieneVentas
13. void Vendedor::estableceVentas(int mes, double monto)
{
if (mes >= 1 && mes <= 12 && monto > 0)
ventas[mes-‐1] = monto;
else
cout<<"ntValor no valido"<<endl;
}
void Vendedor::imprimeVentas()
{
cout<<"nnLas ventas anuales totales son: $ ";
cout<<totalVentas()<<endl;
}
double Vendedor::totalVentas()
{
double total = 0.0;
for(int i = 0; i < 12; i++)
total += ventas[i];
return total;
}
#endif // VENDEDOR_H_INCLUDED
Implementación del método
estableceVentas
Implementación del método
imprimeVentas
Implementación del método
totalVentas
14. #include <iostream>
#include "Vendedor.h"
using namespace std;
int main()
{
Vendedor s;
s.obtieneVentas();
s.imprimeVentas();
return 0;
}
El ejecutable que prueba la clase Vendedor
Definición de un objeto s de la clase Vendedor.
Llamado a los métodos de la clase Vendedor.