Concepto

Son bugs que aparecen en nuestro programa cuando no estamos mirando, los cuales se llaman asi, Refiriéndose a los errores como "errores" debido a una distracción antropomórfica agradable que permite a un programador evitar culpa directa. De esta manera entramos en un concepto erroneo por no asumir la culpa directa de nuestros errores, pensando que dichos errores aparecen como por arte de magia en el codigo, cosa que no es asi, puesto que esos errores son introducidos por nosotros mismos.

Como evitar dichos Bugs?

I) Una de las maneras de evitar dichos bugs futuros es, mantener una separacion adecuada de dichas preocupaciones, es decir, diseñar el codigo para que las clases y modulos tengan responsabilidades claras, bien definidas y aisladas, con una semantica bien entendida. Pero en la vida real esto es complicado de lograr.

II) Para lograr resolver la problematica planteada en el item I) lo ideal es aprender mediante la prueba y error, es decir, que necesitamos, hacerlo una y otra vez, para poder ganar experiencia y en cada intento hacerlo mejor. Para eso escribimos un codigo “timido”, lo cual hace referencia a que ese codigo, no deberia comunicarse ni revelar mas de lo minimo e indispensable, de esta manera el codigo se mantiene asi mismo, sin depender de los otros codigos timidos, y de esta misma manera este codigo no revelaria su informacion a nadie más (la mantiene privada).

TELL DON’T ASK (CUENTAME NO PREGUNTES)

I) Hay una gran diferencia entre el procedural code y OO code, y es que el procedural tiende a tomar informacion, y luego actua en base a dicha informacion, por otro lado, el 00 code tiende a decirle a los objetos que hagan cosas, es decir, se le envian comandos (mensajes), y el objeto realiza un comportamiento que corresponda, al mensaje enviado, de esta manera evitamos hacer acciones que dependan del objeto llamado, puesto que eso no nos interesa, lo que nos importa es mandar un mensaje, y que el objeto haga el comportamiento que corresponda.

¿Por que esta mal obtener el estado del objeto explicitamente, y actuar en base a ese estado?

Esta mal porque para nuestro paradigma OO, la logica que estamos implementando es responsabilidad del objeto llamado, no del objeto que hace la llamada. con lo cual estamos rompiedo el encapsulamiento del objeto llamado, pues, tomar decisiones fuera del objeto que las toma, ESTA MAAAAL. Se deja el codigo expuesto a todo el mundo (codigo abierto).

EJEMPLO DE COMO HACERLO INCORRECTO:

Supongamos que el chico del periódico viene a tu puerta, exigiendo el pago de la semana. Usted

se da la vuelta, y el chico de papel tira tu billetera fuera de tu bolsillo trasero, Toma los dos dólares, y devuelve la cartera. Tan absurdo como suena, muchos programas están escritos en este estilo,

que deja el código abierto a todo tipo de problemas (y explica por qué el chico del papel ahora conduce un Lexus).

EJEMPLO DE COMO HACERLO CORRECTO: