Sunteți pe pagina 1din 26

UNIVERSIDAD NACIONAL DE INGENIERIA FACULTAD DE INGENIERIA MECANICA

Tema: PROGRAMACION ORIENTADA A


OBJETOS - CLASS
Ing. Daniel Osorio Maldonado 1

PROGRAMACION ORIENTADA A OBJETOS


En C++ Los Objetos son definidos usando la construccin class, la que es muy similar a t i l l i il la estructura. Una Clase es el camino para la descripcin de un Objeto. Una clase esta compuesta por dos componentes una que describe las caractersticas pasivas del objeto, los datos miembros que nicamente almacenan informacin y la segunda informacin, componente que representa las acciones que pueden realizar los objetos y son las funciones miembros, llamado tambin mtodos.
Ing. Daniel Osorio Maldonado 2

CLASES Suponga que se desea calcular la Longitud y el rea de un Circulo Circulo.


/*Programa que calcula el rea de un circulo */ #include<iostream.h> #include<process.h> class cAcirculo { protected: float R; public: void asignaRadio (float x); double obtieneArea (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

void cAcirculo::asignaRadio (float x) {R x;} {R=x;} double cAcirculo::obtieneArea (float R) {return (2*asin(1)*R*R);} double A i d bl cAcirculo::obtieneLongitud(float R) l bti L it d(fl t {return (2*asin (1)*2*R);} main () { float q; char Rp; for(;;){ system("cls"); 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 rc1 obtieneLongitud (q)<<"\nPruebe con Otros Valores [S][N]"; cin>>Rp; if(Rp=='N'||Rp=='n') break; } }
Ing. Daniel Osorio Maldonado 4

Los miembros de una Clase pueden adquirir atributos, en uno de los caminos , * por defecto a travs del uso de un especificador de acceso: public ,private, protected.La sintaxis es: d i i public :<declaraciones> private:<declaraciones> protected :<declaraciones> Un miembro es publico, si puede ser usado p p por cualquier funcin y tambin por el main(). En C++ son pblicos los miembros de una estructura y una unin. t t i Un miembro es privado, si nicamente puede ser usado por Funciones y Funciones amigas de la clase, en la que es declarada. En una clase todos son por defecto, privados.
Ing. Daniel Osorio Maldonado 5

Un miembro es protegido teniendo las protegido, 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 acceso.

Ing. Daniel Osorio Maldonado

/*programa que permite sumar los n primeros trminos impares haciendo uso de class, se usara class operador scope */ #include<iostream.h> #include<iostream h> #include<process.h> class suma{ protected: int i,impar,par,simpar; i impar par simpar; long M,N,numero; public:void leer(); void suimpar(); void visualizar(); };
Ing. Daniel Osorio Maldonado 7

void suma::leer(){ numero=N; N cout<<"Ingrese el Numero de Terminos :"; cin>>numero;} 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<<\nLa suma de los primeros "<<numero cout<< \nLa <<numero <<" Terminos es :"<<simpar; } main(){ suma SI SI; char rp; do{system( cls ); do{system("cls"); SI.leer(); SI.suimpar(); SI.visualizar(); cout<<\nOtra Suma [S][N] :"; cin>>rp; i >> }while(rp=='S'||rp==s); }
Ing. Daniel Osorio Maldonado 9

//Halla el semiperimetro y el rea de un Triangulo l #include<iostream.h> #include<math.h> #i l d < th h> class triangulo{ protected: float a,b,c; 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; 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 sp=triangulo::semiper(a,b,c); p ( p ) ( p ) ( p ); d=sp*(sp-a)*(sp-b)*(sp-c); if(d) return(sqrt(d)); else l cout<<"Los Lados No Forman un Triangulo "; }
Ing. Daniel Osorio Maldonado 11

