Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MONOGRAFA
29 DE JULIO DE 2015
SANGOLQU
Contenido
1. FUNCIONES Y CLASES VIRTUALES...................................................................................... 3
2. CLASES ABSTRACTAS ............................................................................................................. 4
Reglas de uso: ................................................................................................................................. 4
Restricciones de acceso en C++ ...................................................................................................... 5
3. POLIMORFISMO......................................................................................................................... 5
Clasificacin .................................................................................................................................... 6
Diferencias entre polimorfismo y sobrecarga ............................................................................... 6
CONCLUCIONES ............................................................................................................................ 14
BIBLIOGRAFA............................................................................................................................... 14
int main() {
Wind flute;
tune(flute); // Upcasting
} ///:~
2. CLASES ABSTRACTAS
Una clase que declara la existencia de mtodos pero no la implementacin de dichos
mtodos (o sea, las llaves { } y las sentencias entre ellas), se considera una clase abstracta.
Una clase abstracta puede contener mtodos no-abstractos pero al menos uno de los
mtodos debe ser declarado abstracto.
Para declarar una clase o un metodo como abstractos, se utiliza la palabra reservada
abstract.
Una clase abstracta no se puede instanciar pero si se puede heredar y las clases hijas sern
las encargadas de agregar la funcionalidad a los mtodos abstractos. Si no lo hacen as, las
clases hijas deben ser tambin abstractas.
Reglas de uso:
Una clase abstracta solo puede ser usada como clase base para otras clases,
pero no puede ser instanciada para crear un objeto.
Una clase abstracta no puede ser utilizada como argumento o como retorno de una
funcin.
Si puede declararse punteros-a-clase abstracta.
Se permiten referencias-a-clase abstracta, suponiendo que el objeto temporal no es
necesario en la inicializacin.
Las clases abstractas actan como expresiones de conceptos generales de los que pueden
derivarse clases ms concretas. No se puede crear un objeto de un tipo de clase abstracta,
aunque se pueden utilizar punteros y referencias a los tipos de clase abstracta.
Una clase que contiene al menos una funcin pura virtual se considera una clase
abstracta. Las clases derivadas de la clase abstracta deben implementar la funcin virtual
pura o deben ser tambin clases abstractas.
4
Una funcin virtual se declara como "pura" mediante la sintaxis de pure-specifier (descrita
en Implementacin de protocolo de clase).
Abstraccin:
Es la ocultacin de detalles irrelevantes o que no se desean mostrar. Podemos distinguir en
una clase dos aspectos desde el punto de vista de la abstraccin:
Resumiendo: nos interesa saber qu nos ofrece un objeto, pero no cmo lo lleva a cabo.
Restricciones de acceso en C++
En C++ se puede especificar el acceso a los miembros de una clase utilizando los siguientes
especificadores de acceso:
3. POLIMORFISMO
El Polimorfismo (implementado en C++ con funciones virtuales) es la tercera
caracterstica esencial de un lenguaje orientado a objetos, despus de la abstraccin de
datos y la herencia.
De hecho, nos provee de otra dimensin para la separacin entre interfaz y la
implementacin, desacoplando el qu del cmo. El Polimorfismo permite mejorar la
organizacin del cdigo y su legibilidad as como la creacin de programas extensibles que
pueden "crecer" no slo durante el desarrollo del proyecto, si no tambin cuando se deseen
nuevas caractersticas.
La encapsulacin crea nuevos tipos de datos combinando caractersticas y
comportamientos. El control de acceso separa la interfaz de la implementacin haciendo
privados (private) los detalles. Estos tipos de organizacin son fcilmente entendibles por
5
cualquiera que venga de la programacin procedimental. Pero las funciones virtuales tratan
de desunir en trminos de tipos. En el Captulo 14, usted vio como la herencia permita
tratar a un objeto como su propio tipo o como a su tipo base. Esta habilidad es bsica
debido a que permite a diferentes tipos (derivados del mismo tipo base) ser tratados como si
fueran un nico tipo, y un nico trozo de cdigo es capaz de trabajar indistintamente con
todos. Las funciones virtuales permiten a un tipo expresar sus diferencias con respecto a
otro similar si ambos han sido derivados del mismo tipo base. Esta distincin se consigue
modificando las conductas de las funciones a las que se puede llamar a travs de la clase
base.
Clasificacin
Se puede clasificar el polimorfismo en dos grandes clases:
El polimorfismo, suele ser bastante ventajoso aplicado desde las interfaces, ya que
permite crear nuevos tipos sin necesidad de tocar las clases ya existentes
(imaginemos que deseamos aadir una clase Multiplicar), basta con recompilar todo
el cdigo que incluye los nuevos tipos aadidos. Si se hubiera recurrido a la
sobrecarga durante el diseo exigira retocar la clase anteriormente creada al aadir
la nueva operacin Multiplicar, lo que adems podra suponer revisar todo el cdigo
donde se instancia a la clase.
La sobrecarga se da siempre dentro de una sola clase, mientras que el polimorfismo
se da entre clases distintas.
Un mtodo est sobrecargado si dentro de una clase existen dos o
ms declaraciones de dicho mtodo con el mismo nombre pero con parmetros
distintos, por lo que no hay que confundirlo con polimorfismo.
En definitiva: La sobrecarga se resuelve en tiempo de compilacin utilizando los
nombres de los mtodos y los tipos de sus parmetros; el polimorfismo se resuelve
en tiempo de ejecucin del programa, esto es, mientras se ejecuta, en funcin de que
clase pertenece un objeto.
Ejercicio
Implementacn de un programa cuya jerarqua sea al menos de ocho clases y que use
polimorfismo en lenguaje C++.
#include"circulo.h"
#include"cuadrado.h"
#include"rectangulo.h"
#include"triangulo.h"
#include"trapecio.h"
main()
{
Una_dimension obj5;
doble_dimension obj6;
triple_dimension obj7;
circulo obj;
cuadrado obj2;
Una_dimension *obj1=&obj;
Una_dimension *obj3=&obj2;
obj1->mostrar();
obj3->mostrar();
rectangulo obj4;
doble_dimension *obj8=&obj4;
obj8->mostrar();
getch();
triangulo obj9;
trapecio obj11;
doble_dimension *obj10=&obj9;
7
doble_dimension *obj12=&obj11;
obj10->mostrar();
obj12->mostrar();
}
#ifndef CIRCULO_H
#define CIRCULO_H
#include <Una_dimension.h>
#endif // CIRCULO_H
#ifndef CUADRADO_H
#define CUADRADO_H
#include <Una_dimension.h>
{
public:
cuadrado();
virtual ~cuadrado();
double getPerimetro();
double getSuperficie();
void mostrar();
protected:
private:
};
#endif // CUADRADO_H
#ifndef DOBLE_DIMENSION_H
#define DOBLE_DIMENSION_H
#include <Una_dimension.h>
private:
};
#endif // DOBLE_DIMENSION_H
#ifndef RECTANGULO_H
#define RECTANGULO_H
#include<doble_dimension.h>
#endif // RECTANGULO_H
#ifndef TRAPECIO_H
#define TRAPECIO_H
#include<triple_dimension.h>
{
public:
trapecio();
virtual ~trapecio();
double getPerimetro();
double getSuperficie();
double lado();
void mostrar();
protected:
private:
};
#endif // TRAPECIO_H
#ifndef TRIANGULO_H
#define TRIANGULO_H
#include<triple_dimension.h>
private:
};
#endif // TRIANGULO_H
#ifndef TRIPLE_DIMENSION_H
#define TRIPLE_DIMENSION_H
#include<doble_dimension.h>
#include<math.h>
class triple_dimension:public doble_dimension
{
public:
triple_dimension();
virtual ~triple_dimension();
double getDimension3();
void setDimension3(double dimension);
protected:
double dimension3;
private:
};
#endif // TRIPLE_DIMENSION_H
#ifndef UNA_DIMENSION_H
#define UNA_DIMENSION_H
#include<iostream>
#include<conio.h>
using namespace std;
12
class Una_dimension
{
public:
Una_dimension();
virtual ~Una_dimension();
double getDimension1();
void setDimension1(double dimension);
double dimension1;
virtual void mostrar();
protected:
private:
};
Evaluacin de resultados
13
CONCLUCIONES
Las funciones virtuales se caracterizan por aadir una mayor cantidad de trabajo
computacional y que, por tanto, es recomendable utilizar las prestaciones del polimorfismo,
esto es, poner la palabra clave virtual a una funcin, slo cuando estemos seguros de que
esa funcin va a ser redefinida.
Tampoco se consume mucho tiempo y se sobrecargue todo en exceso pero suele ser una
prctica comn entre los que comienzan a trabajar ms o menos en serio con el C++
utilizar prestaciones de la POO cuando no son necesarias.
El polimorfismo indica que una variable pasada esperada puede adoptar mltiples formas.
BIBLIOGRAFA
o
o
o
http://profesores.fi-b.unam.mx/carlos/java/java_basico3_5.html
http://arco.esi.uclm.es/~david.villa/pensar_en_C++/vol1/ch15s04.html
http://c.conclase.net/curso/?cap=037
14