第3回.UMLで勉強しなおし。
Masa: 前回までに、一番構造の簡単な'run&run'を使って、リバースエンジニアリングしたクラス図の手直し、分割したファイルをJBuilderでコンパイルする方法などをざっとやりましたので、今回は少し複雑なソフトをやっていこうと思います。
ほるえ: あ、掲示板に「すらすれ」の雛型はないか?って出てましたよ。
Masa: ああ、「すらすれ」もいずれはやらないと行かんけど、ちょっといきなりレベル上げすぎなので、「インベーダ」あたりからやっていこうと思います。複雑なソフトは少しお待ちください。
ほるえ: まさか、この調子で全部を作り直しするんですか?
Masa: そうだなー、全部をこうやってHTMLにするかは、ともかく、あまり怪しいソースをずっと放っておくのは、このページの趣旨からも、反するしな。
ほるえ: へー。いつになくまじめモードですね。ほれ、「みょーん」とかいってみ。
Masa: おまえなー何時おれそんなこといった?

「インベーダー」をリバースエンジニアリングしてみる。



もとのコードは、こちら↑

 下にインベーダーをリバースエンジニアリングした物を載せました。このコードはそれなりにクラス分けされてはいるのですが、こうやってクラス図にすると結構穴が見えます。主に次の部分を修正したいと思います。



クラス図から見た要修正ポイント。

@ アクティブクラス「hiona17」に処理を入れすぎ、全体構造の見通しが悪くなっている。
A 各クラスから「hian17」で定義した変数を使っているため、両側→になってしまっている。
B 各クラスで共通のメソッドがあるので「継承」を使ってまとめる。
C ついでにユーザーが操作する船を「Raket」ではなく、「Myship」に変更する。

ほるえ: へー。こんなに修正するところあるのにちゃんとゲームになってたのが、すごいですよね。
Masa: そのへんが、Javaのすごいとこで、きちんとオブジェクト指向型で書こうと思えばちゃんとかけるし、そうでない場合も動くものにすることができる。
ほるえ: ていうことは、これはこれでいいってことですか?
Masa: まあ、動く動かないからいえば、動いている以上はOKかな。でも、このままだとコードの再利用がしにくいよな。
ほるえ: コードの再利用って?
Masa: つまりは、あるソフトを作るときは、いろいろなクラスなり、メソッドを作る。そのソフトが終わって、次に作る時また一から出直しじゃ大変だろ。だから最初から、再利用できるように作っておいたほうが楽だよな。
ほるえ: むーぅ、つまり分別ごみってことですか?
Masa: おまえなー。俺のコードはジャンク扱いかよっ。

クラス図を整理する。


@各キャラクターの共通コードをまとめた「Characterクラス」をつくり、そこから継承することでコードを節約しています。
Aアクティブクラス「hina17」から直接各クラスへ接続していた部分を、コンピュータ側は「Enemyクラス」、ユーザー側は「Userクラス」を介して行うことにしました。こうすることで、アクティブクラス「hina17」側の負荷を減らしています。
B各クラスに必要な属性をばらしておいています。こうすることで「hina17」の属性を減らしました。

でこんなクラス図にして見ました。


Masa: 前回は、このままコーディングに入ったけど、今回は変更点も多いから一度シーケンス図を書いて見直すことにします。
ほるえ: あ、こっちでもシーケンス図をするですか?まさか、連載を使って密かに練習していません?
Masa: 密かじゃなくて、公然と。このホームページの裏目的は、Masa成長を描いたドキュメンタリーなのだ。って何でおまえ赤いモビルスーツを引っ張り出してるんだ?
ほるえ: えーと。マスターの成長記録ならば、ほるえの役はやっぱりこっちかなっ、とおもって・・・
Masa: だから、おまえどっからそんなネタを・・・

Copyright (C) 錬金術師Masa
新規:2005年12月3日