스켈레톤(컴퓨터 프로그래밍)

Skeleton (computer programming)

스켈레톤 프로그래밍은 단순한 고급 프로그램 구조와 소위 더미 코드를 기반으로 하는 컴퓨터 프로그래밍의 한 스타일이다.프로그램 골격은 유사 코드와 유사하지만 코드의 파싱, 컴파일 및 테스트를 허용한다.더미 코드는 프로그램 골격에 삽입되어 처리를 시뮬레이션하고 컴파일 오류 메시지를 방지한다.함수 선언 또는 코드의 예상 반응이 알려진 단순한 테스트 사례에 대해서만 올바른 결과를 반환하는 함수를 포함할 수 있다.

스켈레톤 프로그래밍은 하향식 설계 접근방식을 촉진하는데, 이 접근방식은 완전한 높은 수준의 구조를 가진 부분적으로 기능하는 시스템을 설계하고 코딩한 다음 이 시스템을 프로젝트의 요구사항을 충족하도록 점진적으로 확장한다.프로그램 골격은 알고리즘의 높은 수준의 기술에도 가끔 사용된다.프로그램 골격은 광범위한 문제 등급에서 일반적으로 사용되는 구문 및 구조를 반영하는 템플릿으로도 활용될 수 있다.

스켈레톤 프로그램은 객체 지향 프로그래밍에 사용되는 템플릿 방법 설계 패턴에 활용된다.객체 지향 프로그래밍에서 더미 코드는 추상적인 방법, 메서드 스텁 또는 모의 객체에 해당한다.자바 원격 메서드 호출(Java RMI) 명명법에서 스텁은 클라이언트 측에서 서버 측의 스켈레톤과 통신한다.[1]

클래스 스켈레톤소프트웨어 공학에서 사용되는 클래스의 개요다.클래스의 역할에 대한 설명을 담고 있으며, 변수와 방법의 목적을 기술하고 있으나 실행하지는 않는다.그 수업은 나중에 뼈대로부터 시행된다.골격은 또한 다형 패러다임을 따르는 언어를 가진 인터페이스추상 클래스라고도 알려져 있다.

배경

일반적으로 골격 기반 구조를 따르는 Python에서 발견되는 코드

오늘날[2] 컴퓨터에 사용되는 소프트웨어는 여러 가지 이유로 인해 종종 복잡하다.이것은 단지 하나의 프로그래머가 그것을 개발할 수 있는 것이 아니라, 다른 모듈이나 부품을 별도로 수입해야 한다는 것을 의미할 수 있다.프로그램 자체도 너무 복잡할 수 있는데, 어떤 프로그램들은 동시에 단일 변수에 접근하거나 심지어 디스플레이를 위한 픽셀을 생성하기도 한다.스켈레톤 코드는 프로그래머가 컴파일 시간 동안 가장 적은 오류로 코드를 개발할 수 있도록 지원하는 데 사용된다.

스켈레톤 코드는 병렬 프로그래밍에서 가장 흔하게 발견되지만 프로그래밍 언어의 문서화 같은 다른 상황에도 적용된다.이것은 잠재적으로 혼란스러운 방법의 핵심 기능을 단순화하는 데 도움이 된다.그것은 또한 일시적으로 완전한 기능 없이 더 큰 프로그램 내에서 작은 기능이 작동할 수 있도록 하는 데 사용될 수 있다.이러한 스켈레톤 기능은 주요 기능을 포함할 필요가 없고 대신 개발 중에 사용하기 위해 하드 코딩될 수 있기 때문에 이 프로그래밍 방법은 완전한 기능을 작성하는 것보다 쉽다.그들은 보통 그 방법을 도입하기 위해 구문적으로 정확한 코드를 포함하며, 프로그램의 운영을 나타내는 코멘트를 포함한다.이것은 항상 텍스트 스켈레톤 코드라고 부를 필요가 있는 것은 아니다.


유사코드와의 관계

