Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Definir Propiedades O Atributos De Un Objeto
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Definir Propiedades O Atributos De Un Objeto 
 
Buenas!.

Aunque el ejemplo no está terminado. Se me presenta la siguiente duda:

- Crear el objeto desde _new en una clase, dándole unos valores al constructor para instanciarlo.
- Crear y definir las propiedades del objeto desde otro lugar

Comencemos por lo segundo. Era lo que estaba usando en el ejemplo hasta hoy.
Bien. El motivo de hacer publicas las variables supongo que era para que lo reconociera en otro lugar.
En realidad estaba usando Me y el nombre de la variable dentro de la misma clase.. (al igual que una propiedad)

Anteriormente yo hacia esto para definir donde se debe dibujar un cuadrado en una rejilla creada sobre un DrawingArea.

Public x As Integer
Public y As Integer
Public ancho As Integer
Public alto As Integer
Private tipo As String  

Public Sub _new(cx As Integer, cy As Integer, iancho As Integer, ialto As Integer, jugador As String)
  
  x = cx
  y = cy
  ancho = iancho
  alto = ialto  
  tipo = jugador  
  
End
 


La creación de la celda o marca se hacía de esta forma:

Public Sub CrearCelda(cx As Integer, cy As Integer, jugador As String)  
  Dim celda As ClaseCelda
  
  'Creo aquí la ficha para que una vez creada, haga el refresco del area de dibujo  
  'Es en la clase rejilla donde se conoce el tamaño que va a tener una ficha
  'Ya que depende de las dimensiones de la rejilla o TABLERO
  
  cx = cx \ tcelda
  cy = cy \ tcelda
  
  If Not existemarca[cx, cy] Then
    existemarca[cx, cy] = True              
    celda = New ClaseCelda(cx, cy, tcelda, tcelda, jugador)
    gceldas.Add(celda)      
  Else
     Message.Info("Celda ya seleccionada")      
  Endif
  
  Me.Refresh
  
End
 


Al cambiar y usar propiedades en vez de variables privadas o públicas , la clase puede quedar de esta forma:



El método de creación de la celda cambia su código quedando así:

Public Sub CrearCelda(cx As Integer, cy As Integer, sjugador As String)  
  
  Dim celda As ClaseCelda
  
  'Creo aquí la ficha para que una vez creada, haga el refresco del area de dibujo  
  'Es en la clase rejilla donde se conoce el tamaño que va a tener una ficha
  'Ya que depende de las dimensiones de la rejilla o TABLERO
  
  cx = cx \ tcelda
  cy = cy \ tcelda
  
  If Not existemarca[cx, cy] Then
    existemarca[cx, cy] = True                  
    celda = New ClaseCelda
    With celda
      .x = cx
      .y = cy
      .alto = tcelda
      .ancho = tcelda
      .jugador = sjugador  
    End With    
    gceldas.Add(celda)      
  Else
    Message.Info("Celda ya creada anteriormente")      
  Endif
  
  Me.Refresh
  
End
 


Ahora no existe un constructor en la clase y se define las propiedades desde otro lugar.
Cuando uso propiedades. ¿ Debería usar un constructor o es mejor definir las propiedades del objeto desde otro lugar ?.

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: Definir Propiedades O Atributos De Un Objeto 
 
El efecto final es el mismo. Quiero decir que los pasos que el compilador da son los mismos. Es cuestión de gustos más que nada.
Yo suelo utilizar el segundo método y dejar el _new() para establecer los valores por defecto.

Saludos.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Definir Propiedades O Atributos De Un Objeto 
 
El problema que me encuentro es que si uso variables privadas y el constructor, al salir de la clase no se reconoce el objeto,
solo  lo haría dentro de la clase. Y se debería declarar como públicas las variables de la clase para que se reconozcan en otro modulo.

