「オブジェクト指向・システム開発」カテゴリーアーカイブ

スパゲッティってどうすればいいの その2

結局スパゲッティか、そうでないかの判断は、そのソースコードを書いている時の自分ではなくて、他人や3ヶ月後の自分が判断します。
つまり、如何に他者に理解してもらいやすく記述するかが大事です。難解な資本論を書く必要はないのです。
プログラムコードも自己の思考の表現方法の一つであるので、他人に理解してもらえるように記述しましょう。
せっかく苦労して書いたものが、ゴミのように捨てられたら悲しいでしょ。

スパゲッティってどうすればいいの

中さんのBlogに「スパゲッティに立ち向かうときのハウトゥ10カ条」がのっております。
すでにスパゲッティになってしまっているものに対しては、中さんのBlogのようにするしかないです。
逆にスパゲッティにさせない(しない)為にはどうするのがいいのかと言うことなんですけど、これはプログラムを適切なモジュールに分割して、その間のシーケンスとして設計し、コーディングしなさいと言うことになります。つまり、プログラムを一度で考えられる(管理できる)大きさに分割して、プログラムを分割統治せよと言うことになります。これをオブジェクト指向では、モジュールをオブジェクトと、シーケンスをメッセージパッシングという用語に置き換えます。
プログラムが人から見てスパゲッティと呼ばれるような状態になってしまうのは、充分に考慮せずにプログラムを作り始めてしまうため、本来プログラミングコードを書き始める前に終えておくべき思考が、コーディング中に行われ、思考の過程がプログラムコード中に分散して記述されてしまい、その結果収拾がつかなくなってしまうためです。つまり、設計が行われていないか、充分ではないために、プログラマの思いつきで関数の分割したり、不必要な構造体を作ったり、辻間あわせのグローバル変数を作ってしまう事になります。これでは、そのプログラマのコーディング中の思考の過程が他人や3ヶ月後の自分には理解が出来ないので、それらがそのプログラムコードを読もうとしてもわけのわからないコードとなってしまいます。
ですので、プログラムコードをスパゲッティにしないためには、コーディングを行う前に一呼吸置いて、自分が作るべきものが何者かを考えもう一度整理する必要があります。何も関数内のロジックを詳細にフローチャート化する必要もないとは思います(全部いらないって事じゃないですよ)が、モジュール化する単位と、各モジュールの関数間の関係とそれらの呼び出し順序ぐらいは紙にメモをとるなりしないと、コーディング中に収拾がつかなくなります。そしてそのメモは何らかの形で残すべきです。(本来はそれが設計書となっているはず。)
とりあえずは設計の重要性を認識する(してもらう)事が、スパゲッティコードを書かない、または、それを修正しなくてすむようにするためには必要となります。

J2SE Ver. 1.5

Java Ver1.5というか、Java2 Standard Edition Ver5について変更点がまとまっているところがないかなーとさがしていたのですが、以下のページがばっちりでした。
J2SE5.0トラの穴
http://www5.airnet.ne.jp/sakuraba/java/laboratory/J2SE1.5/contents.html
しかし一番の謎はJavaのバージョニングですね。なぜVer.5.0。

パターンランゲージ

koidoさんのblogにトラックバック
ソフトウェアシステム工学におけるパターンランゲージを考えるのであれば、あまり入り込まずにもう少し緩やかにパターンランゲージをとらえてみてはどうでしょう。
パターンランゲージ自体は明文化されたいない経験則を論理的に他者へ伝えるための方法論だと思います。
たとえばある都市構造や家屋の構造の中に存在する経験からなる普遍なものを抽出して、理解し、つまりは抽象化して、それを記述する手段とがパターンランゲージであり、その結果がアレクサンダー氏の著書だと思います。
ですので、ソフトウェア設計作業の中にある普遍的なものを抽出して、解釈、記述したものがソフトウェアデザインパターンになりますし、分析作業に対して同様のことを行うとアナリシスパターンになり、古今東西のソフトウェアアーキテクチャをぎゅぅっと絞って出てきたものが、アーキテクチャパターンであるといえるのではないでしょうか。