가성의 일반적 예

유사코드는 새로운 소프트웨어의 구조를 개발할 때 가장 흔하게 발견된다.그것은 더 큰 시스템 내에서 특정한 기능을 영어로 쉽게 묘사하거나, 심지어 전체 프로그램을 대표하는 것이 될 수도 있다.유사코드는 스켈레톤 프로그래밍과 유사하지만, 유사코드는 주로 비공식적인 프로그래밍 방법이라는 점에서 차이가 있다.[3]더미 코드는 또한 이것과 매우 유사하며, 여기서 코드는 단순히 자리 표시자로 사용되거나, 클래스 또는 인터페이스에서 의도된 방법의 존재를 나타내기 위해 사용된다.

컴퓨터 프로그래머들은 매우 가성소드에 의존하고 있어서 그것이 그들의 정신에 측정가능한 영향을 미친다.[3]전형적인 프로그래머는 가성이나 스켈레톤 코드를 쓰거나, 도표를 그리는 것만으로 어떤 방식으로든 단순화된 코드를 쓰는 아이디어로 조건화되어 있어서 이것이 최종 구현을 얼마나 잘 쓸 수 있는가에 측정 가능한 영향을 미친다.이것은 다양한 언어로 작업하는 프로그래머와 다양한 프로그래밍 패러다임을 가진 많은 어플리케이션에서 발견되었다.

이러한 프로그램 설계 방법은 펜과 종이에 가장 자주 이루어지며, 실제로 구현될 내용에서 본문을 더욱 이동시킨다.스켈레톤 프로그래밍은 이것을 모방하지만, 통합 개발 환경 또는 텍스트 편집기에서 일반적으로 쓰여지는 방식에서는 다르다.이것은 초기 설계 단계 이후 프로그램의 추가 개발을 돕는다.스켈레톤 프로그램은 또한 실행될 경우 단순화된 기능이 작동할 수 있도록 한다.

실행

스켈레톤 프로그래밍은 다양한 프로그래밍 애플리케이션에서 구현될 수 있다.

프로그래밍 언어 설명서

모두, 대부분의 프로그래밍 언어가 모든 내장 기능 및 방법의 정의를 지원하는 데 사용되는 스켈레톤 코드를 가지고 있지 않다면 말이다.이것은 새로운 프로그래머들이 쓰여진 방법의 구문과 의도된 구현을 이해할 수 있는 간단한 수단을 제공한다.

객체 지향 언어자바(Java)는 자바 패키지의 각 객체 부분에 대해 완전히 분리된 방법이 있는 구조화된 문서 페이지에 집중한다.[4]객체 지향 언어는 다른 언어에서 발견되는 단순한 하향식 접근 방식이 아니라, 구현에 대한 계층 기반 구조에 초점을 맞춘다.'개체'는 데이터 및 변수를 저장하여 일반적으로 보다 효율적인 프로그램을 작성할 수 있다.이러한 개체들은 내부 변수인 메서드에 접근할 수 있는 개별적인 기능을 가지고 있다.

각 방법은 동일한 형식으로 정의되며, 통합 개발 환경에서 사용할 구문뿐만 아니라 방법의 명칭도 블록 상단에서 명확하게 볼 수 있다.Java가 범위, 데이터 유형상속에 중점을 두면서, 이 구문은 모든 프로그래머는 아니더라도 새로운 사람들에게 매우 유용하다.이에 이어 방법의 운용에 대한 심층적인 설명이 뒤따르며, 다음과 같은 오류가 있다.

Python은 자체 제작 방식과 유사한 접근방식을 가지고 있지만, 범위와 데이터 유형에 대한 언어의 고정관념 부족을 모방한다.[5]이 문서에는 각 방법의 구문 및 방법 또는 함수의 일반적인 사용에 대한 예와 함께 간략한 설명이 수록되어 있다.이 예에서 제공하는 스켈레톤 코드는 프로그래머들이 그 기능을 한눈에 잘 이해할 수 있게 해준다.

