No recuerdo si esto lo he preguntado alguna vez. La respuesta que recuerdo es que cada cosa en POO
debe ser independiente.
A ver si puedo abreviar el problema a estas horas de la mañana.
Me encuentro con un duda. Tengo una clase "pelota" o "circulo", es lo más parecido.
Mi intención es dibujarla en un DrawingArea. ( Por ahora solo eso ). Ahora bien, yo puedo:
A) Tener un formulario con un DrawingArea. Crear el objeto pelota en el formulario y usar un método del objeto pelota para que
se dibuje en el DrawingArea. Esto quiere decir que aumenta algo el código en el formulario principal.
B) Tener un formulario con un DrawingArea. Crear el objeto pelota y a este pasarle en su constructor
el DrawingArea. Y en la propia clase pelota, creo un observador para el objeto DrawingArea.
C) Tener un formulario vació y tener tanto la clase pelota y otra que sea la clase área de dibujo. Crear las distintas instancias...
No lo veo muy así ya que por ahora el área dibujo que hereda de DrawingArea no hace a penas nada nuevo
que no haga el DrawingArea.
Ejemplo Modelo A:
Formulario:
Clase Pelota:
Private hcolor As Integer
Property circulocolor As Integer
Public Sub _new(icolor As Integer)
Me.circulocolor = icolor
End
Public Sub Dibujar()
Paint.Brush = Paint.Color(Me.circulocolor)
Paint.Arc(245, 100, 10)
Paint.Fill(True)
End
Private Function circulocolor_Read() As Integer
Return hcolor
End
Private Sub circulocolor_Write(Value As Integer)
hcolor = Value
End
Property circulocolor As Integer
Public Sub _new(icolor As Integer)
Me.circulocolor = icolor
End
Public Sub Dibujar()
Paint.Brush = Paint.Color(Me.circulocolor)
Paint.Arc(245, 100, 10)
Paint.Fill(True)
End
Private Function circulocolor_Read() As Integer
Return hcolor
End
Private Sub circulocolor_Write(Value As Integer)
hcolor = Value
End
Ejemplo Modelo B:
Formulario:
Clase Pelota:
Private hcolor As Integer
Property circulocolor As Integer
Private pantalla As DrawingArea
Private observador1 As Observer
Public Sub _new(lienzo As DrawingArea, icolor As Integer)
Me.circulocolor = icolor
pantalla = lienzo
observador1 = New Observer(pantalla) As "Dibujo"
End
Public Sub Dibujar()
Paint.Brush = Paint.Color(Me.circulocolor)
Paint.Arc(245, 100, 10)
Paint.Fill(True)
End
Public Sub Dibujo_Draw()
Dibujar
End
Private Function circulocolor_Read() As Integer
Return hcolor
End
Private Sub circulocolor_Write(Value As Integer)
hcolor = Value
End
Property circulocolor As Integer
Private pantalla As DrawingArea
Private observador1 As Observer
Public Sub _new(lienzo As DrawingArea, icolor As Integer)
Me.circulocolor = icolor
pantalla = lienzo
observador1 = New Observer(pantalla) As "Dibujo"
End
Public Sub Dibujar()
Paint.Brush = Paint.Color(Me.circulocolor)
Paint.Arc(245, 100, 10)
Paint.Fill(True)
End
Public Sub Dibujo_Draw()
Dibujar
End
Private Function circulocolor_Read() As Integer
Return hcolor
End
Private Sub circulocolor_Write(Value As Integer)
hcolor = Value
End
El método dibujar del objeto pelota, podía llamarse mover. Cuestión de añadir un timer en el formulario principal
y ver que hace. A lo mejor no se puede y tengo que hacerlo en la clase pelota. No me he puesto aún.
A ver que hace cuando refresque el Drawingarea. Creo que ira bien.
Normalmente uso A. Pero esta vez he usado B. Es un código sencillo, puede complicarse más.
Mi duda es. ¿ Qué creéis que debería ser mejor usando POO ?.
Saludos