第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日
http://www.katch.ne.jp/~mh524-1997/