클래스 정의

주로 도서관의 일부로서 제3자 개발자가 작성한 수업도 스켈레톤 코드 형태로 프로그래밍을 선보인다.이것은 기능과 방법이 어떻게 작동하는지 도서관에 새로운 것을 알려주는 데 도움이 된다.P5.Js는 문서 페이지에서 이 형식을 사용하여 포함된 특정 기능의 용도를 설명한다.[6]그러나 이것은 가능한 모든 방법 사용보다는 매개변수를 표시하기 위해 스켈레톤 코드를 사용하는 프로그래밍 언어 문서와는 다르다.

자연언어 인터페이스(NLI)는 프로그래머들이 대개 구어체(programming language specific diagons)라고 부르는 입력을 취하려 하고 이를 이용하여 프로그램이나 방법을 만들려고 하는 상황에서 가장 일반적으로 발견된다.이를 구현하기 위해 작은 스켈레톤 코드 세트를 사용하여 백그라운드에서 실행되는 함수를 암시한다.[7]

다른 형태의 NLI는 다른 언어를 사용하는 사용자부터 제스처 기반 입력에 이르기까지 매우 유사한 결과를 얻기 위해 다른 형태의 입력물을 사용한다.프로그래밍 언어가 주로 영어로 개발되고 쓰여지면서, 다른 언어를 사용하는 사람들은 새로운 소프트웨어를 개발하는 것을 어려워한다.NLI는 이러한 상황에서 사람들을 돕기 위해 몇몇 연구에서 사용되었다.이 연구는 NLIs의 사용을 통해 자바어로 쓰여진 수업을 보여주었다.이것은 구문 규칙을 배울 필요를 없앴지만, 수업은 기본 세트의 스켈레톤 코드를 사용하여 작성되었음을 의미했다.

다형성 기반 정의

다형성(多形性)은 방법들이 오버라이드되거나 과부하될 수 있는 객체지향 프로그래밍 패러다임과 함께 따르는 이념이다(부모계급에서 작성된 방법보다 우선시 될 자식계급에서 같은 이름의 방법).방법의 정의는 언어의 구문에 의해 정의된 골격 체계에 기초한다.[9]

클래스 구현과 매우 유사하게, 스켈레톤 코드를 사용하여 인터페이스의 일부인 방법을 정의할 수 있다.인터페이스는 본질적으로 클래스의 청사진으로, 내부 기능을 완전히 이해할 필요 없이 다른 패키지의 클래스를 사용할 수 있는 엄격한 객체 지향 언어(Java 등)를 허용한다.인터페이스는 단순히 클래스 내에 존재해야 하는 방법을 정의하여, 다른 사람이 자신의 개인적 필요에 따라 그 방법을 사용하거나 클래스를 구현할 수 있도록 한다.

공용 스켈레톤예();

추상적인 수업은 클래스 구현과 거의 동일하지만 언어에 따라 적어도 하나의 방법이 추상적인 것으로 정의된다.이것은 이 클래스의 모든 아동(연장 또는 구현하는 모든 클래스)이 이것을 위해 정의된 방법을 가질 필요가 있음을 암시한다.추상 클래스는 인터페이스와 정의 스타일이 매우 유사하지만, 일반적으로 '추상'이라는 키워드는 아동 클래스에서 구현해야 한다는 사실을 식별하기 위해 사용된다.

공용 추상 스켈레톤예();

이 예들은 자바 구문을 사용한다.

병렬 프로그래밍

병렬 프로그래밍은 효율을 높이기 위해 가장 일반적으로 사용되는 여러 기능의 동시 작동이다.이러한 프로그램들은 문제의 하드웨어와 복잡성과 상호연결성 때문에 일반적으로 개발하기 가장 어려운 유형의 프로그램이다.많은 개발자들이 이러한 핵심 기능을 가진 프로그램을 쓰려고 시도했지만,[10] 이것은 다양한 결과로 충족되었다.

