Javaパッケージの考察

Javaのメソッドにおけるアクセス修飾子は、 同一クラス内である(private)か否か パッケージプライベートである(なし,protected)か否か サブクラスである(protected)か否かという単位でしか制限できませんよね ということは、サブシステム間でクラスを共有する場合、相手のサブシステムに公開したくないクラスは必然的に同一パッケージに入れる必要があり、管理が難しくなると思いますが、実際現場ではどのようにされているのでしょうか。 また、私はサブパッケージであるか否かという、アクセス制御があれば、問題が解決できると考えますが、如何なのでしょうか。そして、他の言語にそのような概念があるものは存在するのでしょうか。
を質問させていただきました。愚問にもかかわらず、ご回答いただきまして、ありがたく思います。
カプセル化オブジェクト指向の根幹を成すため、非常に重要な機能ですよね。でも、身の回りのプロジェクトのソースを見る限り、クラスとメソッドのprivate、publicのアクセス制御以外はあまり有効活用されていません。上級者が考えるアクセス制御を考えたパッケージ構造はどうしてるのかな?という疑問がありました。理想はTCP/UDPのポート開放のように、「デフォルトは全部閉じていて、必要な箇所だけ空ける」だと考えているので。

次に、yuki_n様よりご意見(id:yuki_n:20060426)をいただきましたので、私なりに考察させていただきたいと思います。
ご意見を元に、ロバストネス図を起こしてみました。
※グレーになっているのは、クラスのアクセス制限が、パッケージプライベート(アクセス修飾子無し)のクラスです

クラスのカプセル化について、ご意見をいただいたと認識しています。
おっしゃるとおり、コントローラはカプセル化しやすいですね。
(facaceパターンですね)
一方、エンティティについては、yuki_n様のお話にある、
「制限をかけたい場合は同一パッケージにすれば良いだけ」ということを検証してみると、hoge.dataとhoge.controlerを同一にするだけでは無理で、view.hogeも同一にしなくてはならないと考えています。
このように、レイヤや機能を跨ぐエンティティはpublicにせざるを得ないと考えています。
まだまだ未熟者ですので、どなた様でもご指摘いただければありがたく思います。よろしくお願いいたします。