2011-08-29 13 views
9

데이터 추상화 및 정보 숨김에 어떤 차이가 있습니까? 이 링크에서 모든 답을 찾은 후에는 더 혼란 스럽습니다. Abstraction VS Information Hiding VS Encapsulation 차이점을 찾을 수 없습니다. 우리는 목표 (정보 숨기기)를 목표로 &을 다른 프로세스 (추상화)라고 부를 수 있습니까? 그러나 이것은 나에게는 만족스러운 차이가 아닙니다. 또한 캡슐화는 추상화 프로세스를 구현하는 기술입니다. 바로 여기 있습니까? 정확한 차이점을 설명하십시오.정보 숨김 및 데이터 추상화의 차이점은 무엇입니까?

답변

6

정보 숨기기은 디자이너가 구체적으로 구현 세부 정보에 대한 액세스를 제한하기로 결정한 경우입니다. 객체 지향 디자인보다 오래된 개념이지만 종종 사용됩니다.

간단한 예는 C로 상수를 정의하는 것입니다., #define NAME_SIZE 15 상수의 코드 (클라이언트)는 값을 알 필요가 없으며 디자이너 (디자이너)가 나중에 값을 변경하기로 결정하면 문제가되지 않습니다. 그들은 당신이 그것을 바꾸기로 결정할 수도 있기 때문에 그것이 정말로 15라는 사실에 대해 가정해서는 안됩니다. 당신이 집계를 처리 할 때 추상화가

는, 예를 들어, 자동차 추상화은 우리가 간단한 방법으로 복잡한 것들을 생각할 수 등 섀시, 자동차, 바퀴, 같은 세부 사항의 추상화입니다.

캡슐화은 추상화를 구성하는 요소의 세부 수준을 결정하는 방법입니다. 좋은 캡슐화는 정보 숨기기를 적용하여 세부 사항의 한계를 적용합니다. 예를 들어, 내 자동차는 모든 부품으로 구성되어 있지만, 운전자에게 내 필요에 맞는 인터페이스 만 제공합니다. 나는 문, 자물쇠, 창문, 조명, 경적, 선 루프, 움직임의 방향, 가속, 감속 등을 제어 할 수 있습니다.이 모든 것들의 "방법"에 대한 세부 사항을 조작하는 것이 궁금 할지라도, 캡슐화는 더 많이 보는 것에서의 나.

운전 기사가 제한된 인터페이스 만 알고 있기 때문에 내 차의 구현이 변경됩니다 (연소 엔진에서 전기 또는 하이브리드로 변경됨). 운전 방법을 변경할 필요가 없습니다. 추상화 나를 그냥 등, 대신 금속, 고무 조각 수백,

숨어있는 정보를 자동차의하지 부분은 choke valve 수 있습니다 어디의 예를 차를 운전하고있어 알 수 있습니다. 우리 부모님은 그들이 운전 해 온 차에서 일하는 데 어떻게 익숙했는지 말해 줬어. 그건 전기 자동차에서 쓸모없는 연소 엔진 세부 사항 이었어.

+1

실시간 예제를 설명하는 데 많은 노력을 기울일 수 있습니다. 감사. :) –

1

"정보 숨기기"는 "데이터 추상화"의 중요한 부분이지만 전체 개념은 아닙니다.

그리고 FORTRAN 또는 BASIC에서 "전역 사용 금지"와 같은 절차 코드에서 "정보 숨기기"를 할 수 있지만 기억해야합니다. 그러나 "추상 데이터 유형"은 필요하지 않습니다. ".

Information hidingAbstract Data Types은 서로 밀접한 관련이 있지만 서로 다른 개념입니다.

2

클래스는 일반적으로 클라이언트로부터 구현 세부 정보를 숨 깁니다. 이를 정보 은닉이라고합니다. 인터페이스를 작성하여 우리는 ... 정보 숨어

예 ... 아래 우리는 우리의 헤더 파일에 인터페이스가 입니다 ...

class Coder 
{ 
    public: 
     Coder(); 
     void prints(); 

private: 
     int x; 

}; 

을 정보 숨기기 개념을 소환하고 다른 파일에서 기능의 구현 "Coder.cpp는"

Coder::Coder 
{ 
x=10;//any int value you can take; 
} 

void Coder::prints()  
{ 
    cout<<x; 
} 

오히려 두 개의 파일 (한 헤더 + 하나의 cpp 파일) 우리는 한 곳에서 그것을 할 수 있었다 위에서 일을 tahn ...입니다. 우리는 우리가이 일을 한 경우

class Coder 
    { 
     public: 
      Coder() 
      { 
       x=10;//any int value you can take; 

      } 
      void prints() 
    { 
      cout<<x; 
     } 

    private: 
      int x; 

    }; 

우리가 숨어있는 정보를 구현할 수 없었다 ... 생성자와 헤더 파일 자체 인쇄 기능의 해상력을 준 수 ... 그리고 우리의 고객은 우리가 구현 한 방법을 알 우리 기능! 데이터

스택 클래스의

클라이언트는 스택의 구현과 관련 될 필요가 없다 ... 당신이 ... 고려 스택의 예 수 absraction. 클라이언트는 데이터 항목이 스택에 배치 될 때 선입 선출 순서로 회수된다는 것을 알고 있습니다. 클라이언트는 스택이 제공하는 기능이 무엇인지 신경 쓰며 기능이 어떻게 구현되는지는 신경 쓰지 않습니다. 이 개념을 데이터 추상화라고합니다.

5

데이터 숨기기는 액세스 수정자가 Java 메소드 및 변수의 가시성을 숨기는 데 사용되는 프로세스입니다. 액세스 수정자는 공개, 개인 및 보호입니다.

추상화는이 클래스를 확장 할 클래스의 기본 클래스와 메소드를 구성하는 빈으로 특정 동작을 정의하는 프로세스입니다.

0

추상화는 (추상화에서와 같이) 세부 사항이 적은 내용을 표현한 것입니다. OO에서는 추상 형식을 내부 표현을하지 않고 조작 할 수 있습니다. 예를 들어, 전화 번호의 추상화로서의 전화 번호는 고객이 국가 코드, 지역 번호 및 실제 번호로 구성된다는 것을 알지 못해도 조작 할 수 있습니다. 추상화는 추상 데이터 유형 (예 : 전화 번호)에 대해 구현 방법을 걱정할 필요없이 말하기를 허용하므로 분석 및 설계 단계에서 가장 유용합니다.

좀 더 익숙한 유형 인 string은 텍스트의 추상화입니다. string은 구현 방법을 몰라도 조작 할 수 있습니다. 문자열 추상화는 응용 프로그램 설계에서의 사용에 영향을 미치지 않고 내부를 변경할 수있게합니다.

정보 숨기기 및 캡슐화는 추상 데이터 형식을 구현할 수있는 두 가지 방법입니다. 추상 데이터 유형은 내부 상태 또는 캡슐화를 숨길 필요조차 없습니다. 예를 들어 숫자는 추상화로 int으로 구현 될 수 있습니다.