程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C/C++程序開發中實現信息隱藏的三種類型

C/C++程序開發中實現信息隱藏的三種類型

編輯:C++入門知識

C/C++程序開發中實現信息隱藏的三種類型


無論是模塊化設計,還是面向對象設計,還是分層設計,實現子系統內部信息的對外隱藏都是最關鍵的內在要求。以本人淺顯的經驗,把信息隱藏按照程度的不同分成(1)不可見不可用(2)可見不可用(3)可見可用。

1 不可見不可用

就是說模塊內部的變量、結構體、類定義對外部而已完全隱藏,外部對此一無所知。常用的實現方法就是利用不透明指針,請參見我的博文C語言開發函數庫時利用不透明指針對外隱藏結構體細節。

這種方法同樣適用於C++語言,一種可能的實現方式為面向接口編程。

頭文件 IMyClass.h

class IMyClass
{
    public:
        virtual ~IMyClass();
    public:
        virtual void public_function1();
        virtual void public_function2();
};
IMyClass* CreateMyClassObject();

實現文件 MyClass.cpp

#include "IMyClass.h"
class MyClass : IMyClass.h
{
private:
    int x;
    int y;
    int z;
public:
    virtual void public_function1();
    virtual void public_function2();
};

IMyClass* CreateMyClassObject()
{
    return new MyClass();
}

這種實現方法在源碼層次和庫層次上都能適用。

理論上說,完全實現不可見是最完美的設計。然而這對於程序設計要求非常高,而且會帶來更多的代碼量和設計邏輯層次以及一些限制(如無法實現對已有類型的繼承)。

所以,很多C++庫的設計都采用了下面這種可見不可用的方式,如MFC。

2 可見不可用

這種方法指的是專門針對C++而言的,指的是C++類中的非公開類型成員。例如在頭文件 myclass.h中:

class MyClass
{
    private:
        int x;
        int y;
        int z;
    protected:
        float f;
    public:
        int M;
        void member_method1();
};

對於調用方來說,包含次頭文件後,雖然能夠看到x,y,z等成員變量,但是卻無法使用它們。只要客戶端需要使用 new 來生成實例或者繼承類,就必須知道類的完整定義。

對C語言而言,不存在這種情況,因為結構體裡的任何變量都是公開的。

3 可見可用

也就是毫無隱藏而言了,程序設計中絕對要避免。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved