Vous êtes sur la page 1sur 22

Cuarta Sesin

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


Jos Luis Marina jmarina@nebrija.es

aboratorios:

Jos Luis Marina jmarina@nebrija.es Borland Builder 6.0 "#$ 20% !0% %&$ '&$ ,#$
%

P!nt!acin:

Prcticas Laboratorio: Diarias rabajo Laboratorio "#men Parcial "#men $inal ()*men +inal ()traordinario

4.0 Estado del Programa


&ntroducci'n a la P((
)istoria de la Pro*ramaci'n +once-tos de P(( +,, Mi -rimera +lase

.e-aso de +once-tos

"stndares de Pro*ramaci'n Punteros 1 Memoria

"/0 +ontrol 1 (-eradores

+lases 1 (bjetos en +,,


2so 1 a-licaci'n +onstructores

$unciones 3mi*as +onstantes e 4inline5

0obrecar*a
De (-eradores De $unciones

)erencia.

i-os de 6isibilidad

)erencia M7lti-le

Polimor8ismo
$unciones 6irtuales Polimor8ismo 1 0obrecar*a.

Plantillas

+ontenedores

&teradores

4.1 Programacin Orientada a Objeto


+once-tos
int i; i=33; cout << i; ClaseEnteros mi_entero; mi_entero.asignar(33); mi_entero.imprime_lo_que_vales();

odo es un (bjeto: 2n objeto es como una 9ariable mejorada. +o*emos un com-onente conce-tual de nuestro -roblema 1 lo re-resentamos como un objeto en nuestro -ro*rama :-erro; edi8icio; tuerca; 9entana;...< Los objetos se comunican mediante mensajes: )aremos -ro*ramas =ue sern *ru-os de objetos en9iando mensajes a otros -ara decirles =u >acer. Petici'n de in9ocaci'n a una 8unci'n =ue -ertenece a un objeto en -articular. Datos Pro-ios: Podemos crear un nue9o ti-o de objeto >aciendo un -a=uete con otros objetos. (culto la com-lejidad. +oc>e :ruedas; motor;etc< +ada objeto es de un ti-o: 2n clase de8ine el ti-o de un objeto. +lase "nteros ?@ unAentero. 2n objeto es una instancia de una clase determinada.

1.3 Programacin Orientada a Objeto


