Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
De Nuevo Con Las Variables De Clase
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje De Nuevo Con Las Variables De Clase 
 
Buenos días!.

Voy a mostraros un ejemplo en el que usando una clase me da error y usando la misma clase con una leve variación, no.
Pero no logro del todo lo que quiero hacer.

Tengo la clase ContactoOld ( que es la errónea, o en la que lo hago mal ).
Estoy intentando averiguar los valores de las propiedades de los objetos de la clase añadidos a la variable de clase listacontactos.

Private $email As String
Private $nombre As String

Property email As String
Property nombre As String

Static Public listacontactos As New Variant[]

Public Sub _new(nom As String, ema As String)
  
  With Me
    .nombre = nom
    .email = ema
  End With
  
  ContactoOld.listacontactos.Add(Me)
  
End

Private Function nombre_Read() As String
  
  Return $nombre    
  
End

Private Sub nombre_Write(Value As String)
  
  $nombre = Value
  
End

Private Function email_Read() As String
  
  Return $email
  
End

Private Sub email_Write(Value As String)
  
  $email = Value
  
End
 


Procedimiento para probar.

Public Sub UsandoClaseContactoOld()
  Dim c1 As ContactoOld
  
  c1 = New ContactoOld("Alberto", "alberto@gmail.com")
  
End
 


Salida en la consola:

Citar:

gbx3: warning: circular references detected:
gbx3:     1 ContactoOld


Ahora la variación de la clase. Esta vez uso en la misma clase un método estático que llamo desde el constructor

Private $email As String
Private $nombre As String

Property email As String
Property nombre As String

Static Public listacontactos As New Variant[]

Public Sub _new(nom As String, ema As String)
  
  With Me
    .nombre = nom
    .email = ema
  End With
  
  Me.anade()
  
End

Private Function nombre_Read() As String
  
  Return $nombre    
  
End

Private Sub nombre_Write(Value As String)
  
  $nombre = Value
  
End

Private Function email_Read() As String
  
  Return $email
  
End

Private Sub email_Write(Value As String)
  
  $email = Value
  
End

Static Public Sub anade()
  
  Contacto.listacontactos.Add(Me)  
  
End
 


La llamada al procedimiento.

Public Sub UsandoClaseContacto()
  
  Dim c1 As Contacto
  Dim c2 As Contacto
  Dim ctemp As Class
  
  c1 = New Contacto("Alberto", "alberto@gmail.com")
  c2 = New Contacto("Pedro", "pedro@yahoo.es")
  
  Print Contacto.listacontactos.Count
  Print Contacto.listacontactos[1]
  
  For Each ctemp In Contacto.listacontactos
    Print ctemp.Symbols
  Next
  
End  
 


Citar:

2
(Class Contacto)
(String[] 0xb3a578)
(String[] 0xb3a578)


Son solo pruebas. Si ya me esta dando que contiene un array de string, con un bucle anidado se podría ver.

Ahora os muestro algo similar en Python. Prueba en la consola.

#!/usr/bin/env python3

class Contacto:
    todos_contactos = []

    def __init__(self, nombre, email):
        self.nombre = nombre
        self.email = email  
        Contacto.todos_contactos.append(self)

def main():
    pass

if __name__=='__main__': main()
 


 capturaconsola_1484386224_102162

Si yo en gambas usara algo como esto, con la clase instanciada en el objeto c1.
Os pongo al lado, el error que da:

Print Contacto.listacontactos[0].nombre 'No es un objeto
 Print c1.listacontactos[0].nombre ' Contacto.listacontactos es static.
 


Os adjunto el código en gambas. Mas parece que añadió una clase y no un objeto de clase.

Saludos

VariableDeClase.tar.gz
Descripción:  
Descargar
Nombre del archivo: VariableDeClase.tar.gz
Tamaño: 12.93 KB
Descargado: 86 veces
VariableDeClase.tar.gz
Descripción:  
Descargar
Nombre del archivo: VariableDeClase.tar.gz
Tamaño: 12.93 KB
Descargado: 86 veces
VariableDeClase.tar.gz
Descripción:  
Descargar
Nombre del archivo: VariableDeClase.tar.gz
Tamaño: 12.93 KB
Descargado: 86 veces

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Sabado, 14 Enero 2017, 10:56; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: De Nuevo Con Las Variables De Clase 
 
Si yo hiciera esto:

..
Dim ctemp As Class
..
For Each ctemp In Contacto.listacontactos
    Print ctemp.Symbols
    Stop
Next
 


Puedo ver tanto las propiedades de la clase como parte de sus métodos.

 simbolosenlaclase

Saludos
 




===================
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: De Nuevo Con Las Variables De Clase 
 
Por cierto.

Class.Simbol aunque en la ayuda dice que da una "colección", mas que una colección es un array.  

Citar:

Property Read Symbols As String[]

Returns a collection of all the symbol names of a class.


Saludos
 




===================
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: De Nuevo Con Las Variables De Clase 
 
Shell:

El error en la clase ContactoOld:
Citar:
gbx3: warning: circular references detected:
gbx3: 1 ContactoOld


Se produce cuando gambas3 intenta cerrar el programa, y creo que es porque gambas3 no puede borrar la clase ContactoOld (o algo que esta dentro de ella) ya que esta siendo usada por otra variable.. Parece que  al usarla directamente en el constructor _new se produce ese enlace... Sin embargo cuando la usas llamando desde otro método (anade) , no se produce ese enlace.... es muy curioso

