He estado leyendo The Early History of Smalltalk y hay algunas menciones de "asignación" que me hacen cuestionar mi comprensión de su significado:
Aunque la POO provenía de muchas motivaciones, dos eran centrales. El de gran escala era encontrar un mejor esquema de módulo para sistemas complejos que involucraban la ocultación de detalles, y el de pequeña escala era encontrar una versión más flexible de la asignación y luego tratar de eliminarla por completo.
(de 1960-66 - OOP temprana y otras ideas formativas de los años sesenta , Sección I)
Lo que obtuve de Simula fue que ahora podías reemplazar los enlaces y la asignación por objetivos . Lo último que quería que hiciera cualquier programador es meterse con el estado interno, incluso si se presenta de forma figurada. En cambio, los objetos deben presentarse como sitios de comportamientos de nivel superior más apropiados para su uso como componentes dinámicos . (...) Es lamentable que gran parte de lo que hoy se llama "programación orientada a objetos" es simplemente una programación de estilo antiguo con construcciones más sofisticadas. Muchos programas se cargan con operaciones de "estilo de asignación" que ahora se realizan mediante procedimientos adjuntos más caros.
(del estilo "Orientado a objetos" , Sección IV)
¿Estoy en lo correcto al interpretar que la intención es que los objetos están destinados a ser fachadas y que cualquier método (o "mensaje") cuyo propósito es establecer una variable de instancia en un objeto (es decir, una "asignación") está frustrando 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 casi puede recurrir a este estilo) y OOPL simplemente enfoca la mente del diseñador en una dirección fructífera en particular. Sin embargo, hacer la encapsulación correctamente es un compromiso no solo con la abstracción del estado, sino también con la eliminación de metáforas orientadas al estado de la programación.
...y:
Las declaraciones de asignación, incluso las abstractas, expresan objetivos de muy bajo nivel, y se necesitarán más para hacer cualquier cosa. En general, no queremos que el programador esté jugando con el estado, ya sea simulado o no.
¿Sería justo decir que aquí se fomentan instancias opacas e inmutables? ¿O se trata simplemente de cambios directos de estado que se desaconsejan? Por ejemplo, si tengo una BankAccount
clase, que está bien tener GetBalance
, Deposit
y Withdraw
los métodos de instancia / mensajes; solo asegúrese de que no haya un SetBalance
método / mensaje de instancia?