elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Simular herencia de clases ?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Simular herencia de clases ?  (Leído 4,718 veces)
arfgh

Desconectado Desconectado

Mensajes: 45


Ver Perfil
Simular herencia de clases ?
« en: 29 Julio 2013, 21:03 pm »

Hola

he leído por ahí que vb no proporciona herencia debido a que sus clases se basan en un modelo de interfaces y no de objetos. Sin embargo también he encontrado muchos ejemplos por ahí de como se 'simula' la herencia con vb.

por ejemplo:

http://vexpert.mvps.org/articles/SimHer.htm
http://www.elguille.info/VB/clases/herencia.htm

Mi pregunta es, por qué le llaman simular herencia cuando en realidad se consigue la citada herencia en los códigos que se muestran allí ?

A ver si alguien que controle de esto puede arrojar algo más de información acerca de estos detalles.

saludos


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Simular herencia de clases ?
« Respuesta #1 en: 31 Julio 2013, 17:36 pm »

Imagina que tienes una clase animal y que de ella heredan las clases perro y gato.

Con herencia, tu podrías manejar las instancias de perro y gato como si fuesen elementos genéricos de la clase animal. Incluso, teniendo objetos de la clase animal, podrías preguntarle a cada uno si pertenecen a perro o a gato. Todo esto se conoce como polimorfismo. Esto te permite incorporar código que pueda trabajar indistintamente con perros o gatos sin preocuparse de su tipo concreto.

Con la herencia simulada que te proponen ahí la herencia como tal no existe y, en consecuencia, el polimorfismo tampoco. La clase perro no tiene nada en común con la clase gato. No puedes implementar lógica o funciones comunes para utilizar ambas clases. Son, simplemente, clases independientes.

Lo único que ganas con esto es que puedes reutilizar código subdividiendo las clases en otras más pequeñas según las necesidades comunes... pero no es herencia.


En línea

Danyfirex


Desconectado Desconectado

Mensajes: 493


My Dear Mizuho


Ver Perfil
Re: Simular herencia de clases ?
« Respuesta #2 en: 31 Julio 2013, 17:37 pm »

creo que no has leído nada en las dos paginas que citaste. :S
En línea

arfgh

Desconectado Desconectado

Mensajes: 45


Ver Perfil
Re: Simular herencia de clases ?
« Respuesta #3 en: 31 Julio 2013, 21:24 pm »

si que lo he leído, pero no entiendo por qué dicen 'simular' cuando en realidad se logra un comportamiento idéntico o similar.
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Simular herencia de clases ?
« Respuesta #4 en: 1 Agosto 2013, 00:11 am »

si que lo he leído, pero no entiendo por qué dicen 'simular' cuando en realidad se logra un comportamiento idéntico o similar.

Efectivamente se dice simular porque el comportamiento es similar, no idéntico.
En línea

Danyfirex


Desconectado Desconectado

Mensajes: 493


My Dear Mizuho


Ver Perfil
Re: Simular herencia de clases ?
« Respuesta #5 en: 1 Agosto 2013, 00:26 am »

efectivamente como dice eferion.


@arfgh si te fijas al comienzo de la pagina del Guille dice:

--Pero a pesar de todo lo que se diga, aunque te lo pinten de color de rosa, lo cierto es que Visual Basic no tiene herencia... con eso ya te das cuenta que lo que vas a hacer es simular.

saludos
En línea

arfgh

Desconectado Desconectado

Mensajes: 45


Ver Perfil
Re: Simular herencia de clases ?
« Respuesta #6 en: 1 Agosto 2013, 01:27 am »

pues yo veo el comportamiento idéntico, o sea que señalad en dónde no lo és.
En línea

Danyfirex


Desconectado Desconectado

Mensajes: 493


My Dear Mizuho


Ver Perfil
Re: Simular herencia de clases ?
« Respuesta #7 en: 1 Agosto 2013, 01:40 am »



@arfgh Si digamos que el comportamiento se acerca, es muy similar.  pero según Microsoft:


Visual Basic 6.0 does not support implementation inheritance.

simplemente por eso se simula. así sea idéntica como dices se esta simulando.


saludos
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Simular herencia de clases ?
« Respuesta #8 en: 1 Agosto 2013, 07:12 am »

Mira, te pongo un ejemplo de herencia, en c++... ya que en vb esto que te voy a poner no se puede hacer.

Código
  1. class Animal
  2. {
  3.  public:
  4.    virtual void Nombre( )
  5.    {  std::cout << "Animal" << std::endl; }
  6. };
  7.  
  8. class Perro : public Animal
  9. {
  10.  public:
  11.    void Nombre( );
  12.    {  std::cout << "Perro" << std::endl; }
  13. };
  14.  
  15.  
  16. class Gato: public Animal
  17. {
  18.  public:
  19.    void Nombre( );
  20.    {  std::cout << "Gato" << std::endl; }
  21. };
  22.  
  23. void main ( )
  24. {
  25.  // Creo tres clases de forma dinamica y almaceno sus instancias en punteros de tipo de la clase base
  26.  // Esto en vb directamente no puedes hacerlo.
  27.  Animal* animal1 = new Animal( );
  28.  Animal* animal2 = new Perro( );
  29.  Animal* animal3 = new Gato( );
  30.  
  31.  // Saca por pantalla lo siguiente:
  32.  // Animal
  33.  // Perro
  34.  // Gato
  35.  animal1->Nombre( );
  36.  animal2->Nombre( );
  37.  animal3->Nombre( );
  38.  
  39.  // Le pregunto a las 3 instancias si son del tipo Perro
  40.  Perro* perro1 = dynamic_cast< Perro* >( animal1 ); // devuelve un puntero nulo, pues no es de tipo Perro.
  41.  Perro* perro2 = dynamic_cast< Perro* >( animal2 ); // devuelve un puntero valido.
  42.  Perro* perro3 = dynamic_cast< Perro* >( animal3 ); // devuelve un puntero nulo.
  43.  
  44.  // ... Podria hacer lo mismo con la clase Gato ...
  45.  
  46.  // ... Si por ejemplo gato heredase de perro, la instruccion siguiente devolveria un puntero valido
  47.  Perro* perro3 = dynamic_cast< Perro* >( animal3 );

Esto es herencia... y en vb no lo puedes hacer.
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Simular herencia de clases ?
« Respuesta #9 en: 1 Agosto 2013, 21:23 pm »

Depende de QUE tomes como conpecto de herencia, ya de que por si sola no te sirve nada...

La herencia debe ir en conjunto con el Polimorfismo y es ahí donde esta la "falla", solo se puede lograr herencia simple por interfaces (2º link) y tener algo de polimorfismo, o se puede hacer todo a mano y evitando errores pero perdés toda forma de hacer polimorfismo (1º link) (lo cual lo hace inutil)

Lo que no podes hacer es polimorfismo con herencia de clases CON CODIGO (que la clase base tenga codigo) ni herencia a más clases y a la vez tener el lujo de polimorfismo.
Intenta hacer algo así:
Animal
  -Insectos
    -Mosca
  -Mamiferos
    -Perro
    -Gato


Quizás Animal puede ser interfaz, pero que los demas sean clases que sean instanciables y se rompe la teoria...
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Herencia en php
PHP
Hadess_inf 2 6,047 Último mensaje 23 Octubre 2009, 21:24 pm
por HardieVon
Herencia
Java
alzehimer_cerebral 4 3,862 Último mensaje 21 Abril 2010, 02:26 am
por sapito169
Herencia y POO
Programación C/C++
Arobavx 0 2,281 Último mensaje 7 Noviembre 2010, 19:44 pm
por Arobavx
Herencia
Java
m@o_614 6 4,494 Último mensaje 20 Abril 2012, 00:46 am
por m@o_614
Una niña de 8 años descubre un 'lifehack' para simular un problema de Zoom y saltarse las clases virtuales
Noticias
El_Andaluz 3 2,846 Último mensaje 22 Febrero 2021, 18:33 pm
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines