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 BankAccount
classe, não há problema em ter GetBalance
, Deposit
e Withdraw
métodos de instância / mensagens; apenas verifique se não há um SetBalance
método / mensagem de instância?