소프트웨어 개발에서 추상화 와 정보 숨기기 의 차이점은 무엇 입니까?
혼란 스러워요. 추상화는 세부 구현을 숨기고 정보 숨기기는 무언가의 전체 세부 사항을 추상화합니다.
업데이트 : 이 세 가지 개념에 대한 좋은 대답을 찾았습니다. 거기 에서 가져온 몇 가지 인용에 대해서는 아래의 별도 답변을 참조하십시오 .
소프트웨어 개발에서 추상화 와 정보 숨기기 의 차이점은 무엇 입니까?
혼란 스러워요. 추상화는 세부 구현을 숨기고 정보 숨기기는 무언가의 전체 세부 사항을 추상화합니다.
업데이트 : 이 세 가지 개념에 대한 좋은 대답을 찾았습니다. 거기 에서 가져온 몇 가지 인용에 대해서는 아래의 별도 답변을 참조하십시오 .
답변:
소스로 이동하십시오! Grady Booch는 다음과 같이 말합니다 (객체 지향 분석 및 디자인, 49 페이지, 2 판).
추상화와 캡슐화는 상호 보완적인 개념입니다. 추상화는 객체의 관찰 가능한 행동에 중점을두고 있습니다. 캡슐화는 이러한 행동을 일으키는 구현에 중점을두고 있습니다. 캡슐화는 정보 숨기기를 통해 이루어집니다. 본질적인 특성에 기여하지 않는 대상의 비밀.
다시 말해서 : 추상화 = 외부의 객체; 캡슐화 (정보 숨기기를 통해 달성 됨) = 내부적으로 개체
예 : .NET Framework에서 System.Text.StringBuilder
클래스는 문자열 버퍼에 대한 추상화를 제공합니다. 이 버퍼 추상화를 통해 구현에 관계없이 버퍼로 작업 할 수 있습니다. 따라서 StringBuilder
내부적으로 버퍼 포인터와 같은 것들을 추적하고 버퍼가 가득 찼을 때 메모리를 관리 하는 방법에 관계없이 문자열을 버퍼에 추가 할 수 있습니다 (정보 숨기기를 통한 캡슐화로 수행).
rp
OP는 자신이 찾은 여러 인용문, 즉 Edward V. Berard 의 기사 "Abstraction, Encapsulation, and Information Hiding" 에서 그의 질문을 인용했습니다 . OP의 업데이트가 약간 확장되고 재 형식화 된 버전을 다시 게시하고 있습니다.
(모든 인용은 위에서 언급 한 기사에서 가져옵니다.)
추출:
"추상화에 관한 혼란의 한 지점은 프로세스와 실체로서의 사용이다. 프로세스로서의 추상화는 본질적인 세부 사항을 무시하면서 아이템 또는 아이템 그룹에 대한 필수 세부 사항을 추출하는 것을 나타낸다. 엔티티는 모델, 뷰 또는 실제 항목에 대한 다른 초점 표현을 나타냅니다. "
정보 숨기기 :
"인터페이스 또는 정의는 내부 작업에 대해 가능한 한 적게 공개하도록 선택되었습니다." — [Parnas, 1972b]
"숨겨져 야 할 정보를 식별하기위한 기술로 [...] 요약을 사용할 수 있습니다."
"사람들이 정보 숨기기와 어떤 정보를 숨길지를 식별하는 데 사용되는 기술 (예 : 추상화)을 구별하지 못하면 혼란이 발생할 수 있습니다."
캡슐화 :
"그것은 […] 어떤 것들의 수집 물 주위에 개념적 장벽 인 캡슐을 만드는 것을 말합니다." — [Wirfs-Brock et al, 1990]
"프로세스로서 캡슐화는 하나 이상의 항목을 […] 컨테이너 안에 넣는 행위를 의미합니다. 엔티티로서 캡슐화는 하나 이상의 항목을 보유 (포함, 포함)하는 패키지 또는 인클로저를 의미합니다."
"캡슐화가 '정보 숨기기와 같은 것'이라면 '캡슐화 된 모든 것도 숨겨져있다'는 주장을 할 수 있습니다. 이것은 사실이 아닙니다. "
결론:
"추상화, 정보 숨기기 및 캡슐화는 매우 다르지만 관련성이 높은 개념입니다. 추상화는 어떤 특정 정보를 볼 수 있는지, 어떤 정보를 숨겨야하는지 식별하는 데 도움이되는 기술이라고 주장 할 수 있습니다. 캡슐화는 그 기술입니다. "숨겨야 할 것을 숨기고 보이는 것을 보이게하는 방식으로 정보를 포장하기 위해."
Information Hiding
일반적인 반면 (또는 구현 숨어) class
를 달성 한 캡슐화하고 추상화 통해 이루어진다 private
액세스
Abstraction
기본 기능 위에 레이어를 제공하여 구현 세부 사항을 숨기고 있습니다.
Information Hiding
해당 구현에 영향을받는 데이터를 숨기고 있습니다. 이 사용 private
및 public
아래에 온다. 예를 들어 클래스의 변수를 숨 깁니다.
Encapsulation
Class
프로그래밍 과 같은 모든 유사한 데이터와 기능을 그룹에 넣는 것 ; Packet
네트워킹에서.
클래스의 사용을 통해, 우리는 세 가지 개념을 구현 - Abstraction
, Information Hiding
및Encapsulation
간단한 개념을 복잡하게하지 마십시오.
캡슐화 : 데이터와 메소드를 단일 단위로 감싸는 것은 캡슐화입니다 (예 : 클래스)
추상화 : 배경 세부 사항을 포함하지 않고 필수 사항만을 나타내는 행위입니다. (예 : 인터페이스)
예 및 추가 정보 GOTO :
http://thecodekey.com/C_VB_Codes/Encapsulation.aspx
http://thecodekey.com/C_VB_Codes/Abstraction.aspx
여기에서 승인 된 정의
추신 : 또한 Sumita Arora가 C ++이라는 책의 정의를 기억합니다.
여기에서 의도 한 것과 가장 유사한 옥스포드 영어 사전 (OED)에 의해 주어진 추상화의 의미는 '생각에서 분리하는 행위'입니다. 더 나은 정의는 '배경이나 본질적인 세부 사항을 포함하지 않고 무언가의 필수 기능을 나타내는 것'일 수 있습니다.
정보 숨기기는 클래스와 같은 소프트웨어 구성 요소 사용자가 구성 요소를 초기화하고 액세스하는 방법에 대한 필수 세부 정보 만 알고 구현의 세부 사항을 알 필요가 없다는 원칙입니다.
편집 : 추상화는 구현의 어느 부분을 숨겨야 하는지를 결정하는 과정 인 것 같습니다 .
따라서 추상화 대 VERSUS 정보 숨기기. VIA 추상화를 숨기는 정보입니다.
추출
추상화는 배경 세부 사항을 포함하지 않고 essentail 세부 사항을 나타내는 행위입니다. 추상 클래스에는 메소드 서명 만 있고 구현 클래스는 자체 구현을 가질 수 있습니다. 이러한 방식으로 복잡한 세부 사항이 사용자에게 표시되지 않습니다. 추상화는 외부보기에 중점을 둡니다. 다시 말해, 추상화는 실제 구현에서 인터페이스를 분리하는 것입니다.
캡슐화
캡슐화는 데이터 멤버 및 메소드를 단일 단위로 바인딩하는 방법을 설명합니다. 정보 숨기기는 캡슐화의 주요 목적입니다. 캡슐화는 개인, 공용, 보호와 같은 액세스 지정자를 사용하여 달성됩니다. 클래스 멤버 변수는 비공개로 만들어 외부 세계에 직접 액세스 할 수 없습니다. 캡슐화는 내부 뷰에 중점을 둡니다. 다시 말해, 캡슐화는 다른 개체로부터 개체의 정보를 보호하는 데 사용되는 기술입니다.
유출 된 추상화의 법칙에 관한 Joel의 게시물을보십시오
기본적으로 추상화는 더 높은 수준의 개념을 자유롭게 생각할 수있게합니다. 비 프로그래밍 비유는 대부분의 사람들이 음식이 어디에서 왔는지 또는 어떻게 생산되는지 알지 못한다는 것입니다. 그러나 우리가 (보통) 걱정할 필요가 없다는 사실은 우리가 다른 것들을 할 수있게 해줍니다. 프로그램 작성.
정보 숨기기에 대해서는 잼에 동의합니다.
추상화를 통해 복잡한 프로세스를 간단한 프로세스로 처리 할 수 있습니다. 예를 들어, 표준 "파일"추상화는 파일을 연속 된 바이트 배열로 취급합니다. 사용자 / 개발자는 클러스터 및 조각화 문제에 대해 생각할 필요조차 없습니다. (추상은 일반적으로 클래스 또는 서브 루틴으로 나타납니다.)
정보 숨기기는 악의적이거나 무능한 사용자로부터 추상화를 보호하는 것입니다. 일부 상태 (예 : 하드 드라이브 할당)의 제어를 원래 개발자로 제한하면 엄청난 양의 오류 처리가 중복됩니다. 파일 시스템 드라이버 외에 다른 사람이 하드 드라이브에 쓸 수없는 경우 파일 시스템 드라이버는 하드 드라이브에 쓰여진 내용과 위치를 정확히 알고 있습니다. (이 개념의 일반적인 표현은 private
과 protected
OO 언어의 키워드.)
추상화는 단순히 소프트웨어의 필수 세부 사항 만 사용자에게 표시하여 사용자가 소프트웨어를 사용하거나 조작 할 수 있도록하는 기술을 의미하므로 해당 소프트웨어의 구현 세부 사항은 표시되지 않습니다 (보이지 않음). 캡슐화 는 하나 이상의 항목을 보유하고 따라서 일부 정보 (특히 프로그램 세부 사항)가 사용자에게 표시되고 일부가 보이지 않게하는 패키지를 보유한 기술이므로 정보 숨기기를 통해 캡슐화가 이루어집니다. 요약해서 말하자면. 추상화 는 (외부 적으로) 관찰 가능한 행동을위한 것이며 캡슐화는 (내부적으로) 보이지 않는 것을위한 것이지만이 두 가지는 실제로 보완 적입니다.
그냥 주위 자세한 내용에 추가 InformationHiding 발견 이 링크는 예제와 함께 정말 좋은 소스입니다
InformationHiding 은 의도하지 않은 결합을 방지하기 위해 설계 결정을 시스템의 나머지 부분에서 숨겨야한다는 아이디어입니다. 정보 숨기기는 설계 원칙입니다. 정보 숨김은 물건 을 캡슐화 하는 방법을 알려 주어야 하지만 물론 그럴 필요는 없습니다 .
캡슐화 는 프로그래밍 언어 기능입니다.
추상화와 캡슐화는 네 가지 기본 OOP 개념 중 두 가지로, 실제 사물을 객체로 모델링하여 프로그램과 코드에서 구현할 수 있습니다. 많은 초보자는 추상화와 캡슐화가 매우 비슷해 보이기 때문에 혼란스러워합니다. 누군가에게 추상화가 무엇인지 물어 보면 불필요한 세부 정보를 숨겨 관련 정보에 중점을 둔 OOP 개념이라고 말하고 캡슐화에 대해 요청할 때 많은 사람들이 외부 세계의 데이터를 숨기는 또 다른 OOP 개념이라고 말할 것입니다. 추상화와 캡슐화 모두 무언가를 숨기므로 정의가 잘못되지는 않았지만 주요 차이점은 의도입니다.
추상화는 좀 더 추상적 인 그림, 10,000 피트 정도의보기를 제공하여 복잡성을 숨기고 캡슐화는 내부 작업을 숨겨 나중에 나중에 변경할 수 있도록합니다. 즉, 추상화는 디자인 수준에서 세부 사항을 숨기고 캡슐화는 구현 수준에서 세부 사항을 숨 깁니다.
캡슐화 : 바인딩 데이터 및 그에 작용하는 메소드. 이를 통해 다른 클래스의 다른 모든 메소드에서 데이터를 숨길 수 있습니다. 예 : 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/ 에서 검색 할 수 있습니다. .
추출
정보 숨기기
캡슐화