ソフトウェア開発において情報はどこまで見せるか 5

個人情報、プライバシー情報、企業の機密情報などと言ったコンピュータ上に存在する守るべきデータは、プログラマーから見ると「どのようにでも扱うことが出来る」ものです。話はコンピュータ上でどのようにデータは扱われているか、どのように扱えるのか、ということです。オブジェクト指向言語では最も一般的であろうと思えるJava言語を参考に考えます。

 

Java言語でデータの公開範囲を考えるには、パッケージという空間がまず大事になります。

 

アプリケーションはパッケージの集合として構成されます。そしてパッケージはクラス名の集合を持ってる。SNSのサービスに登録しようとした時に、自分と同じ名前が重複していて登録出来ないことがあります。

「既に登録されています、違うIDを使用していください」とメッセージが出てくるけれど、すごく残念な思いをしたことはないでしょうか。

本来は使用者から見て、自分が使用したいIDを重複したとしても使ってるように見せてくれればいいはずで、事実FBやG+などはIDは自動的に付与され、使用者は自分の名前を幾ら重複しようが使用出来るようになっています。同じ名前でも別のIDを裏側で扱うことによって衝突をさけているわけです。

パッケージはクラス名の重複を可能にします。パッケージは同じような意味合いで「名前空間」と呼ばれる事があるけれど、それはこのような理由があるからです。

 

プログラマはパッケージを宣言しない事も可能ですが、この場合コンパイラは無名パッケージとして自動登録します。無名パッケージはimport文に指定することが出来ないため、サブパッケージを持つことは出来ません。

 

そしてまたパッケージは、コンパイル単位を意識するべきものです。パッケージは横並びの他のパッケージとメッセージをやり取りすることが出来ますが、その可否を「観測可能性(observable)」と呼びます。観測出来ないパッケージに依存するプログラムはコンパイル出来ません。作成したパッケージが重要な情報を扱う場合、外部のプログラムからどこまでアクセスを可能にするのか。

これはとても難しい問題ですが、そこで参考にすべき言葉が先にあげたジョシュアの言葉「アクセス可能性を最小限にする」です。

 

Javaではプログラミングに有益であり、かつ、観測可能性を縛る必要のないパッケージ(java.langやjava.util等)に関しては、全て「観測可能」な状態をとっています。観測可能であるとはどういうことか。

 

・パッケージの宣言を保持しているコンパイル単位が観測可能である場合

・パッケージのサブパッケージが観測可能である場合

 

上記の2つを満たして真であれば、「常に観測可能である」と結論出来ます。

 

 

====================================================================

※参考文献

Java言語仕様 第3版」(ピアソン・エデゥケーション)

「The Java 仮想マシン仕様」(アジソン・ウェスレイ)