문제

다른 유형의 캡슐화는 무엇입니까?

이것을 기본적으로 추상화, 다형성 및 상속과 같은 중심 OO 개념을 말하는 것이 옳은가?

캡슐화에 대한 나의 이해는 데이터 / 기능을 숨기는 방법이지만, 다형성 또는 상속을 캡슐화 형태로 고려한 적이 없지만, 객체의 정확한 유형을 숨길 수 있기 때문에 다형성이 어떻게 캡슐화 될 수 있는지 볼 수 있지만 실제로는 캡슐화 형태를 고려한 적이 없습니다. 상호 작용하고 있습니다.

그래서, 당신은 그것에 관한 것이라고 말할 수 있습니까, 아니면 핵심 개념을 놓치고 있습니까?

편집하다 방금 누군가가 개인 / 공개 방법을 언급 할 수 있다고 언급 한 의견에서, 아마도 질문에 너무 많이 생각하고 실제보다 더 복잡한 대답을 기대하고 있습니까?

도움이 되었습니까?

해결책

당신은 너무 많이 생각하고 있습니다.

http://en.wikipedia.org/wiki/information_hiding

이 기사에서 발췌:

컴퓨터 과학에 숨겨져있는 정보는 변화 할 가능성이 가장 높은 컴퓨터 프로그램에서 설계 결정을 숨기는 원칙이므로 설계 결정이 변경되면 프로그램의 다른 부분을 변화로부터 보호합니다. 보호에는 프로그램의 나머지 부분을 구현에서 보호하는 안정적인 인터페이스를 제공하는 것이 포함됩니다 (변경 될 가능성이 가장 높은 세부 사항).

캡슐화의 일반적인 형태 중 하나는 특성을 사용하여 개인 데이터 필드를 숨기는 것입니다. 더 일반적인 형태는 OO를 사용하여 소프트웨어의 복잡성을 역할과 책임을 가진 잘 분할 된 클래스로 캡슐화하는 것입니다. 이것은 단일체 절차 디자인 스타일에서보다 구조화 된 스타일로 이동하여 귀하가 작업하는 특정 작업과 관련된 모든 관련성 정보를 제외하고 모든 관련이없는 정보를 숨기려고 노력하는 OO의 주요 테넌트입니다.

다른 팁

캡슐화라는 용어 (캡슐화)는 디스플레이 목적으로 무언가의 본질을 포착하는 예술/과학이라는 것이 나의 견해와 이해입니다. 실제로, 정의상 - 캡슐화는 무언가를 포장하거나 다른 컨테이너에 둘러싸는 것입니다. 따라서 캡슐화라는 용어는 당신이 달성하려는 시도의 본질을 가져 와서 유용한 형태로 포장하여 필요에 따라 재사용 할 수 있도록하는 것을 의미합니다.

따라서 이것을 해석하기 위해서는 자료를 나중에 더 유용하게 만드는 형태로 포장하는 것을 의미합니다.

그래서 정말 ... 당신이 보는대로 이것을 해석하십시오. 나는 그것을 많은 알고리즘과 유틸리티를 취하고 다른 프로젝트에서 API로 사용할 수있는 클래스 구조를 만드는 것으로 본다. 이 캡슐화 된 코드는 API의 기본 본질을 변경하지 않고 수정 된 목적에 유용하게 만들기 위해 상속 및/또는 확장 될 수 있습니다.

따라서 추상화, 다형성 및 상속은 캡슐화의 형태가 아니라 캡슐화 된 코드를 확장하고 수정하는 형태입니다.

