문제

차이점이 무엇인지 알려주실 수 있나요? 추출 그리고 정보 숨기기 소프트웨어 개발에?

나는 혼란스럽다.추상화는 세부 구현 및 정보를 숨기고 초록을 숨기고 무언가의 모든 세부 사항을 숨 깁니다.

업데이트: 이 세 가지 개념에 대한 좋은 답을 찾았습니다. 아래의 별도 답변을 참조하세요 에서 가져온 여러 인용에 대해 거기.

도움이 되었습니까?

해결책

소스로 이동하세요!Grady Booch는 다음과 같이 말합니다(객체 지향 분석 및 설계, 49페이지, 제2판).

추상화와 캡슐화는 상호 보완적인 개념입니다.추상화는 물체의 관찰 가능한 동작에 중점을 둡니다 ...캡슐화는이 동작을 일으키는 구현에 중점을 둡니다 ...캡슐화는 대부분 정보 숨기기를 통해 달성되는데, 이는 필수 특성에 기여하지 않는 대상의 모든 비밀을 숨기는 과정입니다.

다시 말해서:추상화 = 객체가 외부적으로;캡슐화(정보 은닉을 통해 달성) = 객체 내부,

예:.NET Framework에서는 System.Text.StringBuilder 클래스는 문자열 버퍼에 대한 추상화를 제공합니다.이 버퍼 추상화를 사용하면 구현에 관계없이 버퍼 작업을 수행할 수 있습니다.따라서, 어떻게 처리하는지에 관계없이 버퍼에 문자열을 추가할 수 있습니다. StringBuilder 내부적으로 버퍼에 대한 포인터 및 버퍼가 가득 찼을 때 메모리 관리(정보 숨김을 통한 캡슐화와 함께 수행됨)와 같은 사항을 추적합니다.

rp

다른 팁

OP는 그가 찾은 여러 인용문으로 그의 질문을 업데이트했습니다. 기사: Edward V.Berard의 제목은 "추상화, 캡슐화 및 정보 은닉"입니다..OP 업데이트의 약간 확장되고 형식이 변경된 버전을 다시 게시하고 있습니다. 그 자체로 답변이 되어야 하기 때문입니다.

(모든 인용은 위의 기사에서 가져왔습니다.)

추출:

"추상화와 관련하여 혼란스러운 점 중 하나는 프로세스와 엔터티로서의 사용입니다.프로세스로서의 추상화는 필수 세부 정보를 무시하면서 항목 또는 항목 그룹에 대한 필수 세부 정보를 추출하는 것을 의미합니다.개체로서의 추상화는 실제 항목에 대한 모델, 뷰 또는 기타 집중된 표현을 나타냅니다."

정보 숨기기:

"인터페이스나 정의는 내부 작동에 대해 가능한 한 적게 공개하기 위해 선택되었습니다." — [파르나스, 1972b]

"추상화는 어떤 정보를 숨겨야 하는지 식별하는 기술로 […] 사용될 수 있습니다."

"사람들이 정보 숨김과 어떤 정보를 숨겨야 하는지 식별하는 데 사용되는 기술(예: 추상화)을 구별하지 못할 때 혼란이 발생할 수 있습니다."

캡슐화:

"그것은 […] 일부 사물 모음 주위에 개념적 장벽인 캡슐을 구축하는 것을 의미합니다." — [Wirfs-Brock 외, 1990]

"프로세스로서 캡슐화는 […] 컨테이너 내에 하나 이상의 항목을 담는 행위를 의미합니다.캡슐화는 하나의 개체로서 하나 이상의 항목을 보유(포함, 동봉)하는 패키지 또는 인클로저를 의미합니다.

"캡슐화가 '정보 숨기기와 같은 것'이라면 '캡슐화 된 모든 것이 숨겨져 있다는 주장'을 할 수 있습니다. 이것은 분명히 사실이 아닙니다. "

결론:

"추상화, 정보 은닉, 캡슐화는 매우 다르지만 관련성이 높은 개념입니다.추상화는 어떤 특정 정보를 표시해야 하고 어떤 정보를 숨겨야 하는지 식별하는 데 도움이 되는 기술이라고 주장할 수도 있습니다.캡슐화는 숨겨야 할 것을 숨기고, 보여야 할 것을 보이게 하는 방식으로 정보를 패키징하는 기술입니다."

Abstraction 기본 기능 위에 레이어를 제공하여 구현 세부 사항을 숨깁니다.

Information Hiding 해당 구현의 영향을 받는 데이터를 숨기고 있습니다.사용 private 그리고 public 이것에 속합니다.예를 들어 클래스의 변수를 숨깁니다.

Encapsulation 모든 유사한 데이터와 기능을 그룹에 넣는 것입니다. Class 프로그래밍에서; Packet 네트워킹에서.

클래스를 사용하여 세 가지 개념을 모두 구현합니다. Abstraction, Information Hiding 그리고 Encapsulation

단순한 개념을 복잡하게 만들지 마세요.

캡슐화 :데이터와 메소드를 단일 단위로 묶는 것이 캡슐화입니다(예:수업)

추출 :배경적인 디테일은 포함하지 않고 꼭 필요한 것만을 표현하는 행위이다.(예:상호 작용)

예 및 추가 정보를 보려면 다음으로 이동하세요.

http://thecodekey.com/C_VB_Codes/Encapsulation.aspx

http://thecodekey.com/C_VB_Codes/Abstraction.aspx

승인된 정의 여기

추신.:나는 또한 우리가 11학년 때 읽은 Sumita Arora의 C++라는 책의 정의를 기억합니다.

여기서 의도한 의미에 가장 가까운 옥스퍼드 영어사전(OED)이 제시한 추상화의 의미는 '생각에서 분리하는 행위'이다.더 나은 정의는 '배경이나 필수적인 세부 사항을 포함하지 않고 사물의 본질적인 특징을 표현하는 것'입니다.

정보 은닉은 소프트웨어 구성 요소(예: 클래스)의 사용자가 구성 요소를 초기화하고 액세스하는 방법에 대한 필수 세부 사항만 알면 되고 구현 세부 사항은 알 필요가 없다는 원칙입니다.

편집하다:제가 보기엔 추상화가 가장 중요한 것 같아요 프로세스 구현의 어느 부분이 되어야 하는지 결정하는 것 숨겨진.

따라서 추상화와 정보 숨김이 아닙니다.VIA 추상화를 숨기는 정보입니다.

추출

추상화는 배경 세부정보를 포함하지 않고 핵심 세부정보를 표현하는 행위입니다.추상 클래스에는 메소드 시그니처만 있고 구현 클래스는 자체 구현을 가질 수 있습니다. 이러한 방식으로 복잡한 세부사항은 사용자에게 숨겨집니다.추상화는 외부 시각에 중점을 둡니다.즉, 추상화는 실제 구현에서 인터페이스를 분리하는 것입니다.

캡슐화

캡슐화는 데이터 멤버와 메소드를 단일 단위로 바인딩하는 것을 설명합니다.정보 은폐는 캡슐화의 주요 목적입니다.캡슐화는 private, public, protected와 같은 액세스 지정자를 사용하여 달성됩니다.클래스 멤버 변수는 비공개로 설정되어 외부 세계에서 직접 접근할 수 없습니다.캡슐화는 내부 뷰에 중점을 둡니다.즉, Encapsulation은 한 객체의 정보를 다른 객체로부터 보호하기 위해 사용되는 기술입니다.

추상화는 구현의 세부 사항을 숨기는 것입니다.

작업을 수행하기 위해 매우 간단한 작업만 수행하면 될 만큼 충분히 높은 수준으로 무언가를 추상화합니다.

정보 숨기기는 구현 세부 사항을 숨기는 것입니다.프로그래밍은 어렵다.처리하고 처리해야 할 일이 많이있을 수 있습니다.매우 면밀히 추적해야 하는 변수가 있을 수 있습니다.정보를 숨기면 공개적으로 노출된 변수나 메서드를 사용하여 실수로 무언가를 손상시키는 일이 발생하지 않습니다.

이 두 가지 개념은 객체 지향 프로그래밍에서 매우 밀접하게 연결되어 있습니다.

추출 - 무의미하고 지루한 세부 사항을 포함하지 않고 물체의 필수 특성을 식별하는 과정입니다.

캡슐화 - 데이터와 이를 조작하는 기능을 하나의 단위로 담는 과정이다.

추상화와 캡슐화는 서로 관련되어 있지만 상호보완적인 개념입니다.

  1. 추상화는 과정이다.캡슐화는 추상화가 구현되는 메커니즘입니다.

  2. 추상화는 객체의 관찰 가능한 동작에 중점을 둡니다.캡슐화는 이러한 동작을 발생시키는 구현에 중점을 둡니다.

정보 은닉 - 객체의 구현 내용을 숨기는 과정입니다.캡슐화의 결과입니다.

캡슐화:데이터 멤버와 멤버 함수를 함께 묶는 것을 캡슐화라고 합니다.캡슐화는 클래스를 통해 수행됩니다.추출:구현 세부 사항을 사용법이나 보기에서 숨기는 것을 추상화라고 합니다.전:정수 x;우리는 int가 내부적으로 어떻게 작동하는지 모릅니다.하지만 우리는 int가 작동할 것이라는 것을 알고 있습니다.그것은 추상화입니다.

추상화 : 추상화는 객체의 외부 뷰가 무엇인지 식별하는 데 사용되는 개념/기술입니다.필요한 인터페이스만 사용할 수 있도록 합니다.

정보 숨기기: 정보 숨김을 통해 추상화가 달성되므로 추상화를 보완합니다.외부 뷰를 제외한 모든 것을 숨깁니다.

캡슐화 : 데이터와 관련 기능을 하나의 단위로 묶는 것입니다.이는 추상화 및 정보 숨기기를 용이하게 합니다.추상화 및 정보 숨기기를 달성하기 위해 구성원 액세스와 같은 기능을 장치에 적용할 수 있도록 허용

누출된 추상화의 법칙에 대한 Joel의 게시물을 참조하세요.

조엘온소프트웨어

기본적으로 추상화는 더 높은 수준의 개념을 자유롭게 생각할 수 있는 기회를 제공합니다.프로그래밍이 아닌 비유는 우리 대부분이 음식이 어디서 왔는지, 어떻게 생산되는지 알지 못하지만 (대개) 음식에 대해 걱정할 필요가 없다는 사실로 인해 우리가 다음과 같은 다른 일을 할 수 있다는 것입니다. 프로그램 작성.

정보 숨기기에 대해서는 재밍에 동의합니다.

추상화를 사용하면 복잡한 프로세스를 간단한 프로세스로 처리할 수 있습니다.예를 들어, 표준 "파일" 추상화는 파일을 연속적인 바이트 배열로 취급합니다.사용자/개발자는 클러스터 및 조각화 문제에 대해 생각할 필요조차 없습니다.(추상화는 일반적으로 클래스나 서브루틴으로 나타납니다.)

정보 숨기기는 악의적이거나 무능한 사용자로부터 추상화를 보호하는 것입니다.일부 상태(예: 하드 드라이브 할당)에 대한 제어를 원래 개발자에게만 제한하면 엄청난 양의 오류 처리가 중복됩니다.파일 시스템 드라이버 외에 다른 사람이 하드 드라이브에 쓸 수 없다면 파일 시스템 드라이버는 하드 드라이브에 쓰여진 내용과 위치를 정확히 알고 있습니다.(이 개념의 일반적인 표현은 다음과 같습니다. private 그리고 protected OO 언어의 키워드.)

어떤 것을 추상화하려면 세부 사항을 숨겨야 하고, 어떤 것의 세부 사항을 숨기려면 추상화해야 합니다.그러나 둘 다 캡슐화를 통해 달성할 수 있습니다.

따라서 정보 숨기기는 목표이고 추상화는 프로세스이며 캡슐화는 기술입니다.

추출 단순히 소프트웨어의 필수 세부 사항만 사용자에게 표시하여 사용자가 소프트웨어를 사용하거나 작동할 수 있도록 하여 해당 소프트웨어의 구현 세부 사항을 표시하지 않는(보이지 않게 만드는) 기술을 의미합니다.캡슐화 하나 이상의 항목을 포함하는 패키지가 있어 일부 정보(특히 프로그램 세부 정보)가 사용자에게 표시되고 일부는 표시되지 않으므로 정보 숨기기를 통해 캡슐화가 달성되는 기술입니다.요약하자면. 추출 캡슐화는 관찰 가능한 동작(외부)을 위한 것이고 캡슐화는 비가시성(내부)을 위한 것이지만 이 둘은 실제로 상호보완적입니다.

주변에 자세한 내용을 추가하면 됩니다. 정보숨기기, 설립하다 이 링크는 예제가 포함된 정말 좋은 소스입니다.

정보숨기기 의도하지 않은 결합을 방지하기 위해 설계 결정을 시스템의 나머지 부분에서 숨겨야 한다는 아이디어입니다.InformationHiding은 디자인 원칙입니다. 정보숨기기 당신에게 방법을 알려야합니다 캡슐화하다 것들, 하지만 물론 그럴 필요는 없지.

캡슐화 프로그래밍 언어 기능입니다.

나 역시 추상화와 캡슐화라는 두 가지 개념에 대해 매우 혼란스러워했습니다.하지만 내가 봤을 때 추상화 기사 myjavatrainer.com에서 추상화와 캡슐화는 사과와 오렌지라는 것이 분명해졌습니다. 둘 다 필수이기 때문에 실제로 비교할 수는 없습니다.

캡슐화는 객체가 생성되는 방식이고 추상화는 객체가 외부 세계에서 보이는 방식입니다.

위의 모든 답변을 하나씩 읽은 후에는 게시를 멈출 수 없습니다.

추상화에는 작업을 수행하고 상태를 보고하고 변경하며 시스템의 다른 개체와 "통신"할 수 있는 추상 "액터"를 나타내는 개체를 정의하는 기능이 포함됩니다.

그러나 캡슐화는 위에서 매우 명확합니다. ->

캡슐화라는 용어는 상태 세부 사항을 숨기는 것을 의미하지만 동작을 데이터와 가장 강력하게 연관시키기 위해 이전 프로그래밍 언어의 데이터 유형 개념을 확장하고 다양한 데이터 유형이 상호 작용하는 방식을 표준화하는 것이 추상화의 시작입니다.

참조 위키

캡슐화: 바인딩 데이터와 이에 대해 작동하는 메서드.이를 통해 다른 클래스의 다른 모든 메서드에서 데이터를 숨길 수 있습니다.예: MyList 항목을 추가하고 항목을 제거하고 모든 항목을 제거 할 수있는 클래스 add, remove, 그리고 removeAll 외부에서 직접 접근할 수 없는 리스트(프라이빗 배열)에 대해 작업을 수행합니다.

추출: 관련 없는 행동과 데이터를 숨기고 있습니다.항목이 실제로 저장, 추가 또는 삭제되는 방식은 숨겨집니다(추상화).내 데이터는 간단한 배열, ArrayList, LinkedList 등에 보관될 수 있습니다.또한 메소드가 어떻게 구현되는지는 외부에 숨겨져 있습니다.

캡슐화 - 통제된 방식으로 내부 데이터에 대한 액세스를 시행하거나 구성원이 직접 액세스하는 것을 방지합니다.

추상화 - 특정 메소드의 구현 세부사항을 숨기는 것을 추상화라고 합니다.

예를 들어 이해해 봅시다:-

class Rectangle
{
private int length;
private int breadth;// see the word private that means they cant be accesed from 
outside world.
 //now to make them accessed indirectly define getters and setters methods
void setLength(int length)
{  
// we are adding this condition to prevent users to make any irrelevent changes 
  that is why we have made length private so that they should be set according to 
   certain restrictions
if(length!=0)
{
 this.length=length
 }
void getLength()
{
 return length;
 }
 // same do for breadth
}

이제 추상화의 경우 액세스 할 수있는 메소드를 정의하고 사용자는 방법의 본문이 무엇인지, 작동 방식을 알지 못합니다. 위의 예를 고려해 보겠습니다. 사각형 영역을 계산하는 메소드 영역을 정의 할 수 있습니다.

 public int area()
 {
  return length*breadth;
 }

이제 사용자가 위의 방법을 사용할 때마다 계산된 방식이 아닌 면적을 얻게 됩니다.println() 메소드의 예를 고려해 볼 수 있습니다. 인쇄에 사용된다는 것만 알고 데이터를 인쇄하는 방법은 모릅니다.블로그에 자세히 작성했습니다. 자세한 내용은 아래 링크를 참조하세요.추상화와 캡슐화

이러한 용어가 표준화된 IEEE 정의라는 점은 주목할 가치가 있습니다. 해당 정의는 다음에서 검색할 수 있습니다. https://pascal.computer.org/.

추출

  1. 특정 목적과 관련된 정보에만 초점을 맞추고 나머지 정보는 무시하는 객체 뷰
  2. 관점을 형성하는 과정
  3. 단순화된 모델을 구축하기 위해 관련 없는 세부 사항을 억제하는 과정 또는 그 과정의 결과

정보 숨기기

  1. 각 모듈의 인터페이스가 모듈의 내부 작동에 대해 가능한 한 적게 드러내고 다른 모듈이 모듈의 인터페이스 사양에 없는 모듈에 대한 정보를 사용하지 못하도록 방지하는 소프트웨어 개발 기술
  2. 설계 또는 구현 결정을 단일 모듈에 포함하여 다른 모듈에서 결정을 숨김

캡슐화

  1. 시스템 기능이나 데이터 집합을 분리하고 모듈 내의 해당 데이터에 대한 작업을 수행하고 모듈에 대한 정확한 사양을 제공하는 소프트웨어 개발 기술
  2. 클래스 책임의 이름, 의미 및 값에 대한 접근은 해당 클래스의 실현에 대한 접근과 완전히 분리되어 있다는 개념
  3. 모듈에는 내부와 구별되는 외부가 있고 외부 인터페이스와 내부 구현이 있다는 아이디어
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top