알고리즘 스켈레톤 프레임워크는 병렬 프로그래밍에 사용되어 이후의 개발을 위해 문제가 되는 방법을 추상적으로 기술한다.프레임워크는 단일 타입에 한정되지 않으며, 이들 타입은 각각 개발자 프로그램의 효율성을 높이기 위한 목적이 다르다.이러한 유형은 데이터 병렬, 작업 병렬 및 분해능의 세 가지 주요 유형으로 분류할 수 있다.[10]

데이터-병렬

이러한 스켈레톤 알고리즘은 대용량 데이터 기반 소프트웨어에서 작동하는 프로그램을 개발하는데 사용되며, 대개 나중에 사용하기 위해 데이터 간의 연결을 식별한다.데이터 병렬 알고리즘에는 '맵', '포크', '감소' 또는 '스캔'이 포함된다.

  • '맵'은 가장 일반적으로 사용되는 데이터 병렬 알고리즘으로, 일반적으로 대규모 데이터 집합에서 완료된 단일 작업을 포함한다.효율성을 높이기 위해 다수의 데이터 세트가 동시에 이 연산을 적용하고 마지막에 데이터가 다시 함께 구조화된다.
  • '포크'는 '맵'과 유사하지만 특정 데이터 유형에 대해서는 다른 작업을 사용한다.이것은 다중 데이터 병렬로 알려져 있다.[10]
  • '감소' 또는 'scan'은 데이터 집합에 접두사를 적용하기 전에 데이터에 연산을 적용하기 위해 사용된다.이들은 방법 자체의 런타임 동안 일련의 부분적인 결과를 얻기 때문에 '맵'과 다르다.

작업-병렬

그들의 이름에서 알 수 있듯이, 이러한 운영은 작업에서 효과가 있다.이에 따른 각 알고리즘 유형은 작업 간 동작의 변화로 인해 다르다.작업 병렬 알고리즘에는 '순차', '팔뚝', '파이프', 'if', 'for', 'while' 등이 포함된다.

  • 'Sequential'은 내포된 스켈레톤 알고리즘 집합을 닫고 종료한다.해골의 일부인 방법과 프로그램은 닫기 전에 프로그램의 종료 측면으로 포함된다.
  • '팔뚝'은 업무 그룹, 작업자 또는 다른 기능의 마스터 또는 슬레이브로 알려져 있다.여러 스레드에 걸쳐 태스크를 복제하고 이러한 태스크를 동시에 실행하여 지정된 태스크를 완료한다.이것은 특정 스레드에 대한 부하를 나누어서, 효과적으로 스레드 사이에 마스터/슬레이브 관계를 형성한다.
  • '파이프'는 보다 전통적인 형태의 알고리즘으로, 각 방법이나 기능이 순차적으로 실행된다.이것은 프로그래머가 코드를 작성한 순서에 따른다.이것은 성능 및 속도를 향상시키기 위해 일반적으로 입력되는 데이터 집합에서 다양한 작업을 동시에 계산하여 병렬로 만든다.각각의 동시 연산은 무대로 알려져 있다.파이프 알고리즘은 내포될 수 있으며, 하나는 다른 내부에 있고 각각 속도와 단계 수를 증가시키기 위한 책임을 분할한다.
  • if'는 프로그램에게 조건부 과제 분할을 제공하며, 여기서 일련의 스켈레톤 코드가 두 개의 주요 섹션으로 분할된다.프로그램에 조건문이 주어지고 따라서 따라야 할 특정 알고리즘이 주어진다.
  • 'For'는 프로그래머가 지정한 작업을 여러 번 작동시켜 보다 효율적인 코드 집합을 허용한다.코드가 실행되는 횟수는 사전 설정된 값으로, 런타임에 이 값을 변경할 수 없음을 나타낸다.주어진 횟수만큼 임무를 완수해야 한다.
  • 'While'은 작업이 여러 번 완료되는 'for' 알고리즘의 작동과 매우 유사한 알고리즘이다.그러나 'while' 알고리즘에서 프로그램은 조건문이 충족되기 전에 작업을 여러 번 계산한다.즉, 'while' 알고리즘이 실행될 때마다 다른 횟수로 작업을 수행할 수 있다는 뜻이다.

