POO - 4.3
susana.gonzalez
Created on November 29, 2023
Over 30 million people create interactive content in Genially.
Check out what others have designed:
THE MESOZOIC ERA
Presentation
ALL THE THINGS
Presentation
ASTL
Presentation
ENGLISH IRREGULAR VERBS
Presentation
VISUAL COMMUNICATION AND STORYTELLING
Presentation
GROWTH MINDSET
Presentation
BLENDED LEARNING
Presentation
Transcript
4.3 Variables Polimórficas
Info
4.3.1 Definición
Las variables polimórficas son aquellas variables que pueden referenciar más de un tipo de objeto, pudiendo mantener valores de distintos tipos en distintos momentos de ejecución. En un lenguaje débilmente tipado, todas las variables son potencialmente polimórficas y en un lenguaje fuertemente tipado la variable polimórfica es la materialización del principio de sustitución. Existen diversos tipos de variables polimórficas: · Variables polimórficas simples. · Variables polimórficas como receptoras de mensajes. · Downcasting o polimorfismo inverso. · Polimorfismo puro.
4.3.2 Uso y Aplicaciones
Interesante, ¿verdad? Ahora veremos ejemplos de uso de los tipos de variables polimórficas.
Polimorfismo puro: class Aplicacion(){ public: int getNumBarcosAplicacion(){ return numSub+numAcor+numDest+numPort;} bool crearColocarBarcos(){ b=new Barco*[numBarcos]; for (int x=0;x<numSub;x++) b[i]=new Submarino(); for (int x=numSub;x<numSub+numAcor;x++) b[i]=new Acorazado(); … for (int x=0;x<getNumBarcosAplicacion();x++) t.colocaBarco(*b[i]); //bool Tablero::colocarBarco(Barco &b) //espera un objeto de tipo barco, y recibe objetos de tipo //Acorazado, Submarino, etc. POLIMORFISMO PURO } private: Tablero t;
Variables polimórficas simples: MyVar *b[10]; //arreglo de punteros a MyVar que en realidad contiene punteros a las distintas clases derivadas.
Variables polimórficas como receptoras de mensajes: class Barco{ public: virtual int getNumPiezas()=0; void colocaPieza(Pieza &p, Coordenada); bool colocaBarco(){ Coordenada caleatoria; Direccion daleatoria; for (int x=0;x<this->getNumPiezas();x++){ // this apunta a objetos de clase derivada colocaPieza(piezas[x],caleat); caleat.incrementa(daleat); }} private: Pieza piezas[MAX_PIEZAS]; }
Downcasting o polimorfismo inverso:Child *c=dynamic_cast<Child *>(aParentptr); if (c!=0) {… //nulo si no es legal, no nulo si OK }
Ahora que conocemos la importancia del concepto de polimorfismo y su injerencia en las clases abstractas, debemos conocer el concepto de variable polimórfica para redondear el concepto completo de polimorfismo en todos sus niveles. Estos conceptos nos llevarán a profundizar en la aplicación de códigos más eficientes, independientemente del lenguaje de programación usado.