태그 보관물: abstraction

abstraction

추상화 란 무엇입니까? [닫은] 무엇인지에 대해 일반적으로 합의 된 정의

프로그래머 가 사용 하는 프로그래밍 추상화 가 무엇인지에 대해 일반적으로 합의 된 정의 가 있습니까? [참고, 프로그래밍 추상화는 “추상”이라는 단어에 대한 사전 정의와 혼동되어서는 안됩니다.] 모호하지 않거나 심지어 수학적 정의가 있습니까? 추상화의 명확한 예는 무엇입니까?



답변

“프로그래밍 추상화가 수학적으로 어느 정도 정의 될 수 있습니까?” “아니오”입니다. 추상화는 수학적 개념이 아닙니다. 누군가에게 레몬의 색을 수학적으로 설명하도록 요청하는 것과 같습니다.

좋은 정의를 원한다면 추상화는 특정 아이디어에서보다 일반적인 아이디어로 이동하는 프로세스입니다. 예를 들어, 마우스를보십시오. 무선인가요? 어떤 종류의 센서가 있습니까? 버튼이 몇 개입니까? 인체 공학적입니까? 얼마나 큽니까? 이 모든 질문에 대한 답변은 마우스를 정확하게 설명 할 수 있지만, 답변이 무엇이든 관계없이 버튼이있는 포인팅 장치이기 때문에 여전히 마우스입니다. 그것이 마우스가되기 위해 필요한 전부입니다. “Silver Logitech MX518″은 구체적이고 구체적인 항목이며 “mouse”는이를 추상화 한 것입니다. 생각해야 할 중요한 것은 “마우스”와 같은 구체적인 대상이 없으며 단지 아이디어 일뿐입니다. 책상 위의 마우스는 항상 더 구체적입니다.

추상화는 원하는대로 계층화하고 세밀하거나 거칠게 할 수 있습니다 (MX518은 마우스로, 포인팅 대상인 컴퓨터 주변기기, 전기로 작동되는 대상인 마우스), 원하는만큼 멀리 갈 수 있습니다. , 그리고 실제로 원하는 방향으로 (마우스에 와이어가 있습니다. 이는 와이어가있는 객체로 분류 할 수 있음을 의미합니다. 또한 바닥에 평평하므로 롤링되지 않는 객체의 종류로 분류 할 수 있습니다. 경 사진 평면에 똑바로 세웁니다).

객체 지향 프로그래밍은 추상화와 가족 또는 그룹 개념을 기반으로합니다. 좋은 OOP는 프로그램의 영역에서 의미가 있고 “누수되지 않는”적절한 세부 수준에서 좋은 추상화를 선택하는 것을 의미합니다. 전자는 경 사진 평면에 구르지 않는 객체로 마우스를 분류하는 것은 컴퓨터 장비를 발명하는 응용 프로그램에는 적합하지 않지만 물리 시뮬레이터에는 적합 할 수 있음을 의미합니다. 후자는 어떤 종류의 객체에는 적합하지 않은 계층 구조에 “자체를 박아 넣지”말아야한다는 것을 의미합니다. 예를 들어, 위의 계층에서 우리 모두가컴퓨터 주변 장치는 전기로 구동됩니까? 스타일러스는 어떻습니까? 스타일러스를 “주변”범주로 그룹화하려면 전기를 사용하지 않기 때문에 문제가 발생하며 컴퓨터 주변 장치를 전기를 사용하는 객체로 정의했습니다. 원 – 타원 문제는 이 수수께끼의 가장 알려진 예이다.


답변

나는 대부분의 답변에 동의하지 않습니다.

이것은 내 대답입니다.

두 세트의 G와 H가 주어지면 Galois 연결 (알파, 베타) 이 그들 사이에 정의 될 수 있으며 하나는 다른 것의 구체화라고 할 수 있습니다. 연결을 되 돌리면 하나는 다른 하나의 추상화입니다. 함수는 concretization 함수와 추상화 함수입니다.

이것은 컴퓨터 프로그램의 추상적 해석 이론에서 비롯된 것으로, 현재까지 정적 분석 방식입니다.


답변

추상화는보다 집중 What되고 덜 집중 된다 How. 또는 필요한 것만 알고 다른 모든 서비스의 제공자를 신뢰하면됩니다. 때로는 서비스 제공 업체의 신원을 숨기기도합니다.

예를 들어,이 사이트는 질문 및 답변 시스템을 제공합니다. 여기의 거의 모든 사람들이이 사이트의 질문, 답변, 투표 및 기타 사항에 대한 절차를 알고 있습니다. 그러나 기본 기술이 무엇인지 아는 사람은 거의 없습니다. 사이트가 ASP.net mvc 또는 Python으로 개발되었는지 여부와 같이 Windows 또는 Linux 서버에서 실행되는지 여부와 같습니다. 이는 당사의 사업이 아니기 때문입니다. 따라서이 사이트는 서비스를 제공하는 기본 메커니즘 위에 추상화 계층을 유지하고 있습니다.