해상도 스켈레톤

이 해골들은 위에서 발견된 전형적인 해골과는 매우 다르다.'해상도' 알고리즘은 특정 문제를 해결하기 위해 방법의 조합을 사용한다.알고리즘에 주어진 문제는 "문제 가족"이 될 수 있다.[10]이 해골에는 '분열과 정복' 또는 '브랜드와 바운드'라는 두 가지 주요 유형이 있다.

  • '분할과 정복'은 지도 골격을 기본으로 삼아, 이것을 잠시의 골격과 결합시켜 문제를 해결한다.지도 알고리즘에서는 데이터의 함수가 동시에 적용된다.'분할과 정복'에서 제공된 데이터 집합은 지도 스켈레톤을 사용하여 기능에 적용되지만, 이는 'while' 알고리즘을 사용하여 반복적으로 적용할 수 있다.'그동안'은 전체 문제가 해결될 때만 깨진다.
  • 'Branch and bound'는 지도 알고리즘도 사용하는 알고리즘이지만, 'While' 알고리즘을 적용하여 작업을 동시에 실행하는 대신, 이 알고리즘은 작업을 분기로 분할한다.각 지부에는 특정한 목적, 즉 '경계'가 있는데, 여기서 조건문은 그것을 멈추게 할 것이다.

참조

  1. ^ Freeman, Eric; Freeman, Elisabeth; Kathy, Sierra; Bert, Bates (2004). Hendrickson, Mike; Loukides, Mike (eds.). "Head First Design Patterns" (paperback). 1. O'REILLY: 440. ISBN 978-0-596-00712-6. Retrieved August 28, 2012. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  2. ^ Lowery, Jeff (November 2, 2019). "Why is Software Development Difficult?". Medium. Retrieved November 15, 2020.
  3. ^ a b Bellamy, Rachel K. E. (June 1, 1994). "What Does Pseudo-Code Do? A Psychological Analysis of the use of Pseudo-Code by Experienced Programmers". Human–Computer Interaction. 9 (2): 225–246. doi:10.1207/s15327051hci0902_3. ISSN 0737-0024.
  4. ^ "Object (Java Platform SE 8 )". docs.oracle.com. Retrieved October 2, 2020.
  5. ^ "Built-in Functions — Python v3.0.1 documentation". docs.python.org. February 14, 2009. Retrieved October 3, 2020.
  6. ^ "reference p5.js". p5js.org. Retrieved November 15, 2020.
  7. ^ Granger, Chris (November 18, 2020). "A first peek at something new we're working on". Twitter. Retrieved November 19, 2020.
  8. ^ Özcan, E. (2004). "GENERATING JAVA CLASS SKELETON USING A NATURAL LANGUAGE INTERFACE". Proceedings of the 1st International Workshop on Natural Language Understanding and Cognitive Science. SciTePress - Science and Technology Publications. 1: 126–134. doi:10.5220/0002683301260134. ISBN 972-8865-05-8.
  9. ^ Benaya, Tamar; Zur, Ela, "Understanding Object Oriented Programming Concepts in an Advanced Programming Course", Lecture Notes in Computer Science, Berlin, Heidelberg: Springer Berlin Heidelberg, pp. 161–170, ISBN 978-3-540-69923-1, retrieved November 18, 2020
  10. ^ a b c d González-Vélez, Horacio; Leyton, Mario (November 1, 2010). "A survey of algorithmic skeleton frameworks: high-level structured parallel programming enablers". Software: Practice and Experience. 40 (12): 1135–1160. doi:10.1002/spe.1026. ISSN 0038-0644.