委譲の実行サンプル
それでは、拡張した機能を確認してみましょう。
#include "Member.h"
/* エントリポイント */
int main(int argc, char* argv[])
{
Member* member = Member_new(1, "snoozer05", "ブロンズ");
member->changeServiceStautsTo(member, "ゴールド");
Member_delete(member);
return 1;
}
>gcc main.c User.c Member.c ServiceStatus.c >a.out 現在のサービスステータスは ブロンズ です 現在のサービスステータスは ゴールド です
changeServiceStautsToメッセージが、メンバオブジェクトからサービスステータスオブジェクトへ委譲されて、処理が実行されていることが確認できました。
委譲を用いたプログラミングでは、このように他のさまざまなオブジェクトから必要な機能をピックアップして再利用して、独自の機能を持つ、新たなオブジェクトを作り出していきます。 また、委譲を使うことで、より柔軟で再利用可能な機構を構築することも可能です。たとえば、この委譲先の部分に、前回解説したような多態性を持たせると動的に委譲先を切り替えることが出来、より柔軟な構造を実現することが出来ます。
おわりに
これまでの連載記事を通じて、C言語によるOOPを通してオブジェクト指向の基本的な概念について解説してきました。いかがだったでしょうか。「カプセル化」や「継承」など、用語こそCプログラマの皆さんに耳慣れない言葉だったかと思いますが、言葉の意味や実現しようとしていることは、どれも皆さんが普段普通に考えているようなことだったのではないでしょうか。
オブジェクト指向というアプローチの中で使われているさまざまな用語は、どれもプログラミングという問題領域における考え方や手法に名前を与えたものです。恐れずに、普段している作業や思考と照らし合わせて、是非理解を進めていっていただければと思います。
本稿が、少しでも皆さんのオブジェクト指向の理解に貢献できたのなら幸いです。最後になりますが、短い間でしたが連載にお付き合いくださった皆様に心より感謝いたします。どうもありがとうございました。それでは、また別の記事でお会いしましょう。
