Object-Oriented Conference 2020
ロングセッション

C言語で設計・実装するオブジェクト指向システム

dictiene Yaechan dictiene
1

今日では、実用的なアプリケーションのためのプログラミングはオブジェクト指向を前提としてC++やJavaやそれ以降に登場した多くのプログラミング言語のような、オブジェクト指向言語により行われるのが主流になっています。一方で、動作環境における様々な制約などから依然としてC言語も幅広く使われているという現状があります。

C言語はオブジェクト指向を構文として直接サポートしてはいませんが、構造体や関数ポインタなどの既存の構文やプリプロセッサのマクロを駆使して、オブジェクト指向を担うシステムを設計・実装することが可能です。C++をはじめとするオブジェクト指向のネイティブコンパイラ型言語で、コンパイラが自動で面倒を見てくれるようなオブジェクト指向の仕組みの細部を、あえてC言語で設計・実装・考察することによって、クラスやオブジェクトなどの、オブジェクト指向の実現に必要な要素が、メモリやCPUのような低レベルのレイヤーでどのように動作していくのかといった、基礎的な側面を垣間見ることができます。

本セッションでは、C言語から利用可能な既存のオブジェクト指向システムを簡単に紹介しつつ、自作のライブラリ(https://gitlab.com/melioprojects/meliogarden)の中で独自に設計・開発しているオブジェクト指向システムを詳細に紹介します。そのライブラリの中で、クラス、継承、(ある程度の)多態性などといったオブジェクト指向の実現に必要な要素を、C言語でどのように実装したのかを、その考え方や問題点(そして解決可能なものについてはその戦略・選択肢)も含めて解説していきます。また、実装していく中では避けがたい大量のボイラープレート・コード(不可欠だが本質でない記述)を、プリプロセッサのマクロを用いて可能な限り簡単に表現していく取り組みについても説明していきます