Si añades al código:
  ContactoOld.listacontactos = Null
Esa referencia circular, queda "rota", y ya no muestra el mensaje de advertencia.

Te adjunto el código corregido....

VariableDeClase-0.0.2.tar.gz
Descripción: Con modificacion... 
Descargar
Nombre del archivo: VariableDeClase-0.0.2.tar.gz
Tamaño: 11.64 KB
Descargado: 95 veces
VariableDeClase-0.0.2.tar.gz
Descripción: Con modificacion... 
Descargar
Nombre del archivo: VariableDeClase-0.0.2.tar.gz
Tamaño: 11.64 KB
Descargado: 95 veces
VariableDeClase-0.0.2.tar.gz
Descripción: Con modificacion... 
Descargar
Nombre del archivo: VariableDeClase-0.0.2.tar.gz
Tamaño: 11.64 KB
Descargado: 95 veces

 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: De Nuevo Con Las Variables De Clase 
 
jsbsan escribió: [Ver mensaje]

Si añades al código:
  ContactoOld.listacontactos = Null
Esa referencia circular, queda "rota", y ya no muestra el mensaje de advertencia.

Óptima sugerencia.

Solo por mera curiosidad, es posible usar tambien la función externa "exit( )" de la libreria dinamica "libc.so.6".
En este caso la función externa debería ser declarada con Extern y ser puesta en lugar de la raya "ContactoOld.listacontactos = Null".
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: De Nuevo Con Las Variables De Clase 
 
Además, los accesos de lectura/escritura de las propiedades "email" y "nombre" deben de ser públicos.

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: De Nuevo Con Las Variables De Clase 
 
Julio:

Gracias, ya funciona. No tenía ni idea de que se necesitase esa liberación final.
Debe ser algo propio de Gambas.
En consola nunca había visto este tipo de errores. Tengo otros ejemplos que tengo
que modificar ya que tienen el mismo problema usando estas clases.

Vuott:

Vaya, al final lo logré con ese método también.

Library "libc:6"

Extern exit() As Integer

Public Sub Main()

  UsandoClaseContactoOld()

End

Public Sub UsandoClaseContactoOld()

  Dim c1 As ContactoOld

  c1 = New ContactoOld("Alberto", "alberto@gmail.com")

  Print ContactoOld.listacontactos.Count
  Print ContactoOld.listacontactos[0].nombre

 exit()
  
  'ContactoOld.listacontactos = Null

End

 


Se mezclaba el Exit() de gambas . Y es que es en minúscula. Y en vez de libc:6
estaba usando el nombre completo de la librería. Claro que en un Linux de 64b hay dos:

Citar:

./x86_64-linux-gnu/libc.so.6
./i386-linux-gnu/libc.so.6


Jesús:

Citar:

Además, los accesos de lectura/escritura de las propiedades "email" y "nombre" deben de ser públicos.


Son accesible con la propiedad. ¿ Qué más necesitas que eso ?.  
En el código que he mostrado de Python son públicas, claro.

Por cierto, estos ejemplos que estoy haciendo en gambas son gracias al curso de Inicio práctico a la programación con Python 3.X,
de Jesús Conde.

Curso Inicio práctico a la programación con Python 3.X de Jesús Conde.

Saludos
 




===================
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: De Nuevo Con Las Variables De Clase 
 
jajaj siempre explorando shell!!
estoy esperando algún programa hecho por vos!!
a ver si nos sorprendes heee, ya tenes mas que suficientes herramientas para comenzar!!
jajjajaj

saludos


/me porque aún shell no ha hecho ningún programa? (para los chateros jajajaj)
 




===================
Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
 
v3ctor - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: De Nuevo Con Las Variables De Clase 
 
v3ctor:

Citar:

me porque aún shell no ha hecho ningún programa? (para los chateros jajajaj)


 

Cierto. Nunca acabo haciendo una aplicación de un tamaño considerado.
Es que intento siempre estar viendo diferentes cosas y es que la programación
abarca mucho. Parece no tener fin.

Digamos que me gusta conocer cosas , pero no me acabo de decidir en que emplearlas.
Al igual que la programación modular, que esta formada por muchas partes, tengo que ir
tomando cada parte y crear un todo.

Cuando haces una aplicación grande requiere mucho tiempo y una gran dedicación.
A medida que avanzo y leo me van asaltando otros y otros ejemplos, ocurrencias
que intento cazar al vuelo, para que no se me olviden me tengo que poner con ellos.
De una misma idea, surgen otras y así recursivamente.

Me gusta los ejemplos pequeños, que demuestran cosas interesantes.
Como son pequeñas funciones.

Saludos
 




===================
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: De Nuevo Con Las Variables De Clase 
 
pero shell no te enredes ni te ahogues en un vaso de agua.
la cosa es bien simple el programa se hace para solucionar un problema en concreto o hacer una tarea especifica.
si no programas nada tal vez no tengas la necesidad de resolver ningún problema o hacer alguna tarea importante.

así es como nacen los programas, ellos resuelven un problema en concreto.

para mi taller2015 por ejemplo me hace de ayudante administrativo jajjajaj.

saludos.
 




===================
Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
 
v3ctor - 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 Mas De 250 Variables Publicas En La Clase ... v3ctor General 11 Jueves, 26 Junio 2014, 22:11 Ver último mensaje
jguardon
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 Creación De Un Nuevo Control En Gambas3: ... jsbsan Videotutoriales 3 Viernes, 06 Febrero 2015, 12:44 Ver último mensaje
jsbsan
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados
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