다른 예 :

  • 자동차는 모든 메커니즘을 숨기지 만 자동차를 운전하고 연료를 보급하고 소유자에게 유지하는 방법을 제공합니다.

  • 모든 API는 다른 프로그래머에게 서비스를 제공하는 모든 구현 세부 사항을 숨 깁니다.

  • OOP의 클래스는 공개 멤버를 호출하는 서비스를 제공하는 비공개 멤버 및 공개 멤버의 구현을 숨 깁니다.

  • Java 또는 C ++에서 Interface또는 의 유형의 객체를 사용하는 동안 abstract class실제 구현은 숨겨집니다. 그리고 숨겨져있을뿐만 아니라에 선언 된 메소드의 구현은 Interface구현 / 상속 된 클래스마다 다를 수 있습니다. 그러나 동일한 서비스를 받고 있으므로 서비스 How가 구현되고 정확하게 Who/ What서비스를 제공하는 데 신경 쓰지 마십시오 .

  • 신원 숨기기 : “샘은 컴퓨터 프로그램을 작성할 수 있다는 것을 알고 있습니다.” 추상화는 “샘은 프로그래머입니다. 프로그래머는 컴퓨터 프로그램을 작성하는 방법을 알고 있습니다.” 두 번째 진술에서 사람은 중요하지 않습니다. 그러나 그의 프로그래밍 능력이 중요합니다.


답변

프로그래밍 추상화는 문제 의 단순화 된 모델 입니다.

예를 들어, TCP / IP 연결은 데이터 전송에 대한 추상화입니다. IP 주소와 포트 번호 만 포함하여 API로 전송하십시오. 전선, 신호, 메시지 형식 및 장애에 대한 모든 세부 정보는 걱정하지 않아도됩니다.


답변

추상화는 정리의 프로그래밍 버전 일뿐입니다.

당신은 공식적인 시스템을 가지고 있고, 그 시스템에 대한 생각을 제안합니다. 당신은 그것을 증명하고 그것이 잘 풀리면 정리가됩니다. 정리가 보유하고 있음을 알면 시스템에 대한 추가 증거로 사용할 수 있습니다. 시스템에서 제공하는 프리미티브 (if 문 및 int 값 유형과 같은)는 일반적으로 공리로 표시되지만 머신 코드로 작성된 CPU 명령어가 아닌 것은 일종의 추상화이므로 엄격하게 사실이 아닙니다.

함수형 프로그래밍에서 수학적 설명으로서의 프로그램 아이디어는 매우 강력하며, 종종 형식 시스템 (Haskell, F # 또는 OCAML과 같은 강력하고 정적으로 형식화 된 언어)은 증명을 통해 이론 성을 테스트하는 데 사용될 수 있습니다.

예를 들어 : 기본 연산으로 덧셈과 동등성 검사가 있고 기본 데이터 유형으로 정수와 부울이 있다고 가정 해 봅시다. 이것이 우리의 공리입니다. 그래서 우리는 그것이 1 + 3 == 2 + 2정리 라고 말할 수 있고 , 덧셈과 정수, 평등의 규칙을 사용하여 그것이 참된 진술인지 알아볼 수 있습니다 .

이제 우리가 곱셈을 원한다고 가정하고, 우리의 기본형 (간결함을 위해)에는 루핑 구조와 기호 참조를 할당하는 수단이 포함되어 있습니다. 우리는 제안 할 수

ref x (*) y := loop y times {x +}) 0

나는 그것을 증명하는 척하면서 곱셈이 유효 함을 보여줄 것이다. 이제 곱셈을 사용하여 시스템 (프로그래밍 언어)으로 더 많은 작업을 수행 할 수 있습니다.

타입 시스템도 확인할 수 있습니다. (*)는 int-> int-> int 유형입니다. 2 int를 취하고 int를 출력합니다. 더하기에는 int-> int-> int 유형이 있으므로 0 + (rest)는 (rest)가 int가되는 한 유지됩니다. 내 루프는 모든 종류의 작업을 수행 할 수 있지만 (x + (x + (x … + 0)))가 결과와 같은 일련의 카레 함수를 출력한다고 말하고 있습니다. 추가 체인의 형태는 (int-> (int-> (int …-> int)))이므로 최종 출력은 int 일 것입니다. 그래서 내 타입 시스템은 다른 증거의 결과를 견뎌냈습니다!

수년간, 많은 프로그래머 및 많은 코드 라인에서 이러한 종류의 아이디어를 복합적으로 사용하면 현대적인 프로그래밍 언어가 있습니다.


답변

Wikipedia의 답변이 충분할까요? http://en.wikipedia.org/wiki/Abstraction_%28programming%29

컴퓨터 과학에서 추상화의 메커니즘과 실습은 세부 사항을 줄이고 요소를 고려하여 한 번에 몇 가지 개념에 집중할 수 있습니다.


답변

수학적으로 “정수”는 추상화입니다. 그리고 모든 정수에 대해 x + y = y + x와 같은 공식적인 증명을 할 때, 3이나 4와 같은 특정 숫자가 아닌 추상화 “정수”로 작업하고 있습니다. 레지스터와 메모리 위치보다 높은 레벨의 머신. 대부분의 경우 더 추상적 인 수준에서 더 강력한 생각을 할 수 있습니다.