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
Heredar Una Clase
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.
Objetivo: Re: Heredar Una Clase
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
shordi escribió: [Ver mensaje]
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
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:
Clase hija/o Suma
Clase hija/o Resta:
La clase principal de inicio
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:
El resultado de la resta es 0.El nombre del método no es el mismo que el de la clase padre.
Saludos.
Recuerda a un ejemplo de Julio del curso de Gambas3.
Clase Padre: Operaciones.
Clase hijas/os: Suma, Resta
Clase Padre Operaciones:
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
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
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
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:
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
última edición por jsbsan el Viernes, 01 Marzo 2013, 08:33; editado 1 vez
Shordi:
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
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
Citar:
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
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.
Muchas gracias a los dos.
Al final la POO del pijo se impone por su propio peso.
Objetivo: Re: Heredar Una Clase
¡Ala! Con la que está cayendo y tú haciéndole la aplicación de contabilidad al Bárcenas...
Página 1 de 1
No puede crear mensajesNo 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