トップ «前の日記(2004-03-21) 最新 次の日記(2004-03-23)» 編集

日々の破片

著作一覧

2004-03-22

_ 評価順

そういや、仕事を始めた頃、ボトムアップアプローチ(サブルーチンの1番リーフにあたる部分から作っていって最後に幹を作る)てのと、トップダウンアプローチ(最初に幹を作って最後に葉を実装/設計する)てのの2種類があります、みたいなことを教わった。

で、とっくの昔に会社を抜け出して某所でどうも偉い人になってるらしき先輩がボトムアップの得意な人で、作りかけのプログラムを見るとサブルーチンがぼこぼこあるだけなんだけど、最後はカチッとそれが組み合わさるって感じでえらく感心したことがある。僕は1つのことに集中してやるのが嫌いなので同時進行でメインとサブルーチンを作っていくことが多かったので、とうてい、そんな開発スタイルは取れなかったが、それでもわりとトップダウン的なような感じなのは全体の流れから葉を決めていくような感じだったかなぁ。

もちろん、構造化時代の話。

今はわりとリファクタリングしながら作るからどちらかというとやっぱりトップダウンのような(全体から部分を切り出して行くことが多い)アプローチに近いのかなぁ、とはいうものの、最初にクラスにどう分割するか大雑把には決めてから取り掛かるからその意味ではボトムアップ的なような感じだが……

というようなことをruby-list見てて、急に思い出したのは、ボトムアップ/トップダウンなんて考え方自体、この10年くらい意識していないように思えたからだ。

で、オブジェクト指向プログラミングだとそのへんどうなんだろうかとか興味を持ってメイヤーの本を見ると

トップダウンのオブジェクト指向設計法を想像する人もいるだろうが、オブジェクト指向設計にはボトムアップ設計のほうがずっと合っているようである。

"トップダウン"と"ボトムアップ"はもちろん極端な特殊化である。

……

クラスは、本質的にボトムアップ的な再利用、拡張、組み合わせに適している。……したがって、継承は欠かせない要素である。

――14.1.4 ボトムアップ設計「オブジェクト指向入門」

となっているが、今となっては継承と言えばテンプレートメソッドなんていうのは、トップダウンで考えなきゃだめなような気がするんだが。とはいえ、再利用可能コンポーネントなんてのは確かにボトムアップかな? でもユースケース主導だとやっぱりトップダウンのような。

#だから、極端な特殊化するなって。そういう分類はあまり意味がないということを書いているんだろう。ただし、解説書だから人口に膾炙した用語との関連を示す必要があったってことで。

_

結局、Rubyの記述スタイルは、

・スクリプト

上からだらだらいきます。スクリプトなんだから途中でdefしたっていいじゃん

・プログラム

クラスから書いていき、最後にif $0 == __FILE__でmainの実装

でFAなのかな?

って、そう書いているな、実際問題として。Javaで書くときは完全に下のスタイルだし(最後にmainの記述がある場合もある)。

ってことはボトムアップなのかな。そうみたいだな。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|12|

ジェズイットを見習え