「データ構造とアルゴリズム」の編集履歴(バックアップ)一覧はこちら
「データ構造とアルゴリズム」(2006/01/20 (金) 00:43:39) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
プログラムとは、「データ構造+アルゴリズム」だという言葉があります。
アルゴリズム(ロジック)だけではなく、目的の機能に最適なデータ構造を選択することも重要です。
がんばってがんばって、ロジックをこねくり回して目的の機能を得たとしても、それは処理時間あるいは処理に要するメモリなどのリソースの面でかならずしも最適な処理とはなっていないでしょう。また、後から保守なり拡張なりで手を入れる際にあまりにロジックがひねくれていると修正しにくいものです。
そこで、「データの持ち方」というのが重要になるわけです。
例えばある要素の集合を「データ」として持ちたいとします。
この「データの集まり」をどう扱うかによって、最適な「データの持ち方」を選択するということです。
要素に並び順があり、かつ要素と要素の間に新たな要素を加えたりする場合には、連結リスト構造がいいでしょう。
計算機などを作る場合にはスタック構造がいいでしょう。
C言語で文字列を扱うときの、「charの配列」も、もちろん一種のデータ構造です。
このような、プリミティブな個々のデータを扱う為の飾り付けをデータ構造といいます。
そして、そのような構造に対しての最適なロジックがアルゴリズムです。
相互は密接に連携しあって、目的とする機能に対して最適な処理を行うことが出来るようになります。
「オブジェクト指向」における「クラス」の概念は、この考え方をとことん突き詰めたものだと考えてもいいでしょう。
クラスとはデータ構造とアルゴリズムを一まとめにした塊であり、かつさらに別のクラスのデータとなりうるもの、ということです。
さて、すでに書いたとおり、C言語ではソースファイル単位でデータと関数を塊として扱うことが出来ます。
オブジェクト指向における「クラスの親密さ」の問題と同様、C言語の「構造化」もまた再利用性が高いものが良いとされています。
再利用性が高いとは、ある構造が他の構造から独立しているということです。
その為には必要最低限の関数のみを他のソースファイルに公開して、出来るだけ「隠蔽する」ということが重要になります。
また、出来るだけ環境や処理系に依存するコードやデータは、さらに別のソースファイルから呼び出すようにします。
ひとつのソースファイルには出来るだけひとつのアルゴリズムとデータ構造で完結させるようにします。
といったコーディングを心がけると、より保守性の高いプログラムが書けるだろうと思います。
デバッグするにせよ、改造するにせよ、プログラムの「構造」がきちんと独立していれば、対象の部分を特定して修正するだけですみます。修正後のテストにしても、他の部分に影響が無いのがわかっているのですから、非常にやりやすいです。
プログラムは新規に作るよりも、それをデバッグしたり改造したりする時間の方がはるかに長いものですから。。。
表示オプション
横に並べて表示:
変化行の前後のみ表示: