SlideShare una empresa de Scribd logo
1.0 Presentación
 Metodologías y Técnicas de Programación II
    Programación Orientada a Objeto (POO)
                      C++
    Profesor:
                     José Luis Marina
                   jmarina@nebrija.es
    Laboratorios:
                     José Luis Marina
                   jmarina@nebrija.es
                   Borland Builder 6.0
    Puntuación:
           Prácticas Laboratorio:        20%
              Diarias                    20%
              Trabajo Laboratorio        80%

           Exámen Parcial                15%
           Exámen Final                  65%

           Exámen Final Extraordinario   70%   1
1.0 Presentación: Programa
Introducción a la POO
   Historia de la Programación   C++
   Conceptos de POO              Mi primera Clase

Repaso de Conceptos
   Estándares de Programación    Ficheros y E/S
   Punteros y Memoria            Control y Operadores

Clases y Objetos en C++
   Uso y aplicación              Funciones Amigas
   Constructores                 Constantes e “inline”

Sobrecarga
   De Operadores                 De Funciones

Herencia.
   Tipos de Visibilidad          Herencia Múltiple

Polimorfismo
   Funciones Virtuales           Polimorfismo y Sobrecarga.

Plantillas
   Contenedores                  Iteradores                   2
1.1 Historia de la Programación
¿Qué es programar?
Programar es tener en cuenta

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

           ●
                Un Conjunto de Datos
                    En las prácticas diarias tengo un   :      8
                    En la práctica final tengo un       :      9
                    En el exámen parcial un             :      6
                    En el exámen final un               :      7

           ●
                Unas funciones o algoritmos
                   Nota Prácticas = (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.1 Historia de la Programación
¿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 además:
          ●
            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
                  Sería ideal que ante problemas parecidos, no tenga que
                  volver a escribir todo el código y pueda aprovechar la
                  mayor parte de él.
                                                                 4
1.1 Historia de la Programación
Evolución
Código Binario
  Con “ceros” y “unos”. 0010101 --> SUMAR

Código Máquina. Ensamblador
  Tengo Nemotécnicos y puedo llamar a rutinas (funciones)

Lenguajes Procedimentales
   Puedo pasar argumentos a funciones, devolver valores.
   Separo interfaz de implementación.

Programación 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 Diseño                   Librerías de Clases, Frameworks
   Pares de solución/problema           Reutilización masiva

Programación Orientada a Aspectos, a Servicios, a Modelos,...
                                                                5
1.2 Reutilización

                   Informe de Standish Group de 2004:
 Sólo 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 algún requisito, se entregan fuera de plazo o cuestan más
 de lo presupuestado.
 El 18% se cancelan antes de su finalización o jamás llegan a utilizarse.


Reutilizar ayuda a sacar más con menos esfuerzo: Copio o reutilizo código,
estructuras o ideas.
   Menos Equivocaciones:
       Reutilizo algo que ya funciona. Se ha corregido sus errores.
       Escribo menos código nuevo.
   Menos Pruebas
       Pruebo sólo lo nuevo y su integración.
   Más Creativo
       No rehago siempre lo mismo. Codifico nuevas funcionalidades.
   Mejoran las Probabilidades de Éxito                                            6
1.2 Tipos de Reutilización
Reutilización Oportunista

En general se da porque un programador copia código y lo pega en el suyo.
Está bien pero tiene problemas a la larga: genero líneas 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.

Reutilización Sistemática - (POO)

Buscamos reutilizar y con un plan calculado. Queremos escribir sólo el
código necesario, equivocarnos menos, poner y quitar funcionalidad de
forma fácil. Queremos aprovechar los conocimientos y experiencia de otros
que han estado antes “por aquí”.




                                                                  7
1.3 Programación Orientada a Objeto

Conceptos                        int i;       ClaseEnteros mi_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 serán grupos de objetos enviando mensajes a
otros para decirles qué hacer. Petición de invocación a una función 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.3 Programación Orientada a Objeto

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

Esto es muy potente. Nos abre un montón de posibilidades para
REUTILIZAR CÓDIGO.


Clase Figura                Clase Círculo
                            Clase Cuadrado
                            Clase Triángulo

Un objeto del tipo o clase Círculo también es del tipo Figura.
Está garantizado que un círculo recibirá los mensajes de Figura.

Si hacemos código que habla con objetos de tipo Figura, SIN TOCAR NADA,
ese código también funciona con objetos de la clase Círculo.

                 mi_figura.dibujar_en_pantalla();                  9
1.3 Programación Orientada a Objeto

Conceptos III
Clases:

Una clase describe un conjunto de objetos que tienen:
   Las mismas características.    > Datos
   Los mismos comportamientos. > Funciones

Una clase es un tipo de datos. Un entero también tiene unas características
y unas funciones específicas.

Crearemos nuevas clases y el lenguaje de programación 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.3 Programación Orientada a Objeto

Ocultando la Implementación
Creadores de Clases:
Programadores que proporcionan un interfaz a otros programadores
clientes. No dejamos que los clientes accedan a la implementación. Así
podemos cambiarla sin preocuparnos. Mejoro la función “dibujar()”.

Programadores Clientes:
Utilizan clases creadas por otros para hacer programas u otros objetos sin
preocuparse de la implementación. Si mejoras el método “dibujar()” yo no
tengo que cambiar nada de mi código.


      Implementación 1



      Implementación 2                     Interfaz

                                                                 11
1.3 Programación Orientada a Objeto

Reutilizando la implementación
Si hemos hecho bien nuestra clase se convierte en una unidad de código
útil para los demás 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
                                             Composición o Agregación
                                1
         Coche                       Motor   Se lee “X tiene n Y”
                                             suelen ser privados
                                             dinámica o estática
                                             muy potente
  Abstracción
  de la
  complejidad
1.3 Programación Orientada a Objeto

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


                                              Herencia
Base o padre        Vehículo
                                              “es un” “es como un”

         Vehículo
                                              Pública. Permito que lo
Hija o                         Vehículo
          a Motor              sin motor      vean mis herederos.
derivada
                                              Privado. Sólo para mi.


   Coche        Autobús        Bicicleta
1.3 Programación Orientada a Objeto

Características
Abstraccción:
Nos permite representar una realidad compleja en términos de un modelo
simplificado.

Encapsulación:
Nos permite ocultar cómo 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 definición de otro
objeto. Parte de la definición de Felino se corresponde con la definición de
Mamífero.

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.4 C++: El lenguaje de Programación

C++
Es un lenguaje de programación de
        ●
          Propósito general
        ●
          Orientado a Objeto.

Se basa en C. Un compilador de C++ compila también C.

Lo diseñó y lo implementó Bjarne Stroustrup y empezó a hacerlo en 1979.
La primera versión se llamó “C con clases”.

La primera versión comercial salió al mercado en 1985.

Se diseñó para que cumpliera con dos requisitos:
          ●
            Eficiente
          ●
            Elegante

C++ es un lenguaje estandarizado. Se reúnen representantes de países y
grandes empresas. El primer estándar sale en 1997 después de 8 años de
esfuerzo. El estándar facilita enseñarlo en universidades de todo el mundo.
                                                                  15
1.4 C++: El lenguaje de Programación
¿Alguien usa C++?
El número de programadores C++ en el mundo se estima que es de tres
millones – 3.000.000 (IDS 2004)
Hay más de 400 libros sobre C++ en las librerías o en versión electrónica.
Todos los proveedores grandes tienen compiladores para C++.
Linux está en gran parte hecho en C++.

¿Es mejor C++ que Java o C#?
¿Quién 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 también C.
Pasar de C++ a Java o a C# es relativamente sencillo.
Hay mucho código para reutilizar.
Hay librerías que nos dan facilidades como el “Recolector de Basura”.

C++ sigue evolucionando : C++0x (Estándar ISO en 2008)
                                                                  16
1.4 C++: El lenguaje de Programación
Portabilidad
Puedes compilar el mismo código 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 aplicación software usando varios ficheros de código
fuente, que se compilan de manera separada y luego se enlanzan para
generar el ejecutable. No tenemos que recompilar todo; sólo el fichero que
hemos tocado se compila y se enlaza el código objeto con el resto
generado antes. Podemos enlazar código objeto de C++ con código que
proviene de ensamblador.

Velocidad
El código resultante de una compilación de C++ es muy eficiente. C++ es
un lenguaje que podemos tratar a muy alto nivel o a muy bajo nivel.
                                                                 17
1.4 C++: El lenguaje de Programación




                                  18
1.5 Ejemplo de Clase
Definición
Queremos poder calcular la nota de los alumnos de la asignatura de
Métodos II de programación sabiendo que la nota final se calcula:

   20 % Por las prácticas de laboratorio (20% diarias 80% trabajo final)
   15 % Por exámen parcial.
   65 % Por exámen final

y suponiendo que todos los alumnos aprobarán y no irán al exámen
extraordinario.

Los alumnos deberán ser identificados por nombre, apellido1, apellido2 y
DNI.
             Alumno        nombre, apellido1, apellido2, dni


               Alumno        nota_practica_diaria    nota_parcial
            de Métodos II    nota_practica_final     nota_final

                                                                    19
1.5 Ejemplo de Clase

                   Alumno            Nombre               Alumno_M2
                                     de la Clase
            ­ 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
+ público   + nombre(string nom)     Métodos
                                                   + inicializar(): void 
            + apellido1(string a1)   Funciones
                                                   + nota_p_dia(float n)
            + apellido2(string a2)
                                                   + nota_p_fin(float n)
            + dni(string dni)
                                                   + nota_parcial(float n)
            + edad(int anios)
                                                   + nota_final(float n)
            + 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.5 Ejemplo de Clase                  Definición de Interfaz


// Clase Alumno de Métodos II
class AlumnoM2: public Alumno
{                                             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:
    void inicializar  (void);         + inicializar(): void 
    void nota_p_dia   (float nota);   + nota_p_dia(float n)
    void nota_p_fin   (float nota);   + nota_p_fin(float n)
    void nota_parcial (float nota);   + nota_parcial(float n)
    void nota_final   (float nota);   + nota_final(float n)

    float nota_p_dia   (void);        + nota_p_dia():float
    float nota_p_fin   (void);        + nota_p_fin():float
    float nota_parcial (void);        + nota_parcial():float
    float nota_final   (void);        + nota_final():float

    float calificacion(void);         + calificacion(): float
    void  imprime_notas();            + imprime_notas(): void
}
                                                       21
1.5 Ejemplo de Clase                              Implementación


void                                    //­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
AlumnoM2::inicializar (void)            void
{                                       AlumnoM2::nota_final (float nota);
    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 (float nota);          return nota_final_;
{                                       }
    nota_p_dia_    = nota;                              ...
}                                       //­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
//­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­   float
void                                    AlumnoM2::calificacion (void);
AlumnoM2::nota_p_fin (float nota);      {
{                                           flota cal=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 (float nota);        return cal;
{                                       }
    nota_parcial_  = nota;
}                                                                     22
1.5 Ejemplo de Clase                    Ejercicios


1.­ Método para imprimir
Codificar el método para imprimir por pantalla:
      Nombre      : 
      Apellido1   : 
      Apellido2   :
      DNI         :
      Edad        :

     Calificación   :

2.­ Método que devuelve la calificación en un argumento.
Codificar el método que podamos llamar así.

        float cal;
        calificacion(cal);
        cout << “Calificacion: “ << cal << “n”;

(*) Suponemos que un “Creador de Clases” ha codificado la clase 
Alumno de la que deriva la nuestra.

                                                       23
1.6 Para Recordar

1.- Los proyectos Software son complejos y difíciles de desarrollar
Sólo 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 características son: Abstracción, encapsulación, 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 diseñar.


5.- Aprendemos con la Práctica.
                                                                         24
Programa
Introducción a la POO
   Historia de la Programación   C++
   Conceptos de POO              Mi primera Clase

Repaso de Conceptos
   Estándares de Programación    Ficheros y E/S
   Punteros y Memoria            Control y Operadores

Clases y Objetos en C++
   Uso y aplicación              Funciones Amigas
   Constructores                 Constantes e “inline”

Sobrecarga
   De Operadores                 De Funciones

Herencia.
   Tipos de Visibilidad          Herencia Múltiple

Polimorfismo
   Funciones Virtuales           Polimorfismo y Sobrecarga.

Plantillas
   Contenedores                  Iteradores                   25

Más contenido relacionado

PDF
PROGRAMACIÓN EN JAVA
PDF
U.T. 3.- Programación Orientada a Objetos. Programación JAVA
PPTX
Taller Campus Party 2011: Desarrollo de Aplicaciones con .NET (Sesión 1)
PDF
Programación Orientada a Eventos Java
DOCX
cuestionario de Programación
PDF
Principios orientacion-objetos
PPTX
Windows Phone - Sesión 1 - SenaGeeks
PPTX
Programación Orientada Objetos Java Unidad 1
PROGRAMACIÓN EN JAVA
U.T. 3.- Programación Orientada a Objetos. Programación JAVA
Taller Campus Party 2011: Desarrollo de Aplicaciones con .NET (Sesión 1)
Programación Orientada a Eventos Java
cuestionario de Programación
Principios orientacion-objetos
Windows Phone - Sesión 1 - SenaGeeks
Programación Orientada Objetos Java Unidad 1

La actualidad más candente (20)

PPTX
Unidad 1_Programacion Orientada a Objetos
DOCX
Introducción a java
DOCX
PRESENTACION
PDF
Tema nº 1
PDF
Introduccion a la Programacion Orientada a Objetos
PDF
10. programación orientada a objetos (java)
PDF
Patrones de diseño I
PPTX
PDF
Apuntes de introduccion a la programación
DOCX
Cuestionario
DOCX
Introduccion a la POO
PPTX
CUESTIONARIO JAVA
PPTX
Intro
PDF
10. programacion orientada a objetos en visual basic .net
DOCX
Trabajo poo
PPTX
Patrones de diseño
PPTX
NIVEL DE PROGRAMACIÓN WEB INTRODUCCIÓN
DOCX
Actividad 10: Reporte de polimorfismo, herencia & encapsulamiento
PDF
Test Programación Orientada a Objetos
PDF
Cuestionario
Unidad 1_Programacion Orientada a Objetos
Introducción a java
PRESENTACION
Tema nº 1
Introduccion a la Programacion Orientada a Objetos
10. programación orientada a objetos (java)
Patrones de diseño I
Apuntes de introduccion a la programación
Cuestionario
Introduccion a la POO
CUESTIONARIO JAVA
Intro
10. programacion orientada a objetos en visual basic .net
Trabajo poo
Patrones de diseño
NIVEL DE PROGRAMACIÓN WEB INTRODUCCIÓN
Actividad 10: Reporte de polimorfismo, herencia & encapsulamiento
Test Programación Orientada a Objetos
Cuestionario
Publicidad

Destacado (20)

PDF
PDF
Diablada Bellavista Revista Pdf
PPT
PDF
Tema2 programacion i_ib
PPT
Web 3.0 educacion aldo zanabria
PDF
Desarrollo De Sistemas De Informaci N
PPT
obstruccion intestinal
PPTX
DOC
AdministracióN De Proceso De ImplantacióN Del Sistema
PDF
PPT
Sistemas de información distribuidos
Diablada Bellavista Revista Pdf
Tema2 programacion i_ib
Web 3.0 educacion aldo zanabria
Desarrollo De Sistemas De Informaci N
obstruccion intestinal
AdministracióN De Proceso De ImplantacióN Del Sistema
Sistemas de información distribuidos
Publicidad

Similar a Met2 07 01-introduccion_poo (20)

DOCX
Tc2 301403 21
PPTX
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
PPTX
¿Quién va a desarrollar las Apps del futuro? (aviso: no serán los programador...
PDF
Iphone
PDF
Programacion Modular
PDF
Programacion Modular
PDF
Tema nº 1
PDF
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
PDF
Buenasprcticas
PPTX
Programacion visual
PPT
Prog oo con_java
PPTX
PresentacionFalconeRonconi.pptx ksksbd wkaksj
DOC
Manual de-java
DOC
Tecnología Orientada A Objetos
PDF
Conceptos basicos de poo
PPT
programacion orientada a objetos-ppt-poo
PPT
metodologia-de-programación orientada a Objetos
DOCX
Introduccion a la poo
PPT
PROGRAMACIÓN ORIENTADO A OBJETOS de ingenieria
PDF
Aprenda c++ avanzado
Tc2 301403 21
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
¿Quién va a desarrollar las Apps del futuro? (aviso: no serán los programador...
Iphone
Programacion Modular
Programacion Modular
Tema nº 1
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Buenasprcticas
Programacion visual
Prog oo con_java
PresentacionFalconeRonconi.pptx ksksbd wkaksj
Manual de-java
Tecnología Orientada A Objetos
Conceptos basicos de poo
programacion orientada a objetos-ppt-poo
metodologia-de-programación orientada a Objetos
Introduccion a la poo
PROGRAMACIÓN ORIENTADO A OBJETOS de ingenieria
Aprenda c++ avanzado

Más de Aldo Hernán Zanabria Gálvez (20)

PDF
“PERSPECTIVAS DEL DESARROLLO ECONÓMICO REGIONAL EN EL CONTEXTO DEL CAMBIO CLI...
PDF
mejorando la web guia de html 5
PDF
Guía de Prácticas word beta.pdf
PPTX
emprendimiento en la era del conocimiento.pptx
PPTX
Fundamentos de Programación
PDF
Organizadores visuales sobre las corrientes contemporaneas aldo zanabria ga...
PDF
Tarea1 aldo zanabria
PDF
Tarea 2 aldo zanabria
PPTX
Carolinos del milenio pasado - Puno
PDF
ingenieria de sistemas
PPT
Electricidad con recursos renovables
PPT
Estructura y modelo organizacional estatal
PPT
PPTX
Resumen final - Seminario Taller TIC Emprede Turismo
PPTX
Clase de Tecnologías de la Información y Comunicaciones
DOC
Plan de Trabajo Integración de la Mujer
PPT
peritaciones y tasación puno
PPT
producción en la empresa turística
“PERSPECTIVAS DEL DESARROLLO ECONÓMICO REGIONAL EN EL CONTEXTO DEL CAMBIO CLI...
mejorando la web guia de html 5
Guía de Prácticas word beta.pdf
emprendimiento en la era del conocimiento.pptx
Fundamentos de Programación
Organizadores visuales sobre las corrientes contemporaneas aldo zanabria ga...
Tarea1 aldo zanabria
Tarea 2 aldo zanabria
Carolinos del milenio pasado - Puno
ingenieria de sistemas
Electricidad con recursos renovables
Estructura y modelo organizacional estatal
Resumen final - Seminario Taller TIC Emprede Turismo
Clase de Tecnologías de la Información y Comunicaciones
Plan de Trabajo Integración de la Mujer
peritaciones y tasación puno
producción en la empresa turística

Met2 07 01-introduccion_poo

  • 1. 1.0 Presentación Metodologías y Técnicas de Programación II Programación Orientada a Objeto (POO) C++ Profesor: José Luis Marina jmarina@nebrija.es Laboratorios: José Luis Marina jmarina@nebrija.es Borland Builder 6.0 Puntuación: Prácticas Laboratorio: 20% Diarias 20% Trabajo Laboratorio 80% Exámen Parcial 15% Exámen Final 65% Exámen Final Extraordinario 70% 1
  • 2. 1.0 Presentación: Programa Introducción a la POO Historia de la Programación C++ Conceptos de POO Mi primera Clase Repaso de Conceptos Estándares de Programación Ficheros y E/S Punteros y Memoria Control y Operadores Clases y Objetos en C++ Uso y aplicación Funciones Amigas Constructores Constantes e “inline” Sobrecarga De Operadores De Funciones Herencia. Tipos de Visibilidad Herencia Múltiple Polimorfismo Funciones Virtuales Polimorfismo y Sobrecarga. Plantillas Contenedores Iteradores 2
  • 3. 1.1 Historia de la Programación ¿Qué es programar? Programar es tener en cuenta ● Un problema: Quiero saber mi nota final en la asignatura. ● Un Conjunto de Datos En las prácticas diarias tengo un : 8 En la práctica final tengo un : 9 En el exámen parcial un : 6 En el exámen final un : 7 ● Unas funciones o algoritmos Nota Prácticas = (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
  • 4. 1.1 Historia de la Programación ¿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 además: ● 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 Sería ideal que ante problemas parecidos, no tenga que volver a escribir todo el código y pueda aprovechar la mayor parte de él. 4
  • 5. 1.1 Historia de la Programación Evolución Código Binario Con “ceros” y “unos”. 0010101 --> SUMAR Código Máquina. Ensamblador Tengo Nemotécnicos y puedo llamar a rutinas (funciones) Lenguajes Procedimentales Puedo pasar argumentos a funciones, devolver valores. Separo interfaz de implementación. Programación 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 Diseño Librerías de Clases, Frameworks Pares de solución/problema Reutilización masiva Programación Orientada a Aspectos, a Servicios, a Modelos,... 5
  • 6. 1.2 Reutilización Informe de Standish Group de 2004: Sólo 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 algún requisito, se entregan fuera de plazo o cuestan más de lo presupuestado. El 18% se cancelan antes de su finalización o jamás llegan a utilizarse. Reutilizar ayuda a sacar más con menos esfuerzo: Copio o reutilizo código, estructuras o ideas. Menos Equivocaciones: Reutilizo algo que ya funciona. Se ha corregido sus errores. Escribo menos código nuevo. Menos Pruebas Pruebo sólo lo nuevo y su integración. Más Creativo No rehago siempre lo mismo. Codifico nuevas funcionalidades. Mejoran las Probabilidades de Éxito 6
  • 7. 1.2 Tipos de Reutilización Reutilización Oportunista En general se da porque un programador copia código y lo pega en el suyo. Está bien pero tiene problemas a la larga: genero líneas 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. Reutilización Sistemática - (POO) Buscamos reutilizar y con un plan calculado. Queremos escribir sólo el código necesario, equivocarnos menos, poner y quitar funcionalidad de forma fácil. Queremos aprovechar los conocimientos y experiencia de otros que han estado antes “por aquí”. 7
  • 8. 1.3 Programación Orientada a Objeto Conceptos int i; ClaseEnteros mi_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 serán grupos de objetos enviando mensajes a otros para decirles qué hacer. Petición de invocación a una función 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
  • 9. 1.3 Programación Orientada a Objeto Conceptos II Todos los Objetos de un tipo en particular pueden recibir los mismos mensajes: Esto es muy potente. Nos abre un montón de posibilidades para REUTILIZAR CÓDIGO. Clase Figura Clase Círculo Clase Cuadrado Clase Triángulo Un objeto del tipo o clase Círculo también es del tipo Figura. Está garantizado que un círculo recibirá los mensajes de Figura. Si hacemos código que habla con objetos de tipo Figura, SIN TOCAR NADA, ese código también funciona con objetos de la clase Círculo. mi_figura.dibujar_en_pantalla(); 9
  • 10. 1.3 Programación Orientada a Objeto Conceptos III Clases: Una clase describe un conjunto de objetos que tienen: Las mismas características. > Datos Los mismos comportamientos. > Funciones Una clase es un tipo de datos. Un entero también tiene unas características y unas funciones específicas. Crearemos nuevas clases y el lenguaje de programación 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
  • 11. 1.3 Programación Orientada a Objeto Ocultando la Implementación Creadores de Clases: Programadores que proporcionan un interfaz a otros programadores clientes. No dejamos que los clientes accedan a la implementación. Así podemos cambiarla sin preocuparnos. Mejoro la función “dibujar()”. Programadores Clientes: Utilizan clases creadas por otros para hacer programas u otros objetos sin preocuparse de la implementación. Si mejoras el método “dibujar()” yo no tengo que cambiar nada de mi código. Implementación 1 Implementación 2 Interfaz 11
  • 12. 1.3 Programación Orientada a Objeto Reutilizando la implementación Si hemos hecho bien nuestra clase se convierte en una unidad de código útil para los demás 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 Composición o Agregación 1 Coche Motor Se lee “X tiene n Y” suelen ser privados dinámica o estática muy potente Abstracción de la complejidad
  • 13. 1.3 Programación Orientada a Objeto Reutilizando el Interfaz Hay veces en que queremos crear un nuevo tipo, cuyo interfaz se parece a uno ya creado. Es más sencillo clonar una clase y añadir y modificar cosas al clon. Herencia Base o padre Vehículo “es un” “es como un” Vehículo Pública. Permito que lo Hija o Vehículo a Motor sin motor vean mis herederos. derivada Privado. Sólo para mi. Coche Autobús Bicicleta
  • 14. 1.3 Programación Orientada a Objeto Características Abstraccción: Nos permite representar una realidad compleja en términos de un modelo simplificado. Encapsulación: Nos permite ocultar cómo 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 definición de otro objeto. Parte de la definición de Felino se corresponde con la definición de Mamífero. Polimorfismo: Propiedad que poseen algunas operaciones de tener un comportamiento diferente dependiendo del objeto (o tipo de dato) sobre el que se aplican 14
  • 15. 1.4 C++: El lenguaje de Programación C++ Es un lenguaje de programación de ● Propósito general ● Orientado a Objeto. Se basa en C. Un compilador de C++ compila también C. Lo diseñó y lo implementó Bjarne Stroustrup y empezó a hacerlo en 1979. La primera versión se llamó “C con clases”. La primera versión comercial salió al mercado en 1985. Se diseñó para que cumpliera con dos requisitos: ● Eficiente ● Elegante C++ es un lenguaje estandarizado. Se reúnen representantes de países y grandes empresas. El primer estándar sale en 1997 después de 8 años de esfuerzo. El estándar facilita enseñarlo en universidades de todo el mundo. 15
  • 16. 1.4 C++: El lenguaje de Programación ¿Alguien usa C++? El número de programadores C++ en el mundo se estima que es de tres millones – 3.000.000 (IDS 2004) Hay más de 400 libros sobre C++ en las librerías o en versión electrónica. Todos los proveedores grandes tienen compiladores para C++. Linux está en gran parte hecho en C++. ¿Es mejor C++ que Java o C#? ¿Quién 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 también C. Pasar de C++ a Java o a C# es relativamente sencillo. Hay mucho código para reutilizar. Hay librerías que nos dan facilidades como el “Recolector de Basura”. C++ sigue evolucionando : C++0x (Estándar ISO en 2008) 16
  • 17. 1.4 C++: El lenguaje de Programación Portabilidad Puedes compilar el mismo código 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 aplicación software usando varios ficheros de código fuente, que se compilan de manera separada y luego se enlanzan para generar el ejecutable. No tenemos que recompilar todo; sólo el fichero que hemos tocado se compila y se enlaza el código objeto con el resto generado antes. Podemos enlazar código objeto de C++ con código que proviene de ensamblador. Velocidad El código resultante de una compilación de C++ es muy eficiente. C++ es un lenguaje que podemos tratar a muy alto nivel o a muy bajo nivel. 17
  • 19. 1.5 Ejemplo de Clase Definición Queremos poder calcular la nota de los alumnos de la asignatura de Métodos II de programación sabiendo que la nota final se calcula: 20 % Por las prácticas de laboratorio (20% diarias 80% trabajo final) 15 % Por exámen parcial. 65 % Por exámen final y suponiendo que todos los alumnos aprobarán y no irán al exámen extraordinario. Los alumnos deberán ser identificados por nombre, apellido1, apellido2 y DNI. Alumno nombre, apellido1, apellido2, dni Alumno nota_practica_diaria nota_parcial de Métodos II nota_practica_final nota_final 19
  • 20. 1.5 Ejemplo de Clase Alumno Nombre  Alumno_M2 de la Clase ­ 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 + público + nombre(string nom) Métodos + inicializar(): void  + apellido1(string a1) Funciones + nota_p_dia(float n) + apellido2(string a2) + nota_p_fin(float n) + dni(string dni) + nota_parcial(float n) + edad(int anios) + nota_final(float n) + 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
  • 21. 1.5 Ejemplo de Clase Definición de Interfaz // Clase Alumno de Métodos II class AlumnoM2: public Alumno { 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: void inicializar  (void); + inicializar(): void  void nota_p_dia   (float nota); + nota_p_dia(float n) void nota_p_fin   (float nota); + nota_p_fin(float n) void nota_parcial (float nota); + nota_parcial(float n) void nota_final   (float nota); + nota_final(float n) float nota_p_dia   (void); + nota_p_dia():float float nota_p_fin   (void); + nota_p_fin():float float nota_parcial (void); + nota_parcial():float float nota_final   (void); + nota_final():float float calificacion(void); + calificacion(): float void  imprime_notas(); + imprime_notas(): void } 21
  • 22. 1.5 Ejemplo de Clase Implementación void //­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ AlumnoM2::inicializar (void) void { AlumnoM2::nota_final (float nota); 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 (float nota); return nota_final_; { } nota_p_dia_  = nota;                 ... } //­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ //­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ float void AlumnoM2::calificacion (void); AlumnoM2::nota_p_fin (float nota); { { flota cal=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 (float nota); return cal; { } nota_parcial_  = nota; } 22
  • 23. 1.5 Ejemplo de Clase Ejercicios 1.­ Método para imprimir Codificar el método para imprimir por pantalla: Nombre  :  Apellido1 :  Apellido2 : DNI : Edad : Calificación : 2.­ Método que devuelve la calificación en un argumento. Codificar el método que podamos llamar así. float cal; calificacion(cal); cout << “Calificacion: “ << cal << “n”; (*) Suponemos que un “Creador de Clases” ha codificado la clase  Alumno de la que deriva la nuestra. 23
  • 24. 1.6 Para Recordar 1.- Los proyectos Software son complejos y difíciles de desarrollar Sólo 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 características son: Abstracción, encapsulación, 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 diseñar. 5.- Aprendemos con la Práctica. 24
  • 25. Programa Introducción a la POO Historia de la Programación C++ Conceptos de POO Mi primera Clase Repaso de Conceptos Estándares de Programación Ficheros y E/S Punteros y Memoria Control y Operadores Clases y Objetos en C++ Uso y aplicación Funciones Amigas Constructores Constantes e “inline” Sobrecarga De Operadores De Funciones Herencia. Tipos de Visibilidad Herencia Múltiple Polimorfismo Funciones Virtuales Polimorfismo y Sobrecarga. Plantillas Contenedores Iteradores 25