最近オブジェクト指向についていろいろ調べ始め、
三大要素とは別に動的束縛もメリットの一つだと目にしました。
ただ、動的束縛で検索をしてもあまりピンとくる説明がなされてるページが見当たりません。
一年前の記事ですが多少触れていることがあったのでURLを張っておきます。
このサイトを見る限りだと、自分なりの解釈で動的束縛について記載していますが、一番最後の結び部分で、誰か動的束縛教えてくれメンスと言ってらっしゃいます。
結局のところ、動的束縛のメリット、デメリット。有用な活用法がわからないままで終わってしまいました。
自分なりの解釈ではメソッドに渡す引数の型によって継承した元のメソッドか、派生したメソッドの処理を行うか振り分け、処理内容を分岐させているのだというような認識ですが、どなたか詳しく教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
ベストアンサー
こんにちは。
三大要素とは別に動的束縛もメリットの一つだと目にしました。
Qiitaの記事が参照していると思われるWikipediaには下記注記があります。(ここ1年で追加された可能性もあります。)
ただし、カプセル化(可視性の定義)やポリモフィズムとダイナミックバインディングはオブジェクト指向言語に固有の概念というわけではなく、非オブジェクト指向言語の中にもこの性質を備えるものもある。
また、「動的束縛」について調べてみたけどはっきりしないですね。サイト毎に解釈が異なるようです。(動的ポリモーフィズム、動的型付けなどなど)
英語のWikipediaにDynamic binding (computing)からのリダイレクトでLate bindingがありました。
しかし、ここもはっきりしません。どうもプログラム動作中に名前で呼び出すメソッドを決定する仕組みと書かれているように読み取れます。そして、C++のv-tableを使う仕組みもその1つと書かれているようです。しかし、C++は名前でメソッドを動的に決定する仕組みを持ちません。
遅延バインディング(late binding, dynamic binding)と事前バインディング(early binding)に英語のWikipediaと似たことが書かれてます。こちらは、名前で解決することは書かれてますが、C++については触れていません。
C++のv-tableを使う仕組みは動的ポリモーフィズムですから、普通にオブジェクト指向プログラミングですね。しかし、動的に名前でメソッドを決定する仕組みはオブジェクト指向に必須でもないし、オブジェクト指向以外の分野でもよく使われると思います。
「動的束縛」のオブジェクト指向的な側面は動的ポリモーフィズムであると理解しておけば十分ではないでしょうか?
投稿2017/04/20 04:18
総合スコア23274
0
遅延バインディングと同じ意味です。メソッドを呼び出した時にどのコードが動くかが実行時に決まることです。例えば動的言語や COM 呼び出しなどが該当します。
追記
マイクロソフト用語集での「dynamic binding」の意味
Binding (converting symbolic addresses in the program to storage-related addresses) that occurs during program execution. The term often refers to object-oriented applications that determine, during run time, which software routines to call for particular data objects.
訳:
束縛(プログラムの記号アドレス(アドレスを記号であらわしたもの)をメモリの中のアドレスに変換すること) がプログラムの実行中に起こるもの。しばしば、特定のデータオブジェクトを呼ぶルーチンを実行中に決定するオブジェクト指向アプリケーションの用語として参照される。
意訳:
束縛というのは、プログラム中で定義された仮のアドレスを実アドレスに割り当てることで、それをコンパイル時や起動時ではなく実行中に動的に行うものを動的束縛と呼ぶ。動的型付言語の用語として使われることが多い。
#つまりどういうことか
これを読むと、ポリモーフィズムとは全く別の概念であることがわかります。しかしこれを実装するのにポリモーフィズムを使うのが便利なのでオブジェクト指向でよく採用される技術ですが、オブジェクト指向でなければ動的束縛ができないかというと、そんなことは全然ありません。
たとえば式指向の Lisp にも動的束縛はあります。
投稿2017/04/20 03:44
編集2017/04/20 05:27総合スコア28673
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
オブジェクト指向プログラミングは、オブジェクト指向という考え方を実現するためのプログラミング方式のことです。
ですので「オブジェクト指向という考え方で何を実現したいのか」を理解しないままコードから考えると、行き詰り易いかと思います。
ここから例示して考えていきたいと思いますが、例えば犬、猫、鳥などを扱うペットショップがあるとします。ある日、商品であるペット達がとある病気にかかっていないかという検査で、獣医師がやってきて動物1匹ずつ順に鳴かせるということをしたいとします。
上記をモデル化しオブジェクト指向プログラミングで一匹ずつ鳴かせるという動作を実現するコードを検討してみましょう。
動物クラスを継承した犬、猫、鳥クラスがあり、それぞれ「鳴く」というメソッドがあるとします。
例えば鳴かせるだけでいいのであれば、現実の世界のイメージであれば、お店のケージを順に巡り、1匹ずつ鳴かせればいいと想像できます。中に入っている動物が何であれ、鳴くことができるのであれば順に鳴かせればいいですね。勿論、売り場の設計上、ある程度は犬、猫、鳥と順番にケージを回ることになるかもしれませんが、重要なのは個々の動物がなんであるかを意識する必要は無いということです。
プログラミングとしてそれを実施したければ、配列Aの中に犬、猫、鳥クラスを順不同で格納していって、順番にループさせて鳴くメソッドを実行するというコードがイメージできます。
配列Aの中身は、「鳴く」メソッドが存在するのであればどんなオブジェクトが格納されていても問題ありません。
・・・というようなことが「オブジェクト指向でやりたいこと」です。現実世界のイメージに則って考えられているということが分かるかと思います。
ですが、プログラミングコード上の事情により、例えば犬、猫、鳥クラスで別々の配列X、Y、Zを作らなければならないとします。
それはそれで、それがプログラミング上のルールであればプログラマーはそれに従ってコーディングするのですが、上記のようなことを想像すると、**そういうルールがあるということが果たしてオブジェクト指向に則っているか?**ということになるわけです。
かくして、上記のようなことを実現する「ダイナミックバインディング」という概念が産み出され、その概念はオブジェクト指向プログラミングを構成するための1条件として数えられるようになります。
メリットはオブジェクト指向プログラミングの実現です。デメリットはオブジェクト指向プログラミングが実現できないことです。
私は無理に使うことを考えたりはしませんが、使いたいような設計をする機会があったときにそういう機能が使えるということは立派なメリットです。
私はそんな感じで理解しています。私見も入っているかと思いますが参考になれば。
投稿2017/04/20 04:18
編集2017/04/20 04:32総合スコア1947
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/20 04:43
2017/04/20 04:52 編集
2017/04/20 05:25
2017/04/20 05:33
2017/04/20 05:38
2017/04/20 07:33
2017/04/20 07:53
2017/04/20 09:31
2017/04/20 10:04
2017/04/21 05:40
2017/04/21 07:31
2017/04/21 07:56