He estado leyendo The Early History of Smalltalk y hay algunas menciones de "asignación" que hacen Me cuestiono mi comprensión de su significado:
Aunque la POO vino de muchas motivaciones, dos eran centrales. El de gran escala consistió en encontrar un mejor esquema de módulos para sistemas complejos que implican el ocultamiento de detalles, y el de pequeña escala fue encontrar una versión más flexible de la asignación y luego tratar de eliminarla por completo.
(de 1960-66: principios de la POO y otras ideas formativas de los años sesenta , Sección I)
Lo que obtuve de Simula fue que ahora podría reemplazar los enlaces y la asignación con objetivos . Lo último que quería que hiciera cualquier programador es entrometerse con el estado interno, incluso si se presenta de manera figurada. En su lugar, los objetos deben presentarse como sitio de comportamientos de nivel superior más apropiados para su uso como componentes dinámicos . (...) Es desafortunado que gran parte de lo que hoy se denomina "programación orientada a objetos" es simplemente una programación de estilo antiguo con construcciones más sofisticadas. Muchos programas están cargados con operaciones de "estilo de asignación" que ahora se realizan mediante procedimientos adjuntos más costosos.
(de Estilo "orientado a objetos" , Sección IV)
¿Tengo razón al interpretar que la intención es que los objetos deben ser fachadas y cualquier método (o "mensaje") cuyo propósito es establecer una variable de instancia en un objeto (es decir, una "asignación") está derrotando el propósito? ? Esta interpretación parece estar respaldada por dos declaraciones posteriores en la Sección IV:
Cuatro técnicas utilizadas juntas (estado persistente, polimorfismo, creación de instancias y métodos como objetivos para el objeto) representan gran parte del poder. Ninguno de estos requiere que se emplee un "lenguaje orientado a objetos" (ALGOL 68 puede casi cambiarse a este estilo) y OOPL simplemente enfoca la mente del diseñador en una dirección particularmente fructífera. Sin embargo, hacer el derecho de encapsulación es un compromiso no solo con la abstracción del estado, sino también con eliminar las metáforas orientadas por el estado de la programación.
... y:
Las declaraciones de asignación, incluso las abstractas, expresan metas de muy bajo nivel, y se necesitarán más de ellas para hacer algo. En general, no queremos que el programador esté jugando con el estado, ya sea simulado o no.
¿Sería justo decir que aquí se alientan instancias opacas e inmutables? ¿O es simplemente directo cambios de estado que no se recomiendan? Por ejemplo, si tengo una clase BankAccount
, está bien tener los métodos / mensajes de instancia GetBalance
, Deposit
y Withdraw
; solo asegúrate de que no hay un método / mensaje de instancia SetBalance
?