Vous êtes sur la page 1sur 31

SegundaSesin

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

2.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

2.1Repasodeclasesanteriores.
Buscamos la Reutilizacin Sistemtica - (POO) Queremos escribir slo el cdigo necesario, equivocarnos menos, poner y quitar funcionalidad de forma fcil. Alumno Todo es un Objeto: nombre_:string - Un objeto es como una variable mejorada. apellido1_:string - Un objeto es una instancia de una clase determinada. apellido2_:string Los objetos se comunican mediante mensajes: dni_:string - Los programas sern grupos de objetos envindose edad_:int mensajes entre s. Caractersticas: - Abstraccin - Encapsulacin C++: - Lenguage de Propsito General - Lenguaje Orientado a Objeto. - Eficiente y elegante - 3.000.000 programadores (se usa) - Herencia - Polimorfismo
+nombre(stringnom) +apellido1(stringa1) +apellido2(stringa2) +dni(stringdni) +edad(intanios) +nombre():string +apellido1():string +apellido2():string +dni():string +edad():int

2.2OrganizacindeFicheros
nombre_clase.h contiene la definicin de la clase. nombre_clase.cpp contiene la definicin de las funciones y operadores de la clase. programa.cpp contiene un programa principal con algunas acciones sobre la clase. Organizacin bastante habitual en C++
Rectangulo.h

Rectangulo
Rectangulo.cpp

test_Rectangulo.h

2.2OrganizacindeFicheros

Los usuarios de la clase tienen acceso al header o fichero de cabecera o fichero de declaracin(nombre_clase.h) La definicin de las funciones y operadores (implementacin de la clase) se hace en otro fichero fuente al cual no es necesario acceder. Los detalles de este cdigo pueden quedar ocultos al usuario (cliente) de la clase . Me pueden dar acceso al .h y en lugar del .cpp al cdigo objeto generado (.o, .obj, .lib. .dll).

Rectangulo.h

Rectangulo
Rectangulo.cpp

test_Rectangulo.cpp

2.2OrganizacindeFicheros
El fichero nombre_clase.h se encierra en el siguiente cdigo de preprocesador: #ifndefNOMBRE_CLASE_H #defineNOMBRE_CLASE_H ... #endif

Las directivas de preprocesador anteriores evitan que el cdigo entre #ifndef y #endif sea incluido si se ha definido el nombre NOMBRE_CLASE_H, es decir, si el encabezado ha sido incluido previamente en algn otro archivo. La inclusin (inadvertida) del mismo archivo sucede por lo general en programas grandes con muchos archivos de cabecera

2.2OrganizacindeFicheros

Podemos tener 50 clases en nuestro programa que recordemos nos ayudan a ver mejor el problema que tratamos de solucionar. Estas clases estarn en 50 ficheros de cabecera y 50 de implementacin. Unas clases harn uso de otras (coche y motor: Coche incluye Motor.h)

Queremos Claridad y poder Reutilizar

2.2OrganizacindeFicheros

2.2OrganizacindeFicheros
Ficheros de la Clase Rectangulo: - Ver ficheros con el cdigo fuente

Rectangulo
altura_:int anchura_:int +inicializar() +altura():int +anchura():int +area():int +altura(int) +anchura(int)

2.3Estndares
Nombres de Clases, Objetos, atributos y mtodos Indexado y corchetes
classRectangulo { private: intaltura_; intanchura_; public: voidinicializar(void); intaltura(void); intarea(void); voidaltura(intalto); }; // voidRectangulo::altura(intalto) { if(alto>0) { altura_=alto; } else { altura_=1; } } 10 ............ return0; } Rectangulo*p_rec; intmain(void) { Rectangulomi_rectangulo; Rectangulorectangulo_ejemplo;

2.3Estndares
Cabeceras de los Ficheros:
/** *@filetest_Rectangulo.cpp *@briefPruebassobrelaclaseRectangulo.EjemploMetodosII * *@authorJoseLuisMarina<jlmarina@nebrija.es> *@date19FEB2007 */

En las declaraciones de las Clases:


/** *@classRectangulo * *@briefClaseRectanguloparaejemplodeusodeestndaresenMetodosII * *Podremosutilizarestaclasemasadelanteparamostrarherenciay *polimorfismo. */

11

2.3Estndares
Comentarios de documentacin de atributos y metodos:
///Alturadelrectanguloenmetros intaltura_;//Comentariosobrelaaltura. /** *Devuelveelvalordelarea. *@retvalAreaenmetroscuadradosy1encasodeerror. */ intarea(void); /** *Asignavaloralaalturadelrectangulo. *Compruebaqueelvalorseapositivo. *@paramaltoAnchuraenmetros. */ voidaltura(intalto);

En los ficheros de cabecera que incluir en resto (#include):


#ifndefRECTANGULO_H #defineRECTANGULO_H ...cdigo...... #endif/*RECTANGULO_H*/

12

2.3Estndares
Ventajas de los Estndares
Ayudan a Reutilizar el cdigo El cdigo realizado por dos programadores se parece. Es ms fcil que entendamos el cdigo del otro y lo haremos de forma ms rpida. Facilitan la Documentacin Documentar un sistema para que otros lo entiendan (o yo mismo dentro de un tiempo) es parte de la tarea de programacin. Un cdigo incomprensible es poco: - Mantenible - Ampliable - Reutilizable Cambios en los Estndares S, pero de manera consensuada y avisando al resto. (*) Ver ejemplo Doxygen y Rectngulo
13

2.4ProgramacinEstructurada
Funciones
Encapsulan la complejidad en programacin procedimental. Separamos la declaracin de la implementacin. Declaracin:
inttranslate(floatx,floaty,floatz); inttranslate(float,float,float); //Correcto.Lapreferimos. //Correcto.

inttranslate(floatx,y,z);//Incorrecto voidfuncion(void);//Sinargumentos.Equivalenteavoidfuncion()

Implementacin:
inttranslate(floatx,floaty,floatz) { x=y=z; } inttranslate(float,float,float) { } //Incorrecto. //Correcto

14

2.4ProgramacinEstructurada
Funciones: Valores de Retorno
Se debe especificar el tipo del valor devuelto. Si no devolvemos nada utilizamos void. Declaracin:
intintf1(void);//Devuelveunentero,notieneargumentos intf2();//igualquef1()enC++peronoenCStantard floatf3(float,int,char,double);//Devuelveunfloat voidf4(void);//Notomaargumentos,nodevuelvenada

Para devolver valores usamos return


charcfunc(inti) { if(i==0) if(i==1) if(i==5) returnc; } intmain(){ cout<<"Introduzcaunentero:"; intval; cin>>val; cout<<cfunc(val)<<endl; } returna; returng; returnz;

15

2.4ProgramacinEstructurada
Funciones: Uso de funciones en libreras
Tenemos que incluir su declaracin con include
#include<iostream.h>//Libreradeentradasalida. #include<mathlib.h> ............. cout<<Estoyusandoiostream<<endl; x=sqtr(9);//mathlib y=funcion_coseno(180);//libreradefuncionestrigonometricas. ............. //Libreraconfuncionesmatemticas. #includelib_trigonometrica.h//Enpathdeproyectoolocal.

Adems con nuestro cdigo se enlazar el cdigo objeto adecuado: .lib .a .o -> Enlazado esttico .dll .so -> Dinmico
16

2.4ProgramacinEstructurada
Control de Flujo: If
Tiene dos formas:
if(expresion) sentencia if(expresion) sentencia else sentencia

Expresin se evala como true o false. False es equivalente a 0 y true a No_cero.


cout<<"typeanumberandEnter"<<endl; cin>>i; if(i<10) if(i>5)//"if"isjustanotherstatement cout<<"5<i<10"<<endl; else//Aqueifperteneceesteelse? cout<<"i<=5"<<endl; cout<<"i>=10"<<endl else//Matches"if(i<10)"

17

2.4ProgramacinEstructurada
Control de Flujo: While
En los bucles de control while, do-while, y for, una sentencia se repite hasta que la expresin de control sea false.
while(expresion)sentencia

La expresin se evalua una vez al comienzo del bucle y cada vez antes de cada iteracin de la sentencia
intmain() { intsecreto=15; intapuesta=0; //"!="Diferentede while(guess!=secret) { cout<<"Adivinaelnumero:"; cin>>apuesta; } cout<<"Loadivinaste!"<<endl; }

18

2.4ProgramacinEstructurada
Control de Flujo: do-while
El do-while es diferente del while ya que la sentencia siempre se ejecuta al menos una vez, aun si la expresin resulta false la primera vez. En un while normal, si la condicin es falsa la primera vez, la sentencia no se ejecuta nunca.
intmain() { intsecreto=15; intapuesta;//Nohacefaltainicializarporqueejecutamoselbucle. do{ cout<<"Adivinaelnumero:"; cin>>apuesta;//Seinicializaaqui. }while(apuesta!=secreto); cout<<"Loadivinaste!!"<<endl; }

19

2.4ProgramacinEstructurada
Control de Flujo: for
Un bucle for realiza una inicializacin antes de la primera iteracin Luego ejecuta una evaluacin condicional y, al final de cada iteracin, efecta algn tipo de siguiente paso. La estructura del bucle for es:
for(initializacion;condicional;paso) sentencia intmain() { for(inti=0;i<128;i=i+1) { if(i!=26)//ANSILimpiarpantalla cout<<"value:"<<i <<"character:" <<char(i)//ConversiondeenteroaalcarcterASCII <<endl; } }

20

2.4ProgramacinEstructurada
Control de Flujo: switch
Viene a ser un if anidado con una estructura ms legible. Muy usado.
intsalir=0; while(!salir) { cout<<"Selecta,b,corqtoquit:"; charresponse; cin>>response; switch(response) { casea:cout<<"youchosea"<<endl; break; caseq:cout<<"quittingmenu"<<endl; quit=true; break; default:cout<<"Pleaseuseaorq!" <<endl; } } switch(selector) { casevalorentero1: sentencia;break; casevalorentero2: sentencia;break; casevalorentero3: sentencia;break; casevalorentero4: sentencia;break; casevalorentero5: sentencia;break; (...) default:sentencia; }

21

2.4ProgramacinEstructurada
Operadores
Un operador se puede ver como un tipo especial de funcin. Un operador recibe uno o ms argumentos y devuelve un nuevo valor. Los argumentos se pasan de forma diferente. El valor es producido sin modificar los operandos excepto con los operadores de asignacin (=), incremento (++) y decremento (--)

Precedencia
En una misma sentencia puedo utilizar varios operadores: A=X+Y2/2+Z; Como regla general: - La multiplicacin y la divisin se ejecutan antes que la suma y la resta. - Si no se entiende bien usa los parntesis. A=X+(Y2)/(2+Z);
22

2.4ProgramacinEstructurada
Operadores matemticos
Adicin :+ Sustraccin :Multiplicacin :* Divisin :/ Resto : % (Resto de divisin entera 17%3 es 2) C++ permite x = x +3; x += 3;

Operadores Relacionales
Menor que :< Mayor que :> Menor o igual que : <= Mayor o igual que : >= Equivalente : == No equivalente : != Se pueden utilizar para todos los tipos predefinidos de C++. Podemos definir su comportamiento para tipos o clases creadas por nosotros. Esto es sobrecarga de operadores. if(rectangulo_a==rectangulo_b)...

Operadores Lgicos
AND : && OR : ||
23

if((i<j)&&((a==5)||(a==10))...

2.4ProgramacinEstructurada
Operadores para bits
AND :& Produce 1 en la salida si ambos operadores son 1. En otro caso 0. OR :| Produce 0 en la salida si ambos operadores son 0. En otro caso 1. XOR :^ Produce 1 en la salida si solo un operador es 1. En otro caso 0. NOT :~ Desplazamiento : >> derecha << izquierda

Operadores Unarios
Not :El ms unario no hace nada ( x = (+a)) Incremento : ++ Decremento : -Cuidado con los punteros!! Direccin de :& Deferencia : * y ->
24

2.4ProgramacinEstructurada
El Operador Ternario
Es verdaderamente un operador porque produce un valor, al contrario de la sentencia ordinaria if-else. <expresion1>?<expresion2>:<expresion3>; a=b?b:(b=99); Primerodecrementab. Sibdecrementadoesdistintodecero a=b; Sibdecrementadoescero b=99; a=(b=99)>true(1)

El Operador coma
Adems de separar nombres de variables en las listas de argumentos de funciones puede utilizarse como operador para separar expresiones. Mejorloutilizamossloparaseparar.Pocoutilizado.
25

2.4ProgramacinEstructurada
Operadores de cambio de tipo. Casting o Moldeado
El concepto es Colocamos en un molde de un entero un long. El compilador cambiar automticamente de un tipo a otro si esto tiene sentido. Insertar una funcin que hace el cambio de un tipo de datos al otro tipo. Hay que utilizarlo con mucho cuidado y en pocas ocasiones. No tiene sentido cambiar de float a int constantemente; seguramente habr que revisar el diseo de las estructuras de datos.
inti=0x7fff;//Maximovalor=32767 longl; floatf; l=i;//Sinnecesidaddecast f=i;//Sinnecesidaddecast //Tambinfunciona l=static_cast<long>(i); f=static_cast<float>(i); i=l;//Posibleperdidadedigitos i=f;//Posibleperdidainfo, i=static_cast<int>(l);//nowarning i=static_cast<int>(f);//nowarning charc=static_cast<char>(i);

26

2.4ProgramacinEstructurada
Operador sizeof
sizeof da informacin acerca de la cantidad de memoria utilizada para los datos. Puede darnos: - el nmero de bytes utilizado por una variable. - el nmero de bytes utilizado por un tipo de datos. Es un operador, no una funcin, y en el caso de una variable puede usarse sin parntesis.
#include<iostream> usingnamespacestd; intmain(void) { cout<<"sizeof(double)="<<sizeof(double); cout<<",sizeof(char)="<<sizeof(char)<<endl; intx; inti=sizeofx; }

27

2.4ProgramacinEstructurada
Tipos de Datos
Los tipos de datos definen el modo en que se usa el espacio (memoria) en los programas. Especificando un tipo de datos, estamos indicando al compilador como crear un espacio de almacenamiento en particular, y tambin como manipular este espacio. Tipo de dato Predefinido: Es intrnsecamente comprendido por el compilador. Estos tipos de datos son casi idnticos en C y C++. Tipo de dato definido por el usuario: Tambin se les llama tipos de datos abstractos y son por ejemplo las clases. El compilador aprende a manejar estos tipos de datos leyendo los ficheros que contienen las declaraciones de las clases.

28

2.4ProgramacinEstructurada
Tipos de Datos: Bsicos
Los valores mximo y mnimo que pueden albergar los distintos tipos de datos predefinidos se definen en los ficheros de cabecera de sistema limits.h y float.h
#ifndef_LIBC_LIMITS_H_ #define_LIBC_LIMITS_H_1 /*Minimumandmaximumvaluesa`signedshortint'canhold.*/ #defineSHRT_MIN(32768) #defineSHRT_MAX32767 /*Maximumvaluean`unsignedshortint'canhold.(Minimumis0.)*/ #defineUSHRT_MAX65535 /*Minimumandmaximumvaluesa`signedint'canhold.*/ #defineINT_MIN(INT_MAX1) #defineINT_MAX2147483647 /*Maximumvaluean`unsignedint'canhold.(Minimumis0.)*/ #defineUINT_MAX4294967295U

29

2.4ProgramacinEstructurada
Tipos de Datos: Bsicos
char int float double Paraalmacenarcaracteres Nmeroentero Nmerocomaflotanteprecisinsimple Nmerocomaflotanteprecisindoble 8bits(unbyte) 16bits(2bytes) utilizarsizeof utilizarsizeof.

Se pueden definir variables en cualquier sitio en un mbito determinado, y podemos definirlas e inicializarlas al mismo tiempo.
//Solodefinicion: charproteina; intcarbohidratos; floatfibra; doublegrasa; //Definicioneinicializacion: charpizza=A,palomitas=Z; intganchitos=100,almendras=150,pipas=200; floatchocolate=3.14159; //Notacinexponencial: doublehamburgesa=6e4;//Seispordiezelevadoacuatro

30

2.4ProgramacinEstructurada
Tipos de Datos: Especificadores
long y short : Modifican mximos y mnimos. signed y unsigned : Como utilizar el bit de signo en enteros y caracteres. Para enteros: short int, int , long int Pueden ser del mismo tamao si satisfacen mnimos y mximos. Si la palabra del sistema es de 64 bits todos pueden ser de 64 bits. Para nmeros en coma flotante: oat, double y long double. long oat
charc; unsignedcharcu; inti; unsignedintiu; shortintis; shortiis;//Lomismoqueshortint unsignedshortintisu; unsignedshortiisu; longiil;//Igualquelongint longfloat;//Novalido. longdoubleld; unsignedfloatff;//Novalido.

31

Vous aimerez peut-être aussi