https://foro.gambas-es.org/viewtopic.php?f=1&t=4898
-----------------------------------
v3ctor
Martes, 29 Septiembre 2015, 17:44

Como Esquematizar Clases?
-----------------------------------
Buenas,

Estoy tratando de interiorizarme en las clases y la programación orientada a objetos.

El tanteador es un programa interesante de iniciación, pero es un desastre su código y muy enredado.

quiero hacer algo mas profesional y correcto

entonces bien lo que necesito es manejar casi todo con clases pero necesito un esquema general de como funcionaria.

algunas cosas que se me ocurren es:

un jugador seria una clase u objeto:

nombre, apellido, país, etc

otra clase seria partido que se encargaría de todos los datos de un partido.
con dos clases jugadores

otra clase la organización de un grupo con 3,4 o 5 clases jugadores.

me podrían ayudar a esquematizar y armar un esquema por donde empezar?
estoy razonando bien?
que otras clases podría necesitar?

editado1:

 la clase jugador seria esta:

[code linenumbers=false syntax=gambas]Export

Property Nombre As String
Property Apellido As String

Private XNombre As String
Private XApellido As String

Private Function Nombre_Read() As String
 Return XNombre
End

Private Sub Nombre_Write(Value As String)
 XNombre = Value
End

Private Function Apellido_Read() As String
 Return XApellido
End

Private Sub Apellido_Write(Value As String)
  XApellido = Value  
End[/code]


y la clase partido esta aunque no entiendo como leo en la clase partido las clases jugadores   :shock:  :shock:  :shock: 

' Gambas class file

[code linenumbers=false syntax=gambas]Export

Property J1 As Jugador
Property J2 As Jugador

Private byServicioInicio As Byte

Public Sub _new(ServInicio As Byte)
  byServicioInicio = ServInicio
End

Private Function J1_Read() As Jugador

End

Private Sub J1_Write(Value As Jugador)

End

Private Function J2_Read() As Jugador

End

Private Sub J2_Write(Value As Jugador)
  

End[/code]


-----------------------------------
v3ctor
Martes, 29 Septiembre 2015, 18:01

Re: Como Esquematizar Clases?
-----------------------------------
asi sera?

[code linenumbers=false syntax=gambas]Export

Property J1 As Jugador
Property J2 As Jugador

Private xJ1 As Jugador
Private xJ2 As Jugador

Private byServicioInicio As Byte

Public Sub _new(ServInicio As Byte, J1 As Jugador, J2 As Jugador)
  byServicioInicio = ServInicio
  xJ1 = j1
  xj2 = j2
End

Private Function J1_Read() As Jugador
  Return xJ1
End

Private Sub J1_Write(Value As Jugador)
 xJ1 = Value
End

Private Function J2_Read() As Jugador
 Return xj2
End

Private Sub J2_Write(Value As Jugador)
 xj2 = Value
End[/code]


-----------------------------------
shordi
Martes, 29 Septiembre 2015, 18:03

Re: Como Esquematizar Clases?
-----------------------------------
Cada propiedad va relacionada con una variable privada dentro de la clase que es con la que se opera. Así:

[code linenumbers=false syntax=gambas]

Property J1 As Jugador
Property J2 As Jugador

Private $J1 as Jugador 
Private $J2 as Jugador

Private byServicioInicio As Byte

Public Sub _new(ServInicio As Byte)
  byServicioInicio = ServInicio
End

Private Function J1_Read() As Jugador
    Return $J1
End

Private Sub J1_Write(Value As Jugador)
     $J1=Value
End

Private Function J2_Read() As Jugador

    Retrun $J2

End

Private Sub J2_Write(Value As Jugador)
  
   $J2=Value

End[/code]

Entonces para asignar J1 al partido sería:
Mipartido.J1=mijugador
mipartido.j2=mjugador2

etc.


-----------------------------------
shordi
Martes, 29 Septiembre 2015, 18:04

Re: Como Esquematizar Clases?
-----------------------------------
Exacto, se han cruzado las respuestas.


-----------------------------------
v3ctor
Martes, 29 Septiembre 2015, 18:31

Re: Como Esquematizar Clases?
-----------------------------------
bueno sigo haciendo pruebas ya que estoy muy perdido en el sentido de como funcionaria todo en general.
aqui visualizo datos despues de crear las clases.

tengo cuatro textbox y u combobox, lleno los datos, ejecuto rutinas de comprobación..  (probable clases de comprobacion? o modulos de comprobacion?)

[code linenumbers=false syntax=gambas]
' Gambas class file

Public EstePartido As Partido

Public Sub WizConfig_Click() ' cuando se llenaron todos las datos de la clase jugador y estan ok
'creamos la clase partido

Dim Jugador1, Jugador2 As Jugador
  
Jugador1 = New Jugador
Jugador1.Nombre = txtNomJ1.Text
Jugador1.Apellido = txtApeJ1.Text

Jugador2 = New Jugador
Jugador2.Nombre = txtNomJ2.Text
Jugador2.Apellido = txtApeJ2.Text

EstePartido = New Partido(cbxServicio.Index, Jugador1, Jugador2)

Print EstePartido.J1.Nombre
Print EstePartido.J1.Apellido
Print EstePartido.J2.Nombre
Print EstePartido.J2.Apellido


End[/code]


-----------------------------------
v3ctor
Martes, 29 Septiembre 2015, 18:45

Re: Como Esquematizar Clases?
-----------------------------------
otra clase que debería crear es una Clase Categoría donde estaría un array con nombres de categorías, editables pudiendo eliminar o agregar con lo que tendría tres clases por ahora

Lista de clases a Crear:

Jugador
Partido
Grupo (mas adelante vamos despacio)
Categoria

.....
que mas podría necesitar?


-----------------------------------
v3ctor
Martes, 29 Septiembre 2015, 20:36

Re: Como Esquematizar Clases?
-----------------------------------
construí dos clases mas una llamada Interfaz

[code linenumbers=false syntax=gambas]' Gambas class file

Export

Property TableroDerecho As Tablero
Property TableroIzquierdo As Tablero

Private $TableroDerecho As Tablero
Private $TableroIzquierdo As Tablero


Public Sub _new(Derecho As Tablero, Izquierdo As Tablero)
  $TableroDerecho = Derecho
  $TableroIzquierdo = Izquierdo
End

Private Function TableroDerecho_Read() As Tablero
  Return $TableroDerecho
End

Private Sub TableroDerecho_Write(Value As Tablero)
  $TableroDerecho = Value  
End

Private Function TableroIzquierdo_Read() As Tablero
  Return $TableroIzquierdo
End

Private Sub TableroIzquierdo_Write(Value As Tablero)
  $TableroIzquierdo = Value
End[/code]

y otro llamada tablero:

[code linenumbers=false syntax=gambas]' Gambas class file

Export

Property Nombre As Label
Property Tanto As Label
Property Juego As Label

Private $Nombre As Label
Private $Tanto As Label
Private $Juego As Label

Public Sub _new(nombre As Label, tanto As Label, juego As Label)
  $Nombre = nombre
  $Tanto = tanto
  $Juego = juego
End


Private Function Nombre_Read() As Label
 Return $Nombre
End

Private Sub Nombre_Write(Value As Label)
 $Nombre = Value
End

Private Function Tanto_Read() As Label
  Return $Tanto
End

Private Sub Tanto_Write(Value As Label)
   $Tanto = Value
End

Private Function Juego_Read() As Label
  Return $Juego
End

Private Sub Juego_Write(Value As Label)
  $Juego = Value
End[/code]


[code linenumbers=false syntax=gambas]
Public Sub WizConfig_Click() ' cuando se llenaron todos las datos de la clase jugador y estan ok
'creamos la clase partido

Dim Jugador1, Jugador2 As Jugador
  
Jugador1 = New Jugador
Jugador1.Nombre = txtNomJ1.Text
Jugador1.Apellido = txtApeJ1.Text

Jugador2 = New Jugador
Jugador2.Nombre = txtNomJ2.Text
Jugador2.Apellido = txtApeJ2.Text

