>> Cの場合は、プログラマ各人がきちんと気をつけるというルールによって、
>本題から外れるが、抽象データ型(構造体の中身は秘密、公開関数だけ使って中身を操作)ってのは C
>でも常套手段だと思われ。FILE とか。

もちろんその通りなんだけど、実はFILE構造体のメンバへのアクセスは自由でしょ。
開発者が、そういう邪悪な事をしないという約束でやってるだけで。

>グローバル変数は、アプリケーションのトップオブジェクトとかコマンドラインオプションの解析結果を入れ
>ておくのに使うことはあるな。特にコマンドラインの解析結果に関しては、getter, setter つけても本質的に
>何も安全にならないし。

アプリケーションのトップオブジェクトだけだよね。トップオブジェクト以外は全て参照チェインでアクセス
できるインスタンスにしておくよね。ウチの知り合いの馬鹿は、いろいろなクラスにpublic static
NOTfinalな変数があって、しかもそれぞれの関係がある状態でないとちゃんと動かないアプリケーションを
作っている。しかもある会社の業務基幹システムで。いいのか?と思う。

コマンドラインみたいなものは、setterを作らないというのがあるけどな。getterだけ。
誰も参照を変更できないようにしておく。