Latest web development tutorials

C ++ 데이터 추상화

데이터 추상화는 외부 세계에 중요한 정보를 제공하고, 그 배경의 구현 상세를 숨길만을 의미 내용을 제시하지 않고 필요한 정보 만의 성능에있다.

데이터 추상화는 프로그래밍 인터페이스 및 구현 분리 (설계) 기술에 대한 종속성입니다.

당신이 설정할 수 있습니다,의 같은 TV 등의 실제 실제 예를 보자 오프 (스피커, VCR, DVD 플레이어 등) 외부 구성 요소를 추가, 채널을 변경하고 볼륨을 조정할 수 있지만 내부를 모르는 구현 세부 사항은,입니다, 당신은이 신호 결국 화면에 표시를 변환하는 방법 케이블 신호를 수신하는 방법을 모르겠어요.

따라서, 우리는 내부 구현과 분리 된 외부 인터페이스에 TV를 말할 수있다, 당신은 TV를 제어 할 수 있습니다 직접 외부 인터페이스를 통해 (예 : 원격 제어, 사운드 볼륨 컨트롤러의 전원 버튼으로), 내부 원리를 모른다.

이제, 본론하자, 그것은 C ++ 프로그래밍의 관점에서, C ++ 클래스데이터 추상화 할 수있다.외부 데이터의 다수의 객체를 조작하기위한 일반적인 방법을 제공하도록, 즉, 사실상 외부 내부 클래스 구현을 모르고있다.

예를 들어, 필요없이정렬 () 함수를 호출 할 수있는 프로그램이 데이터를 정렬하는 데 사용되는 알고리즘의 기능을 설명.사실로 인해 다른 저장소에 정렬의 실현의 기본 기능은 동일한 인터페이스, 평소와 같이 함수 호출만큼 달라질.

C ++에서는 추상 데이터 타입 (ADT)를 정의하기 위해 우리 자신의클래스를 사용합니다.다음과 같이, 표준 출력으로 출력 데이터 개체COUT 클래스 ostream에 사용할수 있습니다 :

#include <iostream>
using namespace std;

int main( )
{
   cout << "Hello C++" <<endl;
   return 0;
}

여기에서, 당신은cout을 텍스트가 사용자의 화면에 표시하는 방법을 이해하지 않습니다.당신은 기본이되는 구현을 자유롭게 변경할 수 있습니다 COUT에 공용 인터페이스를 알아야합니다.

액세스 탭 필수 추상

C ++에서, 우리는 추상적 인 인터페이스 클래스를 정의하는 액세스 탭을 사용합니다. 클래스는 0 개 이상의 액세스 라벨을 포함 할 수 있습니다 :

  • 태그가 프로그램의 모든 부분을 액세스 할 수있는 공용 부재의 사용을 정의한다. 회원이 정의에 의해 데이터의 유형의 추상보기는 public입니다.
  • 개인용 라벨의 사용은 코드에 액세스 할 수없는 반원하여 정의. 숨기기 구현 세부 사항의 유형을 사용하여 코드의 개인 부분입니다.

액세스 빈도 태그는 제한이 없음을 보인다. 각 태그는 정의 된 액세스 레벨의 부재 뒤에 접속을 지정한다. 할당 된 액세스 수준은 다음 만남 액세스 탭 때까지 효력을 유지 또는 괄호에 발생 오른쪽 체형을 닫습니다.

데이터 추상화 혜택

데이터 추상화는 두 가지 중요한 장점이 있습니다 :

  • 내부 클래스 객체의 상태에 피해를 부주의 사용자 레벨의 오류로부터 보호된다.
  • 클래스 구현에 변경 요구에 응답하거나 사용자 수준 코드 에러보고를 변경하지 않는 요건을 충족하기 위해, 시간에 따라 변화 할 수있다.

그러한 저자의 제조에서 자유롭게 데이터를 변경할 수있는 경우에 개별 섹션에서 클래스의 데이터 멤버를 정의한다. 변경 사항을 구현하는 경우에만이 변경 될 수 있습니다 어떤 영향을 확인하기 위해 클래스에 대한 코드를 확인해야합니다. 데이터가 공개되어있는 경우, 데이터 표시 기능 부재의 구 형태로의 직접적인 액세스가 영향을받을 가능성이있다.

추상 인스턴스 데이터

C ++ 프로그램은 공공 및 민간 데이터 추상화의 회원들과 모든 클래스 예제로 사용할 수 있습니다. 다음 예를 고려하십시오

#include <iostream>
using namespace std;

class Adder{
   public:
      // 构造函数
      Adder(int i = 0)
      {
        total = i;
      }
      // 对外的接口
      void addNum(int number)
      {
          total += number;
      }
      // 对外的接口
      int getTotal()
      {
          return total;
      };
   private:
      // 对外隐藏的数据
      int total;
};
int main( )
{
   Adder a;
   
   a.addNum(10);
   a.addNum(20);
   a.addNum(30);

   cout << "Total " << a.getTotal() <<endl;
   return 0;
}

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

Total 60

함께 숫자 위의 클래스와는 합계를 반환합니다. 공용 멤버ADDNUM getTotal외부인터페이스, 사용자는 자신의 클래스를 사용하기 위하여 알 필요가있다. 개인 회원전체 사용자가 알 필요는 없지만, 클래스가 필요한 작업을 수행 할 수 있습니다.

디자인 전략

인터페이스 및 구현에 코드를 분리하는 추상. 만약 기본 구현을 변경할 경우, 인터페이스가 변경되지 않도록 콤포넌트의 설계에서, 인터페이스는, 구현에 독립적 남아 있어야한다.

이 경우에 관계없이 인터페이스를 사용하는 임의의 프로그램, 인터페이스는 영향을받지 않을 것이며, 최신 컴파일을 실현한다.