アクセサとプロパティ

L'eclat des jours(2005-06-06)を読んでいて。

.NETにおけるプロパティとアクセサの使い分けが未だにどうしても"すっきり"しません。
Javaを使い始めた頃はいちいちアクセサ(get〜とset〜)を用意するのが機械的で凄く煩わしかったのですがいざ慣れてみると迷いが無いというか習慣のようになってしまっておりEclipseのようにリファクタリング機能でアクセサを自動的に生成できたりすると煩わしさからも解放されてしまいました。.NETを使うようになってDelphiを使っていた頃のようにプロパティが使えると喜んでいたのですがJavaのアクセサに慣れてしまうと今度はアクセサで公開するかプロパティで公開するかを悩むようになってしまいました。(.NETのインタフェースはプロパティをサポートするのも悩ましさの一助になっています)

確かどこかに

.NETの仕様としてプロパティを定義すると暗黙にget_プロパティの名前,set_プロパティの名前というアクセサメソッドが内部に生成されるのでアクセサではなくプロパティとして公開するのが良い

みたいな事が書いていたように思うのですがここで生成されるget_,set_というメソッドはそもそも外部に公開されるアクセサではないのであまり説得力が無いです。
インタフェースがオブジェクトのContract(契約)であるという事を踏まえると.NETのようにC#VB等の複数の言語をサポートするプラットホームのインタフェースは言語間でその契約が変わってはいけないとするとインデクサ等言語によって表記が変わる可能性のあるプロパティよりもアクセサを優先的に公開するほうが好ましいのではないかと考える訳です。
そうすると

・インタフェースとしてまずはアクセサを用意する
・必要であればアクセサに対応するプロパティを公開する

となりそうなのですがこのように決めてしまうと私の周りではプロパティを誰も使わなくなってしまいそうです。
そう考えるとプロパティってプロシジャとファンクションをつき交ぜた変わり者、シンタクスシュガーでしかないのだろうか、等と思うのです。(これも違うと思うのだけれど上手く表現できないです。)

#追記:すっかりarton氏の日記とはかけ離れてしまいました。