「ソースファイルの話」の編集履歴(バックアップ)一覧はこちら
「ソースファイルの話」(2006/01/19 (木) 00:47:58) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
ちいさなプログラムを書いているときには気にもならないし特に問題にもならないけど、だんだんプログラムが大きくなってくるとソースファイルを分割する、ということを行うと思います。
その際に、ただ単純に分ければいい、というものではないことはまあ誰でもわかると思うんです。だいたいは、機能別(C++なんかではクラス単位)に、わけるんじゃないでしょうか?
例えばあるプログラムにファイル処理を行う関数郡と画面の入出力を行う関数郡があったばあい、ソースファイルは
【プログラムのメイン処理を記述したソースファイル】
【ファイル処理用のソースファイル】
【画面の入出力用のソースファイル】
ぐらいに分割すると思います。
その際に、例えばファイルの処理にしてもソースファイル内でサブ関数的な使い方をする関数とメインの処理などからコールされる関数の2種類があるわけです。
ここまでは、まあどんな言語でもほぼ同じだと思います。ここからは、C言語の話。
そういった場合には、サブ関数を宣言・定義するときにstatic修飾子をつけることでソースファイル内からしかそのサブ関数をコールすることが出来なくなります。また、グローバル変数を使っている場合も同様にstatic修飾子によって同一ソースファイル内からのアクセスしか出来ないようにすることができます。
これによって、ファイルスコープの外からの変数へのアクセスや関数コールを制限することができます。
これって、何かに似ていませんか??
そうです。C++やJavaのprivateメンバ(Javaならフィールドまたはメソッド)と非常に似ています。
逆に、ヘッダファイルなどで公開している関数はpublicな関数、staticでない変数はpublicな変数(フィールド)だと考えることも出来ます。
C言語の分割されたソースファイルというのは、いわばfinalかつSingletonなクラスのように扱うことができるのです。
何が言いたいのかというと、C言語でプログラムを書くときにもオブジェクト指向的な考え方は非常に有効である(ことがある)、ということです。常に、とは言いませんが。
「だからC言語でもオブジェクト指向言語なんだよ」なんてことが言いたいわけじゃありません。だいたい、継承できないし当然ポリモーフィズムなんてありゃしないし。(こねくり回したらほとんど同じようなことは出来なくも無いですが)
ここで言いたいのは、いわゆる「オブジェクト指向」ではなく、根本的な思想としての「オブジェクト指向」なプログラミングはC言語でも十分に可能だということです。
そもそもオブジェクト指向においてクラス単位(オブジェクト)で処理を考える、ということは
①データと処理をまとめて扱う
②クリティカルなデータや処理を隠蔽して、外からは限られた操作しか出来ないようにすることでセキュアなプログラムを書く
というところから出発しています。
この、オブジェクト指向の根本の思想はとても有用だと思います。
表示オプション
横に並べて表示:
変化行の前後のみ表示: