Está en la página 1de 25

1.

0Presentacin
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
Puntuacin:
Prcticas Laboratorio: 20%
Diarias 20%
Trabajo Laboratorio 80%

Exmen Parcial 15%


Exmen Final 65%

Exmen Final Extraordinario 70% 1


1.0Presentacin:Programa
Introduccin a la POO
Historia de la Programacin C++
Conceptos de POO Mi primera Clase

Repaso de Conceptos
Estndares de Programacin Ficheros y E/S
Punteros y Memoria Control y Operadores

Clases y Objetos en C++


Uso y aplicacin Funciones Amigas
Constructores Constantes e inline

Sobrecarga
De Operadores De Funciones

Herencia.
Tipos de Visibilidad Herencia Mltiple

Polimorfismo
Funciones Virtuales Polimorfismo y Sobrecarga.

Plantillas
Contenedores Iteradores 2
1.1HistoriadelaProgramacin
Qu es programar?
Programar es tener en cuenta


Un problema:
Quiero saber mi nota final en la asignatura.


Un Conjunto de Datos
En las prcticas diarias tengo un : 8
En la prctica final tengo un : 9
En el exmen parcial un : 6
En el exmen final un : 7


Unas funciones o algoritmos
Nota Prcticas = (20% Prac.D) + (80%* Prac.F)
Nota Final = 20% Nota.Prac. + 15% Parcial + 65% Final

Y entonces...
Aplicar las funciones para resolver el problema (7,21)
3
1.1HistoriadelaProgramacin
Qu es programar?
Queremos por supuesto que nuestro programa:

Sea Correcto:
Funciona bien y de acuerdo a los requisitos.
El resultado se corresponde con unas especificaciones.

Pero que adems:



Sea Eficaz
Lo hace en un tiempo admisible.
Especificaciones No Funcionales o de Calidad.


Sea Adaptable o Flexible
Qu pasa si cambian las especificaciones?


Sea Reutilizable
Sera ideal que ante problemas parecidos, no tenga que
volver a escribir todo el cdigo y pueda aprovechar la
mayor parte de l.
4
1.1HistoriadelaProgramacin
Evolucin
Cdigo Binario
Con ceros y unos. 0010101 --> SUMAR

Cdigo Mquina. Ensamblador


Tengo Nemotcnicos y puedo llamar a rutinas (funciones)

Lenguajes Procedimentales
Puedo pasar argumentos a funciones, devolver valores.
Separo interfaz de implementacin.

Programacin Orientada a Objeto


Todo es un objeto.
Ayuda a abstraer, imaginarme las cosas del mundo real simplificando.
Puedo encapsular los datos para evitar operaciones no permitidas.

Patrones de Diseo Libreras de Clases, Frameworks


Pares de solucin/problema Reutilizacin masiva

Programacin Orientada a Aspectos, a Servicios, a Modelos,...


5
1.2Reutilizacin

Informe de Standish Group de 2004:


Slo el 29% de los proyectos software satisfacen los requisitos de los clientes, se
entregan a tiempo y se ajustan a los presupuestos.
El 53% acaban incumpliendo algn requisito, se entregan fuera de plazo o cuestan ms
de lo presupuestado.
El 18% se cancelan antes de su finalizacin o jams llegan a utilizarse.

Reutilizar ayuda a sacar ms con menos esfuerzo: Copio o reutilizo cdigo,


estructuras o ideas.
Menos Equivocaciones:
Reutilizo algo que ya funciona. Se ha corregido sus errores.
Escribo menos cdigo nuevo.
Menos Pruebas
Pruebo slo lo nuevo y su integracin.
Ms Creativo
No rehago siempre lo mismo. Codifico nuevas funcionalidades.
Mejoran las Probabilidades de xito 6
1.2TiposdeReutilizacin
Reutilizacin Oportunista

En general se da porque un programador copia cdigo y lo pega en el suyo.


Est bien pero tiene problemas a la larga: genero lneas diferentes para lo
mismo y si algo est mal en el origen hay que buscar todos los sitios en
donde se ha pegado para corregirlo.

Reutilizacin Sistemtica - (POO)

Buscamos reutilizar y con un plan calculado. Queremos escribir slo el


cdigo necesario, equivocarnos menos, poner y quitar funcionalidad de
forma fcil. Queremos aprovechar los conocimientos y experiencia de otros
que han estado antes por aqu.

7
1.3ProgramacinOrientadaaObjeto

Conceptos inti; ClaseEnterosmi_entero;


i=33; mi_entero.asignar(33);
cout<<i; mi_entero.imprime_lo_que_vales();
Todo es un Objeto:
Un objeto es como una variable mejorada.
Cogemos un componente conceptual de nuestro problema y lo
representamos como un objeto en nuestro programa (perro, edificio,
tuerca, ventana,...)

Los objetos se comunican mediante mensajes:


Haremos programas que sern grupos de objetos enviando mensajes a
otros para decirles qu hacer. Peticin de invocacin a una funcin que
pertenece a un objeto en particular.

Datos Propios:
Podemos crear un nuevo tipo de objeto haciendo un paquete con otros
objetos. Oculto la complejidad. Coche (ruedas, motor,etc)

Cada objeto es de un tipo:


Un clase define el tipo de un objeto. Clase Enteros -> un_entero.
Un objeto es una instancia de una clase determinada. 8
1.3ProgramacinOrientadaaObjeto

Conceptos II
Todos los Objetos de un tipo en particular pueden recibir los mismos
mensajes:

Esto es muy potente. Nos abre un montn de posibilidades para


REUTILIZAR CDIGO.

Clase Figura Clase Crculo


Clase Cuadrado
Clase Tringulo

Un objeto del tipo o clase Crculo tambin es del tipo Figura.


Est garantizado que un crculo recibir los mensajes de Figura.

Si hacemos cdigo que habla con objetos de tipo Figura, SIN TOCAR NADA,
ese cdigo tambin funciona con objetos de la clase Crculo.

mi_figura.dibujar_en_pantalla(); 9
1.3ProgramacinOrientadaaObjeto

Conceptos III
Clases:

Una clase describe un conjunto de objetos que tienen:


Las mismas caractersticas. > Datos
Los mismos comportamientos. > Funciones

Una clase es un tipo de datos. Un entero tambin tiene unas caractersticas


y unas funciones especficas.

Crearemos nuevas clases y el lenguaje de programacin las tratar como si


fueran tipos de datos propios.

Una vez definida una clase podremos crear tantos objetos como queramos.

Circulo circulo1,circulo2;
Circulo my_nuevo_circulo;

10
1.3ProgramacinOrientadaaObjeto

Ocultando la Implementacin
Creadores de Clases:
Programadores que proporcionan un interfaz a otros programadores
clientes. No dejamos que los clientes accedan a la implementacin. As
podemos cambiarla sin preocuparnos. Mejoro la funcin dibujar().

Programadores Clientes:
Utilizan clases creadas por otros para hacer programas u otros objetos sin
preocuparse de la implementacin. Si mejoras el mtodo dibujar() yo no
tengo que cambiar nada de mi cdigo.

Implementacin 1

Implementacin 2 Interfaz

11
1.3ProgramacinOrientadaaObjeto

Reutilizando la implementacin
Si hemos hecho bien nuestra clase se convierte en una unidad de cdigo
til para los dems y para nosotros mismos. La utilizamos cuando nos
venga bien. La REUTILIZAMOS.

Podemos crear un objeto de esa clase directamente:

ClaseMotor mi_motor;
mi_motor.poner_a_punto();

Utilizar el objeto dentro de una clase


Composicin o Agregacin
1
Coche Motor Se lee X tiene n Y
suelen ser privados
dinmica o esttica
muy potente
Abstraccin
de la
complejidad
1.3ProgramacinOrientadaaObjeto

Reutilizando el Interfaz
Hay veces en que queremos crear un nuevo tipo, cuyo interfaz se parece a
uno ya creado.
Es ms sencillo clonar una clase y aadir y modificar cosas al clon.

Herencia
Base o padre Vehculo
es un es como un

Vehculo
Pblica. Permito que lo
Hija o Vehculo
a Motor sin motor vean mis herederos.
derivada
Privado. Slo para mi.

Coche Autobs Bicicleta


1.3ProgramacinOrientadaaObjeto

Caractersticas
Abstracccin:
Nos permite representar una realidad compleja en trminos de un modelo
simplificado.

