Inform tica ii
This presentation is the property of its rightful owner.
Sponsored Links
1 / 142

Informática II PowerPoint PPT Presentation


  • 69 Views
  • Uploaded on
  • Presentation posted in: General

Informática II. Clase 2: Clases y Objetos. Diego Fernando Serna Restrepo. Semestre 2011/2. Quiz. Contenido. Programación orientada a objetos - POO. 1. Clases y Objetos. 2. Punteros y Referencias. 3. Manejo de errores. 4. Contenido. Funciones Avanzadas. 5. Herencia. 6.

Download Presentation

Informática II

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Inform tica ii

Informática II

Clase 2: Clases y Objetos

Diego Fernando Serna Restrepo

Semestre 2011/2


Inform tica ii

Quiz

Informática II 2011/2


Inform tica ii

Informática II 2011/2


Contenido

Contenido

Programación orientada aobjetos - POO

1

Clases y Objetos

2

Punteros y Referencias

3

Manejo de errores

4

Informática II 2011/2


Contenido1

Contenido

Funciones Avanzadas

5

Herencia

6

Arreglos

7

Polimorfismo

8

Informática II 2011/2


Programaci n orientada a objetos poo

Programación orientada a objetos - POO

  • El mundo real esta compuesto por elementos complejos, difícilmente pueden ser modelados por números simples o caracteres.

  • La esencia de la POO es

    modelar objetos (cosas o conceptos)

    en vez de datos.

Informática II 2011/2


Programaci n orientada a objetos

Programación Orientada a Objetos

Informática II 2011/2


Programaci n orientada a objetos1

Programación Orientada a Objetos

  • Caraterísticas

Informática II 2011/2


Contenido2

Contenido

Programación orientada aobjetos - POO

1

Clases y Objetos

2

Punteros y Referencias

3

Manejo de errores

4

Informática II 2011/2


Clases

Clases

Informática II 2011/2


Clases1

Clases

Los miembros de una clase puede ser catalogados como públicos o privados.

Informática II 2011/2


C mo acceder a los miembros de una clase

Cómo acceder a los miembros de una clase?

  • Los miembros de una clase pueden accederse cuando existe un objeto definido como dicha clase, y se accede utilizando el operador punto (.)

    GatoTom;

    Tom.Maullar();

  • ¡Cuidado!, no trate de asignar valores a las

    clases, los únicos que pueden tener valores

    son los objetos.

Informática II 2011/2


M todos de las clases

Métodos de las clases

  • La declaración e implementación de los métodos de una clase es prácticamente igual a la definición de una función regular.

    class Gato

    {

    public:

    intObtenerEdad(); //declaración del método

    private:

    intsuEdad;

    }

    //Implementación del método

    int Gato::ObtenerEdad()//Operador SCOPE ::

    {

    returnsuEdad;

    }

Informática II 2011/2


M todos de las clases1

Métodos de las clases

// Declaracion de una clase

classRectangulo {

// Variables de instancia

int ancho, alto;

public:

// Metodos

void set_values(int a, int b);

intarea();

}; // Fin de clase Rectangulo

voidRectangulo::set_values(int a, int b) {

ancho = a;

alto = b;

}

intRectangulo::area() {

return ancho*alto;

}

Informática II 2011/2


Constructores y destructores

Constructores y destructores

  • Los constructores y destructores son métodos especiales de las clases, usados para inicializar y liberar la memoria de las clases respectivamente:

class Gato{

Public:

Gato(); //Declaración de un constructor

~Gato(); //Declaración de un destructor

}

Informática II 2011/2


Constructores y destructores1

Constructores y destructores

  • Los constructores pueden tomar parámetros de entrada, los destructores ¡NO!

  • Es una buena práctica declarar los destructores, si se declaran los constructores.

Informática II 2011/2


Operador scope

Operador Scope (::)

Informática II 2011/2


Funci n inline

Función inline

  • C++ permite sustituir, en tiempo de compilación, la llamada a una función por el código correspondiente en el punto en que se realiza la llamada. De esta manera la ejecución es más rápida, pues no se pierde tiempo transfiriendo el control y realizando conversiones de parámetros.

  • Como contrapartida, el programa resultante ocupa más memoria, pues es posible que el código de una misma función se introduzca muchas veces. Las funciones inline son muy útiles en el caso de funciones cortas, que se ejecutan muchas veces (en un bucle for, por ejemplo).

Informática II 2011/2


Espacios nombres namespace

Espacios nombres (namespace)

Informática II 2011/2


Resumen

Resumen:

  • Conceptos:

Informática II 2011/2


Estructura de un programa

Estructura de un Programa

Encabezados

//Mi primer programa en C++

#include <iostream>

usingnamespacestd;

intmain(void){

int a, b, c = 0;

cout << “Digite el primer numero: ”;

cin >> a;

cout << “Digite el segundo numero: ”);

cin >> b;

c = a + b;

cout << “El resultado es: << c <<‘\n’;

return 0;

}

Directivas

INICIO

Declaración de

variables

Acciones del Algoritmo

FIN

Informática II 2011/2


Variables

Variables


Arreglos

Arreglos

  • Es posible crear arreglos de tantas dimensiones como requieran sus aplicaciones.

  • Se declaran siguiendo el patrón de la declaración de un vector:

tipo nombre [d1] [d2] [d3]… [dN];

Informática II 2011/2


Arreglos1

Arreglos

Fila 0

Fila 1

