強いとは?

HomePLAZAがマンションの構造を解説。地震に強いマンションはどんな構造になっているのか?
1995年1月17日、瞬く間に6400人余りの尊い命を奪った阪神淡路大震災。亡くなった方の約8割が建物倒壊や家具の転倒が原因で、わが国における地震への備えの甘さが浮き彫りになった。また、記憶に新しいところでも、2004年9月の北海道十勝沖地震、同10月の新潟中越地震、2005年3月の福岡西方沖地震と立て続けに発生。震度1以上の地震が年間2000回以上ある地震大国・日本では、東海地震や南海地震、首都圏直下地震はもちろん、いつどこで大震災に遭遇しても不思議ではない。家具を固定し、非常持ち出しグッズで万全を期したつもりでも、住まいそのものが崩れてしまったら……。運良く生き延びても、家を失った痛手は計り知れない。取り返しのつかない悲劇を招かないよう、マンション選びの際は以下の耐震性能をきちんとチェックしておきたい。
建物と地盤をつなぐ、まさに縁の下の力持ちが基礎。コンクリートを面状に打ち込んで土台とする「ベタ基礎」(直接基礎の一種)と、何本もの杭を地中深く打ち込む「杭基礎」がマンションでは主に用いられる。ベタ基礎は面で建物を支えるため地震の力を分散しやすい反面、地盤や建物のバランスによっては傾きを生むことも。また、杭基礎は支持層(硬い地盤)が深くても対応可能というメリットがあるものの、長さや数などに問題があると十分に機能しない。どちらが優れているかではなく、地盤の性質に合った工法の採用が耐震性の決め手となる。
堅牢な杭基礎の例。地盤に適した長さと数の杭が使われていれば安心! 提供/タカラレーベン「レーベンハイム若葉富士見町」
高層・超高層マンションを中心に増えている免震構造とは、下層に積層ゴムやローラーなどの免震装置を備えたもの。効果は大規模の建物ほど出やすく、地震の横揺れがかなり吸収されるため高層階でも揺れが小さく、家具などの転倒の心配が少ない。一方、建物内部に振動低減装置を組み込んだ制震構造なら、免震より若干劣るものの、台風などの強風による揺れも吸収してくれる。そして、耐震構造は建物の強度自体を高めたもので、最も一般的。上層階ほど大きくなる揺れは家具固定などで対応すればいい。いずれが良いかは建物の規模や予算しだい。
コンクリート柱の内部には、縦に何本も組まれた主筋と、その周囲にベルトのように巻き付いて主筋の変形を防ぐ帯筋がある。バンド型といわれる従来工法は、帯筋の端を引っ掛けているだけなので、地震の圧力によっては外れてしまうことも。そこで最近採用されているのが、らせん状に1本の鉄筋で主筋を巻くスパイラル型や、帯筋の端と端を溶接してつなぎ目をなくす溶接閉鎖型。どちらも強度が均一になるため、はさみで切るような力(せん断力)に強く、柱の耐震性に優れている。配筋間隔や、鉄筋外側を覆うコンクリートの「かぶり厚」も重要だ。
スパイラル筋や溶接閉鎖型せん断補強筋は、横揺れにも強い。 提供/フージャースコーポレーション「ウィズ三郷」
鉄筋コンクリート壁の強度を左右するのが、コンクリート柱と同じく、内部に配された鉄筋の構造。鉄筋を縦横1本ずつ格子状に組んでいくシングル配筋に対して、縦横それぞれ2本ずつ平行に配していくのがダブル配筋だ。骨組みの数が倍に増えるため、当然のことながら高い強度と耐久性を実現できる。コンクリートがひび割れしにくく、2列に並ぶ鉄筋に合わせてシングル配筋よりコンクリートに厚みが出るのもメリットで、結果的には鉄筋の劣化も抑えることに。とくにマンションでは、耐震壁や戸境壁をダブル配筋にするのが今やスタンダード。
ダブル配筋の壁は、耐震性だけでなく耐久性にも優れている。 提供/フージャースコーポレーション「ウィズ南柏コンフォートテラス」
吊り戸棚などに食器などの重いものを収納していると、地震発生時に飛び出してくる恐れも。耐震ラッチはそんな危険を防止する心強い味方。また、身の回りの安全確保の次に欠かせないのが、被災したマンションからの速やかな退避だ。ところが肝心の玄関ドア枠が変形し、開けられないという例も少なくない。変形時にドアとの隙間ができるよう設計された耐震玄関ドア枠なら、少々の歪みなら問題なし。同じくドアガードのストッパーも可動式がベスト。また、地震に影響されすい大梁と玄関ドアの位置をずらしたアルコーブ型やポーチ付きも対策のひとつといえる。
耐震設計のドア枠なら、いざという時にも安心。 提供/フージャースコーポレーション「リバージュガーデン ウィズ八千代」
各地で地震が相次ぎ、近い将来都市部での大地震も予想される今、住まいの耐震性能への関心は高まるばかり。そんなニーズに合わせて、さまざまな耐震設計を施したマンションが次々と登場している。どうせ選ぶなら少しでも安心して暮らせるほうがいい。マンションは比較的地震に強いといわれるものの、現行の「新耐震設計基準」が適用されたのは1981年の建築基準法大改正施行から。関東大震災クラスの地震でも重大な被害が出ないよう定めたもので、阪神淡路大震災で倒壊したマンションのほとんどはそれ以前のものという。古い建物すべてが危険とは限らないが、数々の震災を教訓に最新の耐震設計を採用した新築マンションこそ、おすすめというわけだ。
444基の制震間柱を骨組み内に設置し、そこに地震のエネルギーを集中させることで建物の揺れと損傷を最小限に防ぐことができる先進の制震構造を採用。基礎杭の直径を1.5倍に拡張し、安定性の高さを追及したタワーマンション。
全住棟に国土交通大臣認定の免震工法を採用。高減衰積層ゴムによる免震装置が地震の揺れを吸収し、建物の変形や破損を防止する。建物の地下にも鉄筋コンクリート杭を150本以上打設した強固な地盤の上に生まれる大規模マンション。

[ 38] 地震に強いマンションの構造【HomePLAZA】新築分譲マンション購入
[引用サイト]  http://www.home-plaza.jp/sp/kouzou/index.html

強いAI(英: Strong AI)と弱いAI(英: Weak AI)とは、人工知能(AI)が真の推論と問題解決の能力を身につけられるか否かをめぐる論争において用いられる用語である。強いAIは、コンピュータが意識を持ち、人間とは全く異なる(かもしれない)思考様式を持つ新たな種となる可能性があると考える立場である。弱いAIは、逆にそのような可能性を否定する立場である。「強いAI」という用語はジョン・サールが作った用語であり、彼は以下のように書いている。
「…強いAIによれば、コンピュータは単なる道具ではなく、正しくプログラムされたコンピュータには精神が宿るとされる」[1]
サールはコンピュータと機械を区別している。彼は強いAIに反対の立場を主にとっているが(例えば、中国語の部屋)、一方で「脳は機械であり、エネルギー転送によって意識を生じる」とも述べている[2]。
人工知能という言葉は、「人工」と「知能」の意味からいえば「強いAI」とほぼ同義と言える。しかし、初期の人工知能研究はパターン認識や自動計画といった狭い領域に集中しており、そういった研究が最終的に知能に関する真の理解をもたらすと期待されていた。このため、人工知能がそのような狭い領域(弱いAI)を指すと同時に強いAIの考え方も指すという状態になっている。強いAIを指すためのより明確な言葉として、"Synthetic Intelligence"(合成知能)を提案する者もいる[3]。
強いAIとは対照的に、弱いAIは人間がその全認知能力を必要としない程度の問題解決や推論を行うソフトウェアの実装や研究を指す。弱いAIに分類されるソフトウェアの例として、ディープ・ブルーのようなチェスプログラムがある。強いAIとは異なり、弱いAIが自意識を示したり、人間並みの幅広い認知能力を示すことはなく、最先端とされるものでも知能を感じさせることのない単なる特定問題解決器でしかない。
弱いAIプログラムは真に思考することができないから「知的」とは言えないとする立場もある。ディープ・ブルーのような弱いAIソフトウェアは真に思考しているとは言えないという主張に対して、Drew McDermott(イェール大学の計算機科学教授)は次のように書いている。
「ディープ・ブルーがチェスについて真に思考していないというのは、飛行機が羽ばたいていないから実際には飛んでいるとは言えないというのと同じだ」[4]
また、ディープ・ブルーは非常に強力なヒューリスティック探索木マシンであって、これがチェスについて「思考」していると主張するのは、細胞が蛋白質の合成について「思考」していると主張するのと同じだというものもいる。どちらも全体として何をしているかを意識しておらず、単にプログラムに従って処理しているだけというわけである。これに対して、弱いAIを擁護する立場からは、機械が真の知性を獲得することはあり得ないと主張されている。一方、強いAIの立場からは、人間の脳の働きに基づいた特殊な「プログラム」を使うなどすれば、真の自意識や「思考」が生まれるとの主張がある。進化心理学者の中には、そのようなプログラムが人間の脳で発達したのは、社会的相互作用やおそらくはある種の詐欺やぺてんのためだろうと指摘する者もいる。
コンピュータが強いAIと呼ばれるのは、人間の知能に迫るようになるか、人間の仕事をこなせるようになるか、幅広い知識と何らかの自意識を持つようになったときである。
知能指数のような人間向けの知能尺度を機械の知能にそのまま当てはめるのは簡単ではないため、以下のような人工知能の知能を計る簡単な方法が提案されている。
知能とは、現実についてのモデルを持つことであり、そのモデルを使って行動計画を立てたり、将来を予測する能力である。モデルの複雑性と精度が高くなって計画立案や予測に要する時間が短くなればなるほど、知能も高いと言うことができる[5]。
人工汎用知能(Artificial General Intelligence)とは人間レベルの知能の実現を目指したもので、他のAIプロジェクトと区別するためにAGIと呼ばれている。短期間で人間の知能の複製はできないという見方もされ、今のところあまり注目されていない。しかし、一部の少数の研究グループがAGI研究を行っている。AGI を推進している組織として、Adaptive AI、Artificial General Intelligence Research Institute (AGIRI)、Singularity Institute for Artificial Intelligence などがある。近年これに加わったのがヌメンタで、Palm Pilotを開発したジェフ・ホーキンスの理論に基づいたプロジェクトである。ヌメンタはコンピュータ側からのAGI研究だが、ホーキンスは生物学的な面からのアプローチとしてレッドウッド神経科学研究所も設立している。
どう見積もっても、強いAIに向けての実際の進歩は未だ限定的である。時間制限無しで完全なチューリング・テストに合格できるシステムは未だ存在しないが、人々を最初のうちだけだますことができるシステムは既に存在している(ローブナー賞受賞システムを参照)。いつ、どの程度のシステムが登場するかを予測するAI研究者があまりいないのは、過去のAI研究についての予測がほとんど当たらなかったためと思われる。また、「AI効果」と呼ばれる問題もある。これは、人工知能で何か新しいことを実現したときに、それが単なる自動化であって知能とは関係ないと結論付ける心理効果である。同様のことは、人間特有と思われていた知的な行動を動物も行うことが示されたときにも見られる(道具を使う能力や鏡像を認識する能力)。
「合成知能; Synthetic Intelligence (SI)」という用語を提唱している人々は「人工知能」という用語が一種の撞着語法であるとしている(知能が知的でないことを暗に示している[6])。テキサス大学オースティン校計算機科学科の Diane Law は Searle, Subsymbolic Functionalism and Synthetic Intelligence [7]の中で、人工ルビーと合成ルビーを比べたとき、合成ルビーだけが本物のルビーであるという喩え話を挙げている(訳注:人工ルビーと言っているのは、ラインストーンなどのいわゆるガラス玉のこと)。
この用語の提唱者は、SI(合成知能)という用語が人間が意図的に作成する真に知的なものを指すことにしようと提案している。これはまさに強いAIのことであり、現在実現されている弱いAIと対比されることを示している。
この用語が使われるようになって、定義を超えた用法として、人間のテクノロジーの無作為な集積によって創発的に知能が発生したものも指すようになりつつある。これにより、用語の適用範囲が広がる一方、生物、特に人間の知能もある意味で種の発展と個人の経験の自然な過程から生じると捉えると、この2番目の定義は問題を提起する。つまり、合成知能(あるいは人工知能)と自然に発生する知能の境界は何かという問題である。このような議論は今のところ、サイエンス・フィクションの世界と理論上の議論にとどまっている。
強いAIの可能性を論じるとき、「心身二元論」の性質と記号処理の役割の問題が出てくる。ジョン・サールらは議論を通じて、符号化されたデータの変換によってだけ作業するマシンが精神を持てるのかを検討した。これは一元論対二元論といった問題を超えるものではない(すなわち、生物学的機械を含むどのような機械でも、精神を持てるか)。
サールは中国語の部屋という形で情報処理装置が何らかの事物を表す符号化されたデータを処理する様子を表現した。符号化されたデータ自体はそれによって表されている事物との相互参照なしでは無意味である。そのため、サールは情報処理装置自体には意味を理解する能力が全く無いとした。結果としてサールは、チューリング・テストに合格するマシンであっても、人間的な意味での意識を持たないだろうと主張している。
哲学者の中には、弱いAIが実現可能なら、強いAIも実現可能なはずだと主張する者もいる。ダニエル・デネットは『解明される意識』の中で、魔法のスパークや魂がなければ人間も単なる機械であると主張し、機械が知能や「精神」を伴ったとき、人間という機械が特権的な立場でいられるだろうかと問うた。同書の中で彼は意識の「多元的草稿」モデルを提案している。サイモン・ブラックバーンは哲学入門書 Think において、「あなたは知能を持っているかもしれないが、それが本当に知能かどうかを知る方法はない」と指摘している。しかし、議論を人工意識よりも「強いAI」に限定するなら、情報処理コンピュータに関係ない人間の精神機能を特定することは可能かもしれない。
強いAIの信奉者の多くは、精神はチャーチ=チューリングのテーゼで表される計算機械にあると信じている。しかし、もしそうだとすると、ボールと木材でできた情報処理機械も同等であるということになり、直観にも反するし、問題が多いと考える者もいる。そのような機械は低速で故障しやすいと思われるが、現代のコンピュータができることなら何でもできるだろう。精神がチューリングマシンのようなものだとすれば、原理的にはボールと木材でできた機器にも精神が宿ることになる。
ロジャー・ペンローズはチューリングマシンの停止問題を論じることで、チャーチ=チューリングのテーゼの適用可能性を攻撃し、情報システムでは実行できないが人間の精神には実行できる計算が存在するとした。しかし、これは明らかに計算可能性の問題ではなく、シミュレーションの問題 ? すなわち同じ計算を別のテクノロジーで行うという問題である。
脳の神経系は超並列的パターン照合が可能であり、これにより知覚と自覚の即時性が生じる。視野にある物を識別するという意味の「視覚」、自己を感じるという意味の「意識」、精神的に生じる身体感覚という意味の「感情」といった観念は、より高いレベルの概念を生じる。サールの中国語の部屋は、記号処理と生物のシステムの身体性がどのように結びつくかという「意味論的マッピング」を説明できない。脳自体は感じていないが、感覚を生じている。
最終的に、強いAIが実現するかどうかは、情報処理機械が意識などの精神の全ての特性を持てるかどうかに依存する。弱いAIと強いAIの問題は独立であり、ほんの一世紀前には乗算やデータベース検索といった現代のコンピュータが持つ機能の多くが「知的」であると考えられていたであろうことも確かである。
この手法は知能の仕組みを完全に解明しなくてもよいため、強いAIを実現する最も手っ取り早い手段と考える者が多い。基本的に、非常に強力なコンピュータさえあれば、人間の脳を神経単位のネットワークとしてシミュレーションできるだろう。例えば、人間の脳内の神経の(ほぼ)完全なネットワークのマップを得て、個々の神経細胞の働きをよく理解すれば、コンピュータプログラムによって脳をシミュレートすることは可能と思われる。何らかの通信手段を与えれば、このシミュレートされた脳は完全な知性を示すかもしれない。シミュレーションの具体的な形式は様々である。神経細胞毎ではなく複数の神経細胞をまとめてシミュレートすることも考えられるし、個々の分子をシミュレートすることも考えられる。人間の脳のどの部分をシミュレートすべきかも明らかではない。人間は脳の一部を損傷しても通常の活動が可能な場合があり、脳の一部は思考とは無関係な機能(呼吸など)に対応している。
非常に強力なコンピュータが必要となる。未来学者レイ・カーツワイルの見積もりによれば、1000万MIPSまたは10ペタFLOPSが必要とされている。既にペタFLOPS級の特殊用途のコンピュータが既に存在する(MDGRAPE-3)し、2008年ごろまでに完成予定の汎用的なペタFLOPS級コンピュータの計画が9件ある(BlueGene/Pなど)[8]。カーツワイル以外の予測ではさらに強力なコンピュータが必要とされていて、1億MIPSから1000億MIPSと言われている。さらに、神経の振る舞いを生物学的な詳細なモデルを使って表現することでオーバヘッドが生じ、脳自体の計算能力よりもずっと大きな計算能力を必要とすることが考えられる。
脳機能をシミュレートするソフトウェアが必要である。この前提として、精神が中枢神経系そのものであり、物理法則によって制御されているという考え方がある。シミュレーションを構成するには、人間の脳の物理的かつ機能的な知識を総動員する必要があり、特定の人間の脳の構造を詳しく調べる必要があるだろう。各種神経細胞の機能やそれらの接続に関する情報も必要となる。ソフトウェアがどのような形式になるかによって、それを実行するのに必要となるハードウェアの構成や性能が決まる。例えば、分子レベルでシミュレーションしようとすれば、神経細胞単位でシミュレーションするよりも多大な計算能力を要するし、神経細胞のモデルの正確度によっても必要な計算能力が違ってくる。シミュレーションする神経細胞数が増えれば、必要な計算能力は増大する。
最終的に脳のシミュレーションを実現するには、脳(神経細胞)の数学的なモデルを作成できる程度の理解が必要とされる。中枢神経系を学問的に理解するか、マッピングまたはコピーを行う方法が考えられる。脳機能イメージング技術は急速に進化しており、カーツワイルは十分な品質のマップは必要とされるハードウェアとほぼ並行して出現するだろうと予測している。しかし、シミュレーションでは神経細胞やグリア細胞の詳細な挙動を擬似する必要があるが、今のところそれに関しては概要レベルしか理解が進んでいない。
一旦このようなモデルが構築されれば、変更は容易であり、試行錯誤的な実験が可能となる。それによって理解が促進され、モデル化された知能の改良や動機付けの変更が可能となる。
Blue Brainプロジェクトは、世界最高速のスーパーコンピュータの1つであるIBMのBlue Geneを使って、約6万の神経細胞と全長5kmのシナプスからなる大脳新皮質をシミュレートすることを目指している。プロジェクトの最終目標はスーパーコンピュータ群を使って脳全体をシミュレートすることである。
脳は多数の並列動作によってその能力を得ており、コンピュータは逐次動作の高速性によってその能力を得ている。
脳では約1000億の神経細胞が同時並行的に機能しており、それらが約100兆のシナプスで接続されている[9]。脳の処理能力の見積もりとして、一秒間の神経細胞の状態更新が約 1014 回とされており[10]、最適化していない脳のシミュレーションに必要な計算能力は 1018 FLOPSと予測されている。2006年現在の一般的なCPUの性能は数GFLOPS(109 FLOPS)である。1回の浮動小数点演算には約2万回の論理演算を必要とする。
しかし、神経細胞は1秒間に約200回スパイクを発生させる(これが脳の能力の上限を与える)[要出典]。神経細胞間の信号は150メートル/秒の最高速度で転送される。最近の2GHzのマイクロプロセッサは毎秒20億サイクルで動作し、人間の神経細胞より1000万倍も高速だし、信号の伝達速度は光速の約半分であって、人間の場合の100万倍である[11]。脳の消費エネルギーは約20Wだが、スーパーコンピュータは約1MWである。なお、ランダウアーの限界によれば、室温で1W消費当たりで1秒間に実行できる操作数は 3.5×1020 回が上限である。
人間の脳のシミュレーションとは対極的に、自然を擬似せずに直接AIを実現しようというアプローチもある。この手法の提唱者は、初期の飛行機の開発で、鳥を真似た設計が多くなされたが、結局今現在飛んでいる飛行機が鳥とは全く異なる原理で飛んでいることを指摘する。
直接的アプローチにおける主な疑問は「AIとは何か?」である。最も有名なAIの定義は、アラン・チューリングが「チューリング・テスト」の提案時に行った操作的なものである。その後、AIの定義をしようという試みは数えるほどしかない(その一部は AI Project にある)。ジョン・マッカーシーは What is AI? の中で、未だに知能の明確な定義がないと述べている。
ダグラス・ホフスタッター(著)、野崎昭弘ほか(訳)、1985、『ゲーデル、エッシャー、バッハ ? あるいは不思議の環』、白揚社 ISBN 4-82-690025-2

[ 39] 強いAIと弱いAI - Wikipedia
[引用サイト]  http://ja.wikipedia.org/wiki/%E5%BC%B7%E3%81%84AI%E3%81%A8%E5%BC%B1%E3%81%84AI

前回「コンポーネント化でクラスをすっきり整理」は、パッケージとサブシステムによるコンポーネント化についてお話ししました。コンポーネントとは、どのように考えて作り上げていくのでしょうか。単純に似たようなクラスをまとめるだけでは、使いやすいコンポーネントにはならないでしょう。今回は使いやすく、保守しやすいコンポーネントを作るにはどのような考え方で設計するのかについてお話ししていきます。(→記事要約へ)
自作パソコンを作ることを考えてみます。パソコンは電源ユニット、CPU、マザーボード、ビデオカード、メモリなどの部品から構成されています。製作者は、どのようなパソコンを作りたいかを考え、目的に合った部品を選択します。次に、それらの部品のインターフェイスを調べ、お互いのインターフェイスが合っているかを調べます。そして、実際に部品を購入しパソコンを組み立てます。
このように、コンポーネントは明確な機能とインターフェイスが定義されています。目的に合った必要な機能が備わっていること、インターフェイスが、分かりやすくシンプルであることが必要です。また、部品の機能が分からなければなりませんが、部品の内部がどのように作られているかを知る必要はありません。そのため電子工学の専門家でなくても、必要最低限の知識でパソコンを簡単に組み立てることができます。
そして、もう1つ考えなければならないことがあります。それはコンポーネントの独立性です。コンポーネント内の変更がほかのコンポーネントに影響しないように、コンポーネント間の依存を極力少なくする必要があります。マザーボード上のCPUを変更したら電源ユニットを変更するようでは困ります。
機能をうまくまとめてコンポーネント化しないと、ほかに依存するような機能がコンポーネントの中に存在してしまい、不要なインターフェイスが増え、知らなくてもよい機能を知らないと設計できなくなってしまいます。
今回は、(3)のコンポーネント間の依存について、コンポーネント間で依存するクラスの整理の仕方という観点で、(1)(2)の内容を考えながらお話しします。
分析の段階では、主に関連や汎化を使ってモデルを分析していきます。分析が進み設計の段階に入ったときには、分析で明らかになったクラスの構造をどのようにしたら実現できるか考えていきます。その過程でコンポーネント化を考えコンポーネント間の関係の見直しを行います。
関連は、強い意味的な依存関係を持っていると考えます。例えば取引と取引明細の関係は強い依存関係を持っています。取引は1回の取引日や取引先などの情報を持ち、取引明細は商品コードや数量などの情報を持ちます。
関連は、クラスの属性(インスタンス変数)として関連先のオブジェクトの参照を保持します。上記のように意味的な依存関係が強いので、クラスの複数の操作で参照先のオブジェクトを利用すると考えられます。
このように、関連は構造的な関係を持つことが多く、クラス間の依存関係は強いものになります。関連のあるクラスを異なるコンポーネントに分けることは避けなければなりません。
それに対し、依存は弱い意味的な関係を持っていると考えます。顧客と取引は、意味的には弱い関係です。顧客と取引は違う概念と考えられます。
依存は依存先のオブジェクトの参照を操作中のローカル変数として持ちます。操作を実行するときに、関係するオブジェクトを操作のパラメータとして受け取るか、操作内部でオブジェクトを生成することによりローカル変数としてオブジェクトを参照します。関連先のオブジェクトを操作の内部に保持するので、操作の実行が終わればオブジェクトの参照はなくなります。
このように依存は一時的な関係と考えることができます。このように設計において関連と依存は、
依存はメッセージ(操作)を介した一時的な関係であり、意味的には弱い依存関係を持っている
オブジェクト指向分析では、機能要件に基づき普遍的な構造と固有な構造を分析し、実現したいシステムがどのような構造でできているかを明らかにしていきます。オブジェクト指向設計では、明らかにされた構造を、非機能要件(Javaなどの実装技術、性能、セキュリティ、分散性、拡張性・保守性など)に基づきどのように実装していくかを設計します。
このときに、分析モデルについてクラス間の関係を見直し、関連や汎化を実現可能なクラスの構造に直していきます。ここでは、設計モデルについてすべては説明できないので、特にコンポーネントに関連したことについてお話しします。
最初に分析モデルの中の汎化を検討します。分析モデルでの汎化は、状態や分類を表しており、そのままでは実装できません。そのため、どのように実装するかを検討します。
図1の例では、会員と貸出クラスには汎化構造がありますが、貸出については、状態に貸出と返却、延滞中などがあり、将来この状態が増えることはないと考えられます。そのため、これらの状態をクラスの属性として持たせることとします。
また、会員には、通常会員とゴールド会員があります。会員の種類は、当面増えることはないと思われますが、通常会員、ゴールド会員の貸出上限などのいくつかのビジネスロジックは異なること、および普通会員からゴールド会員へ動的に変更されることがあると考えられるため、
次に、クラス間の関係が関連か依存かを検討します。例えば、貸出とレンタル商品には意味的に強い依存関係はありません。会員と貸出も同様です。そこで貸出とレンタル商品、貸出と会員の間の関連を依存に直します。ここで多重度を考えてみると1対多の関係になっています。それを依存にしてしまうと多重度は表現できなくなります。
これは、依存が構造を表すのではなく一時的なメッセージの流れ、操作によるパラメータの受け渡しとなるためです。分析モデルは、モデルの構造を明らかすることが目的であるため多重度は重要ですが、設計モデルは、どのように実現するか(実装するか)を目的にするため、メッセージやパラメータをどのようにするかが重要になります。ただ、多重度がなくなることはないので、依存と関連を両方とも記述することも考えられますが、モデルの表記が複雑になってしまいます。
コンポーネントは、機能的に結合度が高く、構造的で依存関係の強いクラス群で構成されます。そのために関連など依存関係の強いクラスは1つのコンポーネントにします。依存関係の弱いクラスがある場合は、コンポーネントを分けることができるか検討します。
それに対しコンポーネント間は、結合度を低くする必要があります。機能的には分離され、お互いの関係を弱くします。これには、コンポーネント間にまたがるクラス間の関係を依存関係とします。もし依存にすることができないような関連がある場合は、結合度が高いと考えられ1つにまとめるなどコンポーネントの構成を考え直す必要があります。
貸出クラスとレンタル商品クラス、会員クラスには関連が存在します。これらの関連はコンポーネント間をまたがるので、依存になるように検討します。レンタル商品クラスや会員クラスは、貸出クラスの操作「貸出する」内でローカルに使われるので、パラメータでそれらのオブジェクトを渡します。これで関連は依存に直すことができます。
次に、コンポーネント化の範囲を見極めたので、Facadeを利用してサブシステムを考えます。Facadeはコンポーネント内部のクラスが、ほかのコンポーネントから呼ばれる操作をまとめて定義します。コンポーネント内で利用するクラスのオブジェクトはFacadeで生成するようにすると、外のコンポーネントはFacadeを知っているだけでよく、コンポーネント内部のクラスを知る必要がなくなり、コンポーネントのブラックボックス化が図られます。
コンポーネントにおけるFacadeは、コンポーネントとしての機能をまとめるだけでなく、内部クラスのオブジェクトのライフサイクルを管理する役割があります。オブジェクトをどこで生成するかは、結構悩むことがあります。パラメータで渡すにしてもどこかで生成する必要があります。ただ、コンポーネント化に当たっては、できるだけ内部のクラスを外部に公開したくありません。そのためFacadeに外部に公開する操作を集めて持たせ、外部にインターフェイスを経由して公開します。そして、内部のクラスのオブジェクトを生成し処理を委譲します。
Facadeの操作のパラメータはオブジェクトではなく基本型のデータを渡すようにできるか検討します。例えば、貸出クラスの操作「貸出する」のパラメータは会員オブジェクト、レンタル商品オブジェクトですが、Facadeの操作「貸出する」のパラメータは、基本型の会員コード、商品コード等とします。会員オブジェクトやレンタル商品オブジェクトは会員コード、商品コードを基にFacade内でオブジェクトを生成して、貸出クラスの操作「貸出する」にパラメータとして渡します。その際、 Facadeはステートレスになるようにします。
図3は簡単な例ですが、複数のクラスで機能を実現しているような複雑な機能の場合は、Facadeにより機能をまとめると、クライアントはコンポーネント内部のクラスを知ることなく機能を利用できます。
次にコンポーネント間の相互の依存関係と依存関係の循環を検討していきます。相互の依存関係とは、パッケージAのクラスはパッケージBのクラスに依存しており、パッケージBのクラスもパッケージAのクラスに依存しているような関係です。パッケージAの変更がパッケージBに影響し、さらにパッケージAに伝播するような関係になることがあります。
また、依存関係の循環とは、パッケージAはパッケージBに依存し、パッケージBはパッケージCに依存し、パッケージCはパッケージAに依存する関連です。これもどれか1つの変更がほかのすべてのパッケージに影響を与え、影響が循環してしまいます。
ホットスポットとは、「予想される変更に対する保守性・拡張性の仕組み」です。例えば、料金計算などビジネス環境の変化により、頻繁にロジックを変更する可能性が高いようなビジネスロジックが考えられます。
ホットスポットはフレームワークに対する変更可能な個所をいいます。このホットスポットは、継承で実現します。概念モデルのような普遍的な構造は、一般的にフレームワークとして考えることができ、固有な機能をホットスポットとして作り込んでいきます。
図5では貸出料金のビジネスロジックを料金クラスとして定義しています。料金クラスとその操作である「料金を計算する」は抽象クラス、抽象メソッドとし、具象クラスとしてキャンペーン料金クラスを定義しています。これにより、料金の計算が変更になった場合は、新たに料金クラスを作成するだけで、貸出クラスには影響がありません。
ホットスポットの具象クラスもFacadeでオブジェクトを生成し、貸出オブジェクトに渡します。どの具象クラスを利用するかは、外部パラメータで指定できるようにするのもよいでしょう。
今回は、変更に強いコンポーネントをどのようにして作るかをお話ししました。実際にコンポーネントを設計するには、このほかにも永続化などの非機能要件など検討しコンポーネントを洗練していきます。これらはアーキテクチャ設計を通して考えます。次回はこのアーキテクチャの設計についてお話をしたいと思います。
・ビジネスオブジェクト フレームワーク作成手順書(ビジネスオブジェクト推進協議会フレームワーク開発部会)
情報マネージャのための「今日のひと言」 - 2007/11/16『苦労』 何でも苦労するのが、人間として当たり前だと考えてしまいます。しかし……>>続きはクリック
.NETアプリケーションの単体テストと静的検証を自動化する「Parasoft .TEST 4.0」、テクマトリックスが発売
ホワイトペーパー利用者に「Amazonギフト券」を抽選で100名様にプレゼント!――TechTargetジャパン リニューアル・キャンペーン
@IT情報マネジメント トップ|アーキテクチャ トップ|会議室|利用規約|プライバシーポリシー|サイトマップ

[ 40] 使いやすくて、変化に強いコンポーネント − @IT情報マネジメント
[引用サイト]  http://www.atmarkit.co.jp/im/carc/serial/extend06/extend06.html



お気に入り



  • track feed
    • seo