2. Polimorfismo
• 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.
3. • En términos generales, Polimorfismo 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
4. Polimorfismo
(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.
5. • 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
6. 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
7. • 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
8. • 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
9. • 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
10. • 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
11. Ejemplo De Herencia Simple
class Barco {
protected: char* nombre; float peso;
public: //Constructores y demás funciones básicas de barco };
class Carguero: public Barco // Esta es la manera de especificar que hereda de Barco.
{
private: float carga; //faltaría el resto de cosas };
class Acorazado: public Barco
{
private: int numeroArmas; int Soldados;
// El resto de cosas };
12. 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.
13. Ejemplo de Herencia Múltiple
Si una clase recibe propiedades de más de una clase base, la
herencia es múltiple.
Características A
Características B
Características A
Características B
Características C
Características D
Características E
Características A
Características B
Características C
14. Funciones virtual
• 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
15. 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:
virtual 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