Bloque 0

  • intmatrizA [2] [3] [3]={ {{1,3,5}, {7,9,11}},

    • {{2,4,6}, {8,10,12}},

  • {{3,7,11}, {15,19,23}} };

  • Bloque 1

    Bloque 2

    Bloque 0

    Bloque 1

    Bloque 2

    F0

    1

    3

    5

    2

    4

    6

    3

    7

    11

    F1

    7

    9

    11

    8

    12

    15

    19

    23

    10

    C0

    C1

    C2

    C0

    C0

    C1

    C2

    C1

    C2

    Informática II 2011/2


    Arreglos2

    Arreglos

    • Arreglos como parámetros a funciones

    tipoRetornofuncion (tipoDatovector[]);

    funcion (nombreVector);

    tipoRetornofuncion (tipoDatovector[], intsize);

    funcion (nombreVector, tamaño);

    Informática II 2011/2


    Estructuras

    Estructuras

    Con la declaración de un estructura estamos creando un tipo de datos NUEVO y PERSONALIZADO. Se utiliza la palabra clave struct

    structnombreDeLaEstructura

    {

    tipoDeDatoMiembro1nombreMiembro1;

    tipoDeDatoMiembro2 nombreMiembro2;

    ...

    tipoDeDatoMiembroNnombreMiembroN;

    } ;


    Estructuras1

    Estructuras

    Cuando declaramos una estructura SOLO se está diciendo que forma tendrá, SE CREA UN NUEVO TIPO DE DATOS.

    Falta instanciar la estructura o simplemente reservarle un espacio en memoria con un nombre especifico, SE DECLARA UNA VARIABLE DE ESTE NUEVO TIPO.

    structcdsMusica

    {

    char titulo[40];

    char artista[40];

    chargenero[15];

    intnumCanciones;

    int lanzamiento;

    int precio;

    };

    structcdsMusica cd1, cd2, cd3;


    Estructuras2

    Estructuras

    Si queremos a un elemento especifico dentro de una variable estructura se puede acceder por medio del operador “.” ó “->”.

    nombreVarEstructura.nombreMiembro= dato;

    CADA MIEMBRO de una variable estructura se maneja como si fuera otra VARIABLE COMÚN Y CORRIENTE.


    Contenido3

    Contenido

    Programación orientada aobjetos - POO

    1

    Clases y Objetos

    2

    Punteros y Referencias

    3

    Manejo de errores

    4

    Informática II 2011/2


    Inform tica ii

    Punteros

    • Es un tipo de variable implementada para almacenar exclusivamente direcciones de otras variables, estos se debe declarar y definir de acuerdo al tipo de dato que apunta.

    Utilizando punteros un programa puede realizar muchas tareas que no sería posible utilizando tipos de datos estándar.

    Informática II 2011/2


    Caracter sticas de un apuntador

    Características de un apuntador

    • Un puntero es una variable como cualquier otra. Excepto que solo puede almacenar direcciones de otras variables común y corrientes.

    • Un puntero apunta a una variable en memoria.

    • Son útiles para pasar y regresar valores a la rutina que las llama.

    • Si son usadas incorrectamente se pueden convertir en fuente de fallas y frustraciones.

    El tipo de variable que almacena una dirección se denomina puntero.

    Informática II 2011/2


    Punteros

    Punteros

    Informática II 2011/2


    Violaci n de seguridad de la memoria

    Violación de seguridad de la memoria

    • Generan corrupción de datos y posiblemente fallos de segmentación.

    Informática II 2011/2


    Para que se usan los punteros

    ¿Para que se usan los punteros?

    Informática II 2011/2


    Variables y memoria

    MEMORIA

    Variables y memoria

    #include <iostream>

    usingnamespacestd;

    void main()

    {

    int y = 25;

    int z=77;

    int y = 25;

    int z=77;

    cout << " y= " << y << endl; / * visualiza el valor de y * /

    cout << " y= " << y << endl; / * visualiza el valor de y * /

    cout << " Dir y= " << &y << endl; / * visualiza dirección de y * /

    cout << " Dir y= " << &y << endl; / * visualiza dirección de y * /

    }

    y = 25

    &y = 1002

    y = 25

    Informática II 2011/2


    Modo de almacenamiento

    Modo de almacenamiento

    • El modo de almacenamiento (storageclass) es otra característica de las variables de C++ que determina cuándo se crea una variable, cuándo deja de existir y desde dónde se puede acceder a ella.

    Informática II 2011/2


    Espacios de memoria

    Espacios de memoria

    • Reservada antes de la ejecución del programa

    • Permanece fija.

    • No requiere gestión durante la ejecución.

    • El sistema operativo se encarga de la reserva, recuperación y reutilización.

    • Se accede a un espacio en esta cada vez que se declaran Variables globales o tipo static.

    • Es una zona de memoria que gestiona las llamadas a funciones durante la ejecución de un programa.

    • Cada vez que se realiza una llamada a una función en el programa, se crea un entorno de programa que se libera cuando acaba su ejecución.

    • La reserva y liberación de la memoria la realiza el S.O. de forma automática durante la ejecución del programa.

    • Es una zona de memoria donde se reservan y se liberan “trozos” durante la ejecución de los programas según sus propias necesidades, este proceso es usualmente llamado gestiónde memoria dinámica.

    • Optimiza el almacenamiento de datos.

    Informática II 2009/2


    Gesti n din mica de memoria

    Gestión dinámica de memoria

    Informática II 2011/2


    Operador new

    Operador new

    • Un operador que reserva la cantidad de memoria deseada en tiempo de ejecución.

    Informática II 2011/2


    Liberando la memoria del heap

    Liberando la memoria del heap

    • Para liberar la memoria del HEAP se usa el comando delete sobre el puntero.

      deletepPuntero;

    • Es MUY importante liberar la memoria del Heap, pues en caso de perder el rastro de los punteros podrán presentarse “fugas de memoria”

    Informática II 2011/2


    Operador delete

    Operador delete

    • El operador deleteno elimina el puntero, simplemente lo desreferencia.

    • Cuando se utiliza el operardodelete más de una vez, puede generar que el programa se estrelle, por ello es recomendable inicializar el puntero a NULL, haciendo esto se garantiza mayor seguridad, y de este modo se puede volver a reutilizar el puntero.

    int*ptr =newint;//reservamemoria

    deleteptr;//desrefernciaptr

    ptr=NULL;//lo lleva a NULL

    deleteptr;//no hay problema

    //se puede volver a referenciar a otro espacio de memoria

    ptr=newint;

    Informática II 2011/2


    Fugas de memoria

    Fugas de memoria

    • Cuando “se pierde de vista” la dirección o el puntero que lleva registro del espacio en el Heap, se dice que hubo una fuga de memoria.

    • La memoria desperdiciada por causa de fugas de memoria, NO podrá liberarse sino hasta que termine el programa.

    Informática II 2011/2


    Fugas de memoria1

    Fugas de memoria

    • Es muy frecuente que ocurra cuando el puntero es declarado como variable local (dentro de una función) y luego se sale de ésta sin antes liberar la memoria.

    • Es muy común usar los constructores para reservar memoria en el heap y los destructores para liberarla.

    • ¡OJO!, realizar un delete sobre un puntero libera la memoria, realizarlo de nuevo estrellará el programa. Para que esto no ocurra, asígnele al puntero el valor de cero DESPUÉS de hacer el primer delete.

    Informática II 2011/2


    Resumen de apuntadores

    Resumen de apuntadores

    Informática II 2011/2


    Referencias

    Referencias

    • Las referencias son “alias” de otros objetos, por lo tanto cuando se manipula una referencia, realmente se está manipulando el objeto al que ésta hace referencia.

    Informática II 2011/2


    Declaraci n de referencias

    Declaración de Referencias

    int Edad = 5;

    int &rVbleReferencia = Edad;

    // int &rOtraVble = int

    // error!, esta mal referenciado

    Informática II 2011/2


    Referencias1

    Referencias

    0X0FDE00

    0X0FDE04

    socio1, socio2

    0X0FDE08

    int socio1;

    int &socio2=socio1;

    • Las referencias difieren con otro tipo de variables ya que deben declararse inicializándolas con las variables a las que harán referencia. Si se tratan de declarar sin inicializar, el programa no compilará.

    • Si se toma la dirección de una referencia (&rReferencia), el valor que devuelve es la dirección de la variable a la que apunta la referencia.

    Informática II 2011/2


    Referencias2

    Referencias

    • Las referencias SÓLO pueden ser asignadas una vez, por lo tanto, todas las operaciones que se hagan a la referencia, en realidad se estarán haciendo sobre el objeto al que hacen referencia.

    • ¡NO TRATE DE REASIGNAR UNA REFERENCIA!

    Informática II 2011/2


    Referencias3

    Referencias

    • Las referencias pueden trabajar con todo tipo, incluso con objetos.

    • Cuando una referencia hace referencia a un objeto, puede usar todos sus miembros y métodos tal y como se hace con objeto real.

    Informática II 2011/2


    Pasar y retornar valores por referencia

    Pasar y retornar valores por referencia

    • A las funciones normalmente se le pasan los argumentos por valor y sólo devuelven un valor.

    • Si se pasan los parámetros por referencia, se puede superar éstas limitantes. Existe dos formas de hacerlo; usando punteros o referencias

    • Se dice que uno pasa “por referencia” cuando usa punteros o uno pasa “una referencia” cuando usa referencias.

    Informática II 2011/2


    Pasar y retornar valores por referencia1

    Pasar y retornar valores por referencia

    • Cuando se pasa por referencias, realmente se pasa la dirección del objeto real (en vez del objeto entero), para luego manipular directamente el objeto, no su copia.

    Informática II 2011/2


    Retornos m ltiples valores en las funciones

    Retornos múltiples valores en las funciones

    • Existen 2 formas de hacerlo; pasar los objetos por referencia y trabajarlos dentro de la función o haciendo lo mismo pero con los punteros.

    • Estos métodos permiten que se use el valor de retorno de la función para reportar errores.

    Informática II 2011/2


    Pasar por referencia para ser m s eficiente

    Pasar por referencia para ser más eficiente

    • Cada vez que se pasa un objeto por valor, se genera una copia de éste en la pila, lo cual hace que se requiera tiempo y memoria.

    • Cuando se trabajan con valores sencillos(int, short, etc..), es un costo tribial; sin embargo, con objetos complicados es un costo significativos.

    Informática II 2011/2


    Pasando punteros const

    Pasando punteros const

    Informática II 2011/2


    Cuando usar referencias o punteros

    Cuando usar referencias o punteros

    Informática II 2011/2


    Contenido4

    Contenido

    Programación orientada aobjetos - POO

    1

    Clases y Objetos

    2

    Punteros y Referencias

    3

    Manejo de errores

    4

    Informática II 2011/2


    Contenido5

    Contenido

    Funciones Avanzadas

    5

    Herencia

    6

    Arreglos

    7

    Polimorfismo

    8

    Informática II 2011/2


    Sobrecargado de funciones polimorfismo

    Sobrecargado de funciones (Polimorfismo)

    • Consiste en crear diferentes funciones con el mismo nombre, con el fin de ofrecer al usuario una manera más sencilla de recordar las funciones.

      //Algunos protototipos

      intfuncion(int);

      intfuncion(long, long);

      intfuncion(long);

      /* El programa determina cual de las funciones “funcion” ha sido llamada, según los parámetros con que sea llamada la función*/

    Informática II 2011/2


    Sobrecargado de los m todos de las clases

    Sobrecargado de los métodos de las clases

    • Los métodos de las clases también pueden ser sobrecargados como el resto de las funciones, su sintaxis es prácticamente igual.

      classRectangulo

      {

      public:

      // función DibujarFigura() sobrecargada de la clase

      voidDibujarFigura() const;

      voidDibujarFigura(intunAncho, intunaAltura) const;

      private:

      intsuAncho;

      intsuAltura;

      };

    voidDibujarFigura() const;

    voidDibujarFigura(intunAncho, intunaAltura) const;

    Informática II 2011/2


    Sobrecargado de los m todos de las clases1

    Sobrecargado de los métodos de las clases

    • Los constructores, al ser métodos especiales de las clases también pueden ser sobrecargados, y la manera de hacerlo es igual que el resto de los métodos.

    • ¡OJO!, los destructores no pueden ser sobrecargados, ¿Porque?

    Informática II 2011/2


    Valores por defecto

    Valores por defecto

    Informática II 2011/2


    Valores por defecto1

    Valores por defecto

    Informática II 2011/2


    Inicializaci n de las variables miembro

    Inicialización de las variables miembro

    Informática II 2011/2


    Constructor copia

    Constructor Copia

    • Adicionalmente de ser asignado por defecto un constructor y un destructor cuando no son declarados explícitamente en la declaración de la clase, el compilador provee un constructor de copia, que es llamado cada vez que se requiere una copia de un objeto.

    #include <iostream>

    usingnamespacestd;

    carro Deportivo(10,"BMW",50);

    //carro carreras=Deportivo;

    carro carreras(Deportivo); //constructor copia por defecto

    intmain()

    {

    cout<<Deportivo.getVelMax()<<endl;

    cout<<carreras.getVelMax()<<endl;

    return 0;

    }

    50

    50

    Informática II 2011/2


    Constructores de copia

    Constructores de copia

    • Cada vez que se crea una copia de un objeto "El constructor de copia” es ejecutado.

    • Por defecto, el constructor de copia simplemente copia cada miembro de una objeto hacia el nuevo objeto. Esta copia se denomina “Copia Superficial”.

      //Declaración del constructor de copia

      GATO (const GATO &); // constructor de copia

    Informática II 2011/2


    Constructores de copia1

    Constructores de copia

    Informática II 2011/2


    Constructores de copia2

    Constructores de copia

    Informática II 2011/2


    Sobrecargado de los operadores

    Sobrecargado de los operadores

    • La sobrecarga de operadores quiere decir que se pueden redefinir algunos de los operadores existentes en C++ para que actúen de una determinada manera, definida por el programador, con los objetos de una clase creada por el mismo.

    • La sobrecarga de operadores se emplea para declarar “como es que funciona” dicho operador cuando se utilizan sobre los objetos.

    2+1=0

    Informática II 2011/2


    Sobrecarga de operadores

    Sobrecarga de operadores

    • El objetivo de la sobrecarga de operadores es simplificar al máximo el código a escribir, a cambio de complicar algo la definición de las clases. Una clase que disponga de operadores sobrecargados es una clase más compleja de definir, pero más sencilla e intuitiva de utilizar.

    Informática II 2011/2


    Sobrecarga de operadores1

    Sobrecarga de operadores

    • La sobrecarga de un operador puede ser declarada de la siguiente forma:

      tipodeRetornooperatorop (parametros);

    Void, int, char, …

    Palabra

    reservada

    -, --, + , ++, =, ==, …

    Void, int, char, …

    voidoperator ++ ();

    // Ejemplo de una declaración para el sobrecargado del operador ++

    Informática II 2011/2


    Ejemplo sobrecarga del operador prefijo

    Ejemplo Sobrecarga del operador Prefijo

    En esta línea de código se presenta los siguientes pasos:

    contador cont2=++cont1;

    Informática II 2011/2


    Sobrecarga del operador de postincremento

    Sobrecarga del operador de Postincremento

    De este modo, el valor del objeto será modificado, pero en la expresión donde aparezca se tomará el valor antes de modificar.

    Informática II 2011/2


    Sobrecarga de operadores2

    Sobrecarga de operadores

    Informática II 2011/2


    Contenido6

    Contenido

    Funciones Avanzadas

    5

    Herencia

    6

    Arreglos

    7

    Polimorfismo

    8

    Informática II 2011/2


    Herencia

    Herencia

    Informática II 2011/2


    Herencia1

    Herencia

    Informática II 2011/2


    Herencia2

    Herencia

    • La clase de la que se parte en este proceso recibe el nombre de clase base, y la nueva clase que se obtiene se denomina clase derivada. Ésta a su vez puede ser clase base en un nuevo proceso de derivación, iniciando de esta manera una jerarquía de clases.

    Informática II 2011/2


    Clase base abstracta

    Clase Base Abstracta

    La herencia presenta múltiples ventajas, como la posibilidad de reutilizar código sin tener que escribirlo de nuevo. Esto es posible porque todas las clases derivadas pueden utilizar el código de la clase base sin tener que volver a definirlo en cada una de ellas.

    Son Clases que no tiene otra utilidad que la de ser clase basepara otras clases se deriven de ella.

    Informática II 2011/2


    Modificadores de acceso

    Modificadores de Acceso

    Informática II 2011/2


    Notas

    Notas:

    Informática II 2011/2


    Constructores y destructores2

    Constructores y Destructores

    • Cuando un objeto derivado es creado primero es llamado el constructor de la clase base y luego el propio.

    intvel;

    bool on;

    Parte vehículo

    Objetocarro

    intNcambio;

    int acelerar;

    Informática II 2011/2


    Sobrecargar vs redefinir

    Sobrecargar Vs Redefinir

    Informática II 2011/2


    Ocultando los m todos de la clase base

    Ocultando los Métodos de la Clase Base

    Informática II 2011/2


    Ejemplo

    Ejemplo

    classvehiculo{

    protected:

    intvel;

    boolon;

    public:

    vehiculo();

    vehiculo(vehiculo &V);

    vehiculo(int _vel,bool _on);

    voidsetVel(int _vel);

    intgetVel() const;

    //sobrecarga metodogetVel

    intgetVel(floatother);

    intgetVel(intother);

    virtual vehiculo* clonar();

    virtual ~vehiculo();

    };

    carro audi(10,true);

    intmain()

    {

    int a=5;

    float b=45.6;

    //solo podemos acceder a el método heredado redefinido

    audi.getVel();

    audi.getVel(a);

    //para haceder a los demás métodos sobrecargados

    audi.vehiculo::getVel();

    audi.vehiculo::getVel(a);

    audi.vehiculo::getVel(b);

    return 0;

    }

    • cuando se redefine un método sobrecargado, todas sus variaciones son escondidas. Si no se desea que se oculten, entonces se debe redefinir cada una de las variaciones o sobrecargas en la clase derivada.

    class carro: publicvehiculo{

    private:

    intNcambio;

    int acelerar;

    public:

    carro();

    carro(int _vel,bool _on);

    intgetVel() const;

    voidcambCambio(int _Ncambio);

    ~carro();

    };

    Informática II 2011/2


    Conversiones entre clase base y derivada

    Conversiones entre clase Base y Derivada

    Informática II 2011/2


    Conversiones entre clase base y derivada1

    Conversiones entre clase Base y Derivada

    Objeto_claseBase= Objeto_claseDerivada;

    Objeto_claseDerivada= Objeto_claseBase;

    • Se puede hacer referencia a un objeto de la clase derivada con su dirección contenida en un puntero a la clase base.

    vehiculo *ptrV=new carro(30,true);

    carro *ptrC=newvehiculo();

    Informática II 2011/2


    Conversiones entre clase base y derivada2

    Conversiones entre clase Base y Derivada

    usingnamespacestd;

    intmain()

    {

    vehiculo *ptrV=new carro(30,true);

    cout<< ptrV->getVel()<<endl;

    //se accede al metodo de la clase base

    return 0;

    }

    Informática II 2011/2


    M todos virtuales

    Métodos Virtuales

    • Tenemos un problema cuando deseamos acceder al método de la clase derivada a través de un puntero de tipo clase base. Para lograrlo debemos definir el método como virtual dentro de la clase base.

    • Para declarar una función como virtual basta con adicionar la palabra “virtual” al inicio de su prototipo.

    virtual par.retornodeclaracionMetodo(parámetros entrada );

    Informática II 2011/2


    M todos virtuales1

    Métodos Virtuales

    Informática II 2011/2


    M todos virtuales2

    Métodos Virtuales

    Informática II 2011/2


    M todos virtuales3

    Métodos Virtuales

    Informática II 2011/2


    Contenido7

    Contenido

    Funciones Avanzadas

    5

    Herencia

    6

    Arreglos

    7

    Polimorfismo

    8

    Informática II 2011/2


    Definici n

    Definición

    Definición:

    • Un array es una colección de variables del mismo tipo de datos con un mismo nombre.

    • Los arrays son un ejemplo de una variable estructurada en la cual:

      • Hay un numero de piezas de datos contenidos en el mismo nombre.

      • Hay un método ordenado para la extracción de datos individuales del array


    Ejemplo arreglos

    Ejemplo Arreglos

    Problema:

    Supongamos el señor Burns le solicita a usted un programa que le permita llevar un registro de la identificación de cada uno de los empleados de la plata nuclear de Springfield, ¿Cómo lo haría?

    Solución 1:

    Crear una variable especifica por empleado en la cual se almacene la identificación de cada uno de los empleados.


    Ejemplo arreglos1

    Ejemplo Arreglos

    Problema solución anterior:

    El problema se vuelve mas difícil a medida que el numero de empleados aumenta, pues implicara la creación de mas variables individuales (id5, id6, …)


    Inform tica ii

    Ejemplo Arreglos

    Solución al problema anterior:

    En los arrays se encuentra la respuesta. Pues un array es como una caja para guardar elementos o como un archivador. Utiliza un sistema de indexación para encontrar el valor de cada una de las variables almacenadas en su interior.


    Arreglos de objetos

    Arreglos de Objetos

    • Los arreglos pueden guardar secuencias de datos de cualquier tipo, incluyendo los objetos.

    • Si se desea usar un método de un objeto en un arreglo se usa el operador punto (.), tal como se hace con los objetos.

      Carro carrosBacanos[2]; // ¡Debe existir un constructor

      // por defecto que inicialice cada uno de los objetos!

      carrosBacanos[0].acelerar();

    Informática II 2009/2


    Arreglos multidimensionales

    ArreglosMultidimensionales

    • Es posible crear arrays de tantas dimensiones como requieran sus aplicaciones.

    • Se declaran siguiendo el patrón de la declaración de un vector:

    tipo nombre [d1] [d2] [d3]… [dN];


    Arreglos de 2 dimensiones

    Arreglos de 2 Dimensiones

    • Declaración

    • Ejemplo:

    tipo nombre [fila] [columna];

    intA[2] [3];

    Nombre

    A[0][0]

    A[0][1]

    A[0][2]

    Filas = 2

    A[1][0]

    A[1][1]

    A[1][2]

    Columnas = 3


    Arreglos de 2 dimensiones1

    Arreglos de 2 Dimensiones

    A[0][0]

    A[0][1]

    A[0][2]

    A[1][0]

    A[1][1]

    A[1][2]

    A[0][0]

    A[0][1]

    A[0][2]

    A[1][0]

    A[1][1]

    A[1][2]


    Inicializaci n arreglos multidimensionales

    InicializaciónArreglosMultidimensionales

    Fila 0

    Fila 1

    intmatrizA [2] [3] = { {3,5,7} , {8,6,4} };

    A[0][0]

    A[0][1]

    A[0][2]

    3

    5

    7

    A[1][1]

    A[1][2]

    A[1][0]

    8

    6

    4

    intmatrizA [2] [3] = {{3,5,7} ,

    {8,6,4} };

    intmatrizA [2] [3] = { 3,5,7,8,6,4 };


    Arreglos de 3 dimensiones

    Arreglos de 3 Dimensiones

    tipo nombre [fila] [columna] [Planos];

    • Declaración

    IntmatrizB[2] [3] [3];

    B[0][1][2]

    B[0][2][2]

    B[0][0][2]

    Planos = 3

    B[0][1][1]

    B[0][2][1]

    B[0][0][1]

    B[1][2][2]

    B[1][0][1]

    B[1][1][1]

    Nombre

    B[0][1][0]

    B[0][2][0]

    B[0][0][0]

    B[1][2][1]

    B[1][0][1]

    B[1][1][1]

    Filas = 2

    B[1][0][0]

    B[1][1][0]

    B[1][2][0]

    Columnas = 3


    Arreglos de 3 dimensiones1

    Arreglos de 3 Dimensiones

    Fila 0

    Fila 1

    Bloque 0

    • intmatrizA [2] [3] [3]={ {{1,3,5}, {7,9,11}},

      • {{2,4,6}, {8,10,12}},

  • {{3,7,11}, {15,19,23}} };

  • Bloque 1

    Bloque 2

    Bloque 0

    Bloque 1

    Bloque 2

    F0

    1

    3

    5

    2

    4

    6

    3

    7

    11

    F1

    7

    9

    11

    8

    12

    15

    19

    23

    10

    C0

    C1

    C2

    C0

    C0

    C1

    C2

    C1

    C2


    Uso del heap problemas de memoria

    Uso del Heap problemas de memoria

    Cuando se declara un arreglo, se separa un espacio en memoria fijo para almacenarlo.

    El arreglo se localiza en el stack (limitado).

    Heap. Tiene más memoria.

    Es posible crear estructuras que se comportan de manera dinamica


    Inform tica ii

    Arreglos en el heap

    Arreglo de apuntadores.

    Diferencia entre apuntador a un arreglo y arreglo de apuntadores

    1: CAT FamilyOne[500];

    2: CAT * FamilyTwo[500];

    3: CAT * FamilyThree = new CAT[500];

    (3) es una variante de (1), muy distinta de (2).

    Uso del Heap problemas de memoria


    Inform tica ii

    Uso de apuntadores con nombres de arreglos

    Los arreglos son apuntadores constantes.

    CAT Family[50];

    Es un apuntador constante a

    &Family[0];

    Es legal usar nombres de arreglos como apuntadores constantes y viceverza.

    Family[4];

    Family + 4;

    Uso del Heap problemas de memoria

    • Arreglos en el Free Store

      delete [] Family;


    Declarando arreglos en el heap

    Declarando arreglos en el heap

    CAT *Family = new CAT[500];

    • Por ejemplo, usted puede escribir:

      CAT *Family = new CAT[500];

      CAT *pCat = Family; //pCatapunta a Family[0]

      pCat->SetAge(10); // Establecer Family[0] a 10

      pCat++; // avanzar a Family[1]

      pCat->SetAge(20);// Establecer Family[1] a 20

    Informática II 2011/2


    Liberando memoria del heap

    Liberando memoria del heap

    • Para liberar toda la memoria reservada por un arreglo en el heap, será necesario usar el comando “delete [ ]” sobre el puntero que apunta a la primera dirección del arreglo.

      delete [ ] punteroRebano;

      /* Notese que se utiliza los operadores [ ], en caso de no utilizarlos, solo se liberará el primer elemento del arreglo, generando así fugas de memoria*/

    Informática II 2011/2


    Otorgando tama o de los arreglos en tiempo de ejecuci n

    Otorgando tamaño de los arreglos en tiempo de ejecución

    • Cuando se utilizan arreglos que se encuentren ubicados en el heap, será posible asignar su tamaño en tiempo de ejecución, otorgándole gran posibilidad de intercambio a los programas.

      Gato pGato = new Gato [vble];

      /* ¡Importante!, recuerde liberar la memoria cuando ya no se vaya a usar */

    Informática II 2011/2


    Clase string

    Clase string

    • Aunque muchas de las funciones heredadas de C pueden trabajar con los strings, éstas no implementan una solución orientada a objetos.

    • En las bibliotecas estándares de C++, es posible encontrar una clase para manipular este tipo de datos. Se denomina la clase “String”.

      Investigue al respecto.

    Informática II 2011/2


    Clase string1

    Clase string

    La clase string está definida en la cabecera string

    (#include <string>)

    <cstring.h>

    <string>

    <string.h>

    que contiene solo las funciones para trabajar con strings terminados en NULL - por ejemplo para trabajar con char cadena[45])

    La cual no contiene la definición de la clase string

    Si se incluye el módulo <iostream> no hace falta incluir <string>, porque la segunda está incluida en la primera. Incluir las dos no provoca error y mejora la legibilidad.

    Informática II 2011/2


    Clase string2

    Clase string

    • OperadoresFunciones miembroFunciones externas

    http://www.cplusplus.com/reference/string/string/

    Informática II 2011/2


    Listas enlazadas

    Listas enlazadas

    • Aunque los arreglos son excelentes contenedores y pueden albergar cualquier tipo de datos, tienen el inconveniente de ser de tamaño fijo.

    • Este problema puede arreglarse reasignando su tamaño dinámicamente en tiempo de ejecución; sin embargo, cuando haya que mover, liberar o reasignar memoria muchas veces, puede requerir muchos recursos del pc.

    Informática II 2011/2


    Listas enlazadas1

    Listas enlazadas

    • Las listas enlazadas son estructuras de datos que contienen pequeños contenedores diseñados para enlazarse unos a otros.

    • La idea de esta estructura, es que cada uno de los objetos conoce la ubicación del siguiente objeto en la cadena.

    Informática II 2011/2


    Listas enlazadas2

    Listas enlazadas

    • Cada contenedor de la lista se denomina “nodo”.

    • Al primer nodo de la lista se le denomina la “cabeza” de la lista, al último la “cola”.

    • Existen tres tipos fundamentales de listas:

      – Enlazados de manera sencilla

      – Doblemente enlazadas

      – Arboles

    Informática II 2011/2


    Listas enlazadas de manera sencilla

    Listas enlazadas de manera sencilla

    • Cada nodo apunta al siguiente en la lista, nunca en el sentido contrario. Si se desea conocer el valor de un nodo particular, es necesario recorrer toda la lista nodo por nodo desde su inicio.

    Informática II 2011/2


    Listas doblemente enlazadas

    Listas doblemente enlazadas

    • Son aquellas que permiten moverse tanto hacia el siguiente nodo como al anterior, pues en cada uno de ellos guarda dicha información.

    Informática II 2011/2


    Listas en rbol

    Listas en árbol

    • Permiten que cada nodo apunte a dos o más nodos.

    Informática II 2011/2


    Resumen1

    Resumen

    Informática II 2011/2


    Resumen2

    Resumen

    Informática II 2011/2


    Contenido8

    Contenido

    Funciones Avanzadas

    5

    Herencia

    6

    Arreglos

    7

    Polimorfismo

    8

    Informática II 2011/2


    Polimorfismo

    Polimorfismo

    tipos polimórficos, son aquellos tipos de datos que contienen al menos un elemento cuyo tipo no está especificado.

    Existen ocasiones en que se requiere que un objeto pueda heredar métodos o variables miembros de diferentes clases

    Relacionar un objeto de una clase derivada con un puntero de clase base en tiempo de ejecución.

    Reescribir funciones Virtuales en las clases derivadas

    Informática II 2011/2


    Polimorfismo1

    Polimorfismo

    • Existen ocasiones en que se requiere que un objeto pueda heredar métodos o variables miembros de diferentes clases.

    • Por ejemplo: ¿Que pasa si se tienen dos clases, clase Caballo y clase Pajaro, y se desea crear una nueva clase que tome lo mejor de cada uno de ellos para formar un pegaso?.

    Informática II 2011/2


    Herencia m ltiple

    Herencia Múltiple

    • Es posible crear una nueva clase a partir de más de una clase base. Esto es llamado herencia múltiple .

    class Derivada: public Base1, public Base2...{

    …..

    }

    class Pegaso: public Caballo, publicPajaro{

    …..

    }

    Pegaso

    Pájaro

    Caballo

    Cuando una clase derivada hereda de múltiples clases bases, el compilador asignará la memoria suficiente para alojar sus características y las de sus clases base.

    Informática II 2011/2


    Constructores en la herencia m ltiple

    Constructores en la herencia múltiple

    • En la etapa de inicialización de los constructores de la clase derivada , será posible declarar los constructores de la clase base que deberán ser llamados.

    • ¿Que pasa si una clase derivada de varias clases base, hereda un método que tiene la misma firma en todas ellas?

    Informática II 2011/2


    Constructores en la herencia m ltiple1

    Constructores en la herencia múltiple

    • Si se trata de llamar un método heredado de varias clases cuya firma sea igual, el compilador lanzará un error de compilación.

    • Existen dos alternativas para instanciar dichos métodos:

      • Accediendo explícitamente al método de la clase base que se desea.

      • Redefiniendo el método en la función derivada

    Informática II 2011/2


    Herencia de una clase base com n

    Herencia de una clase base común

    • Para que el compilador pueda compilar de manera adecuada, se deberá introducir explícitamente de cual clase base se tomarán dichos parámetros.

    • Ambigüedad:

      Intage = pPeg->GetAge();

    • Solución:

      Intage = pPeg->Horse:: GetAge();

      O redeclararla en la clase derivada:

      virtual intGetAge()const { return Horse::itsAge; }

    Informática II 2011/2


    Herencia de una clase base com n1

    Herencia de una clase base común

    • Cuando se hereda de clases que vengan de la misma línea de herencia, también existe el riesgo de caer en otro tipo de ambigüedad.

    • ¿De cual clase superior común debe heredar una clase derivada?

    Caballo

    Pájaro

    Pegaso

    Animal

    Animal

    Informática II 2011/2


    Herencia de una clase base com n2

    Herencia de una clase base común

    • class Horse : virtual public Animal

    • class Bird : virtual public Animal

    • class Pegasus : public Horse, public Bird

    Las clases bases heredadas virtualmente (animal) son inicializadas por sus clases derivadas que se encuentran más abajo en la jerarquía (pegasus).

    Por ejemplo la clase base Animal no es inicializada por Horse o Bird sino por Pegasus. Horse y Bird tendrán que inicializar Animal en sus constructores, pero estas inicializaciones serán ignoradas cuando un objeto Pegasus sea creado.

    Informática II 2011/2


    Herencia virtual

    Herencia virtual

    • Habrán ocasiones donde no se desee que una clase derivada tenga dos copias de la misma clase base compartida.

    • En C++ esto será posible declarando a la clase base como virtual.

    Caballo

    Pájaro

    Pegaso

    Animal

    Informática II 2011/2


    Problemas con la herencia m ltiple

    Problemas con la herencia múltiple

    • A pesar de que la herencia múltiple ofrece múltiples ventajas sobre la herencia simple, muchos desarrolladores son reacios a utilizarla, pues dicen que correr un debuger en estos sistemas es mucho mas complicado que en la herencia simple.

    Informática II 2011/2


    Tips con la herencia m ltiple

    Tips con la herencia múltiple

    Informática II 2011/2


    Mezclas y clases de capacidad

    Mezclas y clases de capacidad

    • Las mezclas es una solución intermedia de la herencia múltiple y la herencia sencilla.

    • Una clase de mezcla o capacidad, es una clase que adiciona funcionalidad sin agregar mayor o ningún dato adicional.

    Informática II 2011/2


    Tipos de datos abstractos tda

    Tipos de datos abstractos (TDA)

    • Un tipo de dato abstracto (abstract data type ADT) representa un concepto general, por lo tanto no es válido hacer una instancia de un ADT.

    • Por ejemplo si se crea un dato abstracto llamado “figura geométrica” no tendría sentido crear un objeto de dicha clase por ser muy general, pero esta serviría como modelo o bosquejo para crear nuevas clases más especificas como “circulo” o “cuadrado”.

    Informática II 2011/2


    Tipos de datos abstractos tda1

    Tipos de datos abstractos (TDA)

    • La idea de trabajar con clases abstractas es para agrupar en una clase común las capacidades que tendrán todas sus clases derivadas. Esto facilitará su uso para el usuario final de las clases.

    Informática II 2011/2


    Tipos de datos abstractos tda2

    Tipos de datos abstractos (TDA)

    • (TDA) – Funciones virtuales puras

    • C++ soporta la creación de clases abstractas por medio del uso de “funciones virtuales puras” que por definición NO podrán ser accedidas directamente.

    • //Declaración de funciones virtuales pura

      virtual voidfuncionVirtualPura() { } = 0;

    Informática II 2011/2


    Tipos de datos abstractos tda3

    Tipos de datos abstractos (TDA)

    • (TDA) – Funciones virtuales puras

    • Todas las funciones que sean declaradas como virtuales puras deberán ser redefinidas, o el compilador lanzará un error de compilación

    • Ninguna función virtual pura podrá ser accedida directamente desde la clase base.

    Informática II 2011/2


    Implementaci n de funciones virtuales puras

    Implementación de funciones virtuales puras

    • Aunque no sea posible instanciar directamente las funciones virtuales puras desde las clases abstractas, si será posible acceder a dichos métodos desde las clases derivadas.

    Informática II 2011/2


    Tips funciones virtuales puras

    Tips funciones virtuales puras

    Informática II 2011/2


    Jerarqu as complejas de abstracci n

    Jerarquías complejas de abstracción

    • Existen ocasiones donde se puede desear que una clase derivada de una clase abstracta, sea a su vez una clase abstracta, ya sea adicionando nuevos métodos virtuales puros o redefiniendo algunos de éstos.

    • La idea de trabajar con clases abstractas es para agrupar en una clase común las capacidades que tendrán todas sus clases derivadas. Esto facilitará su uso para el usuario de las clases.

    Informática II 2011/2


    Bibliograf a

    Bibliografía

    • man, ¡no dude en utilizarlo!!

    • Como Programar en C++ - Deithel & Deithel Ed. PRENTICE HALL

    • Sams Teach Yourself C++ in One Hour a Day, J. Liberty,S. Rao, B. Jones

      http://newdata.box.sk/bx/c/

    Informática II 2011/2


    Inform tica ii

    GRACIAS POR SU ATENCIÓN

    Informática II 2011/2


  • Login