Encapsulacin:
Nos permite ocultar cmo est construido un objeto. Otros componentes de
nuestro sistema no necesitan conocer los datos y las funncionamiento
interno del objeto. Datos y Funciones se empaquetan juntos. Los diferentes
componentes, como no pueden acceder a sus partes internas, se
comunican mediante mensajes.

Herencia:
Permite que un objeto incorpore todo o parte de su definicin de otro
objeto. Parte de la definicin de Felino se corresponde con la definicin de
Mamfero.

Polimorfismo:
Propiedad que poseen algunas operaciones de tener un comportamiento
diferente dependiendo del objeto (o tipo de dato) sobre el que se aplican
14
1.4C++:EllenguajedeProgramacin

C++
Es un lenguaje de programacin de

Propsito general

Orientado a Objeto.

Se basa en C. Un compilador de C++ compila tambin C.

Lo dise y lo implement Bjarne Stroustrup y empez a hacerlo en 1979.


La primera versin se llam C con clases.

La primera versin comercial sali al mercado en 1985.

Se dise para que cumpliera con dos requisitos:



Eficiente

Elegante

C++ es un lenguaje estandarizado. Se renen representantes de pases y


grandes empresas. El primer estndar sale en 1997 despus de 8 aos de
esfuerzo. El estndar facilita ensearlo en universidades de todo el mundo.
15
1.4C++:EllenguajedeProgramacin
Alguien usa C++?
El nmero de programadores C++ en el mundo se estima que es de tres
millones 3.000.000 (IDS 2004)
Hay ms de 400 libros sobre C++ en las libreras o en versin electrnica.
Todos los proveedores grandes tienen compiladores para C++.
Linux est en gran parte hecho en C++.

Es mejor C++ que Java o C#?


Quin es mejor programador/a?
a) Juan que sabe 3 lenguajes
b) Ana que sabe uno.
c) No sabe no contesta.

Algunos datos
Aprendiendo C++ aprendes tambin C.
Pasar de C++ a Java o a C# es relativamente sencillo.
Hay mucho cdigo para reutilizar.
Hay libreras que nos dan facilidades como el Recolector de Basura.

C++ sigue evolucionando : C++0x (Estndar ISO en 2008)


16
1.4C++:EllenguajedeProgramacin
Portabilidad
Puedes compilar el mismo cdigo C++ en diferentes plataformas.

Brevedad
El odigo escrito en C++ es muy corto comparado con el de otros
lenaguajes. Podemos utliizar caracteres especiales en lugar palabras
evitando algo de esfuerzo al programador.

Modularidad
Podemos hacer una aplicacin software usando varios ficheros de cdigo
fuente, que se compilan de manera separada y luego se enlanzan para
generar el ejecutable. No tenemos que recompilar todo; slo el fichero que
hemos tocado se compila y se enlaza el cdigo objeto con el resto
generado antes. Podemos enlazar cdigo objeto de C++ con cdigo que
proviene de ensamblador.

Velocidad
El cdigo resultante de una compilacin de C++ es muy eficiente. C++ es
un lenguaje que podemos tratar a muy alto nivel o a muy bajo nivel.
17
1.4C++:EllenguajedeProgramacin

18
1.5EjemplodeClase
Definicin
Queremos poder calcular la nota de los alumnos de la asignatura de
Mtodos II de programacin sabiendo que la nota final se calcula:

20 % Por las prcticas de laboratorio (20% diarias 80% trabajo final)


15 % Por exmen parcial.
65 % Por exmen final

y suponiendo que todos los alumnos aprobarn y no irn al exmen


extraordinario.

Los alumnos debern ser identificados por nombre, apellido1, apellido2 y


DNI.
Alumno nombre, apellido1, apellido2, dni

Alumno nota_practica_diaria nota_parcial


de Mtodos II nota_practica_final nota_final

19
1.5EjemplodeClase

Alumno Nombre Alumno_M2


delaClase
nombre_:string nota_p_dia_:float
apellido1_:string nota_p_fin_:float
apellido2_:string Datos nota_parcial_:float
dni_:string Atributos nota_final_:float
edad_:int
privado
+pblico +nombre(stringnom) Mtodos
+inicializar():void
+apellido1(stringa1) Funciones
+nota_p_dia(floatn)
+apellido2(stringa2)
+nota_p_fin(floatn)
+dni(stringdni)
+nota_parcial(floatn)
+edad(intanios)
+nota_final(floatn)
+nombre():string
+nota_p_dia():float
+apellido1():string
+nota_p_fin():float
+apellido2():string
+nota_parcial():float
+dni():string
+nota_final():float
+edad():int
+calificacion():float
+imprime_notas():void
1.5EjemplodeClase Definicin de Interfaz

//ClaseAlumnodeMtodosII
classAlumnoM2:publicAlumno
{ AlumnoM2
private:
nota_p_dia_:float
float nota_p_dia_;
nota_p_fin_:float
float nota_p_fin_;
nota_parcial_:float
float nota_parcial_;
nota_final_:float
float nota_final_;

public:
voidinicializar(void); +inicializar():void
voidnota_p_dia(floatnota); +nota_p_dia(floatn)
voidnota_p_fin(floatnota); +nota_p_fin(floatn)
voidnota_parcial(floatnota); +nota_parcial(floatn)
voidnota_final(floatnota); +nota_final(floatn)

floatnota_p_dia(void); +nota_p_dia():float
floatnota_p_fin(void); +nota_p_fin():float
floatnota_parcial(void); +nota_parcial():float
floatnota_final(void); +nota_final():float

floatcalificacion(void); +calificacion():float
voidimprime_notas(); +imprime_notas():void
}
21
1.5EjemplodeClase Implementacin

void //
AlumnoM2::inicializar(void) void
{ AlumnoM2::nota_final(floatnota);
nota_p_dia_ =1; {
nota_p_fin_ =1; nota_final_ =nota;
nota_parcial_ =1; }
nota_final_ =1; //
} float
// AlumnoM2::nota_final(void);
void {
AlumnoM2::nota_p_dia(floatnota); returnnota_final_;
{ }
nota_p_dia_ =nota; ...
} //
// float
void AlumnoM2::calificacion(void);
AlumnoM2::nota_p_fin(floatnota); {
{ flotacal=0.0;
nota_p_fin_ =nota; cal=0.2*(0.2*nota_p_dia_+
} 0.8*nota_p_fin_)+
// 0.15*nota_parcial_+
void 0.65*nota_final_;
AlumnoM2::nota_parcial(floatnota); returncal;
{ }
nota_parcial_ =nota;
} 22
1.5EjemplodeClase Ejercicios

1.Mtodoparaimprimir
Codificarelmtodoparaimprimirporpantalla:
Nombre :
Apellido1 :
Apellido2 :
DNI :
Edad :

Calificacin :

2.Mtodoquedevuelvelacalificacinenunargumento.
Codificarelmtodoquepodamosllamaras.

floatcal;
calificacion(cal);
cout<<Calificacion:<<cal<<\n;

(*)SuponemosqueunCreadordeClaseshacodificadolaclase
Alumnodelaquederivalanuestra.

23
1.6ParaRecordar

1.- Los proyectos Software son complejos y difciles de desarrollar


Slo el 29% de los proyectos software satisfacen los requisitos de los clientes,
se entregan a tiempo y se ajustan a los presupuestos.

2.- La POO nos ayuda a reutilizar y equivocarnos menos.


Sus caractersticas son: Abstraccin, encapsulacin, herencia y polimorfismo.

3.- C++ es un lenguaje Orientado a Objeto.


Se utiliza extensamente. Podemos aprender otros lenguajes. Eficiente.

4.- Los diagramas UML son una buena ayuda para disear.

5.- Aprendemos con la Prctica.


24
Programa
Introduccin a la POO
Historia de la Programacin C++
Conceptos de POO Mi primera Clase

Repaso de Conceptos
Estndares de Programacin Ficheros y E/S
Punteros y Memoria Control y Operadores

Clases y Objetos en C++


Uso y aplicacin Funciones Amigas
Constructores Constantes e inline

Sobrecarga
De Operadores De Funciones

Herencia.
Tipos de Visibilidad Herencia Mltiple

Polimorfismo
Funciones Virtuales Polimorfismo y Sobrecarga.

Plantillas
Contenedores Iteradores 25

También podría gustarte