Está en la página 1de 28

Dcimosegunda Sesin

Metodologas y Tcnicas de Programacin II

Programacin Orientada a Objeto (POO) C++

Repaso Primera Parte


1

Programa
Introduccin a la POO Repaso de Conceptos
Historia de la Programacin Conceptos de POO Estndares de Programacin Punteros y Memoria C++ Mi primera Clase E/S Control y Operadores

Clases y O !etos en C++


"so y aplicacin Constructores Constantes e %inline&

#unciones $migas So recarga de #unciones

So recarga
'e Operadores Creacin 'inmica de O !etos

Herencia(

)ipos de *isi ilidad

Herencia M+ltiple

Polimor,ismo
#unciones *irtuales Polimor,ismo y So recarga(

Plantillas

Contenedores

Iteradores

12.1 Repaso
./u0 es programar1
Programar es tener en cuenta

"n problema2 /uiero sa er mi nota ,inal en la asignatura( "n Con!unto de Datos En las prcticas diarias tengo un En la prctica ,inal tengo un En el e5men parcial un En el e5men ,inal un 2 2 2 2 3 4 6 7

"nas !nciones o algoritmos 8ota Prcticas 9 :-;< Prac('= + :3;<> Prac(#= 8ota #inal 9 -;< 8ota(Prac( + 1?< Parcial + 6?< #inal $plicar las ,unciones para resolAer el pro lema :7B-1=
C