NuevoPartido = New Partido(cbxServicio.Index, Jugador1, Jugador2)

' FMain.LabNombreJ1.Text = NuevoPartido.J1.Apellido & " " & NuevoPartido.J1.Nombre 
' FMain.LabNombreJ2.Text = NuevoPartido.J2.Apellido & " " & NuevoPartido.J1.Nombre 

Print NuevoPartido.Servicio

TableroDerecho = New Tablero(FMain.LabNombreJ1, FMain.LabTantoJ1, FMain.LabSetJ1)
TableroIzquierdo = New Tablero(FMain.LabNombreJ2, FMain.LabTantoJ2, FMain.LabSetJ2)

TipoInterfaz = New Interfaz(TableroDerecho, TableroIzquierdo)

With TipoInterfaz
  .TableroDerecho.Nombre.Text = NuevoPartido.J1.Nombre & " " & NuevoPartido.J1.Apellido
   TableroDerecho.Juego.Text = 0
   TableroDerecho.Tanto.Text = 0
   
   TableroIzquierdo.Nombre.Text = NuevoPartido.J2.Nombre & " " & NuevoPartido.J2.Apellido
   TableroIzquierdo.Juego.Text = 0
   TableroIzquierdo.Tanto.Text = 0
End With


End[/code]

faaa  :shock:  estoy empedo y no es del vino  :roll:


-----------------------------------
v3ctor
Martes, 29 Septiembre 2015, 22:40

Re: Como Esquematizar Clases?
-----------------------------------
faaa esto si que es una maravilla, que notable esta programar asi, orientado a objetos :idea: 

[code linenumbers=false syntax=gambas]' Gambas class file

Export

Property J1 As Jugador
Property J2 As Jugador
Property Servicio As Byte
Property Read ServicioInicio As Byte
Property Marcador As Interfaz

Private $J1 As Jugador
Private $J2 As Jugador
Private $Servicio As Byte
Private $ServicioInicio As Byte
Private $Marcador As Interfaz


Public Sub _new(SI As Byte, J1 As Jugador, J2 As Jugador, marcador As Interfaz) ''SI= ServicioInicio
  $ServicioInicio = SI
  $Servicio = SI
  $J1 = J1
  $J2 = J2
  $Marcador = marcador
End

Private Function J1_Read() As Jugador
  Return $J1
End

Private Sub J1_Write(Value As Jugador)
 $J1 = Value
End

Private Function J2_Read() As Jugador
 Return $j2
End

Private Sub J2_Write(Value As Jugador)
 $J2 = Value
End

Private Function Servicio_Read() As Byte
  Return $Servicio
End

Private Sub Servicio_Write(Value As Byte)
  $Servicio = Value
End

Private Function ServicioInicio_Read() As Byte
 $ServicioInicio
End

Public Sub Resta1(xJugador As Jugador)
   If xJugador.Tantos = 0 Then Return
   Dec xJugador.Tantos  
   ActualizarInterfaz()
End

Public Sub Suma1(xJugador As Jugador)
   Inc xJugador.Tantos 
   ActualizarInterfaz()
End

Private Function Marcador_Read() As Interfaz
  Return $Marcador
End

Private Sub Marcador_Write(Value As Interfaz)
  $Marcador = Value
End

Public Sub ActualizarInterfaz()
  $Marcador.Actualizar($J1, $J2)
End[/code]


-----------------------------------
Shell
Miercoles, 30 Septiembre 2015, 12:54

Re: Como Esquematizar Clases?
-----------------------------------
v3ctor:

Una cuestión.

¿ Por que usas Export en la mayoría de los ejemplos ?. :roll:
A ver si nos explican mejor el uso de Export, creo que era para componentes.


-----------------------------------
v3ctor
Miercoles, 30 Septiembre 2015, 13:40

Re: Como Esquematizar Clases?
-----------------------------------
este.... sinceramente lo puse porque lo vi en otras clases, además que si lo pones aparece la estrellita en la clase.

probé sacarlo y la clase funciona igual.

Shell mejor explícame vos para que es Export  :oops: 

jajajjaaj