다양한 형태의 캡슐화는 공개, 개인, 정적, 가상 (C#) 인 속성, 방법, 필드 및 클래스의 수정자를 의미합니다. 다른 모든 것 (예 : 과부하, 재정의, 그림자)는 수정 또는 캡슐화의 확장입니다.

수정 된 코드를 캡슐화로 고려하여 추가 상속/추상화/확장 될 수 있지만 패키지 확장되는 것은 캡슐화 된 제품입니다.

캡슐화는 국제 표준화기구의 국제 표준에 의해 정의됩니다. "정보 기술 - 개방형 분산 처리", ISO/IEC 10746, 1998.

보다 원시적 정의로 정의됩니다.

엔티티 : 모든 콘크리트 또는 추상적 인 관심사.

대상 : 엔티티의 모델. 물체는 그 행동과 이중 상태로 특징 지어집니다.

동작 (대상) : 언제 발생할 수 있는지에 대한 일련의 제약이있는 동작 모음.

인터페이스 : 해당 객체의 상호 작용의 하위 집합이 발생할 수있는 시점에 대한 일련의 제약 조건으로 구성된 객체의 동작의 추상화.

캡슐화 : 객체에 포함 된 정보가 객체가 지원하는 인터페이스의 상호 작용을 통해서만 액세스 할 수 있습니다.

ISO는 다른 유형의 캡슐화를 정의하지 않습니다.

다른 게시물은 정보 숨기기를 언급했습니다. ISO는 정보 숨기기 측면에서 캡슐화를 명시 적으로 정의하지 않지만, 암시 적으로 보이지만 "캡슐화 이론 기초"를 참조하십시오. http://www.edmundkirwan.com/pub/

에드.

캡슐화는 단순히 정보 숨기기 이상입니다. 그것은 그것의 한 측면입니다. 모듈에 대한 인터페이스와 관련이 있습니다. 인터페이스는 캡슐화와 추상화의 두 가지 매우 중요한 기능을 제공합니다.

추상화는 모듈의 클라이언트가 인터페이스에있는 것보다 더 많은 것을 알 필요가없는 경우입니다.

그리고

캡슐화는 모듈의 클라이언트가 인터페이스에있는 것보다 더 많은 것을 알 수없는 경우입니다.

(두 정의에서 UML 사용 Perdita Stevens)

캡슐화는 단순히 "정보 숨기기"를 나타 내기 때문에 많은 것들이 캡슐화로 분류 될 수 있다고 생각합니다. 그러나 나는 캡슐화를 "구현 숨기기"로 생각하는 경향이 있습니다. 즉, 내가 쓴 내용과 내가 쓴 내용의 클라이언트 사이에 느슨한 커플 링을 만드는 데 사용하는 도구입니다.

그래서 나는 캡슐화가 모든 클라이언트에게 깨끗하고 견고한 인터페이스를 제시 할 수있는 패러다임이나 모범 사례라고 생각하는 경향이 있습니다.

일반적으로 단어의 사용은 그 말과 매우 가깝습니다. 당신은 그것을 포함 할 때 무언가를 캡슐화하고 거래를 풀지 못하게하십시오. 그것에 대해 생각하는 가장 좋은 방법은 당신이 무언가를 가져 가서 아무도 더 이상 세부 사항을 볼 수없는 블랙 박스에 넣고 있다는 것입니다. 상자는 모든 것을 숨기고 다른 분리 된 인터페이스를 제공합니다.

정보 숨기기는 캡슐화의 한 측면 일뿐입니다. 데이터와 함께 코드 자체의 세부 사항을 숨길 수도 있기 때문입니다. 시스템의 일부를 캡슐화하는 목적은 전체에서 복잡성을 끌어내어 별도의 세부 사항을 쉽게 이해할 수 있도록하는 것입니다 (양쪽). 더?

폴.

"캡슐화를위한 후보 정의 :

  • 관련 작업 또는 사물을 물리적으로 그룹화합니다.
  • 주 또는 데이터의 게이트 키퍼.
  • 숨기는 구현. "

출처 : 캡슐화 정의

캡슐화를 달성하는 두 가지 부분/방법이 있습니다.

  • 먼저, 캡슐화는 관련 데이터 및 동작을 단일 단위, 즉 물리적 운영 그룹화 (동작)로 포장하는 기술입니다.

예 :-

class Person {
    String name;
    int age;

    void talk() {
    }

    void think() {
    }

    void work() {
    }

    void play() {
    }
}
  • 둘째, 캡슐화는 외부 세계의 오용으로부터 데이터를 보호하는 기술이며, 이는 '정보 숨기기'또는 '데이터 숨기기'라고합니다.

예 :-

class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public String getAge() {
        return age;
    }
}

출처 : Java의 캡슐화는 무엇입니까?, 스포일러 저자는 인터페이스를 예로 인용합니다. 이는 사실이 아닙니다. 인터페이스는 추상화를위한 것입니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top