[Php-objetos] Práctico 1 - Gustavo
Leonardo Tadei - Pegasus Tech Supply
leonardot en pegasusnet.com.ar
Mie Feb 18 18:20:48 ARST 2009
Hola Gustavo,
van unos comentarios sobre el código.
En general está bien, resuelve el problema y está lindo.
Sin embargo hay algunos detalles que me gustaría modifiques, para que
le saques más el jugo a esto de los Objetos.
* No tenés definidos constructores. Esto no está ni bien ni mal para
este lenguaje (para otros es obligatorio), sin embargo el no usar
constructores hace que tu inicialización del Objeto para empezar a
usarlo sea muy larga de escribir, con la consiguiente dificultad de leer
el código más adelante.
Me gustaría que le implementes un constructor al menos al Vehículo.
* Tomaste como regla para los setters en prefijo "s_" y para los getters
"g_". No hay ninguna objeción con esto porque sos consistente con tu
propia regla.
Te lo menciono porque la regla "aceptada universalmente" es
setNombreAtributo y getNombreAtributo. Ya se: los estándares son tan
buenos que cada cual se crea el propio. Sin embargo una cosa cómoda de
los Objetos es reusar código de otros o de uno mismo para otros
proyectos, y usar una nomenclatura distinta te va a dar más de 3 dolores
de cabeza.
Otra de nombres: usaste para los Objetos nombres en plural. Cualquiera
que vea una clase "Autos" va a pensar en una colección de autos, y no en
que se crea un auto solo. Esta regla es más importante que la otra,
porque más allá de la nomenclatura, nos es lo mismo muchos autos que uno
solo.
* en ConsumoCalcular() validás el tipo de combustible y ponés un print.
Esto significa que si falla, te aparece en pantalla, sin posibilidad de
que otro Objeto maneje el error. Cambiá esto por lanzar una excepción.
* Una de concepto: hacés para calcular el consumo
$Guita=$AutoA->ConsUnitCalcular($Distancia,$Gasoil);
Fijate que le estás pasando el mensaje con el Combustible de nuevo, lo
que significa que el Auto no está usando su Atributo combustible interno
para obtener estos valores, sino el que recibe el método.
Por una parte de esta manera no tiene sentido tener un atributo interno
Combustible, que después usás solo para una validación adentro.
Por otra, el Objeto Auto no es un Objeto "completo", sino que necesita
que le digan "desde afuera" sobre quién tiene que hacer el cálculo.
Por tu validación en ConsumoCalcular(), asumo que querés que sea el
mismo... entonces usá el atributo interno directamente y listo!!!
Entonces, o el interno y lo usás, o el de afuera y el objeto deja de
tenerlo. Habíamos discutido que para este problema, parece tner más
sentido que el Combustible sea un atributo interno del Vehículo,
entonces una vez que cargaste nafta no hay más que decir para que el
resto sea consistente.
* En el script que muestra el funcionamiento tenés:
$PrecioGasoil=$Gasoil->g_Precio();
print("Precio del litro de gasoil: $$PrecioGasoil.</br></br>");
Está correctísimo, pero
print("Precio del litro de gasoil: \${$Gasoil->g_Precio()}.</br></br>");
es lo mismo y te ahorra una variable, lo cual no es relevante en
performance, pero si en tener menos elementos a la vista a la vez al
trabajar.
Te cuento estas "de lenguaje" porque vos venís de otros en dónde este
no se puede hacer.
Seguimos!
--
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