Clases creadas hasta el momento.

Partido
Jugador
Tablero
Interfaz

me falta algo para gestionar mensajes
otra clase que maneje a quien le toca sacar, ya que descubrí un sistema para ello.
el tanteador tiene un sistema de if muy complicado que halla a que jugador le corresponde sacar....
pero he descubierto un sistema enormemente mas sencillo y depurado

consta de tres datos fundamentales, que jugador comenzó sacando el 1 o el dos en el primer juego del partido.
y teniendo los puntos totales automáticamente se sabe quien saca

cuando la tenga pronta la posteo por acá.


-----------------------------------
Shell
Miercoles, 30 Septiembre 2015, 19:49

Re: Como Esquematizar Clases?
-----------------------------------
v3ctor:

[quote]
Shell mejor explícame vos para que es Export  

jajajjaaj
[/quote]
 :lol:

Es complicado crear un proyecto complejo en poo. :-)

Lo que puedo decirte es que ese comando está dedicado a la creación de componentes.  :roll: 

http://gambaswiki.org/wiki/lang/export?l=es

Oye, muy bien que hayas decidido crear tu aplicación en POO. 
No es nada fácil. Tu ya has hecho algunos ejemplos en POO. 

Estoy deseando de verlo completo. 
Por cierto, ¿ cuales son las categorías ?. Querías crear una clase. Quizás se pueda incluir categorías en otra clase.

Saludos


-----------------------------------
jguardon
Miercoles, 30 Septiembre 2015, 20:39

Re: Como Esquematizar Clases?
-----------------------------------
Export sirve para hacer que la clase sea visible desde el exterior cuando haces un componente, en definitiva, para que se pueda usar.

Si no estás haciendo un componente, no es necesario usarla.

Por cierto, v3ctor, sólo recordarte que puedes usar también una característica muy interesante de la POO, que es la herencia.

Si tienes clases similares, con una base que puede ser común, puedes usar Inherits MiClaseBase para extender otras nuevas clases sólo escribiendo los métodos nuevos. Se ahorra bastante código y hace más modular tu código. jsbsan tiene varios ejemplos en su libro y en su blog explicándolo muy bien.

Saludos


-----------------------------------
v3ctor
Miercoles, 30 Septiembre 2015, 21:19

Re: Como Esquematizar Clases?
-----------------------------------
jguardon entiendo como es la herencia una clase padre y una hijo.

ahora el lío que tengo es sobre algunas funciones a que clases le correspondería manejar si es propiedad o método.

también veo la necesidad de hacer un esquema gráfico, algo que me aburre hacer, tendré que buscar algo por ahí, algo parecido a las relaciones de tablas en sql pero aplicado a clases.

La lista de clases que tengo son estas:

Jugador --->datos sobre el jugador
Partido--->integra clases :jugador,interfaz,datos   es la clase principal
Grupo (mas adelante vamos despacio) no tengo idea como seria esta pero supongo que contendría 3, 4 y 5 clases partido ufff que lio.
Categoria (una lista de categorías supongo jajajaj)
tablero  ---->maneja la mitad de la interfaz: tantos de uno de los jugadores, como también set, nombre y otros
interfaz, contiene los dos tableros que corresponden al jugador uno o jugador de la izquierda y el otro de la derecha.
Datos  ---->otros datos relacionados con el partido como ser, lugar de juego, nombre de torneo, categoría, mesa, arbitro


jguardon como clase padre lo único que se me ocurre es hacer una clase torneo pero no se pues solo tendría los datos: (lugar de juego y nombre de torneo) que son las cosas que heredarían, los partido y grupos no see... sigo tratando de entender y armar el rompe cabeza. :shock:  :shock:


 [img]http://foro.gambas-es.org/files/images/2261/gggg_1443645025_342858.png[/img]


-----------------------------------
v3ctor
Miercoles, 30 Septiembre 2015, 21:47

Re: Como Esquematizar Clases?
-----------------------------------
[quote user="Shell" post="28297"]
Estoy deseando de verlo completo. 
Por cierto, ¿ cuales son las categorías ?. Querías crear una clase. Quizás se pueda incluir categorías en otra clase.

Saludos[/quote]

Si quieres subo el código de lo que tengo hecho hasta ahora?
o si a alguien mas le interesa lo subo.


-----------------------------------
v3ctor
Miercoles, 30 Septiembre 2015, 22:40

Re: Como Esquematizar Clases?
-----------------------------------
[img]http://foro.gambas-es.org/files/images/2261/kjjjjjjjjjjj_1443649140_520791.png[/img]


-----------------------------------
Shell
Miercoles, 30 Septiembre 2015, 23:48

Re: Como Esquematizar Clases?
-----------------------------------
El principal problema a la hora de crear un programa es entender el problema. Si no entendemos que es y como funciona, tenemos que volver a empezar,
documentarnos y estudiar mejor el problema.

En mi caso, a esta hora, ni  idea como es el problema del tanteador.  :roll: 
No creo que lo entienda por ahora.

Tendría que ver primero el programa de  estructurada, para entender el de poo. 
Y lo más importante entender en que consiste el tanteador.

No tengo ni idea como es el ping pong. Otro problema más.   :mrgreen: 

No confundas métodos con propiedades. El problema que tienes ahora es que métodos le corresponde a cada clase.
Que eso es lo más complejo. Piénsalo de forma individual para comenzar y luego poco a poco lo mejoras.

La herencia no es siempre necesaria u obligatoria, pero ayuda. 
Las soluciones van saliendo a medida que estudias el problema, no te obligues a crear una herencia de clase.

Mi problema es como el de todo programador, no entender el problema, ahora.

Saludos


-----------------------------------
v3ctor
Jueves, 01 Octobre 2015, 01:52

Re: Como Esquematizar Clases?
-----------------------------------
encontré esto para hacer diagramas de clases en el programa  "dia" con las figuras "UML"

https://www.youtube.com/watch?v=ieeoTKt0YPs


-----------------------------------
v3ctor
Jueves, 01 Octobre 2015, 02:23

Re: Como Esquematizar Clases?
-----------------------------------
[img]http://foro.gambas-es.org/files/images/2261/pantallazo_diagrama1_dia_media_prueba1_datos2013_trabajo2015_mis_programas_gambas_marcadorpingpong_dia_normal.png[/img]


-----------------------------------
Shell
Jueves, 01 Octobre 2015, 08:10

Re: Como Esquematizar Clases?
-----------------------------------
Conocía la aplicación DIA. Te ha quedado muy bien. 

El problema es que no entiendo aun UML. Por lo que no sé si el lugar de las flechas son los correctos.

Hay un curso "de pago" que pueden estar por "ahí" de aquella manera. En el cual puedes aprender POO y
crear tus diagramas y mejorar el conocimiento sobre UML.

Este es el enlace principal a los cursos de programación:

https://www.video2brain.com/es/programacion

Y este es del POO. Curiosamente encontré esto:

https://www.video2brain.com/es/tutorial/creando-diagramas-de-clases

Como es normal en Youtube puedes encontrar más vídeos sobre el tema.

Saludos


-----------------------------------
v3ctor
Jueves, 01 Octobre 2015, 15:47

Re: Como Esquematizar Clases?
-----------------------------------
[youtube]AAKoccH230Y[/youtube]

muy bueno, para los que queremos dejar de ser novatos y programar de verdad.


-----------------------------------
Shell
Jueves, 01 Octobre 2015, 19:36

Re: Como Esquematizar Clases?
-----------------------------------
v3ctor:

Gracias por el enlace.

Muchos de los cursos que valen un dinero, esta compuesto de vídeos pequeños que
a la larga te quedas a medias....como siempre. No se puede pretender que en 3 minutos
te expliquen mucho. Lo importantes es empezar, captar la idea principal y luego continuar..

Luego viene un laberinto de información que no sabes a veces ni para donde tirar
de toda la que puede haber. Cada uno explicándolo de una forma, unos mejor, otros peor..
y mas tiempo que hay que dedicarle.

Y sin los libros, mejor buscar algo práctico.

Saludos


