Foros del Web » Programación para mayores de 30 ;) » Programación General »

Diferencia entre Polimorfismo y Sobrecarga

Estas en el tema de Diferencia entre Polimorfismo y Sobrecarga en el foro de Programación General en Foros del Web. Hola! ¿Alguien me podría explicar exactamente qué diferencia existe entre Polimorfismo y Sobrecarga ? He buscado mucho pero no acabo de aclararme. En un tema ...
  #1 (permalink)  
Antiguo 18/11/2007, 07:49
Avatar de Nam
Nam
 
Fecha de Ingreso: mayo-2007
Mensajes: 6
Antigüedad: 16 años, 11 meses
Puntos: 0
Pregunta Diferencia entre Polimorfismo y Sobrecarga

Hola!

¿Alguien me podría explicar exactamente qué diferencia existe entre Polimorfismo y Sobrecarga? He buscado mucho pero no acabo de aclararme. En un tema de este foro llamado Conceptos de Programación orientada a objetos, con la respuesta de SunDarK ya me quedó más claro el concepto de polimorfismo, ¿pero de qué se diferencia de la sobrecarga?

Espero que alguien me pueda explicar con sus palabras la diferencia porque lo que encuentro por Internet me lía aún más Si es con el ejemplo de ese tema mejor Sino con algún código en Pascal

Saludos
  #2 (permalink)  
Antiguo 18/11/2007, 13:22
Avatar de Nam
Nam
 
Fecha de Ingreso: mayo-2007
Mensajes: 6
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Diferencia entre Polimorfismo y Sobrecarga

Hola kakarotv5, muchas gracias por tu respuesta

Alguna cosas de los códigos no las he dado pero más o menos entiendo qué hacen. Pero sigo sin tener muy clara la principal diferencia. Necesito que me lo expliquen a nivel básico


Por lo que me has puesto, entiendo esto:

Sobrecarga: métodos con el mismo nombre pero diferente número o tipo de parámetros. En tu ejemplo, el método Multiplicar tiene el mismo nombre pero el compilador sabe a quién pertenece cada uno porque los parámetros son de distinto tipo, ¿cierto?


Polimorfismo: métodos con el mismo nombre pero según qué objeto lo llame ejecuta un código o otro. Ejemplo del método Dibujar:

Si lo llama el objeto cPunto se ejecuta esto:
Cita:
Procedure cPunto.Dibujar(Canvas: tCanvas);
begin
Canvas.TextOut(X, Y,'.')
end;

Si lo llama el objeto cCilindro se ejecuta esto:
Cita:
procedure cCilindro.Dibujar{Draw}(Canvas: tCanvas);
begin
Canvas.Ellipse(getX - getRadio, getY - Altura - getRadio, getX + getRadio, getY - altura + getRadio);
Canvas.Rectangle(getX - getRadio, getY-Altura, getX+getRadio, getY);
Canvas.Ellipse(getX - getRadio, getY - getRadio, getX + getRadio, getY + getRadio);
end;

Si lo llama el objeto cCirculo se ejecuta esto:
Cita:
Procedure cCirculo.Dibujar{Pintar}(Canvas: tCanvas);
begin
Canvas.Ellipse(getX- Radio, getY - Radio, getX + Radio, getY + Radio);
end;



¿Sería así o me estoy liando?
  #3 (permalink)  
Antiguo 18/11/2007, 19:25
Avatar de Nam
Nam
 
Fecha de Ingreso: mayo-2007
Mensajes: 6
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Diferencia entre Polimorfismo y Sobrecarga

Cita:
Iniciado por kakarotv5 Ver Mensaje
Sólo comentarte que hay un pequeño matiz.

Eso que dices se cumple si hemos puesto la clausula virtual en el método en cuestión.

Si no la hemos puesto se ejecutará el método de la clase del tipo del objeto aunque hayas hecho una asignación polimorfa.
Cuando pongo la cláusula virtual, ¿debo ponérsela al método tanto de la superclase (padre, ascendiente) como de la subclase (hijo, descendiente)? Es que veo que pusiste override y yo eso nunca lo he visto

¿Podrías explicarme además, cuándo debo poner la cláusula abstract? He visto que se pone después de virtual en algunos casos y no sé para qué se emplea

Muchas gracias por tu atención
  #4 (permalink)  
Antiguo 19/11/2007, 10:20
Avatar de Nam
Nam
 
Fecha de Ingreso: mayo-2007
Mensajes: 6
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Diferencia entre Polimorfismo y Sobrecarga

Hola kakarotv5

Gracias ya entiendo todo mejor. Quería preguntarte una última duda. He leído que no debe confundirse encapsulación con ocultamiento, ¿podrías decirme qué diferencia hay?

No sabía nada de lo del karma, por supuesto que te agradezco, sólo pulso en este símbolo y le doy a Apruebo, ¿no?
  #5 (permalink)  
Antiguo 19/11/2007, 15:31
Avatar de Nam
Nam
 
Fecha de Ingreso: mayo-2007
Mensajes: 6
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Diferencia entre Polimorfismo y Sobrecarga

Cita:
Iniciado por kakarotv5 Ver Mensaje
Ocultamiento de la información o encapsulación de la información: hace referencia a la declararación de métodos y atributos como parte privada de una clase, al ser privado no se puede acceder directamente a ellos desde otras clases.
¿Y los métodos públicos no están encapsulados entonces?

Muchas gracias Ya hice lo del karma porque me estás ayudando mucho a entender la OOP
  #6 (permalink)  
Antiguo 20/11/2007, 14:11
Avatar de Nam
Nam
 
Fecha de Ingreso: mayo-2007
Mensajes: 6
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Diferencia entre Polimorfismo y Sobrecarga

Muchísimas gracias, ya me quedó todo claro

Sí, hice esos pasos para el karma y además si intento hacerlo de nuevo me sale lo siguiente:



Habrá que contactar con algún moderador Si te sigue sin aparecer mándame un MP e intento de nuevo

Gracias por tu ayuda

PD: Soy chica


** Tema Solucionado **


Saludos
  #7 (permalink)  
Antiguo 20/11/2007, 15:46
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Re: Diferencia entre Polimorfismo y Sobrecarga

Cita:
Iniciado por Nam
No sabía nada de lo del karma, por supuesto que te agradezco, sólo pulso en este símbolo y le doy a Apruebo, ¿no?
Aqui te paso la info

http://www.forosdelweb.com/f74/karma...el-web-526095/

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #8 (permalink)  
Antiguo 18/05/2010, 11:00
Avatar de initiald  
Fecha de Ingreso: diciembre-2008
Ubicación: Lima
Mensajes: 14
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Diferencia entre Polimorfismo y Sobrecarga

Hola bueno según lo que aprendí en si la sobrecarga es un tipo de polimorfismo mas no algo diferente, existen diferentes tipo de clasificación sobre polimorfismo pero las que creo que son mas generales son estos.

* Polimorfismo de sobrecarga
* Polimorfismo paramétrico (también llamado polimorfismo de plantillas)
* Polimorfismo de inclusión (también llamado redefinición o subtipado)

Cita:
Polimorfismo de sobrecarga

El polimorfismo de sobrecarga ocurre cuando las funciones del mismo nombre existen, con funcionalidad similar, en clases que son completamente independientes una de otra (éstas no tienen que ser clases secundarias de la clase objeto). Por ejemplo, la clase complex, la clase image y la clase link pueden todas tener la función "display". Esto significa que no necesitamos preocuparnos sobre el tipo de objeto con el que estamos trabajando si todo lo que deseamos es verlo en la pantalla.

Por lo tanto, el polimorfismo de sobrecarga nos permite definir operadores cuyos comportamientos varían de acuerdo a los parámetros que se les aplican. Así es posible, por ejemplo, agregar el operador + y hacer que se comporte de manera distinta cuando está haciendo referencia a una operación entre dos números enteros (suma) o bien cuando se encuentra entre dos cadenas de caracteres (concatenación).

Polimorfismo paramétrico

El polimorfismo paramétrico es la capacidad para definir varias funciones utilizando el mismo nombre, pero usando parámetros diferentes (nombre y/o tipo). El polimorfismo paramétrico selecciona automáticamente el método correcto a aplicar en función del tipo de datos pasados en el parámetro.

Por lo tanto, podemos por ejemplo, definir varios métodos homónimos de addition() efectuando una suma de valores.

* El método int addition(int,int) devolvería la suma de dos números enteros.
* float addition(float, float) devolvería la suma de dos flotantes.
* char addition(char, char) daría por resultado la suma de dos caracteres definidos por el autor.
* etc.

Una signature es el nombre y tipo (estático) que se da a los argumentos de una función. Por esto, una firma de método determina qué elemento se va a llamar.

Polimorfismo de subtipado

La habilidad para redefinir un método en clases que se hereda de una clase base se llama especialización. Por lo tanto, se puede llamar un método de objeto sin tener que conocer su tipo intrínseco: esto es polimorfismo de subtipado. Permite no tomar en cuenta detalles de las clases especializadas de una familia de objetos, enmascarándolos con una interfaz común (siendo esta la clase básica).

Imagine un juego de ajedrez con los objetos rey, reina, alfil, caballo, torre y peón, cada uno heredando el objeto pieza.
El método movimiento podría, usando polimorfismo de subtipado, hacer el movimiento correspondiente de acuerdo a la clase objeto que se llama. Esto permite al programa realizar el movimiento.de_pieza sin tener que verse conectado con cada tipo de pieza en particular.
Fuente: http://es.kioskea.net/contents/poo/polymorp.php3

Otras fuentes de informacion:
http://object-oriented-prog.blogspot.com/2008/07/polimorfismo.html

Última edición por initiald; 18/05/2010 a las 11:28
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:05.