Eu tenho lido The Early History of Smalltalk e há algumas menções de "designação" que me fazem questionar minha compreensão de seu significado:
Embora a OOP tenha provocado muitas motivações, duas eram centrais. O de grande escala consistia em encontrar um esquema de módulo melhor para sistemas complexos que envolvem ocultação de detalhes, e o de pequena escala consistia em encontrar uma versão mais flexível da atribuição e depois tentar eliminá-la completamente.
(de 1960 a 66 - OOP inicial e outras idéias formativas dos anos sessenta , Seção I)
O que eu recebi de Simula foi que agora você poderia substituir os vínculos e as tarefas por objetivos . A última coisa que você queria que qualquer programador fizesse era mexer com o estado interno, mesmo que apresentado de maneira figurada. Em vez disso, os objetos devem ser apresentados como site de comportamentos de nível superior, mais apropriados para uso como componentes dinâmicos . (...) É lamentável que muito do que hoje é chamado de "programação orientada a objetos" seja simplesmente programação de estilo antigo com construções mais sofisticadas. Muitos programas são carregados com operações de "estilo de atribuição", agora executadas por procedimentos anexos mais caros.
(do estilo "Orientado a objetos" , Seção IV)
Estou correto ao interpretar a intenção de que os objetos devem ser fachadas e qualquer método (ou "mensagem") cujo objetivo é definir uma variável de instância em um objeto (isto é, uma "atribuição") está vencendo a finalidade? Essa interpretação parece ser apoiada por duas declarações posteriores na Seção IV:
Quatro técnicas usadas em conjunto - estado persistente, polimorfismo, instanciação e métodos como objetivos para o objeto - são responsáveis por grande parte do poder. Nada disso exige que uma "linguagem orientada a objetos" seja empregada - o ALGOL 68 quase pode ser voltado para esse estilo - e a OOPL apenas concentra a mente do designer em uma direção frutífera específica. No entanto, fazer o encapsulamento correto é um compromisso não apenas com a abstração do estado, mas com a eliminação de metáforas orientadas pelo estado da programação.
...e:
As declarações de atribuição - mesmo as abstratas - expressam objetivos de nível muito baixo, e serão necessários mais deles para que tudo seja feito. Geralmente, não queremos que o programador esteja mexendo com o estado, simulado ou não.
Seria justo dizer que instâncias opacas e imutáveis estão sendo encorajadas aqui? Ou simplesmente as mudanças diretas de estado são desencorajadas? Por exemplo, se eu tiver uma BankAccountclasse, não há problema em ter GetBalance, Deposite Withdrawmétodos de instância / mensagens; apenas verifique se não há um SetBalancemétodo / mensagem de instância?