|
Página 1 de 1
|
Definir Propiedades O Atributos De Un Objeto
Autor |
Mensaje |
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
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
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#1 Domingo, 30 Octobre 2016, 13:20 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
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
|
#2 Domingo, 30 Octobre 2016, 13:42 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
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"
|
#3 Domingo, 30 Octobre 2016, 14:14 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
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"
|
#4 Domingo, 30 Octobre 2016, 14:41 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
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
=================== 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
|
#5 Domingo, 30 Octobre 2016, 14:48 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
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:
=================== No podemos regresar
última edición por shordi el Domingo, 30 Octobre 2016, 18:34; editado 1 vez
|
#6 Domingo, 30 Octobre 2016, 18:32 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
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"
|
#7 Domingo, 30 Octobre 2016, 20:23 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
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.
=================== No podemos regresar
última edición por shordi el Domingo, 30 Octobre 2016, 20:37; editado 1 vez
|
#8 Domingo, 30 Octobre 2016, 20:36 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
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"
|
#9 Lunes, 31 Octobre 2016, 09:07 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
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
=================== No podemos regresar
última edición por shordi el Lunes, 31 Octobre 2016, 11:32; editado 1 vez
|
#10 Lunes, 31 Octobre 2016, 11:30 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|