@ entonces(((

12.1 Repaso
./u0 es programar1
"!eremos por s!p!esto #!e n!estro programa$ Sea Correcto2 #unciona ien y de acuerdo a los reDuisitos( El resultado se corresponde con unas especi,icaciones( Pero #!e adem%s$ Sea & ica' Eo Face en un tiempo admisi le( Especi,icaciones 8o #uncionales o de Calidad(

Sea (daptable o )le*ible ./u0 pasa si cam ian las especi,icaciones1 Sea +e!tili'able SerGa ideal Due ante pro lemas parecidosB no tenga Due AolAer a escri ir todo el cdigo y pueda aproAecFar la mayor parte de 0l(
H

12.1 Repaso
Compilacin y &nla'ado por separado
$lumno(F
include Alumno.h

$lumnoM-(F
include Alumno.h include AlumnoM2.h include AlumnoM2.h

$lumno(cpp

$lumnoM-(cpp

testImain(cpp

Compilador

Compilador

Compilador

$lumno(o !

$lumnoM-(o !
EnlaJador

testImain(o !

Practica7(e5e ?

12.1 Repaso
Kuscamos la ReutiliJacin Sistemtica L :POO= /ueremos escri ir slo el cdigo necesarioB eDuiAocarnos menosB poner y Duitar ,uncionalidad de ,orma ,cil( )odo es un O !eto2 L "n o !eto es como una Aaria le me!orada( L "n o !eto es una instancia de una clase determinada( Eos o !etos se comunican mediante mensa!es2 L Eos programas sern grupos de o !etos enAindose mensa!es entre sG( CaracterGsticas2 L $ straccin L Encapsulacin C++2 L Eenguage de Propsito Meneral L Eengua!e Orientado a O !eto( L E,iciente y elegante L C(;;;(;;; programadores :se usa= L Herencia L Polimor,ismo $lumno
+ + + + + + + + + + nombre_: string apellido1_: string apellido2_: string dni_: string edad_: int nombre(string nom) apellido1(string a1) apellido2(string a2) dni(string dni) edad(int anios) nombre() : string apellido1() : string apellido2() : string dni() : string edad(): int

12.1 Repaso
Estndares

8om res de #icFeros2

Rectgulo(F :Ni,nde, 8OMKREICE$SEIH (((= Rectangulo(cpp testIRectangulo(cpp :main=

'ocumentacin de Ca eceras de #icFeros(


/** * * * * * */ @author @date Jose Luis Marina <jlmarina@nebrija.es> 19-FEB-2007 @file @brief test_Rectangulo.cpp Pruebas sobre la clase Rectangulo. Ejemplo Metodos II

'ocumentacin Ca eceras de Clases( 8om res de ClasesB O !etosB atri utos y m0todos O Inde5ado y corcFetes $yudan a2 ReutiliJar Cdigo a 'ocumentar :Cdigo ms comprensi le=
7

12.1 Repaso
Programacin Estructurada #unciones
Encapsulan la comple!idad 'eclaracin :(F= 2 Implementacin2
int translate(float x, float y, float z) { x = y = z; return 33; } // Correcto int translate(float x, float y, float z); void f(void)

Control del #lu!o


if (expresion) { sentencias } else { sentencias } } swicth (c) //do { } while () { case 'a': .... while(guess != secret) { cout << "Numero: "; cin >> apuesta; } for(i = 0; i<128;i++) { cout << i;

12.1 Repaso
Programacin Estructurada Operadores
Matemticos Egicos "narios )ernario :+ B L B >B /B <= :SSB TT= :LB + B ++B LL= Relacionales Kits 'irecciones :PB P9B QB Q9B 99B R9= :SB TB UB PPB QQ= :SB >B LP=

a = --b ? b : (b = -99);

Casting o Moldeado

Hay Due utiliJarlo con mucFo cuidado y en pocas ocasiones


i = l; // Posible perdida de digitos i = f; // Posible perdida info, i = static_cast<int>(l);// no warning i = static_cast<int>(f);// no warning char c = static_cast<char>(i);

Operador siJeo,

8+mero de ytes utiliJado por un tipo de datos o por una Aaria le(

12.1 Repaso
Programacin Estructurada )ipos de 'atos
Ksicos2 Prede,inidos Se com inan con
# #

2 cFarB intB ,loatB dou le= 2 long y sFort signed y unsigned(


define SHRT_MIN define SHRT_MAX (-32768) 32767

Sus lGmites estn en limits.h y float.h

$lgunas com inaciones no Aalen :long ,loat

LL unsigned ,loat =

Creados por el usuario :programador= El compilador aprende a usuarlos( "tiliJa las declaraciones :por e!emplo de la clases=

1;

12.1 Repaso
Punteros
Eas direcciones de memoria se pueden guardar dentro de otras Aaria les para su uso posterior2 Eos Punteros( "n puntero se de,ine con el operador %>& y el tipo de Aaria le a la Due apunta(
int i; int *pi; pi = &i; // Puntero a la direccin de i. i = 33; // Valor de i. *pi= 55; // Contenido de lo que apunta pi // Atentos con: int a, b, c; // Ok int* pa, pb, pc ; // No OK. Solo pa es puntero. int* p1; int* p2; // Ok. 6684160 DIR pi

CC
6684160

i pi

11

12.1 Repaso
Conceptos POO
int i; i=33; cout << i; ClaseEnteros mi_entero; mi_entero.asignar(33); mi_entero.imprime_lo_que_vales();

)odo es un O !eto2 "n o !eto es como una Aaria le me!orada( Cogemos un componente conceptual de nuestro pro lema y lo representamos como un o !eto en nuestro programa :perroB edi,icioB tuercaB AentanaB(((= Eos o !etos se comunican mediante mensa!es2 Haremos programas Due sern grupos de o !etos enAiando mensa!es a otros para decirles Du0 Facer( Peticin de inAocacin a una ,uncin Due pertenece a un o !eto en particular( 'atos Propios2 Podemos crear un nueAo tipo de o !eto Faciendo un paDuete con otros o !etos( Oculto la comple!idad( CocFe :ruedasB motorBetc= Cada o !eto es de un tipo2 "n clase de,ine el tipo de un o !eto( Clase Enteros LP unIentero( "n o !eto es una instancia de una clase determinada(

1-

12.1 Repaso
Conceptos POO
)odos los O !etos de un tipo en particular pueden reci ir los mismos mensa!es2 Esto es muy potente( 8os a re un montn de posi ilidades para RE")IEIV$R CW'IMO( Clase #igura Clase CGrculo Clase Cuadrado Clase )ringulo

"n o !eto del tipo o clase CGrculo tam i0n es del tipo #igura( Est garantiJado Due un cGrculo reci ir los mensa!es de #igura( Si Facemos cdigo Due Fa la con o !etos de tipo #iguraB SI8 )OC$R 8$'$B ese cdigo tam i0n ,unciona con o !etos de la clase CGrculo(
mi_figura.dibujar_en_pantalla(); 1C

12.1 Repaso
Tipos de (cceso p!blic pri,ate protected Ea declaracin %,riend& nos permite Due otros accedan a nuestros datos protegidos
class X { private: int i; public: void initialize(); friend void g(X*, int); friend void Y::f(X*); friend class Z; friend void h(); }; // Global friend // Un mtodo de la clase Y // Toda Z es mi amiga

1H

12.1 Repaso
+elaciones de (mistad
Si $ LP K y K LP C Si $ LP K Si $ LP K y QQK 8O $LPC 8O KLP$ 8O $LP : es el Fi!o de K=

Podemos de,inir relaciones de amistas con una ,uncinB con un m0todo de otra clase o con una clase entera( #riend 9 %Puedes acceder a mis atri utos priAados como si ,ueras uno de mis m0todos&

friend void g(X*, int); friend void Y::f(X*); friend class Z; friend void h();

// Global friend // Un mtodo de la clase Y // Toda Z es mi amiga

1?

12.1 Repaso
Constr!ctores
Modo simpli,icado de inicialiJacin2 int i:;=X $lumno Iniciali'adores$
pareja::pareja(int a, int b) { a_ = a; b_ = b; } // Es ms seguro y eficiente as: pareja::pareja(int a,int b) : a_(a), b_(b) {}

a:%Pepe&=X

class Pareja { ... // Constructores Pareja(int a, int b); Pareja() : a_(0), b_(0){}; ....

class Pareja { ... // Argumentos por defecto Pareja(int a=0,int b=0) :a_(0),b_(0){}; .... 16

12.1 Repaso
Constr!ctores por de ecto
Es un constructor Due puede ser inAocado sin argumentos
class X { int i_; char c_; public: X(int i,char c): i_(i), c_(c) {} }; X x1[10]; // El Compilador se va a quejar!! X x3;

El constructor por de,ecto es tan importante Due si :y slo si= una clase no tiene constructor el compilador crea uno automticamente :no Face nada=(
class V { int i; // private }; // No constructor V v, v2[10]; // Esto funciona!!

17

12.1 Repaso
+e erencias
1( Cuando una re,erencia se creaB se Fa de inicialiJar( :Eos punteros pueden inicialiJarse en cualDuier momento(= -( "na AeJ una re,erencia se inicialiJa ligndola a un o !etoB no se puede ligar a otro o !eto( :Eos punteros se pueden apuntar a otro o !eto en cualDuier momento(= C( 8o se pueden tener re,erencias con Aalor nulo( Siempre Fa de suponer Due una re,erencia est conectada a una troJo de memoria ya asignada(
int y; int& r = y; int x = 0; int& a = x; int main() { cout << "x = " << x << ", a = " << a << endl; a++; cout << "x = " << x << ", a = " << a << endl; } // x y a son lo mismo // La asignamos a algo que ya existe const int& q = 12; // Tambin se puede hacer esto.

13

12.1 Repaso
&l constr!ctor Copia
Para eAitar Due el compilador Faga una copia it a itB construimos nuestro ,uncin de copia( Como estamos creando un o !eto esta ,uncin tiene Due ser un cosntructorB y el +nico argumento tiene Due Aer con el o !eto del Due partimos para crear el nueAo( Y:YS= Si creamos un constructor copia el compilador no realiJar una copia it cuando cree un nueAo o !eto de otro e5istente( Siempre se llamar al constructor copia Due Femos creado( it a

14

12.1 Repaso
-tili'acin de .ombres en la sobrecarga de !nciones
Podemos utiliJar el mismo nom re siempre Due la lista de argumentos sea di,erente( El compilador utiliJa2 8om re de la ,uncin Zm ito Eista de argumentos Esto no es so recarga( Son ,unciones di,erentes por el m ito2 Aoid ,:=X class Y [ Aoid ,:=X \X 8o tenemos so recarga en el Aalor de retorno( Aoid ,:=X int ,:=X .Por Du01((((((((((((((
-;

12.1 Repaso
/obrecarga de )!nciones
8o de erGamos utiliJar argumentos por de,ecto si Fay Due incluir una condicin en el cdigo :un %i,&=( En este caso es me!or tener Aarias ,unciones so recargadas( "so tGpico de argumentos por de,ecto es cuando empieJa con una ,uncin con un con!unto de argumentosB y despu0s de utiliJarla por un tiempo se da cuenta de Due necesita a]adir ms argumentos( , :int a=X ,:int aB int 9;=X // Es compati le con lo anterior(

)anto la so recarga de ,unciones como el uso de argumentos por de,ecto nos Facen ms ,ciles las llamadas a las ,unciones y adems son ms ,ciles de leer(

-1

12.1 Repaso
Iniciali'acin y 0impie'a de Objetos
El constructor es una ,uncin sin tipo de retorno y con el mismo nom re Due la estructura( (l!mno() El destructor tiene la misma ,ormaB salAo Due el nom re Aa precedido el operador ^_^( 1(l!mno() Eo de,inimos cuando Fay punteros &l constr!ctor copia tiene este aspecto2 (l!mno(const (l!mno2 a) Si creamos un constructor copia el compilador no realiJar una copia it cuando cree un nueAo o !eto de otro e5istente( Eas re,erencias necesitan un rea de memoria Due re,erenciar2 intS 5 9 1X // Mal it a

const intS y 9 1X // Kien


--

12.1 Repaso
Objetos y Mtodos Constantes
class X { int i_; public: X(int i); int f() const; }; X::X(int i) : i_(i) {} int X::f() const { return i_; } int main() { X x1(10); const X x2(20); x1.f(); x2.f(); }

Ea pala ra const de e incluirse tanto en la declaracin como en la de`nicin del m0todo( Como ,:= es un m0todo constanteB si intenta modi,icar de alguna ,orma o llamar a otro m0todo Due no sea constanteB el compilador in,ormar0 de un error( "n miem ro constante puede llamarse tanto desde o !etos constantes como desde no constantes de ,orma segura( "n m0todo Due no modi,ica ning+n atri uto se de erGa escri ir como constante y asG se podrGa usar desde o !etos constantes(
-C

12.1 Repaso
Constantes
Ea pala ra reserAada para de,inir constantes es const const nos permite de,inir como constantes2 *aria les( O !etos( $rgumentos de ,unciones( Punteros( M0todos( Elimina el uso de constantes sim licas con ade,inea para sustitucin de Aalores por el preprocesador sin perder sus Aenta!asB a]adiendo compro acin de tipos y Faciendo nuestro cdigo ms seguro( &l !so de la llamada 3constancia e*acta4 (const correctness) es decir5 el !so de const en todo l!gar donde sea posible5 p!ede ser !n sal,a,idas para m!c6os proyectos7
-H

12.1 Repaso
const
El motiAo unicial para usar const ,ue para eliminar el uso de la directiAa de compilacin Nde,ine para sustitucin de Aalores( )iene Aenta!as so re Nde,ine(
const float nota_esperada = 8; cont int cantidad = 19; Alumnos curso[cantidad]; #define NOTA_ESPERADA 8

Punteros constantes2
// p es un puntero que apunta // a: un entero constante. const int* p; const int *p; // w es un puntero constante // que apunta a: un entero. int i=3; int* const w *w = 2; = &i; // Est bien o est mal?

En C++ lo me!or es utiliJar una re,erencia constante en lugar de paso por Aalor( "n m0todo Due no modi,ica ning+n atri uto se de erGa escri ir como constante y asG se podrGa usar desde o !etos constantes(
-?

12.1 Repaso
!nciones inline
Sustituye la utiliJacin de macros Due es muy com+n en la programacin en C( Se pens para dotar al lengua!e C++ de mayor e,iciencia( Es una sugerencia para el compilador( Hay dos maneras de de,inir un m0todo de una clase como %inline&( Es pre,eri le la Due se utiliJa en la implementacin y no en la declaracin de la clase(

-6

12.2 Repaso
&spacios de .ombres
#include <iostream> namespace uno { int x; } namespace dos { int x; } using namespace uno; int main() { x = 10; dos::x = 30; std::cout << x << ", " << dos::x << std::endl; std::cin.get(); return 0; }

-7

11.3 Resumen
/tatic
Podemos controlar el almacenamiento de nuestros o !etos y Aaria les( Podemos controlar el m ito en el Due se Aen(

&spacios de .ombres
"tilJamos la pala ra reserAada namespace( 8os ayudan a diAidir el espacio de nom res glo al de ,orma Due podamos repetir nom res de ,uncionesB clases y Aaria les( Es una declaracin y se suele utiliJar por tanto en los ,icFeros de ca ecera(

-3

También podría gustarte