CHAO構造化設計は、プログラムをルーチンに分割する方法といえます。機能に主眼を置き、データに重きを置かないのがその特徴ともいえます。その手法は、トップダウン分解とボトムアップ合成に分けられます。トップダウン分解プログラムをルーチンに分解するための一般的なテクニックのひとつは、トップダウン分解方式です。トップダウン設計あるいは段階的詳細化とも呼ばれます。その特徴は、プログラムが何をするかという一般的記述から、なされるべき特定の仕事へと移っていく点にあります。プログラムの、典型的には構造図のトップに描かれる、いわゆる”メイン”ルーチンに相当する一般的水準から始めます。次に、トップダウン分解を行う上での注意すべき点を挙げます。始めにトップレベルの設計を行うプログラミング言語に関する詳細をさける。詳細は低いレベルにおける設計にまわす(情報隠蔽)。それぞれのレベルを定式化するそれぞれのレベルを検証するひとつ低いレベルに進み、それのレベルにおける詳細化を行うトップダウン分解の背後にある原理は、人間の脳は一度にある量の詳細にしか集中できないという考え方です。ひとつの一般的なルーチンから始め、段階をおって特定のルーチンに分解していくなら、人間の脳は一度に多量の詳細項目を考えなくて済みます。このアプローチは、”分割して統治せよ”の原理とも呼ばれます。構造化設計は、右に示すような階層的システムにもっとも適合します。分解は、それ以上分解するよりコードにした方が簡単だと思えるまで行います。設計内容が明白で簡単で、これ以上は耐えられないと感じるくらいまで作業を続けます。場合によっては、トップダウン手法は抽象的すぎて作業に着手しにくい場合があります。何らかのより具体的な作業手法を必要とするなら、ボトムアップによる設計手法を試してみると良いかもしれません。その場合まず、「このシステムがすべきことを知っているだろうか」という自問から始めるべきです。して、システムに必要なローレベルの機能をいくつか見つけた上で、もう一度トップから見下ろしてみましょう。次に、ボトムアップ合成について注意すべき点を示します。システムがなすべきことは何かを自問するその問題についてローレベルの機能を列挙するローレベルの機能について共通するものを見つけ、グループ化するひとつ上のレベルで同様の作業をする。ボトムアップトップダウンとボトムアップの違いは、ひとつには分解戦略の違いであって、もう一つには合成戦略の違いです。一方は問題全体から始めて徐々に取り扱い可能な部分まで分解していくのに対し、他方は取り扱い可能な部分から始めてそれらをまとめて問題解決にくみ上げていきます。いずれのアプローチも長所短所をもっており、設計に適応する場合にはそれらを知っておく必要があります。トップダウン設計の長所は容易さです。プログラマは、何か大きなものを小さな部品にばらばらにすることが得意です。問題が自然に階層的なら、トップダウン分解は問題の構造にとてもうまく適応します。トップダウン分解のもうひとつの長所は、システムの実装の詳細を遅らせることができることです。ファイル構造や書式の変更にトップレベルで光を当てるよりも階層構造の底のルーチンに隠しておく方が望ましいからです。トップダウン設計の欠点は、システムのトップとなる機能を見つけることが難しいということです。多くのシステムが自然な階層を持っておらず、従ってきれいに分解できないこともあります。その上、恐らくもっとも重大な欠点は、トップダウン機能設計はトップにある単一の機能によってシステムが特徴付けられることを要求しており、それが最近にイベントドリブン型のシステムには適応しがたい要求であるということです。ボトムアップ手法の長所のひとつは、早い時機にユーティリティールーチンを見つけることができることが多いので、設計がコンパクトになることです。欠点は、その手法のみを使用するのが困難な点にあります。ほとんどの人は、大きな概念を把握して小さな概念に分解することの方が得意だからです。幸いなことに、トップダウン設計とボトムアップ設計は互いに競合する手法ではないため、互いに補完することができます。設計は発見的プロセスであり、常に試行錯誤の要素を持っています。良い方法を発見するまで、いろいろな手法を試してみるべきなのです。いつ構造化設計を使用するか構造化設計は、いわばプログラムをルーチンに分割する方法です。機能性に主眼を置きデータには重きをおかないとも言えます。構造化設計は、ルーチンの個数が少ない場合に適切であり、データより機能性が変更されやすい問題に適しています。構造化設計は、互いがそれほど関連を持たない独立した機能がたくさんあるシステムに適しています。同時に、クラスやオブジェクトや属性について議論するには単純すぎるシステムに適しています。データよりも機能の方が変更される可能性が高いシステムならば、構造化設計の機能分解を使用するほうが良いです。