第2回:コーディングレベルを上げるためには? (3/3)

Javaコーディング規約
Javaコーディング規約

第2回:コーディングレベルを上げるためには?
著者: 電通国際情報サービス  高安 厚思、東田 健宏
エー・ピー・アイ  森田 健    2005/8/23
前のページ  1  2  3
レベル4を抜けるためには?

   レベル4のプログラムから上のレベルにあがるためには以下のようなテーマに取り組む必要があります。
オブジェクト指向を理解する

   レベル4は、C言語などの構造化言語のようなコーディングになっています。機能分割をさらに推し進めて、操作する対象を物として捉え、クラス分割を行うことがオブジェクト指向を理解する第一歩です。

   まず、オブジェクト指向的な考えができるように、プログラミングスタイルを変える必要があります。


クラス設計を実施した後に、コーディングを実施すべき」か?

   必ずしもそうとは思いません。

   コーディングの前にしっかりとクラス設計を行い文書化しておくことにより、コーディングが楽になるのは事実です。しかし、プロジェクトによっては、様々な状況からクラス設計をしっかりと行えない場合もあるでしょう。

   クラス設計をしっかりと行って文書化していた場合、仕様が変更されると設計書とソースコードの両方を修正しなければなりません。納期というプレッシャーの元では、「とりあえずソースコードだけ修正して、後から設計書を修正する」とする場合が多いと思います。しかし、結果として設計書の修正を忘れてしまったり、修正内容自体を忘れてしまったりすることが常です。

   これより、ソースコードから設計書をリバースエンジニアリングするという手法を取ることもあります。


「意識改革が必要」なのでは?

   構造化プログラミングから、なかなかオブジェクト指向の考え方へ移行できないのであれば、それはオブジェクト指向の利点が見えていないからなのかも知れません。

   構造化プログラミングの考え方をベースにクラス分割を行っても、アプリケーションからは、「if文」や「switch-case文」はなくすことができません。分岐対象が増えた時、「if文」や「switch-case文」を修正しなければならず、修正が行われる限り、バグを内包する可能性があります。

   しかし、ポリモフィズムなどのオブジェクト指向の考え方を適用することにより、「ソースコードから制御文を減らす」ことができます。

   なお、バグを出さない究極の真理は「コードを書かない」ことです。つまり、コードの量とバグの量は比例するのです。


レベル5から抜けるためには?

   ここで説明したレベルでは、レベル5が一番上のレベルですがそれでレベルが終わってしまうわけではありません。これ以上のレベルにあがるためには、規約だけではなく更なるプログラミング経験あるいは設計に関する技術をマスターしていく必要があります。その意味でレベル5が取り組むべきテーマは以下の通りになります。


デザインパターンの設計を習得

   レベル5はクラス分割を行い、ポリモフィズムを用いたプログラムでした。設計が変わらず、データのみが追加されるようなタイプであれば、これで問題ありません。しかし、設計が拡張された場合、現在のプログラムでは対処できません。

   1つの解決策としてデザインパターンを用いるというのがあります。デザインパターンとは、過去のソフトウェア設計者が考え出した知識を、再利用しやすいように形式化したものです。設計の拡張性に対応できるデザインパターンも存在します。

   デザインパターンを理解し設計に適用することで、より柔軟性/拡張性の高いプログラムにすることができるでしょう。


案件に応じた、ゴールの見極め

   デザインパターンを利用することは、柔軟性と拡張性をソフトウェアにもたらします。しかし、柔軟性と拡張性を見越したコーディングは、プログラムに無用な複雑さを持ち込んでしまいます

   最小の投資で最大の価値を得るためには、案件に応じた最適な設計を絶えず意識しておかなければなりません。「なんとか動いて、最も無駄のないものをやれ("Do the Simplest Thing that Could Possibly Work)」と「どうせ要らないって(You Aren't Going to Need It)」という言葉があるぐらいです。


まとめ

   今回までで「コーディングの心得、5ヶ条」について、背景にある考えや意図を説明してきました。

   良いコードを書くという行為や考えは、コーディングスタイルを守り、「他の人が読んでも分かりやすいと感じられるソースコード」「保守性の高いプログラム」を心がけるというものでした。

   それは、自分本位にならず、変化が起こることを前提としてコーディングを行うということを意味しています。

   設計の変更は、プログラマが思っているよりも早くやってきます。システムを設計し、実装することでそれまで見えていなかった問題が表面化するからです。そうした変化の際に、柔軟に対応できるように、「コーディングの心得」を常に意識し、実践することが重要なのです。

   改めてコーディング規約を掲載します。

  • 見やすさを重視せよ
  • ネーミングはわかりやすく
  • サンプルを鵜呑みにしない
  • 同じコードを二度書かない
  • 役割は1つに

表4:コーディングの心得、5ヶ条

前のページ  1  2  3


株式会社電通国際情報サービス 開発技術センター 高安 厚思
著者プロフィール
株式会社電通国際情報サービス  高安 厚思
株式会社電通国際情報サービス 開発技術センター
Java(J2EE)/オブジェクト指向の研究開発やプロジェクト支援、開発コンサルティングに従事。モデル、アーキテクチャ、プロセスが探求対象。今回は Javaコーディング規約2004の仕掛け人。


株式会社電通国際情報サービス 開発技術センター 東田 健宏
著者プロフィール
株式会社電通国際情報サービス  東田 健宏
株式会社電通国際情報サービス 開発技術センター
CTI、Webアプリの開発経験を経て、現在は主にプロジェクトマネジメント支援、プロセスエンジニアリング、ソフトウェア工学研究開発に従事。最近はコーチング、ファシリテーションといったヒューマン系スキルに興味を持ち日々修得に努めている。


株式会社 エー・ピー・アイ 森田 健
著者プロフィール
株式会社 エー・ピー・アイ  森田 健
コードが単純になるには?見やすいコードを書くには?を日々模索しています。「コードがドキュメントだ」が、口癖な他称人間コンパイラ。


INDEX
第2回:コーディングレベルを上げるためには?
  レベル3:読みやすくなっているが、コードを分割できていないプログラム
  レベル5:柔軟性/拡張性が高いプログラム
レベル4を抜けるためには?
Javaコーディング規約
第1回 良いコードとは、心得5ヶ条
第2回 コーディングレベルを上げるためには?
第3回 ネーミング規約(前編)
第4回 ネーミング規約(後編)
第5回 フォーマットに関するコーディング規約
第6回 オブジェクト指向のためのコーディング規約
第7回 変数に関するコーディング規約
第8回 文字操作・数値・日付に関するコーディング規約
第9回 継承とインスタンスに関わるコーディング規約
第10回 制御構造に関する規約
第11回 コレクション・ストリーム・例外に関するコーディング規約
第12回 スレッド・ガベージコレクションに関するコーディング規約

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored