Saber como se llama la clase que hereda.

10/01/2006 - 18:20 por Alvaro | Informe spam
Hola a todos;

Tengo una confusión,

Teniendo la clases A, B y C.

B y C heredan de A.

¿ Como hago para que A sepa que su istancia es de tipo B o C ?

De antemano Gracias...

Alvaro.

Preguntas similare

Leer las respuestas

#1 Octavio Hernandez
10/01/2006 - 22:27 | Informe spam
Alvaro,

En principio, la respuesta a tu pregunta es la que te dice Alberto.
Ahora bien, ten en cuenta que normalmente en la POO esta pregunta por el
tipo real del objeto (seguramente como parte de una toma de decisión para
actuar de una manera u otra) es considerada una MUY MALA práctica, ya que
cuando haya que crear una nueva clase D que herede de A habrá que ir a
"tocar" el código de la clase A para incluir ese nuevo caso. Eso es una
limitante MUY seria de cara al desarrollo de librerías, piensa que sólo
podrá crear clases descendientes de A aquel que posea el código fuente de
A...
El mecanismo que ofrece la POO para evitar esa necesidad son los METODOS
VIRTUALES y el POLIMORFISMO. Básicamente la idea es crear una implementación
básica en la clase base (o declararla abstracta si no es posible definir una
lógica) y luego redefinir el método virtual en las clases derivadas. Por
ejemplo:

public abstract class Figura
{
public abstract void Dibujar(); // abstract implica virtual
// más cosas...
}

public class Triángulo
{
public override void Dibujar() // redefinición
{
// dibujar un triángulo
}
// más cosas...
}

public class Rectángulo
{
public override void Dibujar() // redefinición
{
// dibujar un rectángulo
}
// más cosas...
}

Cuando tengas una variable Figura f = new Triángulo(); y hagas f.Dibujar(),
se llamará a la función Dibujar() de la clase Triángulo, porque aunque la
variable A es estáticamente de tipo Figura, dinámicamente (en tiempo de
ejecución) es de tipo Triángulo. Eso es polimorfismo.

Fíjate cómo aquí ya cuando haya que definir una nueva clase, p.e. Círculo,
no habrá que tocar el código de Figura.

No conozco los detalles de tu diseño de clases, pero probablemente se
beneficiaría de la introducción de uno o más métodos virtuales.

Salu2 - Octavio

"Alvaro" escribió en el mensaje
news:%
Hola a todos;

Tengo una confusión,

Teniendo la clases A, B y C.

B y C heredan de A.

¿ Como hago para que A sepa que su istancia es de tipo B o C ?

De antemano Gracias...

Alvaro.
Respuesta Responder a este mensaje
#2 Alvaro
10/01/2006 - 22:57 | Informe spam
Gracias Octavio...

Octavio Hernandez wrote:
Alvaro,

En principio, la respuesta a tu pregunta es la que te dice Alberto.
Ahora bien, ten en cuenta que normalmente en la POO esta pregunta por el
tipo real del objeto (seguramente como parte de una toma de decisión para
actuar de una manera u otra) es considerada una MUY MALA práctica, ya que
cuando haya que crear una nueva clase D que herede de A habrá que ir a
"tocar" el código de la clase A para incluir ese nuevo caso. Eso es una
limitante MUY seria de cara al desarrollo de librerías, piensa que sólo
podrá crear clases descendientes de A aquel que posea el código fuente de
A...
El mecanismo que ofrece la POO para evitar esa necesidad son los METODOS
VIRTUALES y el POLIMORFISMO. Básicamente la idea es crear una implementación
básica en la clase base (o declararla abstracta si no es posible definir una
lógica) y luego redefinir el método virtual en las clases derivadas. Por
ejemplo:

public abstract class Figura
{
public abstract void Dibujar(); // abstract implica virtual
// más cosas...
}

public class Triángulo
{
public override void Dibujar() // redefinición
{
// dibujar un triángulo
}
// más cosas...
}

public class Rectángulo
{
public override void Dibujar() // redefinición
{
// dibujar un rectángulo
}
// más cosas...
}

Cuando tengas una variable Figura f = new Triángulo(); y hagas f.Dibujar(),
se llamará a la función Dibujar() de la clase Triángulo, porque aunque la
variable A es estáticamente de tipo Figura, dinámicamente (en tiempo de
ejecución) es de tipo Triángulo. Eso es polimorfismo.

Fíjate cómo aquí ya cuando haya que definir una nueva clase, p.e. Círculo,
no habrá que tocar el código de Figura.

No conozco los detalles de tu diseño de clases, pero probablemente se
beneficiaría de la introducción de uno o más métodos virtuales.

Salu2 - Octavio

"Alvaro" escribió en el mensaje
news:%

Hola a todos;

Tengo una confusión,

Teniendo la clases A, B y C.

B y C heredan de A.

¿ Como hago para que A sepa que su istancia es de tipo B o C ?

De antemano Gracias...

Alvaro.





Respuesta Responder a este mensaje
#3 Alvaro
10/01/2006 - 22:58 | Informe spam
Gracias...

A.Poblacion wrote:
"Alvaro" wrote in message
news:%

Tengo una confusión,

Teniendo la clases A, B y C.

B y C heredan de A.

¿ Como hago para que A sepa que su istancia es de tipo B o C ?




Puedes utilizar this.GetType() dentro de A, y te contestará con el tipo
de B o C según proceda.



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida