Dudas con heredar

Iniciado por cyberserver, 20 Diciembre 2009, 21:31 PM

0 Miembros y 1 Visitante están viendo este tema.

cyberserver

Hola amigos, estoy confundido con heredar clases!!!

Ley en internet que heredar es para reutilizar codigo y poder usar los metodos de la clase!!! pero que no es lo mismo que si tengo mi clase junta la instancio y utilizo sus metodos???

Que chiste tiene heredar el codigo si puedo llamar la clase instanciandola y usando sus metodos (reutilizandolo)






sapito169

supongamos que heredas de jframe para crear una ventana de mantenimiento de personal y para aserla usas 400 lineas de codigo te pareseria que cadaves que quieras mostrar la ventana de mantenimiento vuelvas a escribir las 400 lineas de codigo  :laugh:

egyware

No me quedo clara la pregunta ni la respuesta.
Pero creo que quieres saber que es la herencia y para que sirve.
Ejemplo
Tienes una clase Punto
Código (java) [Seleccionar]

public class Punto{
float x;
float y;
public Punto(float x,float y){
this.x = x;
this.y = y;
}
public float getNorma(){
return Math.sqrt(x*x+y*y);
}
}

Ahora quieres crear un circulo para eso necistas un punto y el radio, lo haremos sin herencia
Código (java) [Seleccionar]

public class Circulo{
float x;
float y;
float r;
public Circulo(float x,float y,float r){
this.x = x;
this.y = y;
this.r = r;
}
public float getNorma(){
return Math.sqrt(x*x+y*y);
}
public float getArea(){
  return Math.PI*r*r;
}
}

Ves tuve que copiar todo y agregar esa nueva función
ahora con herencia
Código (java) [Seleccionar]

public class Circulo extends Punto{
float r;
public Circulo(float x,float y,float r){
super(x,y);
this.r = r;
}
public float getArea(){
  return Math.PI*r*r;
}
}

Ves como me ahorre codigo? y considerar que circulo hereda todas las funciones de Punto (en este caso la norma del punto) y agregamos una función nueva.
Hay que recordar que podemos sobre escribir funciones pero no explicare aqui.
Saludos

mayofunk

En esto de la programación orientada a objetos uno además de programar, tiene que pensar con dicho enfoque.

Uno va construyendo elementos a base de otros, ejemplo, un auto es un transporte, tal como lo es un camion o un avion, osea podemos decir que auto, avion, camion, son clases que heredan de una clase transporte.
La gracia de esto, es que la clase transporte tiene propiedades o metodos que son comunes a todas las clases hijas, y en estas hay metodos y propiedades exclusivas de las mismas.

Más pragmaticamente hablando, sin ir más lejos la clase String hereda de Object (en verdad todas las clases de java heredan de Object).
Un Object se puede instanciar, borrar, etc,, esto quiere decir que todas las clases que heredan de Object, pueden ser instanciadas, borradas, copiadas,etc...

Salu2.


Ragnarok

Lo más sencillo es que te cojas un libro con patrones de diseño y los apliques, después de un tiempo tendrás la aplicación automatizada y no tendrás esta clase de dudas.

La explicación de mayofunk es mejor que la de egyware, más que nada porque con la de egyware usaríamos siempre herencia para todo, no son más que ventajas, en su explicación, la realidad es diferente. Lo explico a continuación.

Es muy sencillo, un coche es un transporte, como dice mayofunk, todo aquello que sea subclase, es decir, que se puedan aplicar los mismos métodos que a la clase padre y además alguno más es susceptible de utilizar herencia. Un conductor podría beneficiarse de la herencia, por ejemplo podemos decir que usamos al taxista para llegar de una ciudad a otra, podemos utilizar los atributos de precio, en este caso añadiendo el coste del salario del taxista, etc.

Y hasta es posible que nuestro programa funcione correctamente. Pero no es un programa mantenible, y pueden pasar cosas muy malas por cometer errores conceptuales bastante graves. El taxista usará los métodos del taxi, pero no es subclase de taxi, de lo contrario podríamos hablar de cuantas plazas tiene un taxista, que se entiende que es su taxi, pero también podríamos comprarlo, arreglarlo, etc.

Es decir, si en el futuro, la clase vehículo se modifica y el programa que estamos utilizando permite la compra-venta de vehículos podemos encontrarnos con que las subclases de vehículos, como el taxista, se compra y se vende también, si alguien hiciera algo así debería ir a la cárcel, bien por promover la esclavitud o por ser un programador tan horrible. En cualquier caso, estaría muy mal hecho...
No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones

cyberserver

OOORALE!!!! gracias por su atencion e interes por ayudar...!!!

Pero me surgio una duda no con relacion a lo que digeron si con con heredar e instanciar.

:D Tengo entendido que para poder heredar de una clase esta tiene k estar en la ruta de los paquetes de la maquina virtual, y para poder instanciarla necesita estar en  esta misma ruta o en el path justo alado de la clase que lo instancia.

Pero mi duda es.

¿Podre heredar o instanciar de una clase k esta en un servidor en internet?






egyware

Si la descargas y la cargas en tu JVM con el ClassLoader por defecto, ningun problema

cyberserver

aiiii no ma........  :-X

Digooo pero heredar de la clase cuando esta en el servidor..... :)






egyware

Si quieres crear una nueva clase digamos AlVuelo cuando se esta ejecutando lo veo imposible.
Pero para heredar(crear una nueva class) una clase debes ya tenerla a mano junto en tu classpath con tu JDK.
Ahora si tienes una clase que hereda(ya compilada) de algo que no esta en tu classpath podrias retrazar la carga de la clase a heredar. Luego bajas la clase la cargas y luego cargas a la otra.
No te puedo mostrar codigo porque no tengo tiempo.
Pero revisa ClassLoader o URLClassLoader(nota algunos AV lo toman como Virus)