私はSmalltalkの初期の歴史を読んでおり、その意味の理解に疑問を抱かせる「割り当て」についての言及がいくつかあります。
OOPは多くの動機から来ましたが、2つが中心でした。大規模なものは詳細の隠蔽を伴う複雑なシステムのためのより良いモジュールスキームを見つけることであり、小規模なものは割り当てのより柔軟なバージョンを見つけることであり、それからそれを完全に排除しようとしました。
(1960-66から-初期のOOPおよび60年代のその他の形成的アイデア、セクションI)
Simulaから得たのは、バインディングと割り当てを目標に置き換えることができるということです。プログラマーに最後に望むことは、たとえ比fig的に提示されたとしても、内部状態を混乱させることです。代わりに、オブジェクトは、動的コンポーネントとしての使用により適した、より高いレベルの動作のサイトとして提示される必要があります。(...)残念なことに、今日「オブジェクト指向プログラミング」と呼ばれるものの多くが、より洗練された構成要素を備えた単純な古いスタイルのプログラミングである。多くのプログラムには、より高価な添付プロシージャによって実行される「割り当てスタイル」操作がロードされています。
(「オブジェクト指向」スタイル、セクションIVから)
オブジェクトがファサードであり、オブジェクトにインスタンス変数を設定することを目的とするメソッド(または「メッセージ」)(つまり「割り当て」)が目的に反しているという意図を解釈するのは正しいですか?この解釈は、セクションIVの後半の2つのステートメントでサポートされているようです。
永続状態、ポリモーフィズム、インスタンス化、およびオブジェクトの目標としてのメソッドの4つの手法が一緒に使用され、多くの権限を占めています。これらのいずれも「オブジェクト指向言語」を採用する必要はありません--ALGOL 68はほとんどこのスタイルに変えることができます-そして、OOPLは単に特定の実りある方向にデザイナーの心を集中させます。ただし、カプセル化を正しく行うことは、状態の抽象化だけでなく、プログラミングから状態指向のメタファーを排除することを約束するものです。
...そして:
割り当てステートメントは、抽象的なものであっても、非常に低いレベルの目標を表します。何かを成し遂げるためには、それらの多くが必要になります。一般に、シミュレートされているかどうかに関係なく、プログラマが状態をいじり回すことは望ましくありません。
ここでは、不透明で不変のインスタンスが推奨されていると言ってもいいでしょうか?または、推奨されていない単純な状態変更ですか?私が持っている場合たとえば、BankAccount
クラスを、それが持ってOKだGetBalance
、Deposit
とWithdraw
インスタンスメソッド/メッセージ。SetBalance
インスタンスメソッド/メッセージがないことを確認してください?