+once-tos &&
odos los (bjetos de un ti-o en -articular -ueden recibir los mismos mensajes: "sto es mu1 -otente. Cos abre un mont'n de -osibilidades -ara ."2 &L&D3. +ED&F(. +lase $i*ura +lase +Grculo +lase +uadrado +lase rin*ulo

2n objeto del ti-o o clase +Grculo tambin es del ti-o $i*ura. "st *arantiHado =ue un cGrculo recibir los mensajes de $i*ura. 0i >acemos c'di*o =ue >abla con objetos de ti-o $i*ura; 0&C (+3. C3D3; ese c'di*o tambin 8unciona con objetos de la clase +Grculo.
mi_figura.dibujar_en_pantalla(); I

1.3 Programacin Orientada a Objeto


+once-tos &&&
+lases: 2na clase describe un conjunto de objetos =ue tienen: Las mismas caracterGsticas. @ Datos Los mismos com-ortamientos. @ $unciones 2na clase es un ti-o de datos. 2n entero tambin tiene unas caracterGsticas 1 unas 8unciones es-ecG8icas. +rearemos nue9as clases 1 el len*uaje de -ro*ramaci'n las tratar como si 8ueran ti-os de datos -ro-ios. 2na 9eH de8inida una clase -odremos crear tantos objetos como =ueramos.
Circulo Circulo circulo1, circulo2; my_nuevo_circulo; J

1.3 Programacin Orientada a Objeto


+aracterGsticas
3bstraccci'n: Cos -ermite re-resentar una realidad com-leja en trminos de un modelo sim-li8icado. "nca-sulaci'n: Cos -ermite ocultar c'mo est construido un objeto. (tros com-onentes de nuestro sistema no necesitan conocer los datos 1 las 8unncionamiento interno del objeto. Datos 1 $unciones se em-a=uetan juntos. Los di8erentes com-onentes; como no -ueden acceder a sus -artes internas; se com!nican mediante mensajes. )erencia: Permite =ue un objeto incor-ore todo o -arte de su de8inici'n de otro objeto. Parte de la de8inici'n de $elino se corres-onde con la de8inici'n de MamG8ero. Polimor8ismo: Pro-iedad =ue -oseen al*unas o-eraciones de tener un com-ortamiento di8erente de-endiendo del objeto :o ti-o de dato< sobre el =ue se a-lican 6

4.1 Programacin Orientada a Objeto


nombreAclase.> contiene la de8inici'n de la clase. nombreAclase.c-- contiene la de8inici'n de las 8unciones 1 o-eradores de la clase. -ro*rama.c-- contiene un -ro*rama -rinci-al con al*unas acciones sobre la clase. (r*aniHaci'n bastante >abitual en +,,
Rectangulo.h

.ectan*ulo
Rectangulo.cpp

test_Rectangulo.h

4.2 Clases
(str!ct!ras

i-o de datos a*re*ados usando otros ti-os de datos. struct Time { int hour; int minute; int second; };

Combres de los miembros de la "structura "n el mismo str!ct: Combres 7nicos 1 di8erentes. "n di8erentes str!cts: Pueden tener el mismo nombre

La de8inici'n de un struct debe terminar en 4L5

4.2 Clases
(str!ct!ras

3cceso a los miembros de una estructura: (-erador -unto :.< -ara acceso a los miembros. (-erador 8ecla :?@< -ara acceso a tra9s de -unteros. cout << timeObject.hour; ' timePtr = &timeObject; cout << timePtr->hour;

Time *timePtr = &timeObject; timePtr->hour = 20; // Lo mismo que // (*timePtr).hour

4.2 Clases
(str!ct!ras
// Definicin struct Time { int hour; int minute; int second; }; void printUniversal( const Time & ); void printStandard( const Time & ); // 0-23 // 0-59 // 0-59 // Uso Time dinnerTime; dinnerTime.hour = 18; dinnerTime.minute = 30; dinnerTime.second = 0; cout << "La cena sera a las:"; printUniversal( dinnerTime ); cout << " formato universal, y "; printStandard( dinnerTime ); cout << " en formato estandar.\n"; dinnerTime.hour = 29; // Invalido dinnerTime.minute = 73; // Invalido cout << "\nHora invalida: "; printUniversal( dinnerTime ); cout << endl;

4.2 Clases
(str!ct!ras
// Definicin struct Time { int hour; int minute; int second; }; void printUniversal( const Time & ); void printStandard( const Time & ); // 0-23 // 0-59 // 0-59 // Uso Time dinnerTime; dinnerTime.hour = 18; dinnerTime.minute = 30; dinnerTime.second = 0; cout << "La cena sera a las:"; printUniversal( dinnerTime ); cout << " formato universal, y "; printStandard( dinnerTime ); cout << " en formato estandar.\n"; dinnerTime.hour = 29; // Invalido dinnerTime.minute = 73; // Invalido cout << "\nHora invalida: "; printUniversal( dinnerTime ); cout << endl;

4.2 Clases
Clases
Modelan (bjetos con 3tributos :Datos< +om-ortamientos :Mtodos o 8unciones< 2tiliHamos la -alabra class $unciones Miembro Mtodos 0e les in9oca -ara res-onder a mensajes. "s-eci8icadores de acceso a los miembros. -!blic: 0e -uede acceder en cual=uier lu*ar del mbito del objeto. -ri.ate: 0'lo accesible -or las 8unciones miembro -rotected: 0'lo accesible -or las 8unciones miembro o clases deri9adas.

%2

4.2 Clases
Clases

+onstructores $unciones miembro es-eciales 0e utiliHa -ara inicialiHar los datos internos. iene el mismo nombre =ue la clase. 0e llama al crear o instanciar un objeto de la clase. Puede >aber 9arios constructores :N+on el mismo nombreO< 0e utiliHa la sobrecar*a de 8unciones. Co de9uel9en nada

%B

4.2 Clases
/so de Clases
class Time { public: Time(); void print24H(); void print12H(); private: int hour; int minute; int second; }; // 0 - 23 // 0 - 59 // 0 - 59 // constructor // Imprime la hora en formato 24H // Imprime la hora en formato 12 horas (pm) void setTime( int, int, int ); // Pone hora, minutos, segundos.

Des-us de la de8inici'n: en*o un nue9o ti-o de datos :e#tendemos el len*uaje +,,< 1 -uedo declarar objetos; arra1s; -unteros 1 re8erencias. %I

4.2 Clases
/so de Clases
Time Time Time Time sunset; arrayOfTimes[ 5 ]; *pointerToTime; &dinnerTime = sunset; // // // // Objeto de tipo Time Array Puntero Referencia

+!nciones Miembro
De8inidas 8uera de la declaraci'n de la clase: 0e utiliHa el o-erador de 4resoluci'n de mbito5 (::) &denti8ica de 8orma 7nica a una 8unci'n de una clase determinada. Di8erentes clases -ueden tener 8unciones idnticas. $ormato:
Tipo_Devuelto Nombre_de_la_Clase::nombre_de_la_funcion(...arg...) { }

"s inde-endiente del ti-o de acceso :-7blico ; -ri9ado;...< Puedo -oner la im-lementaci'n dentro de la declaraci'n :inline< %J

4.2 Clases
/so de Clases
// ---------------------------------Time::Time() { hour = minute = second = 0; } // ---------------------------------{ hour = (h>=0 && h<24) ? h : 0; minute = (m>=0 && m<60) ? m : 0; second = (s>=0 && s<60) ? s : 0; } } // ----------------------------------void Time::print12H() { cout << ( (hour==0||hour==12 )?12 : hour % 12) << ":" << setfill( '0' ) << setw(2) < minute << ":" << setw( 2 ) << second <<(hour<12 ? " AM" : " PM" ); } // ----------------------------------void Time::print24H() { cout << setfill( '0' ) << setw( 2 ) << hour << ":" << setw( 2 ) << minute << ":" << setw( 2 ) << second;

%6

4.2 Clases
// Mostramos valores iniciales. cout << " El tiempo Inicial es"; t.print24H(); // 00:00:00

cout << "\nTiempo en formato 12H "; t.print12H(); // 12:00:00 AM // Cambiamos t.setTime( 13, 27, 6 );

// Mostramos nuevos valores cout << "\n\nTiempo 24H es "; t.print24H(); t.print12H(); // 13:27:06 // 1:27:06 PM // Valores invalidos cout << "\nTiempo 12H es ";

t.setTime( 99, 99, 99 );

// Salida despues de valores invalidos cout << "\n\nHora despues de valores invalidos:" << "\nFormato 24H: "; t.print24H(); // 00:00:00

%K

4.2 Clases
3cceso a los Datos 3 los miembros de una +lase Por de8ecto el acceso es -ri.ado :-ri9ate< De 8orma e#-lGcita los -odemos -oner como: private, public o protected. 3 los miembros de una "structura Por de8ecto el acceso es -0blico :-ublic< De 8orma e#-lGcita los -odemos -oner como: private, public o protected. 3cceso a los miembros -ri9ados de una clase $unciones ti-o 4*et5 1 ti-o 4set5 $unciones o mtodos de acceso..
%!

4.2 Clases
3cceso a mtodos o 8unciones $unciones de 3cceso P7blicas Leen; asi*nan 1 muestran datos. +>e=ueos de condiciones. $unciones de utilidad. N iene sentido un mtodo -ri9ateO NPor =uO

%M

4.2 Clases
1estr!ctores
&*ual =ue es 7til tener una 8unci'n =ue se llame antes de utiliHar un objeto -ara inicialiHaciones 1 -re-araci'n de uso; tambin es 7til =ue cuando deje de utiliHarse >a1a una 8unci'n -ara liberar recursos usados o dejar las cosas como estaban. ienen el mismo nombre la clase -recedido -or tilde (2) 0in ar*umentos. Co -uede sobrecar*arse Labores de lim-ieHa 1 8in de uso.

20

4.3 Ejemplo completo de Clases


class Rectangulo { private: int int altura_; // Comentario sobre la altura. anchura_; // Comentario sobre la anchura. // **** VER FUENTES COMPLETAS ****

int comprueba_valor(int valor); public: void inicializar(void); Rectangulo(); int altura(void) { return altura_; // Como esta en la declaracin } int area(void); void area(int& a); void altura(int alto); void anchura(int ancho); }; // es como si fuera "inline" int anchura(void);

2%

4.2 Clases
3entajas 4asta a4ora 3cceso a datos controlado :$unciones -7blicas< $unciones de inicialiHaci'n 8inaliHaci'n incor-oradas :+onstructores 1 Destrcutores< Co ten*o =ue -asar un -untero a la estructura en cada 8unci'n

22

Vous aimerez peut-être aussi