Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Clase Class
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Clase Class 
 
Bueno días!.

Nada mejor que para el domingo, aprender mas sobre gambas.  

Hoy vamos a aprender a darle uso a Class.  Class nos muestra información sobre una clase.  

La idea. Estudiando la herencia en Python, estuve haciendo un ejemplo de una Universidad.
En esta universidad ademas de otros "miembros" existían facultativos (maestros, docentes) y
estudiantes.

Así que tenemos dos clases:
- Facultativo
- Estudiante

Pero, bueno, bueno. Estas  dos clase tienen cosas comunes. Y no debemos repetir código cuando estamos programando.
Entonces, ¿ qué hacemos para no repetir código ?. Necesitamos una tercera clase de la que vamos a heredar una
serie de propiedades "comunes" a la clase Facultativo y la clase Estudiante.

Esta nueva clase se llamara:

- Miembro ( Ya que ambos son miembros de una universidad)

Por ejemplo, ¿ qué pueden tener comunes ?.
Tanto facultativos como estudiantes, tienen: Un nombre, una dirección postal y una dirección electrónica.

Esas van a ser las propiedades de Miembro

Ahora bien. ¿ Qué tienen las otras dos clases que las haga diferentes una de las otras ?

La clase Facultativo tendrá las siguientes propiedades más:

- Clases que imparten o que enseñan (un array)
- Código de facultativo

La clase Estudiante tendrá las siguientes propiedades más:

- Clases que ha realizado (un array)
- Clases que esta recibiendo ahora ( otro array).
- Código de estudiante

Eso en cuanto a las propiedades de cada clase. Pero bien.
¿ Y si queremos mostrar cada una de esas propiedades ?

La clase miembro mostrara las propiedades de su clase en un método, pero no conoce las propiedades de la "subclase" Facultativo y la "subclase" Estudiante.

Bien. Hasta ahí fue lo primero que me encontré.
Entonces cree un método en la clase "Miembro" donde se devolvía los valores de las propiedades:

- Nombre
- Dirección Postal
- Dirección electrónica

De esta forma:

Public Function MostrarDatos() As String
  
  Return (Subst$("Nombre: &1" & "\n" & "Dirección: &2 " & "\n" & "e-mail: &3", Me.nombre, Me.direccion, Me.mail))
    
End
 


Entonces..¿ qué pasaría si quisiera mostrar los datos de un facultativo ?.
Añadimos el contenido que nos devuelve el método MostrarDatos de la clase "Miembro" en el método MostrarDatos de la clase "Facultativo".
Y haremos uso de "Super" que nos permite acceder a las propiedades y métodos de la clase "Padre" (Miembro).

Public Function MostrarDatos() As String

  Dim datos_facultativo As String
  
  datos_facultativo = Super.MostrarDatos() & "\n" & Subst("Código: &1 " & "\n" & "Asignaturas: &2", Me.codigo_facultativo, Me.dando_cursos.Join(" | "))
  
  Return datos_facultativo
  
End
 


Hasta ahí este es nuestro código.

Clase Miembro:

' gambas class file

Property nombre As String
Private hnombre As String

Property direccion As String
Private hdireccion As String

Property mail As String
Private hmail As String

Public Sub _new(snombre As String, sdireccion As String, smail As String)
  
hnombre = snombre
hdireccion = sdireccion
hmail = smail  
  
End

Private Function nombre_Read() As String

  Return hnombre

End

Private Sub nombre_Write(Value As String)

  hnombre = Value

End

Private Function direccion_Read() As String

  Return hdireccion

End

Private Sub direccion_Write(Value As String)

  hdireccion = Value  

End

Private Function mail_Read() As String

  Return hmail

End

Private Sub mail_Write(Value As String)

  hmail = Value

End

Public Function MostrarDatos() As String
  
  Return (Subst$("Nombre: &1" & "\n" & "Dirección: &2 " & "\n" & "e-mail: &3", Me.nombre, Me.direccion, Me.mail))
    
End
 


Clase Facultativo:

Inherits Miembro

Property codigo_facultativo As String
Private hcodigo_facultativo As String

Property dando_cursos As String[]
Private hdando_cursos As New String[]

Public Sub _new(scodigo_facultativo As String)
  
  hcodigo_facultativo = scodigo_facultativo
  
End

Private Function codigo_facultativo_Read() As String
  
  Return hcodigo_facultativo
  
End

Private Sub codigo_facultativo_Write(Value As String)
  
  hcodigo_facultativo = Value
  
End

Private Function dando_cursos_Read() As String[]
  
  Return hdando_cursos
  
End

Private Sub dando_cursos_Write(Value As String[])
  
  hdando_cursos = Value
  
End

