fc2ブログ

実践的オブジェクト指向設計入門17

 この記事は、実践的オブジェクト指向設計入門16の続きです。前回は、設計の最適化について解説しました。引き続き設計の最適化について解説します。
 オブジェクト指向方法論OMTの「効率的なアクセスのために冗長な関連を追加する」とは、複雑な操作の再計算を避けるために、派生属性を保存することだとされています。分析中に冗長な関連は望ましくありません。しかしながら、実装するという観点から見れば、システムの効率が上がる場合もありうるので、冗長な情報を付加するのが望ましい事もあります。
 例えば、データベースに於いてテーブルは基本的に第3まで正規化します。しかし常に第3正規形にしておくと、頻繁に検索されるパターンによっては、逆に効率が悪い場合があります。その様な状況では、第3正規形をあえて崩して、頻繁に検索される列を追加して冗長にする事により、結合コストを低くするとよい場合もあります。ただし、冗長化すると更新コストが上がるので、慎重にせねばなりません。なお、この作業項目は、インデックスの検討も含まれています。
 次に「効率化のための実行順序の再調整」があります。アルゴリズムは、計算手順を変える事により処理効率が上がる場合があります。オブジェクト指向分析では論理的な順序が導き出されますが、実装の観点から言って最適な順序だと限りません。時には実行を変える柔軟な思考が求められています。
 最後に「派生属性の保存による再計算の回避」です。これは、他のデータから派生させることができる冗長なデータを再計算するオーバーヘッドを避けるために、一旦計算した値のままキャッシュしたり保存したりする事です。「効率的なアクセスのために冗長な関連を追加する」と似ていますが、この項目はインデックス等についてであり、派生属性の保存による再計算の回避はキャッシュの事を指しています。ネットワークの設計でよくみられる現象ですが、オブジェクトを使われる場所の近くにコピーしておくと、遠隔地に一々データを取りに行く手間が省けます。これはあらゆるオブジェクトに言える事です。そのよい例がADO.NETのオブジェクトモデルです。
 ADO.NETを使用すると、メモリ内にデータをコピーしておく事が出来ます。これは処理効率を大きく上げます。何故ならば、遠隔地にアクセスしてデータを受信するスピードよりも、メモリからデータを取得する方が圧倒的に速いからです。適切なデータを取得しておけば、パフォーマンスは大幅にアップします。
 こうした事例はシステム開発では頻繁にあります。あらゆる場所にキャッシュがある事からその事実がそれを裏付けています。ハードディスク・CPU・主記憶・・・・それら全てにキャッシュが存在します。しかしながら、キャッシュは更新に関するデメリットがある事を忘れてはなりません。DNSのキャッシュにより、名前解決に関するトラブルを経験した人も多いでしょう。
 前回も言いましたが、最適化にはデメリットがあり、早すぎる最適化は毒となります。十分に注意して下さい。最後に注意するべき点について述べます。オブジェクト指向方法論OMTがいう計算とは、コンピューターの処理全般を指しています。数値処理だけの話題ではないので注意して下さい。
スポンサーサイト



テーマ : ソフトウェア開発
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

インドリ

Author:インドリ
みなさん、はじめまして、
コンニチハ。

ボクは、無限の夢(infinity dream)を持つネタ好きな虹色の鳥インドリ(in dre)です。
色々な情報処理技術を啄ばむから楽しみにしてね。

http://twitter.com/indori
は別人による嫌がらせ行為です。
私とは関係ないので注意して下さい。
次はなりすましブログなどをするかもしれませんが、ここ以外でブログをするつもりがないので、ここ以外にインドリのブログがあったとしても無視してください。


何度言っても分からない人がいるので、ここにコメント欄へ書き込むときの注意事項を書きます。


一、社会人としてのマナーをわきまえましょう。
一、妄想に基づく書き込みを止めてください。
一、暴言の類は書かないで下さい。
一、某誹謗中傷サイトの書き込みは彼らの妄想に基づく書き込みですから無視して、ここへ書き込まないで下さい。
一、コメント書く前に他のコメントよく読んでから行って下さい。
一、言いがかかり等の行為を禁止します。
一、その他常識的に考えて迷惑なコメントはしないで下さい。


以上のルールを守れない人のコメントは削除します。



利用上の注意
ここに紹介してある文章およびプログラムコードは正確であるように心がけておりますが、内容を保証するものではありません。当サイトの内容によって生じた損害については、一切の責任を負いませんので御了承ください。


執筆したCodeZineの記事


【VB.NETで仮想CPUを作ろう】

  1. VB.NETで仮想CPUを作ろう
  2. レジスタの実装
  3. 仮想CPUのGUI化
  4. テストドライバの改良
  5. CPUの基礎動作の実装
  6. MOV命令の実装
  7. ADD命令実装
  8. SUB命令実装
  9. INC命令&DEC命令の実装と命令長
  10. MLU命令の実装とModR/Mについて
  11. DIV命令の実装とイベント設計について
  12. 機械語駆動式 関数電卓を作ろう!
  13. 機械語駆動式 関数電卓を作ろう! 解答編(前半)
  14. 機械語駆動式 関数電卓を作ろう! 解答編(後半)


【仮想ネットワーク実装でTCP/IPを学ぼう】
  1. TCP/IPの基礎と勘所
  2. ネットワークアクセス層の勘所
  3. インターネット層の勘所
  4. トランスポート層の勘所
  5. アプリケーション層の勘所
  6. セキュリティの基礎と仮想ネットワークの仕様
  7. GDI+と独自プロトコルの定義



【並列化】
インテル Parallel Studioを使って並列化プログラミングを試してみた
並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」


【TBBシリーズ】
  1. インテル スレッディング・ビルディング・ブロックの概要
  2. インテルTBBから学ぶループの並列化
  3. スレッドセーフとインテルTBBのコンテナ
  4. インテルTBBのスレッドクラス


【OpenMPシリーズ】
  1. OpenMPの基礎構文
  2. OpenMPの実行時ライブラリと並列ループ
  3. OpenMPのメモリモデルとfork- joinモデル

最近の記事
最近のコメント
月別アーカイブ
カテゴリ
Ada (9)
COBOL (5)
C (9)
C++ (11)
C# (370)
D (25)
Java (8)
Perl (1)
Ruby (14)
PHP (2)
Boo (2)
Cobra (2)
LISP (6)
F# (33)
HTML (0)
XHTML (0)
CSS (0)
XML (0)
XSLT (0)
Scala (4)
WPF (0)
WF (2)
WCF (0)
LINQ (4)
MONO (5)
Linux (0)
MySQL (0)
ブログ内検索
リンク
最近のトラックバック
RSSフィード
ブロとも申請フォーム

この人とブロともになる

QRコード
FC2カウンター