9 reglas para una mejor orientación a objetos

INGSOFT

En las conferencias de la XPWeek, Sebastián Hermida nos explicaba los nueve reglas o (pasos) de Jeff Bay para conseguir mejores diseños orientados a objetos y, en general, código más limpio. Al loro, porque algunas te pueden sorprender:

  1. Solo un nivel de indentación por método. Es decir, un solo nivel de if, for, etc. Por tanto no puede haber if anidados ni un if dentro de un for, ni esas cosas que solemos hacer y que huelen tan mal.
  2. No uses else. Pues eso, lo que oyes.
  3. Envuelve todos tus tipos primitivos y strings. Todos tus tipos de datos deben ser clases relacionadas con el dominio del problema.
  4. Use only one dot per line. No puedes invocar un método de un objeto resultado de invocar otro método.
  5. No uses abreviaturas. Los nombres completos son más claros. ¿de verdad es un problema unas cuantas letras más?
  6. Mantén pequeñas todas las entidades. Otra forma de decir KISS. Clases pequeñas, métodos pequeños, menos es más.
  7. No crees clases que tengan más de dos atributos. Esto si que es duro…
  8. Usa colecciones de primera clase. Si tienes una clase que contiene una colección como atributo, no debería tener ningún otro atributo.
  9. No uses getters, setters ni propiedades. Otra forma de decir «olvida todo lo que has aprendido en la escuela».

Habrá que probar a ver si funciona.

Más información

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de oscarah

¿sin propiedades?

Jolín, ¡con lo que me gustan! ¿Porqué no?

"aviso: la dereferencia de punteros de tipo castigado romperá las reglas de alias estricto" --GCC 4.3.1

Imagen de david.villa

Al fin y al cabo las

Al fin y al cabo las propiedades son getters disfrazados.

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.

Imagen de oscarah

¿Por qué?

Esta bien como opinión personal, pero, ¿cuál es la razón (argumento) que esgrime para afirmar eso?

"aviso: la dereferencia de punteros de tipo castigado romperá las reglas de alias estricto" --GCC 4.3.1

Imagen de david.villa

Como dice «el tío Bob» el objetivo es «Tell, don’t ask»

http://tomasmuller.com.br/2009/05/04/rule-9-don%E2%80%99t-use-any-getter...

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.

Imagen de magmax

Precisamente.

Precisamente por eso es por lo que digo que no entiendo la restricción de los properties. Éstos pueden tener funcionalidad.

Otro ejemplo más sencillo que el triángulo: la clase cuadrado:

class cuadrado(object):
    def __init__(self, lado):
        self._lado = lado
 
    area = property (lambda: self._lado**2) 

¿Qué ocurre en este caso?

Miguel Ángel García
http://magmax.org

Imagen de david.villa

Supongo que la intención es

Supongo que la intención es lo que le decía al Oscar y que tú mismo comentabas en el curso. Se trata de forzar una interacción «push» con los colaboradores en lugar de «pull», es decir, les das órdenes, no les pides que te den cosas.

Saludos

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.

Imagen de magmax

No estoy de acuerdo.

Hola.

No estoy de acuerdo en que las propiedades sean getters disfrazados. Son "getters a medida", es decir, que se utilizan cuando se necesitan, y no "porque sí".

Estoy en contra de los "accessors" (getters/setters), aunque en Java no queda más remedio, ya que si en algún momento alguno cambia, tienes que hacer una interfaz incompatible hacia atrás.

Sin embargo, las properties pueden dar más información que un puro acceso. Por ejemplo, si tenemos el objeto "Triángulo", podemos tener los atributos "cateto1", "cateto2" e "hipotenusa" y el property "area".

Un saludo.

Miguel Ángel García
http://magmax.org

Imagen de nacho

Tocando los c*j*ncillos

Sólo por tocar los webs y no perder mi condición de pedante, diré que tu ejemplo es para la clase TrianguloRectangulo, ya que sólo éstos tienen hipotenusa... Sticking out tongue

Nacho