オブジェクト指向の概念というテーマでこの記事を記載しています。今夏は「パッケージ」について記載します。
参考にするサイトはOracleのドキュメントページです。
パッケージ
パッケージは、関連するクラスとインターフェイスのセットを整理する名前空間です。
概念的には、パッケージはコンピューター上の異なるフォルダーに似ていると考えることができます。
HTMLページを1つのフォルダーに、画像を別のフォルダーに、
スクリプトまたはアプリケーションをさらに別のフォルダーに保存することができます。
Javaプログラミング言語で書かれたソフトウェアは、数百または数千の個別のクラスで構成されている可能性があるため、関連するクラスとインターフェースをパッケージに入れて整理することは理にかなっています。
という記載があるのですが、早い話が「ソースは整理して配置しましょう」ということです。
理由は「作成したコードは何度でも利用したいから」です。
整理しないと何がどこにあるかわからなくなりますから(笑)
ポイント
ソースの量は作成するアプリにより変わりますが、何かのアプリを作成するときには「ライブラリ」を使用したり「フレームワーク」を使用したりすると思います。どちらも大差ありませんが「共通部品」(commonパッケージ)と「処理部品」(それぞれの機能の処理部品)と分かれている方が使いやすいです。
パッケージングの例
例えば、HTMLで入力コンポーネントを作成し、計算をサーバー側でやる(簡単な計算はjSでできますが。。。)場合は
- HTMLで入力したものをサーバーにリクエストという形でサーバーに送信します。
- サーバーで受け取った後に入力値を取得して計算結果を返す(レスポンス)
というような実装をするとします。
その場合は、以下のようなパッケージングが可能です。というかサンプルとして使えます。
共通部品:
- HTMLからの入力を受け取る処理と返却する処理(リクエストとレスポンスを処理する部品)
- 計算の種類別の計算処理用の部品(必要なものをそれぞれの部品で呼び出せば良い)
それぞれの処理部品:
画面からの入力で足し算を行うケース
1.共通部品で入力値A, Bを取得
2.AとBの値をどのように計算するかそれぞれの部品で指定(処理)する
3.上の値を共通部品の「足し算」部品で計算
4.計算結果を共通部品「レスポンス処理」で返却
大まかに上記のような形で実装することができます。
このように、パッケージングをしておくと共通部品とそれぞれの処理を行う部品の区別が簡単にできるのでソースが整理されるし、他のプログラマが見たときにも実装しやすいはずです。
簡単ですが、このような考え方でパッケージングを行うと大きなものを作ろうとしたときに便利です。
Javaのみのアプリ
もう一つサンプルとしてのパッケージングを紹介したいと思います。
それは、Javaのみで作成するアプリケーションのパッケージングです。
具体的には、テキストRPG(戦闘シーンのみ)を作成した時のものを紹介したいと思います。
ものはこちらになります。
パッケージの根元には、自分が作成するアプリケーションであるという意味で「jp.zenryokuservice」という名前をつけています。
引き続き、テキストRPGなので「rpg」と付けて、登場するキャラクター、アイテム、シーン(戦闘シーン以外にも作成する予定です。)ユーティリティとパッケージを分けています。
rpgパッケージの直下には、ゲームを起動するためのメインメソッドと、マルチスレッド処理の為のゲームクラス、ロジッククラスと分けて作成しています。
とても単純なもので、複雑にならない様にするのが一番だと思います。
でわでわ。。。