Eclipseリファクタリング・メモ
Eclipseの使い方を一覧で分かりやすく説明しているHPがあったので、メモ。
特にリファクタリングの手順が分かりやすい。
Eclipseのリファクタリングは非常に使いやすいのに、何故か皆、使ってない。
ファウラーのリファクタリング本を読んでないのだろうか?
Javaプログラマにとって、綺麗なプログラムを書くための技術が全て詰まっている良書なのに。
【リファクタリングの目的】
最近、ソースインスペクションをする立場になってみて、仕様を理解せずに長々と書いている下品なプログラムを見ると、すぐにカチンと来てしまう(-_-;)
Fatなメソッド、Fatなクラスは、不吉な匂いがする。
女性と(だけじゃなくて男性も)同じく、太ったクラスはダイエットすべき。
リファクタリングする真の目的は、誰でも理解できるプログラムにして保守性を高めることにある。
特に、プログラマは派遣契約が多いため、書き散らしたプログラムは3ヵ月後には作者不明のソースになってしまい、下手なソースは誰も修正できなくなる。
そうならないように、誰でもプログラムの意図をすぐに理解できて保守性を高めることは、運用保守フェーズで大きな影響を持つ。
【リファクタリングすべき箇所】
ペアプロしながら、下記の点に注意してリファクタリングする時が多い。
■スペルミスや分かりにくいメソッド名や変数名
→ すぐに「名前変更」 (皆、英語は弱い(-_-;))
■一塊の機能を見つけたら → 「メソッド抽出」
→ 他クラスへ「移動」することが多い
■意味不明な定数を見つけたら
→ 「定数の抽出」
■無駄に長いgetter処理、ループ処理で何度も使われるローカル変数
→ 「ローカル変数の抽出」
→ ここから、メソッドの抽出をやって、引数の依存関係を減らす
■クラス内で何度も使われて、状態として保持した方が良い変数
→ 「フィールドのカプセル化 」
■ローカル変数をプログラムへ戻す
→ 「インライン化 」
■メソッド名の引数が、intやStringのようなプリミティブな型ばかりでやたらと長い
→ 引数の中で関係あるものをクラスとして抽出し、「メソッドシグニチャの変更」で引数を減らす
■継承構造を作りたい
→ 「インターフェイスの抽出」
→ インターフェイス、抽象クラスを作り、具象サブクラスを作る
■2つのサブクラスに似たような処理があって共通化したい時
→ 「プルアップ」
■プルアップの逆操作
→ 「プッシュダウン」
プルアップって皆知らないみたい。
機能を共通化したい時の手法は、下記2種類しかない。
○サブルーチン呼び出し(いわゆるファンクションコール)
○継承を使って親クラスに共通ルーチンを持たせる(いわゆる実装継承)
オブジェクト指向に慣れていない人は、継承構造を使うプログラミングが苦手みたい。
以前、るびま勉強会でRubyistと継承関係について議論したら、Rubyistは継承を殆ど使わず、特異メソッドやMixinで代用するらしい。
Javaプログラマとしては、上記2種類を意識して使い分けることが多いから、ちょっと違和感あり。
■サブクラスを動的に使い分けて生成したい
→ 「ファクトリーの導入」
サブクラスを使って処理を使い分けている時、必ずIF文、case文がある。
その部分をファクトリーメソッドで置き換えて、外から来るフラグに応じて、生成する具象クラスを切り替える。
オブジェクト指向に慣れていない人は、インターフェイスだけで書かれたプログラムが今どんなロジックを通過しているのか、を理解できない時が多い。
だから、デバッグしても、今どのインスタンスで実行されているのか、という観点が無い。
【番外編~Rubyの場合は??】
Rubyでも最近いい本「Rubyist Magazine出張版正しいRubyコードの―RubyistのRubyistによる、Rubyistとそうでない人のための」が出た。
るびま勉強会(関西)でも読んでます。
Rubyistによると「ファウラーの本よりも初心者向けだがいい本ですよ」とのこと。
中身を読んでみると、Rubyのリファクタリング版という感触だった。
Java屋さんとRuby屋さんにとって、こういうリファクタリング本は、プログラミング技術を上げてくれる良書。
もう一度読み直してみようと思う。
| 固定リンク
「プログラミング」カテゴリの記事
- Javaのモジュールシステムの考え方をまとめてみた(2022.10.21)
- Javaのモジュールシステムは複雑性をより増している(2022.09.10)
- Javaはなぜ関数型言語になろうとしているのか(2022.09.02)
- Javaのラムダ式の考え方(2022.08.10)
- Javaはオブジェクト指向言語ではなく関数型言語だった~「[増補改訂]関数プログラミング実践入門」はお勧めの本だ(2022.08.06)
コメント