...

疎結合がソフトウェア開発を変える

by user

on
Category: Documents
19

views

Report

Comments

Transcript

疎結合がソフトウェア開発を変える
Part 1
新パラダイム
疎結合がソフトウェア開発を変える
28
NIKKEI
BYTE
オブジェクト指向言語の考え方が登場
方は浸透しつつある。
「デザイン・パター
タープライズ市場開発 アーキテクトエバ
してから30 年余。オブジェクト指向は,
ンのような設計の知識が一般的に知られ
ンジェリストの萩原正義氏)
。この結果,
ソフトウェア開発の現場にようやく定着
るようになってきたし,フレームワーク
後述するオブジェクト指向のメリットを
してきた* 1。システム・インテグレー
の考え方も定着してきた」
(日本 IBM ス
生かしきれなくなる。
ションの現場では「案件のほぼすべて
トラテジー&コンピテンシー ICP エグゼ
それを補うための技術として,
「アスペ
が,オブジェクト指向開発」
(日本ユニシ
クティブIT アーキテクトの榊原彰氏)
。
クト指向」や「SOA(Service Oriented
ス・ソリューション AD CoE コンピテ
一方で,オブジェクト指向開発が定着
ンスセンタ統括部長の川口真一氏)
。
「シ
し始めているからこそ,足りない部分が
Architecture)
」などが出てきた(図1)
。
これらの技術に共通するキーワードは
ステムを発注する側が,設計情報をUML
明らかになってきた。
「オブジェクト指向
(Unified Modeling Language)で記
は柔軟性が高く汎用的だが,世の中のす
述して納品してほしいと要求することも
べての事象を記述できるわけではない。
珍しくなくなった」
(南山大学 数理情報
オブジェクトという単位だけですべて扱
ここで,オブジェクト指向の基本的な
学部情報通信学科の青山幹雄教授)
。
おうとすると,モデルやコードに無理な
考え方を整理しておこう。オブジェクト
表現が入り込む」
(マイクロソフト エン
指向は,手続きとデータをひとまとまり
開発者にも,オブジェクト指向の考え
「疎」である。
システムをうまく分割する
にしてシステムを分割する手法である。
その一番のメリットは「大きく複雑なプ
アスペクト
指向
Java
UML
.NET
MDA
「疎」の
考え方を導入
オブジェクト
指向開発の普及
デザイン
パターン
フレーム
ワーク
ログラムを,人間が理解できる形にしや
オブジェクト指向開発の
問題点が明らかに
DI
研究科数理・計算科学専攻の千葉滋助
エージェント
指向
SOA
図 1 オブジェクト指向の問題点を解決する
オブジェクト指向技術が浸透するにつれ,その問題点が明らかになっ
てきた。これを解決するキーワードが「疎」
である。
すい」
(東京工業大学大学院 情報理工学
MDA:Model Driven Architecture
DI:Dependency Injection
SOA:Service Oriented Architecture
教授)ことにある。比較的現実に近いモ
ノを単位に分割できるので,人間にとっ
て管理しやすい。
システムをうまく分割できれば,さら
にそれを汎用的に使えるソフトウェア部
品化に発展させることが可能だ。部品化
のメリットは,主に三つある(図 2)
。
図 2 部品化のメリット
①再利用可能
うまく部品化
できると…
②保守性向上
変更
影響が及ぶ範囲
③部品の入れ替え,
拡張が容易
システムを分割してうまく部品
化できれば,
さまざまなメリット
が生まれる。中でも重要なも
のは,同じ部品を他のシステ
ムで再利用できること,変更を
加えたときに影響が及ぶ範囲
を部品内に限定できること,部
品を別のものに入れ替えるこ
とでシステムの変更や拡張が
容易になること,である。
まず一つ目が,再利用性の向上。同
じ機能を必要とする他のソフトウェアを
開発する際に,部品をそのまま使い回せ
る。一から開発する必要がなくなり,ソ
フトウェア開発の効率が向上する。
二つ目は,保守性が上がること。シス
テムが適切な単位に分割されていれば,
不具合があった場合に問題の個所を特
定しやすい。さらにその部分に変更を加
■ NIKKEI BYTE 2005 May ■
Cover Story
ポスト・オブジェクト指向
えても,影響を受けるのは部品内に限定
できる。検証作業の手間が軽減される。
サービス指向,
エージェント指向
図 3 さまざまな局面に
登場する
「疎」な関係
独立したソフトウェアを疎結合させる
そして三つ目は,システムを柔軟に変
更できるようになること。部品を少し拡
張したり,そっくり別のものに入れ替え
独立したソフトウェア
クラス
クラス
るだけで,機能拡張や仕様の変更に対処
データ
データ
できる可能性が出てくる。
手続き
手続き
しかし実際にオブジェクト指向の枠組
みだけでソフトウェアを部品化すると,
期待していたほどのメリットが得られな
いことが分かってきた。システムをうま
動的型付け言語
DI/アスペクト指向
クラスの継承関係に依存
しない柔軟なメソッド記述
クラス間の依存性を
排除
クラス中の手続きを記述する際,
クラ
スの継承関係に依存しないメソッド呼
び出しを可能にしているのが動的な
型付け言語である。DI(Dependency Injection)
やアスペクト指向,エー
ジェント指向はクラスを部品の単位と
し,
クラス間の依存性を軽減する
(ク
ラス間の関係を疎にする)
。さらに部
品の粒度を粗くしたのがサービス指
向である。独立したシステムによって
提供されるサービスを単位にすること
で,部品間の依存性をなくす。
く部品化したつもりでも,一つの部品が
他の部品に強く依存してしまうという状
び出し側で指定したメソッドと同名のメ
スに依存するコードが混入してしまう。
況が少なからず発生するのだ。
ソッドを持ってさえいれば実行できる。
この問題を解消するための技術が,DI と
一方で,C/C++ やJava のような静
アスペクト指向である。どちらも,依存
継承関係に依存しないメソッド記述
的型付け言語ではまずクラス名を指定し
性を管理する別の仕組みを用意して,
この問題を解消するには,部品同士の
てオブジェクト変数を用意し,次にメ
コード自体から依存性を取り除く。
依存性を減らし,それらの関係を「疎」
ソッド名を記述する。呼び出す対象にで
DI は,
「依存性の注入」という意味で
にする必要がある。そこに使える技術が,
きるオブジェクトは,指定したクラスま
ある。クラス間のコードの依存性を「DI
動的型付け言語,DI(Dependency In-
たはそのクラスと継承関係にあるクラス
コンテナ」で管理し,実行時にオブジェ
jection)
,アスペクト指向,SOA,エー
のオブジェクトに限定される*2。
クトに「注入」する。オブジェクト自体
ジェント指向などだ(図 3)
。これらの技
両者の違いは,メソッド呼び出しと
術は,それが使われる局面によって次の
メッセージ送信の違いだと説明すること
はごく普通の独立したものとして作成・
利用できるようにする仕組みだ。
3 種類に整理できる。① 他のオブジェク
もできる。静的型付け言語では,プログ
例えばクラスA のオブジェクトがクラ
トを呼び出す,② クラスとクラスの関係
ラムの記述時に厳密に相手を決定してし
スB のオブジェクトを利用する場合。DI
を記述する,③ システム全体のアーキテ
まう。この時点で相手が持っているメ
を使うと,クラスA にクラスB の情報を
クチャを決定する,である。
ソッドは原則的に確定しており,それを
記述しない。DI コンテナに両者を結び
① として注目されている技術が,動的
呼び出す形だと言える。一方で動的型付
つける情報を登録しておく。DI コンテ
な型付け言語である。Perl やPython を
け言語でのメソッド記述は,型の分から
はじめ,Ruby やGroovy など今流行の
ない相手のオブジェクトに対して「この
スクリプト言語は,ほとんどが動的な型
名前のメソッドを実行してほしい」と
付けをする。動的型付け言語の場合,あ
メッセージを送るイメージだ。
るオブジェクトが別のオブジェクトを指
定した方法で呼び出せるかどうかは実行
クラス間の依存性を減らす
時に確定する。このため,オブジェクト
② は,クラス間の関係を疎にするため
同士の関係が「疎」になる。例えばある
の技術である。動的型付け言語を使って
オブジェクトに処理を依頼する場合,変
メソッドとオブジェクトの関係を疎にし
数がどの型(クラス)になるかは実行時に
たとしても,メソッド中でオブジェクト
決まる。このため変数に格納されたオブ
を生成する際には必ずクラス名を指定す
ジェクトがどのような型であっても,呼
る必要がある。これでは,呼び出すクラ
* 1 もちろん,すべての開発現場でオブジェクト指向を
活用できているわけではない。オブジェクト指向の
考え方を身につけ,使いこなすのに悪戦苦闘して
いる開発者が少なくないのも現実だ。
「オブジェクト
指向開発をしているといっても,Java のようなオブ
ジェクト指向言語を使っているだけのケースも少な
くない。正しくオブジェクト指向的な分析/設計がで
きている企業は限られる」
(テクノロジックアートの
長瀬嘉秀代表取締役)
。例えば「Java を長く使っ
ている人でも,ソースコードを見ると,SQL 文を発
行しているだけ,
という場合も珍しくない」
(浅海智
晴事務所の浅海智晴代表)
。
* 2 静的型付けの言語でこのような動的な特性を取り
込む手法として,
「テンプレート」がある。C++ では
1994 年,Java は2004 年のJ2SE(Java2 Platform,Standard Edition)
5.0 で導入された。C#
は2005 年秋に発売の「Visual Studio 2005」で
対応予定である。
■ NIKKEI BYTE 2005 May ■
29
NIKKEI
BYTE
Fly UP