main(){ float fl t x,y,z;triangulo tri; t i l t i cout<<"Ingrese el Valor del Lado A =";cin>>x; cout<< Ingrese cout<<"Ingrese el Valor del Lado B = ;cin>>y; =";cin>>y; cout<<"Ingrese el Valor del Lado C =";cin>>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 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 lo l cual permite l d l l i la declaracin d parmetros valor. i de l Cuando en una clase no declara un constructor ,el compilador el 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 ceros y l alfanumricos como vacos o nulos los lf i l

Ing. Daniel Osorio Maldonado

13

En la declaracin, un constructor lleva el mismo nombre que la clase a la que pertenece pertenece. Ejemplo //Complejos con constructores y destructures //COMPLETE CON:DIVISION Y PRODUCTO DE COMPLEJOS #include<iostream.h> #i l d <i t h> #include<stdlib.h> #include math.h #include<math.h> #define mensaje "\nOTra Prueba [S][N] " class complejo{ protected: int real; int imaginario; public: complejo( ){ }; complejo(int re, int im); Daniel Osorio Maldonado Ing. 14

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<<" + "<<imaginario<<" i"<<endl; " i i i " i" dl }; ~complejo(){cout<< \nLiberando ~complejo(){cout<<"\nLiberando Memoria ";} ;} }; complejo::complejo(int re, int im) p j p j ( , ) { real=re; imaginario=im;} complejo complejo::conjugada_Complejo(complejo c) { complejo k; l j 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 x; x.real=c1.real+c2.real; x.imaginario=c1.imaginario+c2.imaginario; return x;} main(){ i (){ int m,n,r,s;char rp; for(;;){system("cls"); cout 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 = ";cin>>s; complejo a(m,n),b(r,s),c,d,e,f;
Ing. Daniel Osorio Maldonado 16

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.visualizar_complejo(); f i li l j () 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 aplicando parmetro por defecto. 3) Una clase con nico constructor (por defecto) es muy limitado. Ing. Daniel Osorio Maldonado 17

4) Cuando un constructor tiene parmetros que sirven para inicializar los datos miembro de la clase se recomienda clase, 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 { nombre_clase Private: int dat1: float dat2 public: nombre _clase (int pv dat1, float pv dat2) dat1 (pv dat1) dat2 (pv dat2){} dat1), };
Ing. Daniel Osorio Maldonado 18

Destructores 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, 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 destructor, 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 destructor tiene que ser invocado explcitamente a travs d l d d l 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 clase. 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 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. -La h herencia cumple l l transitiva. l la ley

Ing. Daniel Osorio Maldonado

20

#include<iostream.h> #include<conio.h> #include<conio h> class cCuadro{ int ancho,largo; public: cCuadro(); //constructor cCuadro(int w,int l);//constructor C d (i t i t l) // t t void cVisualizar(); ~cCuadro(){cout<<"\nDestruyendo el Objeto ";} cCuadro(){cout<< \nDestruyendo ;} }; cCuadro::cCuadro() {ancho=30;largo=50;} cCuadro::cCuadro(int w,int l) {ancho w;largo l;} {ancho=w;largo=l;}
Ing. Daniel Osorio Maldonado 21

void cCuadro::cVisualizar(){ cout<< Ancho <<ancho<< cout<<"Ancho= "<<ancho<<' ' <<"Largo= "<<largo;} main(){ int p,q; cCuadro c1;//Por defecto C d 1 //P d f t cout<<"Por defecto :"; c1.cVisualizar(); 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); c2.cVisualizar(); 2 Vi li () getch(); }
Ing. Daniel Osorio Maldonado 22

Polimorfismo 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 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 . Caractersticas -Tiende ala creacin de clases genricas -Aplica obligatoriamente la caracterstica de herencia para la redefinicin d l f d f de las funciones virtuales. l -Si la clase derivada no redefine una funcin virtual; se ejecutar la funcin de la clase base base.
Ing. Daniel Osorio Maldonado 23

Clases Abstractas / Plantillas 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 puras. que una funcin que solamente existe de nombre y que su 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 particulares.

Ing. Daniel Osorio Maldonado

24

-Una funcin virtual en una clase base contina siendo virtual Una cuando es heredada y su redefinicin debe tener el mismo nombre, nmero y tipo de parmetros y tipo de valor , p p p retornado que en la clase base. -En la clase base debe haber por lo menor una funcin que establezca l secuencia l i t bl la i lgica d ejecucin d l clase .Las de j i de la l L funciones que en la clase base an no se pueden desarrollar 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 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 sea as.

Ing. Daniel Osorio Maldonado

26

S-ar putea să vă placă și