J'ai lu The Early History of Smalltalk et il y a quelques mentions de "mission" qui me font douter de ma compréhension de sa signification:
Bien que la POO vienne de nombreuses motivations, deux étaient centrales. La solution à grande échelle consistait à trouver un meilleur schéma de module pour les systèmes complexes impliquant la dissimulation de détails, tandis que la solution à petite échelle consistait à trouver une version plus flexible de la tâche, puis à tenter de l'éliminer complètement.
(de 1960 à 1966 - Début de la programmation orientée objet et autres idées formatrices des années soixante , section I)
Ce que j'ai compris de Simula, c'est que vous pouvez désormais remplacer les liaisons et les tâches par des objectifs . La dernière chose que vous souhaitiez que tout programmeur fasse est de manipuler l'état interne, même s'il est présenté de manière figurative. Au lieu de cela, les objets doivent être présentés comme le 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 qu’on appelle la "programmation orientée objet" soit aujourd’hui simplement une programmation à l’ancienne avec des constructions plus sophistiquées. De nombreux programmes sont chargés d'opérations de type "affectation", effectuées maintenant par des procédures attachées plus coûteuses.
(de style "orienté objet" , Section IV)
Ai-je raison d'interpréter l'intention comme étant que les objets sont censés être des façades et que toute méthode (ou "message") ayant pour but de définir une variable d'instance sur un objet (c'est-à-dire une "affectation") est contraire à l'objectif? Cette interprétation semble être étayée par deux affirmations ultérieures de la section IV:
Quatre techniques utilisées ensemble - l’état persistant, le polymorphisme, l’instanciation et les méthodes comme objectifs de l’objet - représentent une grande partie de la puissance. Aucun de ceux-ci ne nécessite l'emploi d'un "langage orienté objet" - ALGOL 68 peut presque être transformé en ce style - et OOPL se concentre simplement sur l'esprit du concepteur dans une direction fructueuse particulière. Cependant, bien encapsuler est un engagement non seulement d'abstraction d'état, mais également d'éliminer les métaphores orientées État de la programmation.
...et:
Les déclarations de mission, même abstraites, expriment des objectifs de bas niveau et il en faudra plus pour que tout soit accompli. En général, nous ne voulons pas que le programmeur se moque de l'état, qu'il soit simulé ou non.
Serait-il juste de dire que des cas opaques et immuables sont encouragés ici? Ou est-ce simplement des changements d'état directs découragés? Par exemple, si j'ai une BankAccount
classe, il est OK d'avoir GetBalance
, Deposit
et les Withdraw
méthodes d'instance / messages; assurez-vous simplement qu'il n'y a pas de SetBalance
méthode d'instance / de message?
la source
Je me rends compte qu'Alan a déjà répondu à cette question et il pourrait donc sembler inutile de répondre davantage. Cependant, Alan n'a pas répondu à toutes vos questions.
En particulier:
La réponse ici est que vous n'utilisez pas un comportement d'ordre supérieur pour structurer votre programme. Les systèmes de services financiers du monde réel ne devraient pas avoir une méthode de dépôt sur une classe BankAccount, car ce n'est pas du tout le fonctionnement des banques avant l'invention des ordinateurs! Lorsque les guichets automatiques ont été inventés, ils devaient littéralement automatiser ce que faisait un caissier à la banque. Le rôle d'un guichetier serait d'informer les clients de l'état de leur compte. Pour ce faire, le client n'est autorisé à interagir avec le caissier que de plusieurs manières, par exemple en transmettant un bordereau de dépôt au caissier.
En réifiant directement ces objets - Teller, Deposit Slip, etc. - le domaine du problème est structuré en fonction des messages transmis par les entités du système.
Un compte lui-même joue un rôle - l'idée de compte signifie littéralement un compte d'entrées et de sorties financières en rapport avec un actif, un passif, un revenu ou une dépense. Un système comptable, ou comptable, enregistre, conserve et reproduit ces flux et vous indique la situation financière du compte à un moment donné. Le rapport le plus récent du caissier peut être considéré comme "en ce moment", mais pas vraiment: il s'agit en réalité de la situation financière telle qu'elle a été 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. C'était particulièrement vrai il y a 100 ans, mais aujourd'hui, beaucoup de gens utilisent des paiements automatisés.
Pourquoi est-ce important? Eh bien, demandez-vous ce qu'il faut faire pour enregistrer une transaction:
Le client dispose de son propre journal d'audit interne de tout ce qu'il a fait, y compris les reçus de la Banque. De même, la Banque tient son propre journal d’audit interne de tout ce qu’elle a fait. La Banque toujours fait la comptabilité à double entrée , ce qui signifie qu'ils consignent les transactions dans la feuille du grand livre et l' équilibre. Cela permet à la banque d'effectuer un rapprochementet assurez-vous qu'il n'y a pas d'entrées parasites quand ils ferment leurs comptes pour un exercice financier donné (quotidien, hebdomadaire, mensuel, trimestriel, annuel, bi-annuel, peu importe). Ceci suggère également que l'enregistrement pour ce qui est enregistré devrait être idempotent. Cela signifie que si nous devions écrire un programme répertoriant toutes les transactions uniques, nous pourrions le faire même si des doublons illicites figuraient dans notre journal d'audit interne, car nous intégrions des identifiants de transaction idempotents dans les messages de journalisation.
Étant donné que les paiements automatisés peuvent débiter et créditer votre compte, il semble logique que le comptable puisse également effectuer des prévisions pour vous. C'était la réalisation de l'impact que les ordinateurs pourraient avoir sur les systèmes de comptabilité. En conséquence, quelqu'un a inventé un système de comptabilité appelé Resources-Events-Agents qui était plus en ligne avec non seulement regarder le passé, mais aussi regarder l'avenir et estimer les flux de trésorerie avec une granularité plus fine qu'auparavant. REA représente essentiellement plus de métadonnées que les systèmes de comptabilité classiques, ce qui permet d'améliorer les rapports et l'analyse commerciale. Par exemple, l'analyse "chaîne de valeur" et l'analyse "chaîne d'approvisionnement" ne sont pas des tâches faciles à faire avec la comptabilité classique.
De même, Agoric Computing ou Smart Contracts apporte des idées allant des mécanismes du marché à l'informatique. Il est important que lorsque vous fournissez un bordereau de dépôt, vous fournissiez également un chèque ou un porte-monnaie à déposer. Comme il existe un délai entre la réception du chèque et son insertion dans votre compte, vous avez besoin d'un moyen sécurisé pour gérer les devises. Il s’avère que les fonctionnalités d’objet sont un moyen naturel d’atteindre une monnaie sécurisée et distribuée. Ils peuvent être utilisés pour s'assurer qu'Alice ne trompe pas Bob en retirant tous ses fonds après avoir écrit ce chèque à Bob.
la source
BankAccount
exemple de jouet trop commun .