設定ファイルで動きを変えることです。
例えるなら運動会の借り物競争です。
メモに書いてあるものを借りてきてゴールするという流れは決まっていますが、メモの内容によって結果(=借りてきた物、人や着順など)が変わります。
例えば、あるAという関数の「記述方法」だけ決めます。
そのAはどのように規定してもいいけど、「規定できる」こと
だけ決めます。
また、Aの呼び出し(正確には取り出し)方法も決めます。
a.iniファイル内で記述しようと思うと。
int A(int a,int b) == realA
とa.iniを書いたとすると、A(realA)はa,bで呼び出し、値がintで帰ってくる。
a.iniファイル内に
double A(void) == realB
と書くとA(realB)は引数がなく、Aを呼び出すとdoubleで返る。
で、Aを呼び出す側は。
Afunc = invoke("A",a.ini)
#Afunc(a,b)とも、Afunc()とも呼び出せる
と「invoke」だけ決めておく。
ということで「依存性の注入」は
・ある関数(==A)の「記述方法」を決める
・Aの呼び出し方(invoke関数)を決める
ことに相当します。
そうすれば、「Aの実装」と「Aを呼び出す側」をだいたい分離することが出来る。
Aを呼び出す側が、a.iniの内容を知る必要があるのが不満だけど。。。。それもAnnotationを使えば自動でできるし。
あえてC言語的に説明してみました。
どのあたりがC言語的なのかよくわかりませんが、少なくとも「double A(void) == realB」や「Afunc = invoke("A",a.ini)」は有効なC言語の構文ではないように思います。独自定義の構文でしたら解説をよろしくお願いします。
一言でまとめるなら、「アナタ、私を頼って良いのよ。」という甘いささやき。
(^_-)
「気を付けよう 甘い言葉と黒い罠?」
It's so dangerous.
So , 「逃げるが勝ち」if Me.
斬新な解釈ですが
字面だけの浅い理解ではポイントは差し上げられません。
人が他人に依存するとしたら、その相手の中に《自分にはない可能性》を見出したときではないでしょうか。
力でも優しさでも行動力でも、それが相手にとって「自分にはない」と自覚されているものだと効果的かもしれません。
異質だけど、自分にはないものを持っている相手が自分に味方して、欠けた部分を補ってくれるという安心感は大きな存在感を与えるものです。
同じ時間をすごして体験を積み重ねるなかで、その人の中で欠けている部分をそっと補うような言動をつづけることで、その人にとって自分という存在をなくてはならないものだと感じさせられるのではないかと思います。
設定ファイルで動きを変えることです。
例えるなら運動会の借り物競争です。
メモに書いてあるものを借りてきてゴールするという流れは決まっていますが、メモの内容によって結果(=借りてきた物、人や着順など)が変わります。
設定ファイルでウィンドウのタイトルに表示する文字列を変えるのも、大げさに言えば文字列オブジェクトへの依存性を実行時に注入しているわけですね。
※Javaでの例を示します。期待している解説とずれていたらごめんなさい
「依存性の注入」とは
まず、依存性とは何かと言うと、クラスAでの処理中にクラスBのメソッドを呼び出したり、
メソッドの引数としてそのクラスのインスタンスを必要とする事を言います。
つまり、クラスBのインスタンスが無ければ処理が完了しない訳ですから、別のクラスに依存していると言う訳です。
ここで、依存性の注入とはこの依存するクラスAに対して
外部から(クラスCから)クラスBのインスタンスを注入
する事を言います。
「注入」と言うとイメージが付きづらいと思いますが、簡単に言えばクラスBのインスタンスをクラスAに「渡して」あげる事を指します。
ここで、インスタンスを「渡す」には下記のような方法があります。
■setterの呼び出し
■コンストラクタによるセット
このように依存性の注入を主にに行うフレームワークとして Spring Seaser2 などが知られています。
これらのフレームワークは依存性の注入(Dependency Injection)の頭文字をとってDIコンテナと呼ばれています。
設定ファイルでウィンドウのタイトルに表示する文字列を変えるのも、大げさに言えば文字列オブジェクトへの依存性を実行時に注入しているわけですね。