You are on page 1of 17

QuintaSesin

Metodologas y Tcnicas de Programacin II Programacin Orientada a Objeto (POO) C++ Profesor:


Jos Luis Marina jmarina@nebrija.es

Laboratorios:

Jos Luis Marina jmarina@nebrija.es Borland Builder 6.0 20% 20% 80% 15% 65% 70%
1

Puntuacin:

Prcticas Laboratorio: Diarias Trabajo Laboratorio Exmen Parcial Exmen Final Exmen Final Extraordinario

5.0EstadodelPrograma
Introduccin a la POO
Historia de la Programacin Conceptos de POO C++ Mi primera Clase

Repaso de Conceptos

Estndares de Programacin Punteros y Memoria

E/S Control y Operadores

Clases y Objetos en C++


Uso y aplicacin Constructores

Funciones Amigas Constantes e inline

Sobrecarga
De Operadores De Funciones

Herencia.

Tipos de Visibilidad

Herencia Mltiple

Polimorfismo
Funciones Virtuales Polimorfismo y Sobrecarga.

Plantillas

Contenedores

Iteradores

5.1RepasodeSesionesAnteriores
Estructuras y Clases
Las estructuras encapsulan datos. Las clases encapsulan adems comportamiento. Por defecto los miembros de una estructura son pblicos (public). Por defecto los miembros de una clase son privados (private protected). Las clases incorporan dos funciones especiales: - Constructores: Alumno() Alumno(int edad) - Destructores: ~Alumno() * No admite parmetros
Timesunset;//ObjetodetipoTime TimearrayOfTimes[5];//Array Time*pointerToTime;//Puntero Time&dinnerTime=sunset;//Referencia

5.1RepasodeSesionesAnteriores
Uso de Clases
classTime { public: Time();//constructor voidsetTime(int,int,int);//Ponehora,minutos,segundos. voidprint24H();//Imprimelahoraenformato24H voidprint12H();//Imprimelahoraenformato12horas(pm) private: inthour;//023 intminute;//059 intsecond;//059 voidchequea_valor(inti);//Tienesentidounmtodoprivate? }; voidTime::setTime(inth,intm,ints) {...... }

5.1RepasodeSesionesAnteriores
Ventajas hasta ahora Acceso a datos controlado (Funciones pblicas) Funciones de inicializacin finalizacin incorporadas (Constructores y Destrcutores) No tengo que pasar un puntero a la estructura en cada funcin

5.2OcultadolaImplementacin
Ocultando mediante tipos de datos enumerados.
classTime { public: enum { MIN_HORA=0, MAX_HORA=60 }; Time();//constructor voidsetTime(int,int,int);//Ponehora,minutos,segundos. .......................................... private: inthour;//023 ............................... }; if(Time::MAX_HORA)....Dentrodeunafuncin:MAX_MINUTOS

5.2OcultadolaImplementacin
Sistema de Protecccin Ya sabemos que los miembros privados de una clase no son accesibles para funciones y clases exteriores a dicha clase. Esto es un concepto de POO, el encapsulamiento hace que cada objeto se comporte de un modo autnomo y que lo que pase en su interior sea invisible para el resto de objetos. Cada objeto slo responde a ciertos mensajes y proporciona determinadas salidas. En ciertas ocasiones queremos saltarnos estas restricciones y acceder a miembros privados de un objeto de una clase desde objetos de clases diferentes.

5.2DeclaracionesFriend
Caractersticas de las relaciones de amistad Declaro relaciones de amistad entre clases o funciones. La amistad no puede transferirse: Si A es amigo de B, y B es amigo de C -> A no tiene que ser amigo de C (y viceversa) Los amigos de mis amigos son mis amigos NO APLICA.

La amistad no puede heredarse: Si A es amigo de B, y C deriva de B -> A no tiene que ser amigo de C (y viceversa) Los hijos de mis amigos son mis amigos NO APLICA.

La amistad no es simtrica: Si A es amigo de B -> B no tiene por qu se amigo de A .... 8

5.2DeclaracionesFriend
Funciones amigas Externas
classClaseA { public: ClaseA(inti=0):{i=0}//FuncionConstructorinline? voidver_a(){cout<<a<<endl;} private: inta; friendvoidfuncion_amiga_mia_ver(ClaseA);//AmigadelaclaseA }; voidfuncion_amiga_mia_ver(ClaseAXa) { //LafuncinVerpuedeaccederamiembrosprivadosdelaClaseA cout<<Xa.a<<endl; } ....... ClaseAobjeto1; funcion_amiga_mia_ver(objeto1);//VerelvalordeNa.a objeto1.ver_a();//Equivalentealaanterior.Veremossuutilidad 9

5.2DeclaracionesFriend
Funciones amigas en otra clase
classA;//Declaracinprevia classB { public: B(inti=0):b(i){} voidVer() { cout<<b<<endl; } //Comparabcona boolEsMayor(AXa); private: intb; }; classA { public: A(inti=0):a(i){} voidVer() { cout<<a<<endl; } private: //AmigaconaccesoaA friendboolB::EsMayor(AXa); inta; };

10

5.2DeclaracionesFriend
Funciones amigas en otra Clase
boolB::EsMayor(AXa) { returnb>Xa.a; } intmain() { Aa(10); Bb(12); a.Ver(); b.Ver(); if(b.EsMayor(a))cout<<"besmayorquea"<<endl; elsecout<<"bnoesmayorquea"<<endl; cin.get(); return0; }

Estas "amistades" sern algunos operadores.

tiles

cuando

sobrecarguemos
11

5.2DeclaracionesFriend
Clases amigas
classElemento { public: ///Constructor Elemento(intt); ///Obtenereltipodelelemento. ///@retvaltipodelelemento. intTipo()//FuncioninlineNoabusemosdeellas... { returntipo; } private: ///Tipo inttipo; ///Siguienteelemento Elemento*sig; friendclassLista;//Declaromiamistadconlalista(ClaseLista) };

12

5.2DeclaracionesFriend
classLista Clases amigas { public: ///Constructor Lista():cabeza(NULL){}; ///Destructor. ~Lista(){liberar_lista();}; ///Insertarnuevoelemento. voidNuevo(inttipo); ///Obtenerprimerelemento Elemento*primero() { returncabeza; } ///Siguienteelementoap Elemento*siguiente(Elemento*p) { if(p) returnp>sig; else returnp; }; ///listaestvaca? boolesta_vacia() { returncabeza==NULL; } private: //Punteroalprimerelemento Elemento*cabeza; //Privadaparaborrarlista voidliberar_lista(); };

13

5.2DeclaracionesFriend
Elemento::Elemento(intt):tipo(t),sig(NULL){} Clases amigas voidLista::Nuevo(inttipo) { Elemento*p; p=newElemento(tipo);//Nuevoelemento. p>sig=cabeza;//Alprincipiodelalista cabeza=p; } voidLista::liberar_lista() { Elemento*p; while(cabeza) { p=cabeza; cabeza=p>sig; deletep; } } //

14

5.3Ejercicios
ClasesyFuncionesamigas 1.CompilarelcdigofuentedeClasesAmigas 2.Quitarladeclaracindefriend MostrarloquepasaenlapizarravirtualMoonEdit 3.CompilarelcdigofuentedeClases_Amigas_Lista_Enlazada 5.IdentificarcdigoquepermiteladeclaracinFriend MostrarloquepasaenlapizarravirtualMoonEdit

15

5.2Resmen
Tipos de Acceso public private protected La declaracin friend nos permite que otros accedan a nuestros datos protegidos
classX { private: inti; public: voidinitialize(); friendvoidg(X*,int); friendvoidY::f(X*); friendclassZ; friendvoidh(); }; //Globalfriend //UnmtododelaclaseY //TodaZesmiamiga

16

5.2Resmen
Otras formas de Funciones inline y declarando por adelantado
classA;//Declaracinprevia // classB { public: B(inti=0):b(i){};//???????noeraB();? voidVer() { cout<<b<<endl; } //Comparabcona boolEsMayor(AXa); private: intb; }; // classA......

17

You might also like