[Php-objetos] Nueva entrega ejercicio 2.2
Leonardo Tadei - Pegasus Tech Supply
leonardot en pegasusnet.com.ar
Vie Feb 20 19:10:58 ARST 2009
Hola Juan,
te respondo las cuestiones que planteás.
No estoy viendo el código, pero no parece que aporte nada a la
discusión:
El vie, 20-02-2009 a las 17:30 -0300, Juan Marcos Rigoli escribió:
> Tengo unas dudas sobre este ejercicio. Yo habia hecho el método
> getSaldo() en Banco que pasándole el ID de la cuenta devolvía el saldo
> de la misma, pero después le agregué el método getCuenta() que no lo
> había hecho y me pareció que teniendo la posibilidad de pedir la
> cuenta para trabajar con ésta diréctamente, el método de banco para
> pedir el saldo de una estaba demás, por eso lo saqué. ¿Esta bien eso?.
Mmmm... vamos por parte. getSaldo() no parece una responsabilidad del
Banco, sino de la cuenta. De hecho el tributo "saldo" es un atributo de
cuenta, no de banco...
Lo de getCuenta() que sí estaría en el Banco, no suena mal como
mecanismo para que el Banco te de una cuenta para luego usarla.
> Por otro lado tengo la cuestión del número de cuenta. En el ejemplo
> que te pasé el banco le asigna un número a la cuenta cuando se
> inserta. Hasta acá estamos barbaro. Al guardar el numero de cuenta en
> la cuenta misma, cuando busco una cuenta debería buscar por su número
> de cuenta, no por el índice de item.
Lo del "índice del ítem" es un detalle de implementación y no debe
incidir en nada de nada. Es como hablar de una variable local a un
método para almacenar un resultado temporario... desde afuera es
invisible.
> Sin embargo como asumo (de hecho implemento) que éste sea el mismo,
> ésto funciona barbaro.
Yo cuando lo implementé pensé en lo mismo, por ser el camino más
simple. Sin embargo te repito que es un detalle de implementación no
relevante.
> Ahora, el numero de cuenta lo puedo cambiar a
> través de la cuenta misma, asique esto haría que no funcione más.
Ehh!!! Qué sentido tiene cambiar un número de cuenta bancaria en este
dominio de problema ???
> De hecho, una vez que se le asigna un número de cuenta, no se debería
> cambiar jamás a no ser que el banco lo requiera.
Mmm... podemos asumir que el banco no lo va a requerir tampoco nunca...
hasta podríamos asumir que por más que se borre una cuenta, ese número
no será asignado a ninguna nueva que aparezca.
> Entonces, ¿cómo hago
> que el número de cuenta sea menejado sólamente por el banco?
Facilísimo! No se escribas un setter!!!
> Otra complicación es que el setIdCuenta() debería hacer una
> revisión de que ésta no se repita en la colección para que no haya dos
> cuentas repetidas, pero la cuenta no tiene acceso a la colección,
No hace falta: basta que lo implemente el Banco->agregarCuenta()
> tampoco debería, ya que de esto se tiene que encargar el banco.
Justamente esto es lo que implica el breve código acá arriba.
> Insisto con la idea de que en este caso, el objeto banco es el que
> administre los numeros de cuenta, ya que éste SI tiene todos los
> medios para manejar todos estos inconvenientes. De todas formas, en tu
> ejemplo:
>
> - Cuenta! Dame tu Titular.
> - Pedrito, Sr.
> - Cuenta! Dame tu Saldo.
> - $350.00, Sr.
> - Cuenta! Dame tu Número para saber quién sos.
> - eerrrhhhh... no lo sé, Sr. Alguien mé asignó un número, pero nunca me
> lo dijeron.
>
> Si yo tengo que pedirle datos a la cuenta, primero tengo que acceder a
> ella, y para ello YA TENGO el número de cuenta.
Correcto! Pero no hay problema con esto!
Basta que el banco tenga algún mecanismo, y de hecho lo tiene, para
poder devolver todas las cuentas o buscarlas por algún criterio.
> O pensandolo de otra
> forma, esta cuenta también debería saber a qué banco pertenece, ya que
> el numero de cuenta está relacionado con el banco.
Nop! Esto no es pensar de otra forma lo que decís arriba...
Absurdo: "una alacena tiene una lata de tomates... o pensándolo de otra
forma, una lata de tomates tiene una alacena".
Si nos atenemos a la relación que implica entre las cosas la palabra
"tener", esto no tiene sentido. Pasa que la palabra "tener" puede
significar varias cosas según el contexto.
A esto es a lo que me refiero cuando digo que hay que ser muy precisos
con el lenguaje. Yo hubiera expresado "el Banco contiene Cuentas", lo
que impide pensar que "las Cuentas contienen un Banco" sino en la
correcta inversa de la relación que es "las Cuentas están contenidas en
un Banco".
Lo nombramos en clase, pero por ejemplo por esto los métodos tienen que
se verbos en infinitivo, porque cuando se usa voz pasiva, uno termina
invirtiendo las relaciones.
> Tengo muchos cabos sueltos con esto que me siguen dando vueltas en la
> cabeza, espero poder aclararme pronto asi sigo con el ejercicio 2.3.
Adelante entonces!
--
Leonardo Tadei
leonardot en pegasusnet.com.ar
http://blog.pegasusnet.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
Más información sobre la lista de distribución Php-objetos