A menos que quieras tener propiedades y a la vez el constructor en la misma clase y desde este asignar los valores a las propiedades.
¿ Te refieres mejor a eso ?.

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: Definir Propiedades O Atributos De Un Objeto 
 
Por ejemplo. Usando variables privadas en la clase Celda, se llama a crear el objeto desde la clase Rejilla.
Ya supones los valores que devuelve....na.

Public Sub CrearCelda(cx As Integer, cy As Integer, jugador As String)  
  Dim celda As ClaseCelda
  
  'Creo aquí la ficha para que una vez creada, haga el refresco del area de dibujo  
  'Es en la clase rejilla donde se conoce el tamaño que va a tener una ficha
  'Ya que depende de las dimensiones de la rejilla o TABLERO
  
  cx = cx \ tcelda
  cy = cy \ tcelda
  
  If Not existemarca[cx, cy] Then
    existemarca[cx, cy] = True              
    celda = New ClaseCelda(cx, cy, tcelda, tcelda, jugador)
    gceldas.Add(celda)      
  Else
     Message.Info("Celda ya seleccionada")      
  Endif
  
  Me.Refresh
  
End
 


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: Definir Propiedades O Atributos De Un Objeto 
 
Si veo el array de celdas creadas puedo ver esto:

 arraydeobjetosceldas

Pero si quiero ver ese elemento me va a mostrar:

 vacio

Eso usando variables privadas y el constructor.  

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Domingo, 30 Octobre 2016, 14:49; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Definir Propiedades O Atributos De Un Objeto 
 
Uno de los principios de la POO es que "Lo que pasa en las Vegas, se queda en las Vegas". Es decir, nunca , nadie, pero nunca, oiga, puede ver y menos aún toquetear mis variables. Para eso se han inventado las propiedades. La definición de tu clase celda debiera ser ésta,más o menos:

Te la pongo con el método que la dibujaría:

Inherits DrawingArea

Property x As Integer
Property y As Integer
Property ancho As Integer
Property alto As Integer

Private $tipo As String
Private $x As Integer
Private $y As Interger
Private $ancho As Integer
Private $alto As Integer


Public Sub _new(Optional cx As Integer, Optional cy As Integer, Optional iancho As Integer, Optional ialto As Integer, Optional jugador As String)

If cx Then
  $x = cx
Endif
If cy Then
    y = cy
Endif
If iancho Then
  $ancho = iancho
Endif
If ialto Then
    $alto = ialto
Endif
If $jugador Then
    tipo = jugador
Endif

End

Public Sub Draw()
    
      'aquí pintas la celda en el sitio en que indiquen las propiedades
    
End

Private Function x_Read() As Integer

    Return $x

End

Private Sub x_Write(Value As Integer)

    $x = value

End

Private Function y_Read() As Integer

    Return $y

End

Private Sub y_Write(Value As Integer)

    $y = value

End

Private Function ancho_Read() As Integer

    Return $ancho

End

Private Sub ancho_Write(Value As Integer)

    $ancho = value

End

Private Function alto_Read() As Integer

    Return $alto

End

Private Sub alto_Write(Value As Integer)

    $alto = value

End

 

 




===================
No podemos regresar
 
última edición por shordi el Domingo, 30 Octobre 2016, 18:34; editado 1 vez 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Definir Propiedades O Atributos De Un Objeto 
 
Shordi:

Citar:

Uno de los principios de la POO es que "Lo que pasa en las Vegas, se queda en las Vegas". Es decir, nunca , nadie, pero nunca, oiga, puede ver y menos aún toquetear mis variables. Para eso se han inventado las propiedades


Efectivamente, eso es lo que preguntaba. En este caso los parámetros no pueden ser opcionales ya que son necesarios para
dibujar la celda.

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: Definir Propiedades O Atributos De Un Objeto 
 
Citar:
Efectivamente, eso es lo que preguntaba. En este caso los parámetros no pueden ser opcionales ya que son necesarios para