Public Function MostrarDatos() As String

  Dim datos_facultativo As String
  
  datos_facultativo = Super.MostrarDatos() & "\n" & Subst("Código: &1 " & "\n" & "Asignaturas: &2", Me.codigo_facultativo, Me.dando_cursos.Join(" | "))
  
  Return datos_facultativo
  
End
 


Clase Estudiante

' gambas class file

Inherits Miembro

Property codigo_estudiante As String
Private hcodigo_estudiante As String

Property cursos_realizados As String[]
Private hcursos_realizados As New String[]

Property cursos_tomando As String[]
Private hcursos_tomando As New String[]

Public Sub _new(scodigo_estudiante As String)

hcodigo_estudiante = scodigo_estudiante
  
End

Private Function codigo_estudiante_Read() As String

Return hcodigo_estudiante  

End

Private Sub codigo_estudiante_Write(Value As String)

  hcodigo_estudiante = Value

End

Private Function cursos_realizados_Read() As String[]

  Return hcursos_realizados

End

Private Sub cursos_realizados_Write(Value As String[])

  hcursos_realizados = Value

End

Private Function cursos_tomando_Read() As String[]

  Return hcursos_tomando

End

Private Sub cursos_tomando_Write(Value As String[])

 hcursos_tomando = Value

End
 


Y nuestro modulo principal, donde creo dos objetos. Paula y Jose

Public Sub Main()
  
  Dim paula As Facultativo
  Dim jose As Estudiante  
    
  paula = New Facultativo("Paula Flores", "Cádiz", "paulaf@uca.es", "F1234")
  paula.dando_cursos = ["Matemáticas básicas", "Matemáticas avanzadas"]
  
  Print paula.MostrarDatos()
  
  jose = New Estudiante("Jose Alvarez", "Puerto de Santa María", "josea@uca.es", "E3521")
  
  Print
  Print jose.MostrarDatos()
  
End
 


La salida es está:

Primero vemos los datos del facultativo y luego los del estudiante.
Citar:

Nombre: Paula Flores
Dirección: Cádiz
e-mail:
Código: F1234
Asignaturas: Matemáticas básicas | Matemáticas avanzadas

Nombre: Jose Alvarez
Dirección: Puerto de Santa María
e-mail:


Aquí tenéis el primer ejemplo:

Continuo luego en la otra parte del mensaje.

Saludos

HerenciaUniversidad_1.tar.gz
Descripción:  
Descargar
Nombre del archivo: HerenciaUniversidad_1.tar.gz
Tamaño: 14.07 KB
Descargado: 54 veces
HerenciaUniversidad_1.tar.gz
Descripción:  
Descargar
Nombre del archivo: HerenciaUniversidad_1.tar.gz
Tamaño: 14.07 KB
Descargado: 54 veces
HerenciaUniversidad_1.tar.gz
Descripción:  
Descargar
Nombre del archivo: HerenciaUniversidad_1.tar.gz
Tamaño: 14.07 KB
Descargado: 54 veces

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Clase Class 
 
Y ahora...tatachan, vamos a usar Class.

Bien. Mi duda fue la siguiente. ¿ Por que tengo que tengo que tener dos métodos distintos en la clase "Facultativo" y la clase "Estudiante" ?.

Tengo el método "MostrarDatos" en la clase padre "Miembro".
Una opción posible era crear un método distinto "MostrarDatos" en las dos "subclases" para que mostrase cada propiedad.
( Recordemos que cada clase tiene sus "propiedades").

Buceando en la ayuda de gambas. Encontré "Class" y "Object". Veréis lo útil que son:
Vamos a ver. Si pudiéramos iterar por cada "símbolo" que es el conjunto de "Propiedades" y "Métodos" de una clase,
podríamos ver los nombres de los "métodos" y las "propiedades" de una "clase"!!!.


Y este fue el código que hice para ver tanto las propiedades que eran cadenas, como arrays.

Public Sub MostrarDatos()
  
  'Nombre del simbolo de una clase, una propiedad, un método..
  Dim simbolo As String
  'La clase
  Dim clase As Class    
  'Si la propiedad es un array almacenaremos su contenido en el array contenidoarray
  Dim contenidoarray As String[]
  
  'Obtenemos el nombre de la clase que pertenece el objeto
  clase = Object.Class(Me)
  
  'Iteramos sobre todos los simbolos de la clase que pertenece el objeto
  For Each simbolo In clase.Symbols
    'Si la clase de simbolo es una propiedad
    If clase[simbolo].Kind = Class.Property Then
      'Si el tipo de propiedad es un array
      If TypeOf(Object.GetProperty(Me, clase[simbolo].Name)) = gb.Object Then        
        'Mostramos el nombre del simbolo que es un array
        Print clase[simbolo].Name & ": ";
        'En caso de ser un array asignamos el contenido de la propiedad a la variable contenidoarray
        contenidoarray = Object.GetProperty(Me, clase[simbolo].Name)
        'Concatenamos el contenido del array
        Print contenidoarray.Join(" | ")
      Else
        'Mostramos el nombre del simbolo y su valor
        Print clase[simbolo].Name & ":", Object.GetProperty(Me, clase[simbolo].Name)
      Endif
    Endif
  Next
  
