Heredar Una Clase


Objetivo: Heredar Una Clase
Hola!.

Cuando tenemos unos métodos vacíos que definimos en la clase A y luego una clase B que hereda estos métodos,
para modificarlos. Al yo escribir esos métodos en la clase B, ¿ no deberían reconocerse y no tenerse que volver a escribir en la clase B ?.

Ejemplo:Si yo tengo un método en la clase A, que se llama Calcular y yo por error escribo en la clase B , Calc.
¿ No tiende a confusión ?.

¿ Y si fuesen muchos métodos ?.

Saludos

Objetivo: Re: Heredar Una Clase
Yo de POO, como que poquito, oiga, pero... no le veo sentido. ¿Para qué escribir métodos vacíos? Escríbelos en el hijo y punto. Si deseas tales metodos usa los del hijo... ¿no? o, pon un ejemplo de cuándo puede ser eso necesario, porque no me entero, tron.

Perfil MP  
Objetivo: Re: Heredar Una Clase
shordi escribió: [Ver mensaje]
Yo de POO, como que poquito, oiga, pero... no le veo sentido. ¿Para qué escribir métodos vacíos? Escríbelos en el hijo y punto. Si deseas tales metodos usa los del hijo... ¿no? o, pon un ejemplo de cuándo puede ser eso necesario, porque no me entero, tron.


Prácticamente no tiene mucho sentido, pero imagínate esta situación. Tengo una clase llamada Comida, y otras dos clases que la heredan llamadas Carne y Pastel. Solo sígueme

--Comida
|
|-- Carne
|
|--Pastel

Ambas clases comparten algunas propiedades publicas, Color, por ejemplo, pero no otras. Carne tendría una que defina el tipo de cocción, pero Pastel no la tendría. Carne tendría un método llamado Voltear, mientras que Pastel no lo tendría. Pero ambas tendrían un método llamado cocinar, que en el caso de la Carne se encargaría automáticamente de llamar a Voltear cuando lo necesite.

Ahora bien, si queremos referenciar a una variable del tipo Comida sin haber definido ningún método ni propiedad, al momento de escribir se mostraría como una clase vacía, pero si hubiéramos definido un método Cocinar vació y una propiedad Color vacía, solo para usarlo de interfaz, el método Cocinar o la propiedad Color de la clase hija lo invalidaría.

No se si la analogía se entiende bien. Estas son las bases de la POO y el Polimorfismo. Más específicamente esto se llama Función Virtual.

EDIT:
Un muy buen ejemplo se encuentra en el componente gb.net.pop3:

-- POPClient
|
|-- TCPClient (Utiliza un socket)
|
|-- SSLClient (Utiliza openssl para encriptar la conexión)

última edición por sebikul el Jueves, 28 Febrero 2013, 23:57; editado 1 vez
Perfil MP  
Objetivo: Re: Heredar Una Clase
A ver, probemos con este ejemplo que es un muy sencillo (eso creo).
Recuerda a un ejemplo de Julio del curso de Gambas3.

Clase Padre: Operaciones.
Clase hijas/os: Suma, Resta

Clase Padre Operaciones:

Public Function Operacion() As Float


End

Public Function MostrarOperacion() As String



End


Clase hija/o Suma
Inherits Operaciones

Private $sumandoA As Float
Private $sumandoB As Float

Public Sub _new(sumandoA As Float, sumandoB As Float)

$sumandoA = sumandoA
$sumandoB = sumandoB

End


Public Function Operacion() As Float
Dim fsuma As Float

fsuma = $sumandoA + $sumandoB
Return fsuma

End

Public Function MostrarOperacion() As String

Return "Suma"

End


Clase hija/o Resta:
Inherits Operaciones

Private $minuendo As Float
Private $sustraendo As Float

Public Sub _new(minuendo As Float, sustraendo As Float)

$minuendo = minuendo
$sustraendo = sustraendo

End

Public Function Operacion() As Float
Dim resto As Float

resto = $minuendo - $sustraendo
Return resto

End

Public Function MostrarOperacion() As String

Return "Resta"

End


La clase principal de inicio
Public Sub Main()

Dim unasuma As New Suma(10.4, 20.8)
Dim unaresta As New Resta(12.5, 6.5)

MostrarOperacion(unasuma)
MostrarOperacion(unaresta)

End


Public Sub MostrarOperacion(unaoperacion As Operaciones)

Print unaoperacion.MostrarOperacion(); " "; unaoperacion.Operacion()

End


Los nombres de los métodos se repiten en ambas. Aunque sus operaciones son diferentes,
sus métodos heredados son los mismos.Si me equivoco en poner el nombre del método Operación
de la clase resta.

Y lo cambio por este:
Public Function Opera() As Float
Dim resto As Float

resto = $minuendo - $sustraendo
Return resto

End


El resultado de la resta es 0.El nombre del método no es el mismo que el de la clase padre.

Saludos.

Objetivo: Re: Heredar Una Clase
Shordi:
Citar:
¿Para qué escribir métodos vacíos? Escríbelos en el hijo y punto. Si deseas tales metodos usa los del hijo... ¿no? pon un ejemplo de cuándo puede ser eso necesario, porque no me entero,


Un ejemplo: El clásico de las figuras

Imagina un programa con entorno gráfico, donde tienes varios tipos (clases) de figuras: circulo, rectangulo y cuadrado.

Tendriamos esta estructura de clases:

-- ClassFigura (clase padre)
|--ClassCirculo (clase hijo-heredada de padre)
|--ClassCuadrado (clase hijo-heredada de padre)
|--ClassRectangulo (clase hijo-heredada de padre)


Queremos que el usuario pueda elegirlas y ver sus propiedades.

A priori, el programador no sabe cual ni en que orden va a elegir el usuario....


En POO, para mostrar las propiedades, lo que hariamos seria un método en el programa principal, donde le pasariamos como argumento un objeto tipo Figura

public sub VerPropiedades(obj as ClassFigura)
obj.MostrarPropieades()
end


En la clase classfigura, esta definido este método "MostrarPropiedadeS()", sin código , completamente vacio.

En cada clase Circulo, Rectangulo, Cuadrado, redefinimos ese método MostrarPropieades(), según sea el tipo de objeto:
- Para el circulo: el centro y el radio,
- Para el cuadrado : el largo
- Para el rectangulo: el largo y el ancho

El lenguaje reconoce que objeto es el que ha recibido (un circulo o un cuadrado o un rectangulo) y ejecuta el método del objeto en concreto.

¿ves lo útil y fácil de implementar que es?


Otra ventaja:

Imagina que mañana añades al programa la clase classElipse.... no tendrias que cambiar nada del programa principal, simplemente añadiendo la definición de la clase classElipse, te vandria todo lo que tienes hecho.


Este ejemplo se puede aplicar a la vida real: por ejemplo con los tipos de cuentas que puedes tener en un banco. Tendrias una clase cuenta (padre), y otras "cuenta corriente", "cuenta joven", que heredan de la clase cuenta.




Nota:
Yo a las clases las suelo llamar classLoQueSea... no es necesario se puede llamar directamente Elipse

última edición por jsbsan el Viernes, 01 Marzo 2013, 08:33; editado 1 vez
Objetivo: Re: Heredar Una Clase
Pos ahora sí que sí. De hecho, ahora veo cómo implementar eso en alguno de mis desarrollos... Aunque tendría que modificar mogollón en la estructura de la aplicación... y no me apetece ahora. Sin embargo, bueno es saber que existe otras vías.
Muchas gracias a los dos.

Al final la POO del pijo se impone por su propio peso.

Perfil MP  
Objetivo: Re: Heredar Una Clase
Shordi:

Yo me aficionaría a la POO. Fíjate las ventajas que tiene con los objetos...

mejorasdelapoo2

Saludos

Objetivo: Re: Heredar Una Clase
¡Ala! Con la que está cayendo y tú haciéndole la aplicación de contabilidad al Bárcenas...

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4359s (PHP: -74% SQL: 174%)
Consultas SQL: 47 - Debug off - GZIP Activado