Confundes las cosas. Lo que es opcional es "el paso del parámetro en _new()", no la propiedad.
Nada te impide hacer

dim c as new celda 'crear una instancia de una clase no es dibujarla
with c
  .x=10
  .y=10
  .ancho=20
  .alto=20
end with
c.draw()
 

o
dim c as new celda(10,10,20,20,)
c.draw()
 

El paso del valor es opcional para la creación, como ves.
 




===================
No podemos regresar
 
última edición por shordi el Domingo, 30 Octobre 2016, 20:37; editado 1 vez 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Definir Propiedades O Atributos De Un Objeto 
 
Citar:

Confundes las cosas. Lo que es opcional es "el paso del parámetro en _new()", no la propiedad.


Cierto,  todo el constructor entero es opcional.
 




===================
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: Definir Propiedades O Atributos De Un Objeto 
 
Citar:
Cierto,  todo el constructor entero es opcional.

No si quieres hacer software de calidad. Uno de los objetivos de la POO es "blindar" la clase contra errores. El constructor tiene mucho que ver en eso. Es la oportunidad de inicializar valores, levantar flags, etc. etc. antes de que la cosa se ponga en marcha. Así con éste constructor:
Public Sub _new(Optional cx As Integer, Optional cy As Integer, Optional iancho As Integer, Optional ialto As Integer, Optional jugador As String)

If cx Then
    $x = cx
else
    $x=0
Endif
If cy Then
    y = cy
else
    $y=0
Endif
if iancho then
   $ancho=iancho
else
   $ancho=10
endif
if ialto then
   $alto=ialto
else
   $alto=10
endif
etc..
 

Tienes las tres posibilidades: Crear la celda pasando parámetros en la misma línea. Crear la celda y luego pasarle los valores o crear la celda y dejar que se dibuje sola
Si eliminas el constructor ¿cómo vas a pasar los valores a las variables internas del control? Eso es convertir la clase en una función...

Hay otra posibilidad: Imagina que las celdas, por defecto, son cuadradas, aunque te reservas el derecho de hacerlas rectangulares. Entonces:

Public Sub _new(Optional cx As Integer, Optional cy As Integer, Optional iancho As Integer, Optional ialto As Integer, Optional jugador As String)

If cx Then
    $x = cx
else
    $x=0
Endif
If cy Then
    y = cy
else
    $y=0
Endif
if iancho then
   me.ancho=iancho 'aquí cambia la cosa al colocar me. disparas el evento ancho_write
else
   me.ancho=10 'aquí también
endif
if ialto then
   me.alto=ialto  'lo mismo que para el ancho
else
   me.alto=10
endif
etc..
etc..
end
Private sub ancho_write(Value as integer)
$ancho=Value
if $alto=0 then $alto=$ancho
end
Private sub alto_write(Value as integer)
$alto=Value
if $ancho=0 then $ancho=$alto
end
 


Así te aseguras que las celdas sean cuadradas, cuando mínimo solo con pasar uno de los valores.
El constructor es importante...

Saludos
 




===================
No podemos regresar
 
última edición por shordi el Lunes, 31 Octobre 2016, 11:32; editado 1 vez 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Cambiar Propiedades De Un Objeto Creado Di... xmuno General 7 Miercoles, 03 Junio 2015, 20:07 Ver último mensaje
vuott
No hay nuevos mensajes Gb.xml.xslt: Error Al Leer Las Propiedades... Grandamakulo Controles/Librerías/Componentes 4 Lunes, 21 Noviembre 2016, 10:55 Ver último mensaje
Grandamakulo
No hay nuevos mensajes Atributos Extendidos De Un Archivo Shell Mundo Linux 1 Miercoles, 30 Enero 2019, 20:32 Ver último mensaje
Shell
No hay nuevos mensajes Crear Objeto Y Ponerlo Como El Objeto Supe... gambafeliz General 4 Martes, 23 Junio 2020, 07:29 Ver último mensaje
v3ctor
 

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