End
 


Ya no tenía necesidad de ir cambiando individualmente los métodos de las subclases "Facultativo" y "Estudiante"

Entonces tome ese método y lo añadí a la clase principal "Miembro".

Quedando ahora la clase Miembro de está forma:

' gambas class file

Property nombre As String
Private hnombre As String

Property direccion As String
Private hdireccion As String

Property mail As String
Private hmail As String

Public Sub _new(snombre As String, sdireccion As String, smail As String)
  
  hnombre = snombre
  hdireccion = sdireccion
  hmail = smail  
  
End

Private Function nombre_Read() As String
  
  Return hnombre
  
End

Private Sub nombre_Write(Value As String)
  
  hnombre = Value
  
End

Private Function direccion_Read() As String
  
  Return hdireccion
  
End

Private Sub direccion_Write(Value As String)
  
  hdireccion = Value  
  
End

Private Function mail_Read() As String
  
  Return hmail
  
End

Private Sub mail_Write(Value As String)
  
  hmail = Value
  
End

Public Sub MostrarDatos()
  
  'Nombre del simbolo de una clase, una propiedad, un método..
  Dim simbolo As String
  'La clase
  Dim clase As Class    
  'Si la propiedad es un array almacenaremos su contenido en el array contenidoarray
  Dim contenidoarray As String[]
  
  'Obtenemos el nombre de la clase que pertenece el objeto
  clase = Object.Class(Me)
  
  'Iteramos sobre todos los simbolos de la clase que pertenece el objeto
  For Each simbolo In clase.Symbols
    'Si la clase de simbolo es una propiedad
    If clase[simbolo].Kind = Class.Property Then
      'Si el tipo de propiedad es un array
      If TypeOf(Object.GetProperty(Me, clase[simbolo].Name)) = gb.Object Then        
        'Mostramos el nombre del simbolo que es un array
        Print clase[simbolo].Name & ": ";
        'En caso de ser un array asignamos el contenido de la propiedad a la variable contenidoarray
        contenidoarray = Object.GetProperty(Me, clase[simbolo].Name)
        'Concatenamos el contenido del array
        Print contenidoarray.Join(" | ")
      Else
        'Mostramos el nombre del simbolo y su valor
        Print clase[simbolo].Name & ":", Object.GetProperty(Me, clase[simbolo].Name)
      Endif
    Endif
  Next
  
End
 


Yyyyy naturalmente no tenía que crear un método distinto en las subclases Facultativo y Estudiante.
La salida fue igual que la primera: ( Añadiendo asignaturas al estudiante )

Citar:

mail:    
nombre:    Paula Flores
direccion:    Cádiz
dando_cursos: Matemáticas básicas | Matemáticas avanzadas
codigo_facultativo:    F1234

mail:    
nombre:    Jose Alvarez
direccion:    Puerto de Santa María
cursos_tomando: Latín
codigo_estudiante:    E3521
cursos_realizados: Matemáticas básicas | Historía del arte Romano


Aquí tenéis la modificación del código:

Que lo disfruten, comenten, comenten.  

Saludos

HerenciaUniversidad2.tar.gz
Descripción:  
Descargar
Nombre del archivo: HerenciaUniversidad2.tar.gz
Tamaño: 14.42 KB
Descargado: 65 veces
HerenciaUniversidad2.tar.gz
Descripción:  
Descargar
Nombre del archivo: HerenciaUniversidad2.tar.gz
Tamaño: 14.42 KB
Descargado: 65 veces
HerenciaUniversidad2.tar.gz
Descripción:  
Descargar
Nombre del archivo: HerenciaUniversidad2.tar.gz
Tamaño: 14.42 KB
Descargado: 65 veces

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Ejemplo De Clase Publica Y Clase Privada Shell Aplicaciones/Fragmentos de Código 2 Martes, 28 May 2013, 11:41 Ver último mensaje
shordi
No hay nuevos mensajes ¿ Es La Clase Padre Una Clase Abstracta ? Shell General 3 Viernes, 04 Julio 2014, 08:58 Ver último mensaje
jsbsan
No hay nuevos mensajes Clase Audio Y Clase Configuracion De Audio... v3ctor Aplicaciones/Fragmentos de Código 3 Jueves, 08 Octobre 2015, 08:35 Ver último mensaje
jsbsan
No hay nuevos mensajes Gambas Error. 'UserControl' Class Is Missi... Shell Instalación 28 Viernes, 25 Noviembre 2016, 12:05 Ver último mensaje
shordi
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron