Definir Propiedades O Atributos De Un Objeto
Artículo |
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.
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
|
Shell [ Domingo, 30 Octobre 2016, 13:20 ]
|
|
Definir Propiedades O Atributos De Un Objeto
Comentarios |
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.
|
shordi [ Domingo, 30 Octobre 2016, 13:42 ]
|
|
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
|
Shell [ Domingo, 30 Octobre 2016, 14:14 ]
|
|
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
|
Shell [ Domingo, 30 Octobre 2016, 14:41 ]
|
|
Re: Definir Propiedades O Atributos De Un Objeto
|
Si veo el array de celdas creadas puedo ver esto:
Pero si quiero ver ese elemento me va a mostrar:
Eso usando variables privadas y el constructor.
Saludos
última edición por Shell el Domingo, 30 Octobre 2016, 14:49; editado 1 vez
|
Shell [ Domingo, 30 Octobre 2016, 14:48 ]
|
|
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:
última edición por shordi el Domingo, 30 Octobre 2016, 18:34; editado 1 vez
|
shordi [ Domingo, 30 Octobre 2016, 18:32 ]
|
|
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
|
Shell [ Domingo, 30 Octobre 2016, 20:23 ]
|
|
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
El paso del valor es opcional para la creación, como ves.
última edición por shordi el Domingo, 30 Octobre 2016, 20:37; editado 1 vez
|
shordi [ Domingo, 30 Octobre 2016, 20:36 ]
|
|
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.
|
Shell [ Lunes, 31 Octobre 2016, 09:07 ]
|
|
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:
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:
Así te aseguras que las celdas sean cuadradas, cuando mínimo solo con pasar uno de los valores.
El constructor es importante...
Saludos
última edición por shordi el Lunes, 31 Octobre 2016, 11:32; editado 1 vez
|
shordi [ Lunes, 31 Octobre 2016, 11:30 ]
|
|
|
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
|
|