[Php-objetos] Gonzalo Re: Correccion Ejercicio 2 Clase 2
Leonardo Tadei - Pegasus Tech Supply
leonardot en pegasusnet.com.ar
Mie Mar 11 14:16:30 ARST 2009
Gonzalo!
El mié, 11-03-2009 a las 09:57 -0200, .txalo. escribió:
> Leo.
> Te vuelvo a mandar el ejercicio de las cuentas bancarias pero con
> algunos cambios.
> A ver:
> 1. Saque todo lo que son estilos de la definicion de la clase, lo
> puse afuera en la VISTA!
Bueno, en rigor, para separar un Modelo y una Vista hace falta también
un Controlador.
Me parece más sano no decorar los errores que implementar tan mal un
MVC...
> 2. Hice unas funciones para escribir un poco menos, asi no tenia que
> poner un try/catch por cada operacion, se supone que en un caso real
> no van las funciones eh!.
Mi querido Gonzalo: este ejercicio ES un ejercicio REAL.
Si te parece que hay comportamiento repetido, modelalo en una clase.
Desde que se inventó el copiar y pegar, no hay absolútamente ninguna
excusa para hacer un híbrido en esta etapa tan temprana del uso de los
objetos.
Una desilusión...
> 3. En el catch de la excepcion, puse los estilos visuales.
Ni suman ni restan... cuando se escribe solo el modelo, ver la
excepción en el navegador es lo habitual.
Estás manejando las excepciones para... a ver... para ningún
comportamiento del sistema. Lo útil de las excepciones que un código, de
interceptarla, podría HACER ALGO como volver atrás una operación,
invocar a otro objeto... esto no solo es superfluo, sino que además lo
implementaste mal, con esas funciones que escribiste.
> 4. Yo hago esto:
> $miBanco->getCuentaByCBU($CBU)->depositar($cantidad);
> print $miBanco->getCuentaByCBU($CBU)->getSaldo();
> No seria mejor algo asi:
> $cuentaAux=$miBanco->getCuentaByCBU($CBU)
> $cuentaAux->depositar($cantidad);
> print $cuentaAux->getSaldo();
Ambas cosas hacen exactamente lo mismo. No veo mejor ni peor, salvo
cuestión de gustos.
De echo en tu ejemplo podrías haber seguido usando $cuanta1, $cuanta2 y
$cuenta3, ya que al ser una agregación, siempre se trata del mismo
objeto. Es decir, hay 3 formas de escribir esto en tu ejercicio.
> 5. Creo que eso es todo ...
No por acá... tenés esto:
public function extraer($cantidad){
if ($cantidad > $this->getDiario()){
$error = "El maximo permitido es de ".$this->getDiario().".";
$error .= ($this->getSaldo() < $this->getDiario()) ? "
Disponible: $ ".$this->getSaldo() : " Disponible: $".$this->getDiario();
throw new Exception ($error);
}elseif ($cantidad > $this->getDiario()){
$error = "La suma excede su limite de $100 diarios.";
$error .= ($this->getSaldo() < $this->getDiario()) ? "
Disponible: $ ".$this->getSaldo() : " Disponible: $".$this->getDiario();
throw new Exception ($error);
/*}elseif ($cantidad > $this->getSaldo()){
throw new Exception ('Saldo insuficiente. Disponible: $
'.$this->getSaldo().'.');*/
}else{
parent::extraer($cantidad);
$this->diario -= $cantidad;
}
}
sacando que los mensajitos de excepción son completamente floridos para
estar en el Modelo, si no veo mal, preguntás 2 veces por lo mismo:
($cantidad > $this->getDiario())
Juan, en un exceso de prolijidad, preguntaba si el día o el mes había
cambiado según la cuenta. Tu código no tiene en cuenta que el tiempo
pasa. No hace falta que lo escribas, pero me interesa que quede claro.
Por último, deberías haber sospechando que la cantidad de IF en
extraer() viene creciendo, lo que significa alguna cosa... te paso mi
implementación de extraer(), que entre otras cosas funciona casi sin
cambio para los 3 tipos de cuenta:
public function extraer($unMonto){
if (puedeExtraer($unMonto) {
parent::extraer($unMonto);
// alguna actualización relativa a esta cuenta en particular,
//como actualizar el límite o la cantidad de extracciones
}
}
Saludos!!
PD: ni las galletitas caseras te salvarán de haber escrito funciones
dentro del código }:->
--
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