- - PR -
パッケージの考え方
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-05-06 16:23
パッケージの考え方に関しての質問です。
Javaにおいてのパッケージとは パッケージ ≒ フォルダ と考えても良いのでしょうか? 例えば、パッケージ宣言したあるクラスを利用する場合、 default(アクセス修飾子無し) 継承:同じフォルダ内なら継承可 利用:同じフォルダ内なら利用可 protected 継承:他のフォルダからでも継承可 利用:同じフォルダ内なら利用可 と言った考え方でも良いのでしょうか。 | ||||
|
投稿日時: 2008-05-06 17:36
classファイルを配置する場合は、パッケージ階層とフォルダ階層を合わせる必要があります。
javaソースファイルは、パッケージ階層とフォルダ階層を合わせる必要はありません。 しかし、管理が面倒になるので、パッケージ階層とフォルダ階層を合わせる様にします。 なので、最初のうちは、「パッケージ≒フォルダ」と考えていいと思います。 JUnitを使用してみれば、分かりやすいと思います。 | ||||
|
投稿日時: 2008-05-06 21:54
パッケージは、クラスパスを基点としたディレクトリ階層と一致します。
専門的な話しになると、クラスローダ等を変更すれば、 ランタイム時であれば自由にすることも可能です。
別パッケージでも継承していれば継承したクラスの、 protectedメンバの利用は可能です。 | ||||
|
投稿日時: 2008-05-07 00:44
パッケージはパッケージで、フォルダはフォルダです。
一般的にはかつのり氏の言うように「パッケージの構成とディレクトリ構成」を一致させます。 したがって、ほとんどの場合において「同一パッケージの〜」というくだりは、「同一フォルダの〜」と言い換える事はできると思います。 ざっくりと言えば、「パッケージ ≒ フォルダ 」で間違いないですが、パッケージは重要な基本概念である為、中途半端に理解するよりはしっかりと理解した方がいいでしょう。 パッケージの概念(制限)の1つが「パッケージの構成とフォルダ構成を一致させないとならない」という事だけです。 予断ですけど、C#だとパッケージ構成とフォルダ構成に制限がないですが、どうも落ち着かないですね(^^; | ||||
|
投稿日時: 2008-05-07 06:08
私の方法は参考になるかわかりませんが、実装時にはパッケージはディレクトリに対応させ、その境界の設定は分析・設計時にドメインに対応させることにより行なってています。
| ||||
|
投稿日時: 2008-05-07 12:24
パッケージ ≒ フォルダ
というのは、そう考えても差し支えない場面が多いのは確かだと思いますが、分けて考えたほうがよいと思います。 例えば、フォルダには階層構造がありますが、パッケージにはありません。 jp.co.atmarkit.wwwというパッケージがあったとして、それはjp.co.atmarkitパッケージに含まれるとか、その下にあるというわけではありませんよね。 RDBMSのOracleは、それ自身の中にJVMを持っており、テーブルにJavaソースファイルとかクラスファイルを格納することができますが、そうなるともうフォルダは全然関係なくなってしまいます。 | ||||
|
投稿日時: 2008-05-07 13:38
JLSには、パッケージの格納にはプラットホームのファイルシステムや、データベースや、などを使える、という意味のことが書いてあるので、「車==車庫」でしょうか?という質問自体がおかしいのではないでしょうか。
カーニー説は正しいけど、でも、パッケージ->サブパッケージという階層はありますよ(*)。しかも格納にファイルシステムを使うときは、ファイルシステムの階層をそのまま使うから、誤解が生まれがちです。同じディレクトリに、a.b.Fooクラスとa.b.c.Barクラスを入れられるルールにしたっていいのにねー?? しかし、import java.util.*.*;はシンタクスエラーになるから、サブパッケージという階層性の機能的な意味がよくわからない。 | ||||
|
投稿日時: 2008-05-07 15:02
あ、ほんとだ。サブパッケージなんていう概念があるのか。
せっかく、サブパッケージという概念があるのなら上位パッケージからのアクセスを許すアクセス修飾子とかあればいいのにねえ。 設計というか管理のためにパッケージを hoge, hoge.sub1, hoge.sub2 に分けたい、hoge.sub1 は hoge からしか利用されないというときに、hoge.sub1 のクラスを public にしないといけないんですよね。それか、同じパッケージにするか。 上位パッケージからのアクセスを許すアクセス修飾子があれば解決するのになあ、と何度思ったことか。言語仕様に、サブパッケージ用のアクセス修飾子追加されないかな。 |