web-dev-qa-db-fra.com

Qu'est-ce que Alan Kay a voulu dire par "assignation" dans la première histoire de Smalltalk?

J'ai lu la première histoire de Smalltalk et il y a quelques mentions de "assignation" qui me font remettre en question ma compréhension de sa signification:

Bien que OOP est venu de nombreuses motivations, deux étaient centraux. La grande échelle était de trouver un meilleur schéma de module pour des systèmes complexes impliquant la cachette des détails, et la petite échelle était de trouver un plus flexible. version de l'affectation, puis essayer de l'éliminer complètement.

(de 1960-66 - début OOP et d'autres idées formatives des années soixante , section I)

Ce que j'ai reçu de Simula, c'est que vous pouviez maintenant remplacer les liaisons et l'affectation avec des objectifs . La dernière chose que vous vouliez que tout programmeur fasse du désordre avec l'état interne, même si elle est présentée au figuré. Au lieu de cela, les objets doivent être présentés comme Site de comportements de niveau supérieur plus appropriés pour une utilisation en tant que composants dynamiques . (...) Il est regrettable qu'une grande partie de ce que l'on appelle "programmation orientée objet" aujourd'hui est simplement une programmation de style ancienne avec des constructions de fantaisie. De nombreux programmes sont chargés avec des opérations "d'affectation" désormais effectuées par des procédures jointes plus chères.

(de style "orienté objet" , section IV)

Suis-je correct pour interpréter l'intention comme étant que les objets sont censés être des façades et de toute méthode (ou "message") dont le but est de définir une variable d'instance sur un objet (c'est-à-dire une "affectation") vaincre le but? Cette interprétation semble être prise en charge par deux déclarations ultérieures à la section IV:

Quatre techniques utilisées ensemble - état persistant, polymorphisme, instanciation et méthodes - les mêmes objectifs de l'objet - représentent une grande partie de la puissance. Aucun de ceux-ci n'exige un "langage orienté objet" à utiliser - Algol 68 peut presque être tourné vers ce style - et OOPL "concentre simplement l'esprit du concepteur dans une direction fructueuse particulière. Toutefois, , Faire de l'encapsulation à droite est un engagement non seulement d'abstraction de l'état, mais d'éliminer les métaphores axées sur l'état de la programmation.

...et:

Déclarations d'affectation - même abstraites - expriment des objectifs de très bas niveau, et plus d'entre eux seront nécessaires pour que tout soit fait. Généralement, nous ne voulons pas que le programmeur soit en train de jouer avec l'état, qu'il soit simulé ou non.

Serait-il juste de dire que des instances opaques et immuables sont encouragées ici? Ou est-ce simplement direct les changements d'état découragés? Par exemple, si j'ai une classe BankAccount, il est correct d'avoir GetBalance, Deposit et Withdraw méthodes d'instance/messages; Assurez-vous simplement qu'il n'y a pas de méthode/message d'instance SetBalance?

48
Olivier Dagenais

L'idée de base (influencée par SKETCHPAD) est que la plupart des variables/valeurs sont dans les relations dynamiques - les unes avec les autres (maintenues par l'intérieur de l'objet), de sorte que possible de réinitialiser directement une valeur de l'extérieur est dangereuse. Parce que (en smalltalk quand même), il existe au moins une méthode de réglage requise, cela permet de médialiser la possibilité d'une action de réglage extérieure à médiate par la méthode interne pour maintenir les interrelations souhaitées. Mais la plupart des personnes qui utilisent des setters les utilisent simplement pour simuler des affectations directes aux variables intérieures, ce qui enfreint l'esprit et l'intention du véritable OOP.

Mais les objets ont des "lignes mondiales" des changements de temps. Cela peut être considéré comme un -History- de versions de l'objet dans lequel les -relationships - sont conformes. Il n'y a pas de conditions de race dans ce schéma ... Un objet n'est visible que lorsqu'il est stable et qu'il n'est plus informatique. Ceci est comme une horloge à deux phases dans HW. (Idée de Strachey et différent de McCarthy et influencée par Lucid.)

Meilleurs vœux,

Alan Kay

88
Alan Kay

Je réalise qu'Alan a déjà répondu à cette question et cela pourrait donc sembler inutile de répondre plus loin. Cependant, Alan n'a pas répondu à toutes les questions que vous avez eues.

En particulier:

Serait-il juste de dire que des instances opaques et immuables sont encouragées ici? Ou est-ce simplement des changements d'état direct qui sont découragés? Par exemple, si j'ai une classe BankAccount, il est correct d'avoir getbalance, de déposer et de retirer des méthodes/messages d'instance; Assurez-vous simplement qu'il n'y a pas de méthode/message d'instance de setbalance?

La réponse est que vous n'utilisez pas de comportement d'ordre supérieur pour structurer votre programme. Les systèmes de services financiers du monde réel ne doivent pas avoir de méthode de dépôt sur une classe de banque, car ce n'est pas du tout la manière dont les banques travaillaient avant l'invention des ordinateurs! Lorsque des guichets automatiques ont été inventés, ils ont dû automatiser littéralement ce qu'un caissier a fait à la banque. Le rôle d'un caissier serait d'informer les clients de l'état de leur compte. Pour ce faire, le client est autorisé à interagir avec le caissier en quelques façons, telles que la transmission d'un glissement de dépôt au caissier.

En réinciant directement ces objets - Teller, glissement de dépôt, etc. - Le domaine problématique est structuré en fonction des messages transmis par des entités dans le système.

Un compte lui-même joue un rôle - l'idée d'un compte signifie littéralement un compte d'entrées financières et de flux de flux en ce qui concerne un actif, une responsabilité, un revenu ou une dépense. Un système de comptabilité, ou comptable, enregistre et reproduit ces flux et vous indique la situation financière du compte à un moment donné. Le rapport le plus récent de la caissier peut être considéré comme "en ce moment", mais pas vraiment: c'est vraiment la situation financière décrite par le comptable à un moment donné. Il a juste l'illusion d'être "en ce moment" lorsque vous allez à la banque, car vous êtes généralement le seul autorisé à effectuer des paiements. Cela a été particulièrement vrai il y a 100 ans, mais de nombreuses personnes ont des paiements automatisés, et le compte peut changer pendant que vous êtes physiquement à la banque détenant un bordereau d'équilibre - car le bordereau de bilan ne vous indique que sur le temps qu'il était horodatal. .

Pourquoi est-ce important? Eh bien, demandez-vous ce qui doit être fait pour enregistrer une transaction:

Le client a son propre journal d'audit interne de tout ce qu'ils ont fait, y compris des reçus de la banque. De même, la banque conserve son propre journal d'audit interne de tout ce qu'ils ont fait. La banque TOUJOURS fait comptabilité à double entrée , ce qui signifie qu'ils enregistrent des transactions dans le grand livre et le bilan. Cela permet à la banque d'exécuter Rapprochement Et assurez-vous qu'il n'y a pas d'entrées parasites lorsqu'elles ferment leurs livres pour une période donnée (quotidienne, hebdomadaire, mensuelle, trimestrielle, annuelle, trimestrielle, année peu importe). Cela suggère également que l'enregistrement pour ce qui est enregistré devrait être idempotent. Signification, si nous devions écrire un programme pour répertorier toutes les transactions uniques, nous pourrions le faire, même si les doublons parasites étaient dans notre journal d'audit interne, car nous avons intégré des identificateurs de transaction idempotents dans les messages de journalisation.

Compte tenu de la capacité de paiements automatisés pour débiter et créditer votre compte, il semble de constater que le comptable pouvait aussi faire Prévision Pour vous. C'était la réalisation de l'impact que les ordinateurs auraient pu avoir sur les systèmes comptables. En conséquence, quelqu'un a inventé un système de système comptable appelé ressources-événements-agents qui était plus en ligne avec non seulement en regardant le passé, mais également en train d'examiner l'avenir et d'estimer les flux de trésorerie à une granularité plus fine qu'auparavant. Essentiellement, Rea est tout simplement plus de métadonnées que les systèmes de comptabilité classiques, ce qui permet une meilleure déclaration et une analyse commerciale. Par exemple, l'analyse "chaîne de valeur" et "chaîne d'approvisionnement" ne sont pas faciles à voir avec la comptabilité classique.

De même, Informatique Agoric ou Contrats intelligents apporte des idées à partir de mécanismes de marché à l'informatique . Il est important que lorsque vous fournissez un bouchon de dépôt, vous fournissez également un chèque ou un sac à main au dépôt. Comme il existe un délai de guidage entre la réception de la vérification et l'entrée dans votre compte, vous avez besoin d'un moyen sécurisé pour gérer la monnaie. Comme il s'avère, les capacités d'objet sont un moyen naturel d'atteindre une monnaie sécurisée distribuée. Ils peuvent être utilisés pour que Alice ne trompe pas Bob en retirant toutes ses fonds après avoir écrit BOB qui vérifie.

21
John Zabroski