Notice : 内容無保証。禁無断転載。リンク自由。

コンポーネント図

i_hello.h

#ifndef _i_hello_h_
#define _i_hello_h_

// 提供者が作成し、ユーザに公開する、Chello の interface

// <<interface>>

// 前方参照

// ユーザには specification は公開しない
class Chello ;

// 操作 : プロトタイプ

// Chello の specification は変更される可能性があるので、
// Chello のメンバを直接使用しないで済むような interface を定義

Chello* NewHello(void) ;

void Delete(Chello* hello) ;
void greet(Chello* hello) ;

#endif /* _i_hello_h_ */

c_hello.h

#ifndef _c_hello_h_
#define _c_hello_h_

// 提供者が作成する、ユーザには非公開の、Chello の specification

#include <i_hello.h>

// <<imprementation>> <<specification>>

class Chello{
public:
    void Delete(void) ;
    void greet(void) ;
} ;

#endif /* _c_hello_h_ */

hello.cpp

// 提供者が作成する、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() ;
}

main.cpp

// ユーザが作成する、Chello のメンバを直接使用していないファイル。

#include <i_hello.h>

// Chello の specification から独立。
// (specification が変更されても 再コンパイルの必要無し)

int main(void) {
    Chello* hello = NewHello() ;

    greet(hello) ;
    Delete(hello) ;

    return 0 ;
}

戻る
トップページへ戻る