You are on page 1of 26

UNIVERSIDAD NACIONAL DE INGENIERIA

FACULTAD DE INGENIERIA MECANICA


Tema: PROGRAMACION ORIENTADA A
OBJETOS - CLASS
Ing. Daniel Osorio Maldonado 1
PROGRAMACION ORIENTADA A OBJ ETOS
En C++ Los Obj et os son def i ni dos usando l a
t i l l i i l const r ucci n cl ass, l a que es muy si mi l ar a
l a est r uct ur a. Una Cl ase es el cami no par a l a
descr i pci n de un Obj et o. descr i pci n de un Obj et o.
Una cl ase est a compuest a por dos component es
una que descr i be l as car act er st i cas pasi vas
del obj et o, l os dat os mi embr os que ni cament e
al macenan i nf or maci n y l a segunda al macenan i nf or maci n, y l a segunda
component e que r epr esent a l as acci ones
que pueden r eal i zar l os obj et os y son l as que pueden r eal i zar l os obj et os y son l as
f unci ones mi embr os, l l amado t ambi n mt odos.
Ing. Daniel Osorio Maldonado 2
CLASES Suponga que se desea cal cul ar l a
Longi t ud y el r ea de un Ci r cul o Longi t ud y el r ea de un Ci r cul o.
/*Programa que calcula el rea de un circulo */
#include<iostream.h>
#include<process.h>
class cAcirculo {
protected: protected:
float R;
public:
void asignaRadio (float x);
double obtieneArea (float R);
double obtieneLongitud (float R); double obtieneLongitud (float R);
};
//Implementacion
Para definir los metodos asignarRadio(), obtieneArea() y
obtieneLongitud(), se hace Uso del Operador de mbito o
scope(::) tal como siguen
Ing. Daniel Osorio Maldonado 3
scope(::) tal como siguen
void cAcirculo::asignaRadio (float x)
{R=x;} {R x;}
double cAcirculo::obtieneArea (float R)
{return (2*asin(1)*R*R);}
d bl A i l bti L it d(fl t R) double cAcirculo::obtieneLongitud(float R)
{return (2*asin (1)*2*R);}
main () { () {
float q; char Rp;
for(;;){ system("cls");
cAcirculo rc1; cAcirculo rc1;
cout<<" Ingrese Radio= "; cin>>q;
rc1.asignaRadio (q); g (q)
cout<< " El Area del Circulo es = "<<rc1.obtieneArea(q)
<<endl << "La longitud del Circulo es ="<<
rc1 obtieneLongitud (q)<<"\nPruebe con Otros Valores rc1.obtieneLongitud (q)<< \nPruebe con Otros Valores
[S][N]"; cin>>Rp;
if(Rp=='N'||Rp=='n') break; } }
Ing. Daniel Osorio Maldonado 4
Los mi embr os de una Cl ase pueden adqui r i r
at r i but os, en uno de l os cami nos ,
* por def ect o a t r avs del uso de un
especi f i cador de acceso: publ i c , pr i vat e,
d i i pr ot ect ed. La si nt axi s es:
publ i c : <decl ar aci ones>
pr i vat e: <decl ar aci ones> pr i vat e: <decl ar aci ones>
pr ot ect ed : <decl ar aci ones>
Un mi embr o es publ i co, si puede ser usado p p
por cual qui er f unci n y t ambi n por el mai n( ) .
En C++ son pbl i cos l os mi embr os de una
t t i est r uct ur a y una uni n.
Un mi embr o es pr i vado, si ni cament e puede
ser usado por Funci ones y Funci ones ami gas de ser usado por Funci ones y Funci ones ami gas de
l a cl ase, en l a que es decl ar ada.
En una cl ase t odos son por def ect o, pr i vados.
Ing. Daniel Osorio Maldonado 5
Un miembro es protegido teniendo las Un miembro es protegido, teniendo las
mismas caractersticas de un miembro
privado; y adems pueden ser usados por las
clases derivadas.
Una declaracin amiga no es afectada por un
especificador de acceso especificador de acceso.
Ing. Daniel Osorio Maldonado 6
/*programa que permite sumar los n primeros
trminos impares haciendo uso de class se usara trminos impares haciendo uso de class, se usara
operador scope */
#include<iostream h> #include<iostream.h>
#include<process.h>
class suma{ class suma{
protected:
int i impar par simpar; int i,impar,par,simpar;
long M,N,numero;
public:void leer(); public:void leer();
void suimpar();
void visualizar(); void visualizar();
};
Ing. Daniel Osorio Maldonado 7
void suma::leer(){
N numero=N;
cout<<"Ingrese el Numero de Terminos :";
cin>>numero;} cin>>numero;}
void suma::suimpar(){ void suma::suimpar(){
simpar=0;
impar=1;par=2;i=1; p ;p ; ;
cout<<"\nLa serie Impar :";
while(i<=numero)
{ cout<<' '<<impar;
simpar +=impar;
impar +=par;
i++;} }
Ing. Daniel Osorio Maldonado 8
void suma::visualizar()
{cout<<\nLasumadelosprimeros"<<numero { cout<<\nLa suma de los primeros <<numero
<<" Terminos es :"<<simpar;
}
main(){
SI suma SI;
char rp;
do{system("cls"); do{system( cls );
SI.leer();
SI.suimpar();
SI.visualizar();
cout<<\nOtra Suma [S][N] :";
i >> cin>>rp;
}while(rp=='S'||rp==s);
}
Ing. Daniel Osorio Maldonado 9
}
//Halla el semiperimetro y el rea de un
l Triangulo
#include<iostream.h>
#i l d < th h> #include<math.h>
class triangulo{
protected: protected:
float a,b,c;
public: public:
void leer(float p,float q,float r);
double semiper(float a,float b,float c); p ( , , );
double Cal_Area(float a, float b, float c);
};
void triangulo::leer(float p,float q, float r)
{a=p;b=q;c=r;}
Ing. Daniel Osorio Maldonado 10
double triangulo::semiper(float a, float b, float c){
double S; double S;
if(a<(b+c)&&b<(a+c)&&c<(b+c))
S=(a+b+c)/2.0; ( )/ ;
return (S);
}
double triangulo::Cal_Area(float a, float b, float c){
double d; double d;
double sp=triangulo::semiper(a,b,c);
d=sp*(sp-a)*(sp-b)*(sp-c); p ( p ) ( p ) ( p );
if(d)
return(sqrt(d));
l else
cout<<"Los Lados No Forman un Triangulo ";
}
Ing. Daniel Osorio Maldonado 11
}
main(){
fl t t i l t i float x,y,z;triangulo tri;
cout<<"Ingrese el Valor del Lado A =";cin>>x;
cout<<"Ingrese el Valor del Lado B =";cin>>y; cout<< Ingrese el Valor del Lado B = ;cin>>y;
cout<<"Ingrese el Valor del Lado C =";cin>>z;
tri.leer(x,y,z); tri.leer(x,y,z);
cout<<"El semiperimetro es
"<<tri.semiper(x,y,z)<<endl p ( ,y, )
<<"El Area del TRiangulo es
"<<tri.Cal_Area(x,y,z)<<endl;
return 0;
}
Ing. Daniel Osorio Maldonado 12
Constructores .-Una forma de asegurar que los objetos
siempre contengan valores vlidos para sus datos miembro es siempre contengan valores vlidos para sus datos miembro es
declarando un constructor de su clase. Un constructor es una
funcin miembro especial de una clase que se llama as misma p q
automticamente cuando se declara un objeto de esa clase.
Su funcin principal es inicializar un objeto de su clase , por
l l i l d l i d l lo cual permite la declaracin de parmetros valor.
Cuando en una clase no declara un constructor el compilador Cuando en una clase no declara un constructor ,el compilador
considera uno por defecto sin parmetros . Por tanto , si el
objeto es declarado en forma local, los datos miembro no j ,
tiene valor definidos (nada) y si el objeto es declarado en
forma global, inicializa los datos miembros numricos con
l lf i l ceros y los alfanumricos como vacos o nulos
Ing. Daniel Osorio Maldonado 13
En la declaracin, un constructor lleva el mismo nombre que
la clase a la que pertenece la clase a la que pertenece.
Ejemplo
//Complejos con constructores y destructures
//COMPLETE CON:DIVISION Y PRODUCTO DE
COMPLEJOS
#i l d <i t h> #include<iostream.h>
#include<stdlib.h>
#include<math.h> #include math.h
#define mensaje "\nOTra Prueba [S][N] "
class complejo{
protected:
int real;
int imaginario; int imaginario;
public:
complejo( ){ };
Ing. Daniel Osorio Maldonado 14
complejo( ){ };
complejo(int re, int im);
complejo conjugada_Complejo(complejo c);
complejo Suma_Complejo(complejo c1, complejo c2); p j _ p j ( p j , p j );
void visualizar_complejo(void){
cout<<" \nEl numero complejo es = "<<real<<" +
" i i i " i" dl "<<imaginario<<" i"<<endl;
};
~complejo(){cout<<"\nLiberando Memoria ";} ~complejo(){cout<< \nLiberando Memoria ;}
};
complejo::complejo(int re, int im) p j p j ( , )
{ real=re; imaginario=im;}
complejo complejo::conjugada_Complejo(complejo c)
{ l j k { complejo k;
k.real=c.real;
k imaginario=-c imaginario; k.imaginario c.imaginario;
return k;
}
Ing. Daniel Osorio Maldonado 15
}
complejo complejo::Suma_Complejo(complejo c1,
complejo c2) complejo c2)
{ complejo x;
x.real=c1.real+c2.real;
x.imaginario=c1.imaginario+c2.imaginario;
return x;}
i (){ main(){
int m,n,r,s;char rp; for(;;){system("cls");
cout<<" Ingrese la parte real del 1er complejo = cout Ingrese la parte real del 1er complejo
";cin>>m;
cout<<" Ingrese la parte imaginaria del 1er complejo =
";cin>>n;
cout<<" Ingrese la parte real del 2do complejo = ";cin>>r;
cout<<" Ingrese la parte imaginaria del 2do complejo cout<<" Ingrese la parte imaginaria del 2do complejo =
";cin>>s;
complejo a(m,n),b(r,s),c,d,e,f;
Ing. Daniel Osorio Maldonado 16
complejo a(m,n),b(r,s),c,d,e,f;
a.visualizar_complejo();
b.visualizar complejo(); b.visualizar_complejo();
d=c.Suma_Complejo(a,b);
d.visualizar_complejo();
f=e.conjugada_Complejo(d);
cout<<" \nLa conjugada es = ";
f i li l j () f.visualizar_complejo();
cout<<mensaje;
cin>>rp; if(rp=='N'||rp=='n')break;} cin rp; if(rp N||rp n )break;}
}
Observaciones
1) Una clase puede tener varios constructores .
Aplicando funciones sobrecargadas.
2) Una forma de reducir el nmero de constructores es 2) Una forma de reducir el nmero de constructores es
aplicando parmetro por defecto.
3) Una clase con nico constructor (por defecto) es muy
Ing. Daniel Osorio Maldonado 17
3) Una clase con nico constructor (por defecto) es muy
limitado.
4) Cuando un constructor tiene parmetros que sirven para
inicializar los datos miembro de la clase se recomienda inicializar los datos miembro de la clase, se recomienda
hacerlo a travs del constructor si la inicializacin se realiza
una sola vez o a travs de una funcin miembro. Si la
inicializacin puede realizarse ms de una vez, de la siguiente
manera:
Class nombre clase { Class nombre_clase {
Private:
int dat1: int dat1:
float dat2
public:
nombre _clase (int pv dat1, float pv dat2)
dat1 (pv dat1) dat2 (pv dat2){} dat1 (pv dat1), dat2 (pv dat2){}
};
Ing. Daniel Osorio Maldonado 18
Destructores
Un destructor es una funcin miembro especial de una clase Un destructor es una funcin miembro especial de una clase
que se utiliza para eliminar un objeto de esa clase, liberando
la memoria que ocupa un destructor se identifica fcilmente, la memoria que ocupa un destructor se identifica fcilmente,
porque tiene el mismo nombre de la clase a la que pertenece
procedido por el smbolo ceja ~.
Un destructor no puede tener parmetros, no puede retornar
ningn valor. Cuando en un destructor no se especifica
explcitamente un destructor el compilador crea uno por explcitamente un destructor, el compilador crea uno por
defecto.
Un destructor es invocado automticamente cuando se sale
del bloque al que es visible un objeto, excepto cuando el
objeto ha sido creado con el operador new ; para lo cual el
d d l d l destructor tiene que ser invocado explcitamente a travs del
operador delete cuando se desea destruir el objeto.
Ing. Daniel Osorio Maldonado 19
La funcin principal de un destructor es liberar la memoria
dinmica que ha sido utilizado el objeto de una clase Si no se dinmica que ha sido utilizado el objeto de una clase. Si no se
ha asignado memoria dinmica; basta con el constructor por
defecto.
Caractersticas
-Una clase derivada puede a su vez, ser una clase base ,
dando lugar a una jerarqua de clases.
Una clase derivada puede acceder a los miembros public y -Una clase derivada puede acceder a los miembros public y
protected de la clase base , como si fueran miembros de ella,
no pueden tener acceso a los miembros private. p p
-Una clase derivada pudo aadir sus propios datos y
funciones.
h l l l -La herencia cumple la ley transitiva.
Ing. Daniel Osorio Maldonado 20
#include<iostream.h>
#include<conioh> #include<conio.h>
class cCuadro{
int ancho,largo;
public:
cCuadro(); //constructor
C d (i t i t l) // t t cCuadro(int w,int l);//constructor
void cVisualizar();
~cCuadro(){cout<<"\nDestruyendoel Objeto";} cCuadro(){cout<<\nDestruyendo el Objeto ;}
};
cCuadro::cCuadro()
{ancho=30;largo=50;}
cCuadro::cCuadro(int w,int l)
{ancho=w;largo=l;}
Ing. Daniel Osorio Maldonado 21
{ancho w;largo l;}
void cCuadro::cVisualizar(){
cout<<"Ancho="<<ancho<<' ' cout<<Ancho <<ancho<<
<<"Largo= "<<largo;}
main(){
int p,q;
C d 1//P d f t cCuadro c1;//Por defecto
cout<<"Por defecto :";
c1cVisualizar(); c1.cVisualizar();
cout<<"\nCon argumentos =";
cout<<"\nIngrese el valor del primer parametro :";cin>>p;
cout<<"\nIngrese el valor del segunedo parametro :";cin>>q;
cCuadro c2(p,q);
2 Vi li () c2.cVisualizar();
getch();
}
Ing. Daniel Osorio Maldonado 22
}
Polimorfismo
Es la caracterstica mas importante de POO y consiste Es la caracterstica mas importante de POO y consiste
fundamentalmente; en la capacidad de realizar una misma
tarea pero de muchas formas distintas. El misterio de sta tarea pero de muchas formas distintas. El misterio de sta
caractersticas radica en el momento de la compilacin .No
se conoce la tarea que se realizar ; recin se les conoce en
el momento de ejecucin. A stas tareas misteriosas se les
conoce con el nombre de virtuales ya que aparentemente
existen ; pero realmente no hacen nada existen ; pero realmente no hacen nada .
Caractersticas
-Tiende ala creacin de clases genricas
-Aplica obligatoriamente la caracterstica de herencia para la
d f d l f l redefinicin de las funciones virtuales.
-Si la clase derivada no redefine una funcin virtual; se
ejecutar la funcin de la clase base
Ing. Daniel Osorio Maldonado 23
ejecutar la funcin de la clase base.
Clases Abstractas / Plantillas
Una clase es abstracta cuando establece la lgica de ejecucin Una clase es abstracta cuando establece la lgica de ejecucin
sin conocer aun los tipos de datos que se manejarn y en
algunos casos no se conoce el medio de almacenamiento. Para
ello estas clases deben, estar preparadas para la aplicacin del
polimorfismo con un ingrediente adicional: las funciones
virtuales puras qu es una funcin virtual pura? No es otra virtuales puras. qu es una funcin virtual pura? No es otra
que una funcin que solamente existe de nombre y que su
desarrollo recin se conoce en la clase derivada desarrollo recin se conoce en la clase derivada
correspondiente. Ctt inicializa a estas funciones virtuales puros
con O.
Debemos tener presente que no se pueden declarar objetos
de clase s abstractas ; stas existen para derivarlas y construir
nuestras propias clases particulares nuestras propias clases particulares.
Ing. Daniel Osorio Maldonado 24
-Una funcin virtual en una clase base contina siendo virtual Una funcin virtual en una clase base contina siendo virtual
cuando es heredada y su redefinicin debe tener el mismo
nombre, nmero y tipo de parmetros y tipo de valor , y p p y p
retornado que en la clase base.
-En la clase base debe haber por lo menor una funcin que
t bl l i l i d j i d l l L establezca la secuencia lgica de ejecucin de la clase .Las
funciones que en la clase base an no se pueden desarrollar
se denominan virtuales y sern desarrolladas en las clases se denominan virtuales y sern desarrolladas en las clases
derivadas correspondientes.
-No se permite constructores virtuales.
-Se recomienda un destructor virtual cuando una clase tiene
funciones virtuales; aunque dicho destructor no haga nada.
Ing. Daniel Osorio Maldonado 25
Sobrecarga de Funciones Sobrecarga de Funciones
Consiste en declarar una misma funcin varias veces Consiste en declarar una misma funcin varias veces
pero con distinto nmero y/o tipo de parmetro : Cuando
es invocada , el compilador a
Cul de las funciones llamar identificndolo por sus
parmetros adems ; las funciones tambin podran tener
diferente tipo de resultado ; aunque no es obligatorio que diferente tipo de resultado ; aunque no es obligatorio que
sea as.
Ing. Daniel Osorio Maldonado 26

You might also like