Introduccion A POO en C++
Introduccion A POO en C++
Introduccion A POO en C++
El modelo de Objetos
Comparación entre el paradigmas
• La complejidad
se puede expresar
con jerarquías.
• Abstracción
• Encapsulamiento
• Modularidad
• Jerarquía
• Polimorfismo
Características del modelo de objetos
• Abstracción
• Encapsulamiento
• Modularidad
• Jerarquía
• Polimorfismo
Características del modelo de objetos
• Abstracción
• Encapsulamiento
• Modularidad
• Jerarquía
• Polimorfismo
Características del modelo de objetos
• Abstracción
• Encapsulamiento
• Modularidad
• Jerarquía
• Polimorfismo
Programación Orientada a Objetos (POO)
objetos.
• No modele al usuario
Asignar responsabilidades
miClase
Dato 1
Dato 2
Dato 3
...
Método 1
Método 2
...
Asignar responsabilidades
Atributos
• Identifique los datos y resultados relacionados con la clase propuesta
• Agregue los elementos necesarios para los cálculos o para acceder a los
datos.
Funcionalidades
• Inicializar los datos.
• Algoritmos de cálculo para determinar los resultados.
• Devolver o informar estos resultados.
• Ajuste el conjunto de atributos y funcionalidades para evitar redundancia
de información.
Estructura de una clase en C++
// Declaración de una clase
class nueva_clase
{ etiqueta_de_permisos 1: Declarar un clase es
miembro1; definir un nuevo tipo de
miembro2; datos
etiqueta_de_permisos 2:
miembro3;
miembro4;
miembro5;
. . .
};
// Instanciación de un objeto de una clase
int main()
{ . . . Instanciar un objeto de una clase
nueva_clase c; implica declarar una variable
. . . usando esa clase como tipo
}
Declaración de clases. Ejemplo.
class CRectangulo Nombre de la clase
{ private:
float x, y, area; Atributos
public:
void fijar_valores (float,float);
void calcular_area( );
Métodos
float ver_area( ) {return area;};
} ;
…
Se crea la variable objeto
int main()
o instancia rect
{
CRectangulo rect; Se envía un mensaje al objeto
rect.fijar_valores(4,5); invocando a un método
rect.calcular_area();
cout<<“Rectangulo de 4x5”<<endl;
cout<<“Area=“<<rect.ver_area()<<endl;
return 0;
}
Declaración, instanciación de clases
y acceso a los métodos
int main()
{ float a,b;
CRectangulo rect;
cout<<“Rectangulo de dimensiones axb”<<endl;;
cout<<“Ingrese altura a=“; cin>>a;
cout<<“Ingrese base b=“; cin>>b;
rect.fijar_valores(a,b);
rect.calcular_area( );
cout<<“Rectangulo de “<<a”<<“x”<<“b\n”;
cout<<“Area=“<<rect.ver_area()<<endl;
return 0;
}
Clases en C++.
Varias instancias de la misma clase
int main()
{
CRectangulo rect1, rect2;
rect1.fijar_valores(4,5);
rect1.calcular_area( );
cout<<“Area=“<<rect1.ver_area()<<endl;
rect2.fijar_valores(10,12);
rect2.calcular_area( );
cout<<“Area=“<<rect2.ver_area()<<endl;
}
Objetos, clases e instancias
class CRectangulo
{ private:
float x, y, area;
public:
void fijar_valores (float,float);
void calcular_area( );
float ver_area( ) {return area;};
} ;
void calcular_area( );
float ver_area( ) {return area;};
friend void cambio_h(CRectangulo &r, float h)
} ;
void CRectangulo::calcular_area( )
{ area=x*y;};
Ejemplos
class CRectangulo
{ private:
int x, y, area;
public:
CRectangulo (int, int);
CRectangulo (const Crectangulo &r);
void calcular_area( ) {area = x*y;};
int ver_area ( ) {return area;};
};
…
int main()
{
CRectangulo r1(10,4), r2(10,8), r3(r1)
Crectangulo r4; /*error, si se definen
constructores, el constructor implícito no
puede emplearse*/
...
}
Destructores
class CRectangulo
{ private:
int x, y, area;
public:
CRectangulo (int, int);
CRectangulo (const rectangulo& r);
~CRrectangulo(){cout<<”se destruye el objeto”;};
void calcular_area( ) {area = x*y;};
int ver_area ( ) {return area;};
};
Destructores
class CRectangulo
{ private:
int *x, *y;
public:
CRectangulo (int, int);
~CRrectangulo( );
void calcular_area( ) {area = (*x)*(*y);};
int ver_area ( ) {return area;};
};
Destructores
CRectangulo::CRectangulo (int a, int b)
{ x= new int; y= new int;
*x= a; *y= b;
};
CRectangulo:: ~CRrectangulo( )
{ delete x;
delete y;
};
…
int main()
{ CRectangulo r(10,4);
r.calcular_area();
cout<<“Area=“<<r.ver_area();
return 0;
}
Punteros a objetos
class CRectangulo
{ private:
int x, y, area;
public:
CRectangulo (int, int);
…
int main()
{ CRectangulo r1(10,8);
CRectangulo *pr;
pr= &r1;
pr->calcular_area();
cout<<“Area=“<< pr->ver_area() <<endl;
return 0;
}
El puntero this
Crectangulo &CRectangulo::duplicar( )
{ x=2*x; y=2*y; area=2*area;
return *this;};
El puntero this
. . .
int main(int argc, char *argv[])
{ CRectangulo r(10,4);
r.calcular_area();
r.duplicar();
cout<<“Area=“<<r.ver_area();
return 0;
}
Area=80
El puntero this
T& T::funcion(parámetros)
{ // acciones
. . .
return *this;
}
Ejemplos