Yabu.log

ITなどの雑記

時間がないときの機能追加(スプラウト/ラップ)

時間がないときは既存のソースにリファクタリングを行わずに機能追加をする。

その時に以下の二点を気をつける

  • 既存ソースにテストを書けなくても新しいコードにはテストを書く
  • 既存のソースの変更は最小限にとどめる

後述の方法で実現する

スプラウトメソッド

変更箇所を丸々メソッドとして作成し、既存箇所からはメソッド呼び出しのみにし、 既存箇所に入れる変更を最小にする。

テストコードのない既存箇所にロジックを入れてしまうと、変更箇所のテストが難しい。 ひとまず新しく作る箇所だけはテストで保護する。

これ以上レガシーコード(=テストのないコード)を増やさない工夫ともいえる。

ラップメソッド

変更箇所の前後に処理を入れないといけない場合、 新規のメソッドで既存処理をラップし、新規のメソッド内、かつ既存のメソッド外に処理を書く。 既存の処理の中身は極力触らない。

臭いものには蓋、という工夫ともいえる。

スプラウトクラス/ラップクラス

メソッドでやったことを同じようにクラスでも行う。

  • スプラウトクラス:変更箇所を新規クラスとして用意し、既存クラスからは呼び出し箇所だけを変更することにより、変更箇所を最小にする。
  • ラップクラス:既存のクラスを拡張したサブクラス上スーパークラスインスタンスをもたせた上で新規処理を書く

ちなみにラップクラスはデザインパターンのDecoreterと同一である。

デメリット

両者とも自体を悪化させることはなくても 既存コードの質は一切よくならない。 今は時間がないから仕方ないのだろうが、 既存コードのリファクタリングはどこかで時間を用意して計画的にやるべきだ。

所感

これ以上悪くしない。少しでも前進する

〜メソッドの方は普通にプログラミングをやっていれば思いつくと思う。(同じようなソースを何度か実装したことがある) クラスの方は微妙。私にオブジェクト指向のセンスがないのかもしれない。 デザインパターンだけではなく、リファクタリングパターン的なものを極める世界もありそうだ。

接合部と許容点

接合部

接合部(seam)とは、その場所を直接編集しなくても、プログラムの振る舞いを買えることのできる場所である。

許容点

どの接合部も許容点(enabling point)を持つ。許容店では、どの振る舞いを使うかを決定できる

プリプロセッサ接合部

プロプロセッサ指令をサポートしている言語では コンパイル時にプログラムの振舞を買えることが出来る。

例:includeしたファイルの先のプリプロセッサ指令の中で、プログラム中の処理を再定義する

この場合、接合部はincludeしたファイルの中身になる。

リンク接合部

コンパイラが出力した中間表現の参照関係を変える。 Javaの場合、CLASSPATH環境変数を使ってリンカがクラスを探す場所をスタブ関数を持つライブラリ等に変える

この場合接合部はCLASSPATH環境変数になる。

オブジェクト接合部

オブジェクト指向を駆使して振る舞いを変える。

例:インスタンスメソッドの振る舞いを買えたい。 →インスタンスの型を抽象化し(interfaceを利用)引数等で外部から具象クラスを与えるようにする。

この場合、接合部は具象クラスを受け取る引数になる。

※他にもサブクラスで振る舞いを変える方法などもある。

注意事項

プロプロセッサ接合部とリンク接合部は強力だが保守が困難。 できるだけオブジェクト接合部を使う前提で考えたい。

参考:例レガシーコード改善ガイド第4章

【映画】マニシストに思うこと

マニシストという映画がある。

kancoromovie.blog.fc2.com

detail.chiebukuro.yahoo.co.jp

「マニシスト」不眠症の男が見た恐怖…。なぜ彼は寝ることができないのか…。クリスチャン・ベイル主演映画【感想】【川柳】 : とにかく映画が好きなんです

いや、そんな映画はない。正しくはマシニスト(The Machinist)だ。 機械工、的な意味だと思うが「マニシスト」という書き間違えが非常に多く、 検索結果にも「もしかして」が出ない。

https://www.google.co.jp/?gws_rd=ssl#safe=off&q=マニシスト

googleがミススペルと判定する閾値より勘違いが多いのか?

ただ、映画の中に流れている不気味な空気には 「マニシスト」という意味不明なタイトルがぴったりだと思う。

私も最初はマニシストだと思っていました。

データベーススペシャリストに落ちました

午前1免除

午前2:84点

午後1:53点

 

で落ちました。

 

試験はデータベース関係の本をたくさん読んで、実力を高める作戦で受けました。

諸事情により過去問を1度も解けていませんが、午前2の84点、っていうのは勉強した成果が出ていると思います。

 

落ちちゃったけど午後1・午後2は説いていてなかなか手応えがありました。高度試験は基本情報・応用情報より謎解き要素が多く楽しかったです。

 

資格はやはり、資格のための勉強、を少しはしないと受からないですね。

時間配分だったり、王道の回答パターンだったりが上手くつかめず、練度不足を感じた次第です。

はてなブログを始めて見るテスト

はじまり

いままでblogger → octpress とブログ難民として彷徨ってきましたが(彷徨うほど試してないけど。)

  • リポジトリとか考えなくて良い
  • markdownが使える(これは譲れない)
  • 長いことサポートしてくれそう?

ってことではてなブログを試してみます。