たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

移譲と関数と高階関数、依存性の注入

委譲 (delegation)

委譲 - Wikipedia

ufcpp.net

関数ポインタに似てるけど、methodが所属してるインスタンスの状態もくっついてくるから、その辺は違う
連載:C#入門 第17回 処理を委譲するdelegate(5/5) - @IT
eno0514.hatenadiary.jp

型だけ決めて、委譲する。 = interface実装する実体を後で入れる

用語整理

  • 移譲
  • 依存性の注入: 設計パターンの一種
  • 関数ポインタ
  • 制御の反転

根底にある思想・パラダイムは何か

-> interface決めれば、callerとcalleeを分離できる。なのでは?
callerはcalleeを使う/呼ぶので、使い方(I/Oなど)は絶対に知らないといけない
でもより疎結合にしようと努力することはできる
関心の分離が根底か

DIは
「caller内でcalleeをインスタンス化する」
密結合を、
インスタンス化済みのcalleeを注入する」
疎結合に変える設計パターン

制御の反転

bliki-ja.github.io
制御 == main関数 が誰か、という話.

ライブラリとフレームワーク、がわかりやすい
ライブラリはcallee, つまりmainから呼ばれる側
フレームワークはcaller, つまりmain関数そのもの、呼ぶ側.

callbackはまんまcallee

www.slideshare.net

caller, callee

呼ぶか、自身を登録するか

やはり設計パターンか?

関数ポインタ使わんでもええで、な話
developer.wonderpla.net

依存性の注入

呼び出し側 (caller) が呼び出され側 (callee) を呼ぶ際、
caller内でcalleeを生成したりせずにconstuctorなどで外部から注入する設計パターン.
callerはcalleeの機能を使っている、つまりcallerはcalleeに依存性している。
この依存物を外から注入して使うパターンがDI.