Nunca he sido un defensor de la programación orientada a objetos, y en todo caso, he crecido menos y más aprendo sobre programación en general. Al estudiar diferentes paradigmas de programación, me di cuenta de que la inmutabilidad es uno de los conceptos centrales del diseño de programas, que afecta el software escrito de acuerdo con cualquier filosofía. Es muy importante en la programación funcional, con implicaciones en la optimización y concurrencia además de las simples garantías de seguridad.
Básicamente, todo lo que puede ser inmutable probablemente debería serlo, a menos que tenga una buena razón para un estado mutable. En mi experiencia, escribir programas en cualquier idioma para alcanzar este objetivo conduce a un código mejor y más seguro . No tiene nada que perder si lo utiliza const
, ¡la inmutabilidad es gratuita!
(Por cierto, he jugado con la idea de crear una bifurcación de GCC para un dialecto de C ++ en el que todos los tipos están const
calificados explícitamente como mutable
. Si hay soporte para tal cosa, me comprometeré totalmente a mantenerlo y usarlo).
Desde el punto de vista de OO, la inmutabilidad impone la encapsulación al evitar el acceso de escritura sin restricciones. Reduce el acoplamiento entre clases porque los objetos inmutables deben gestionar completamente su propio estado y, por lo tanto, comportarse como valores normales. La corrección constante facilita significativamente el proceso de probar la corrección del programa, especialmente en el contexto de la programación concurrente. Con la referencia de C ++ y la semántica de referencia de valor de C ++ 0x, puede hacer uso de objetos inmutables sin preocuparse por la sobrecarga de copiarlos por todas partes. Además, el compilador puede funcionar con una magia de optimización bastante sorprendente si está trabajando con objetos en su mayoría inmutables.
Sé que apesta escribir en const
todas partes, pero se acostumbra rápidamente y los beneficios se hacen evidentes con el tiempo en términos de confiabilidad y facilidad de mantenimiento. No soy un escritor brillante, y parece ser una tarea difícil de demostrar, pero sé que la corrección constante me ha sido de gran ayuda como desarrollador al diseñar e implementar programas, y creo que la experiencia es El mejor profesor en este sentido.