principle、LSP)を守ることです。基底型の性質は全て派生型で満たされなければならない(置換可能性)というやつです。実際にこれを守るのは非常に難しいです。理解するのも問題のないように言語仕様を制定するのもコードを書くのも難しいです。1、そして2020と二転三転した部分もあります。これから説明するものは他に契約プログラミングを実装した言語と挙動が異なる部分も多いです。標準化委員会が長年に渡って詰めた結果であり、違和感を感じても熟考していただければと思います。(正直私も違和感がある部分がなくはないです。)そして繰り返しになりますが私の理解がおかしければご指摘いただければ幸いです。Walter先生が深く考えずに実装して後悔しているらしい(?)D言語の挙動はまあ参考にしなくていいとしまして、元祖のEiffelとも異なる部分があります。2020でここが変わったとピンポイントに書くのではなく、全体を見渡す形で説明したいと思います。型とそのプリミティブ(同じパッケージで宣言されたサブプログラム、多態の対象になる)にだけ指定できます。付いた版のアスペクトは(基本的に)派生先にも継承されます。付かない版のアスペクトは(基本的に)その型限りということです。いえアスペクトが継承されなくてもアスペクトによって起こる動作そのものは継承されますから非常にややこしいです。