Herencia y polimorfismo

15

Click here to load reader

description

Programación orientada a objetos, herencia y polimorfismo

Transcript of Herencia y polimorfismo

Page 1: Herencia y polimorfismo

HERENCIA Y POLIMORFISMO.

Page 2: Herencia y polimorfismo

Polimor f ismo

• Una de las características más importantes de la programación orientada a objetos es la capacidad de que diferentes objetos responden a órdenes similares de modo diferentes.

• Identificador de mensaje y operadores sobrecargados. El identificador de mensaje y operador invocan una operación específica sobre un objeto. Cada uno establece la selección del significado uniforme de la operación en particular que se desea realizar.

Page 3: Herencia y polimorfismo

• En términos generales, Polimor fismo se define como la calidad o estado de ser capaz de asumir formas diferentes.

• En la solución de un problema orientado a objetos, polimorfismo puede aplicarse a cualquier objetos en una operación, o función.

• (En la POO) el polimorfismo se refiere al hecho de que una misma operación puede tener diferente comportamiento en diferentes objetos. En otras palabras, diferentes objetos reaccionan al mismo mensaje de manera diferente.

Polimorfismo

Page 4: Herencia y polimorfismo

Polimor fismo(Ejemplo Sobrecarga)

class complejo //Nombre de la clase

{

public :

complejo( double = 0.0, double = 0.0 ); //Constructor

complejo operator + ( const complejo & ) const; //Sobrecarga

private:

double real, imaginario; };

complejo::complejo( double a, double b ) // Constructor de la clase

{ real = a; imaginario = b; }

complejo complejo::operator + (const complejo &a) const

{ complejo c; //Define un objeto complejo

c.real = real + a.real; //Define de la operación llevada a cabo por el operador

c.imaginario = imaginario+a.imaginario;

return c; //Retorno del valor adquirido }

La Sobrecarga De Operadores Es Un Ejemplo Muy Claro de Polimorfismo.

Donde se sobrecarga el operador es donde se aplica el polimorfismo.

Page 5: Herencia y polimorfismo

• En términos generales, La herencia es el acto de adquirir una posesión, condición, o característica de generaciones pasadas.

• En la solución de un problema orientado a objetos un tipo de objeto hereda propiedades que caracterizan otro tipo de objeto.

• Las propiedades de los objetos son dadas por la descripción de la clase, esto implica una jerarquía de clases, donde una clase es una subclase de otra.

• Los objetos que son los instancias de las subclases tienen propiedades dadas dentro de la descripción de la subclase así como también propiedades heredadas dadas dentro de la clase padre y todas las clases antecesoras.

Herencia

Page 6: Herencia y polimorfismo

De la que se hereda

La que hereda

Superclase Subclase

Clase Padre Clase hijo

Clase Base Clase Derivada• La herencia se apoya en el significado de ese concepto en la vida

diaria. • Así, las clases básicas (base class) o fundamentales se dividen en

subclases (derived class).

Terminología

Page 7: Herencia y polimorfismo

• Una clase utilizada para derivar nuevas clases se conoce como clase base (padre, ascendiente), y una clase creada de otra clase se llama clase derivada (hija, descendiente, subclase).

• En un lenguaje Orientado a Objetos la herencia se manifiesta con la creación de un tipo definido por el usuario, que puede heredar las características de otra clase ya existente o derivar las suyas a otra nueva clase.

• Cuando se hereda, las clases derivadas reciben las características (estructuras de datos y funciones) de la clase original , a las que se pueden añadir nuevas características o modificar las características heredadas.

• La herencia se aplica para extender y reutilizar el código existente:• Los objetos se pueden construir de modo incremental a partir de

otros objetos y pueden compartir código y estructuras de datos • Los algoritmos generales se pueden escribir de modo que se pueden

reutilizar para nuevos tipos de objetos, incluso después que los algoritmos originales se han compilado.

Conceptualización

Page 8: Herencia y polimorfismo

• Es la propiedad que permite a los objetos construirse a partir de otros objetos. Este principio consiste en que cada clase puede dividirse en subclases.

• Las instancias heredan (usualmente) todas, y únicamente, las características de las clases a las que pertenecen, pero, también, es posible, en un sistema orientado a objetos, que se permita que las clases hereden características de superclases más generales.

• En ese caso, las características heredadas pueden ser ignoradas (overriden) y se pueden agregar características adicionales para tratar excepciones.

Herencia

Page 9: Herencia y polimorfismo

• De esta forma la herencia provee la potencialidad para construir soluciones nuevas a problemas agregando el incremento de la capacidad a soluciones existentes del problema mediante subclases.• Las instancias de una subclase representan una especialización de

instancias descritas por una clase padre.• La instancia de la subclase tiene todos los atributos dados por la

clase padre, más los atributos adicionales o agregados de la subclase.

• La instancia de la subclase responde al mismo conjunto de mensajes dados en la clase padre, los mensajes adicionales se dan en la descripción de la subclase.

Herencia

Page 10: Herencia y polimorfismo

• Se realiza tomando una clase existente y derivando nuevas clases de ella.

• La clase derivada hereda las estructuras de datos y funciones de la clase original, Además, se pueden añadir nuevos miembros a las clases derivadas y los miembros heredados pueden ser modificados.

• Una clase utilizada para derivar nuevas clases se denomina clase base (padre, superclase, ascendiente).

• Una clase creada de otra clase se denomina clase derivada o subclase. A su vez una clase derivada puede ser utilizada como una clase base para derivar más clases.

• Por consiguiente, se pueden construir jerarquías de clases, en las que cada clase sirve como padre o raíz de una nueva clase.

Herencia Simple

Page 11: Herencia y polimorfismo

Ejemplo De Herencia Simple

class Barco {

protected: char* nombre; float peso;

publ ic: //Constructores y demás funciones básicas de barco };

c lass Carguero: public Barco // Esta es la manera de especificar que hereda de Barco.

{

private: float carga; //faltaría el resto de cosas };

c lass Acorazado: publ ic Barco

{

private: int numeroArmas; int Soldados;

// El resto de cosas };

Page 12: Herencia y polimorfismo

Herencia Múltiple

Es aquella en la cual una clase derivada tiene más de una clase base. Aunque el concepto de herencia múltiple es muy útil, el diseño de clases suele ser más complejo, y en ocasiones es preferible realizar la aplicación con herencia múltiple mediante emulación de herencia simple.

Page 13: Herencia y polimorfismo

Ejemplo de Herencia Múltiple

Si una clase recibe propiedades de más de una clase base, la herencia es múltiple.

Características ACaracterísticas B

Características ACaracterísticas BCaracterísticas CCaracterísticas DCaracterísticas E

Características ACaracterísticas BCaracterísticas C

Page 14: Herencia y polimorfismo

Funciones vir tual

• Diseñar e implementar sistemas que sean extensible más fácilmente

• Programas escritos para procesar todos los objetos de clases existentes genéricamente en una jerarquía

Page 15: Herencia y polimorfismo

Suponga un conjunto de superficies tales como Circle, Triangle, etc.

Cada superficie tiene su propia función para dibujarse, pero es posible llamarlas a ella invocando solamente la función draw de la clase base Shape, el compilador determina dinámicamente (en tiempo de ejecución) a cual llamar.

En la clase base se declara a draw como virtual.

Se sobrescribe draw en cada clase derivada,

Declaración virtual

La palabra reservada virtual antes del prototipo de la función:

vir tual void draw() const;

Un puntero de la clase base a un objeto de la clase derivada, llamará la función draw correctamente,

Shape->draw();

Funciones virtual