2014-12-26 8 views
0

OOP의 기본적인 것들을 거의 읽지 않고 있습니다. 나는 캡슐화와 추상화에 대해 혼란 스럽다. 필자의 이해대로, 추상화은 몇 가지를 노출하고 거의 숨기지 않는 방법입니다. 캡슐화은 객체의 상태를 캡슐화하여 외부 세계에 액세스 할 수 없도록하고 내부 메소드를 통해 액세스 할 수 있도록 도와줍니다. 따라서 둘 다 상관 관계가 있습니다. 하지만 추상적 인 클래스와 인터페이스를 사용하여 추상화가 이루어지면서 getter와 setter를 사용하여 캡슐화를 구현하는 방법을 여러 번 읽었습니다. 지금은 인터페이스 나 추상 클래스를 사용하지 않은하지만 여전히 나의 이해에 따라 내가 직접 B 클래스의 액세스 변수를 허용하지 않습니다에 의해 여기 추상화를 달성 위의 코드에서 (C#을)OOP에서 캡슐화와 추상화 이해하기

class A 
    { 
     private int a; 
     public void print() 
     { 
      Console.WriteLine("Value of a = {0}", a); 
     } 
    } 
    class B 
    { 
     static void Main(string[] args) 
     { 
      A a = new A(); 
      a.print();     
     } 
    } 

코드를 다음 사항을 고려. 캡슐화를 구현함으로써 A.의 내부 메소드를 사용하여 액세스 할 수 있는지 확인했습니다. 그래서 혼란을 해결하는 데 도움을 줄 수 있습니까?

+1

가능한 복제 http://stackoverflow.com/questions/742341/difference-between-abstraction-and-encapsulation?rq=1 – opewix

+0

중복 질문. 위 링크의 모든 것을 읽으면 이해할 수 있습니다. –

답변

3

예제에서 추상화를 달성했습니다.

"추상화"는 지나치게 큰 용어이며 정확한 의미는 상황에 따라 다르며 때로는 그것이 우리를 혼란스럽게 만듭니다. 정의에 따르면 추상화는 현재 관점과 관련된 객체에 대한 세부 정보 만 캡처합니다.

귀하의 경우 (사용자) 클래스 B는 클래스 "A"(클래스 A의 유형)에 클래스 A가 구현 한 방법을 자세히 설명하지 않고 인쇄하도록 요청합니다. 메서드 이름 만 세부 사항이 아닌 사용자와 관련됩니다.

나는 Abstration에도 많은 의구심을 가지고 있었지만 this wikipedia page on Abstraction은 나를 많이 도와주었습니다.

추상화는 multiple languages, ("방법을 배우"추상적를 나타내는 개체를 정의하는 기능 "네 기둥 OOPS의 하나로서

등등, Datbase, 너무 HAL처럼 많은 하드웨어 및 소프트웨어 개념으로 사용된다 클래스)을 사용하여 작업 (메소드)을 수행하고 상태 (이벤트)를보고하고 변경하며 시스템의 다른 객체와 "통신"할 수 있습니다. (위키에 따른다)

한편

캡슐화는 다음

용어 밀봉 상태 세부 하지만 데이터 유형의 개념을 확장하고 표준화의 은폐를 의미

방법이 다른 데이터 유형은 상호 작용합니다 (추상화의 시작 임).

하지만 당신은 더 깊은 의미에서 "Abstration"를 타고 (위키 백과 페이지에서 다시)를 일반화하는 경우 :

다른 유형의 객체를 가능하게 정의 된 운영에 대한 추상화 진행, 그것을 대체 할

다형이라고합니다. 그것이 유형 또는 클래스 내에서 반대 방향으로 진행될 때, 복잡한 관계 집합을 단순화하도록 구조화하면 위임 또는 상속이라고합니다.

2

캡슐화 란 복잡성을 숨기는 것을 의미합니다. 추상화 란 필수적인 것들을 폭로하는 것을 의미합니다.

예 :

자동차에 대해 알 필요가 엔진, 기화기 및 다른 것들, 그것은 움직일 수 있도록, (이것은 캡슐화라고합니다)하지만 streeing, wheele, 브레이크, 도어 및 accelator 만 인식하고 사용자와 함께 작동 자동차를 운전하십시오 (이것은 추상화라고합니다)