[ooaa main]  [object pasta2]   [essence] (旧blogはこちら)  [flickr]  [myspace]  [View Eiichi Hayashi's profile on LinkedIn] 

相互参照の言語サポート

逆の発想として、オブジェクト間の相互参照がデフォルトである言語仕様を作成できないだろうか。 関連としての変数にセットするときに必ずセットされる方の参照が相手にセットされてしまう機構を持つ言語仕様にしてしまう。
また参照可能性をキーワードとして指定できるようなものも可能だろう。

追記:4/28
いやまだまだ改良の余地があるなぁ。 ケイゾク
例えば こんな感じ

class Some
{
    oneway public OtherObj other; //相手への参照のみもつ。
    public OtherObj1 other1; //相互参照。
}

class OtherObj1
{ 
   //片側だけ書けば両方に書く必要ない。
}

アクセス方法案

Some s = new Some();
s. other1 = new OtherObj1(); //これだけで相互接続になる。

if( s == s. other1.~other1 ) // "~"を相手の変数名につけることで逆参照ができる。
{
    System.out.println( "same object!" );
}


s. other = new OtherObj(); // 片側のみの参照。
if( s == s. other.~other ) // "~" をつけるとコンパイルエラーとなる。
{
    System.out.println( "same object!" );
}


今までのソースとの互換性をたもつために、相互参照の方にキーワードをつけた方がいいかもしれない。
例えば”mutual”とか。

class Some
{
    public OtherObj other; //相手への参照のみもつ。
    mutual public OtherObj1 other1; //相互参照。
}