#ifndef _c_hello_h_ #define _c_hello_h_ // 提供者が作成し、ユーザに公開する、Chello の specification と interface // <<imprementation>> <<specification>> class Chello{ // public で無い部分は使われかたに関係なく自由に変更したいのだが…。 public: void Delete(void) ; void greet(void) ; } ; // <<interface>> // 操作 : プロトタイプ // Chello の specification は変更される可能性があるので、 // Chello のメンバを直接使用しないで済むような interface を定義 Chello* NewHello(void) ; void Delete(Chello* hello) ; void greet(Chello* hello) ; #endif /* _c_hello_h_ */
// 提供者が作成する、Chello の body と interface の実装 #include <stdio.h> #include "c_hello.h" // <<imprementation>> <<body>> void Chello::Delete(void){ delete this ; } void Chello::greet(void){ printf("Hello, World!\n") ; } // 操作 : 実体 Chello* NewHello(void){ return new Chello ; } void Delete(Chello* hello){ hello->Delete() ; } void greet(Chello* hello){ hello->greet() ; }
// ユーザが作成する、Chello のメンバを直接使用していないファイル。 #include <c_hello.h> // Chello の specification から独立であるにも関わらず、 // 提供者は specification を変更するたびに c_hello.h を再リリースし、 // ユーザは c_hello.h に依存するファイルを再コンパイルしなければならない。 int main(void) { Chello* hello = NewHello() ; greet(hello) ; Delete(hello) ; return 0 ; }