모듈러 프로그래밍

Modular programming

모듈러 프로그래밍은 프로그램의 기능을 독립적이고 호환성이 있는 모듈로 분리하는 것을 강조하는 소프트웨어 설계 기법이며, 각 모듈에는 원하는 기능의 한 측면만 실행하는 데 필요한 모든 것이 포함됩니다.

모듈 인터페이스는 모듈에 의해 제공되고 필요한 요소를 나타냅니다.인터페이스에 정의되어 있는 요소는 다른 모듈에서 검출할 수 있습니다.구현에는 인터페이스에서 선언된 요소에 대응하는 작업 코드가 포함되어 있습니다.모듈러 프로그래밍은 구조화된 프로그래밍객체 지향 프로그래밍과 밀접하게 관련되어 있으며, 모두 작은 조각으로 분해하여 큰 소프트웨어 프로그램 및 시스템의 구축을 촉진하는 동일한 목표를 가지고 있으며, 모두 1960년대경에 시작되었다.이러한 용어의 역사적 용도는 일관성이 없는 반면, "모듈러 프로그래밍"은 프로그램 전체의 코드를 상위 레벨로 분해하는 것을 말합니다. 즉, 구조화된 제어 흐름의 하위 레벨 코드 사용에 대한 구조화된 프로그래밍과 일종의 데이터 구조인 개체의 데이터 사용에 대한 객체 지향 프로그래밍입니다.

객체 지향 프로그래밍에서 모듈을 구성하기 위한 아키텍처 패턴으로 인터페이스를 사용하는 것을 인터페이스 기반 [citation needed]프로그래밍이라고 합니다.

역사

서브시스템(특히 I/O용)과 소프트웨어 라이브러리의 형태로 이루어진 모듈러 프로그래밍은 코드 재사용에 사용된 초기 소프트웨어 시스템으로 거슬러 올라갑니다.모듈화를 목표로 하는 모듈식 프로그래밍 자체는 구조화 프로그래밍의 개념(1960년대)의 대규모 아날로그로서 1960년대 후반과 1970년대에 개발되었다.모듈러 프로그래밍이라는 용어는 적어도 1968년 7월 Larry Constantine에 의해 정보 및 시스템 연구소에서 조직된 모듈러 프로그래밍에 관한 전국 심포지엄에서 유래했다. 다른 주요 개념은 정보 은닉(1972년)과 관심사 분리였다(SoC, 1974년).

모듈은 ALGOL 68(1968)의 원래 사양에는 포함되지 않았지만 초기 구현, ALGOL 68-R(1970) 및 ALGOL 68C(1970)에서 확장으로 포함되었으며 나중에 [1]공식화되었습니다.모듈러 프로그래밍을 위해 처음부터 설계된 최초의 언어 중 하나는 Niklaus Worth의 단명 Modula(1975년)였다.또 다른 초기 모듈러 언어는 제록스 PARC의 메사(1970년대)였으며, 워스는 메사뿐 아니라 후속 언어인 모듈라-2(1978)의 원래 모듈라에도 영향을 미쳤다.모듈라의 점 수식 이름 사용 예를 들면M.a사물을 참조하다a모듈로부터M레코드 필드(아트리뷰트 또는 오브젝트 메서드)에 액세스하기 위한 표기법과 일치하며, 현재는 C#, Dart, Go, Java, OCaml 및 Python 등에서 널리 사용되고 있습니다.모듈러 프로그래밍은 1980년대부터 널리 보급되었다: 원래 파스칼 언어(1970년)는 모듈을 포함하지 않았지만 이후 버전, 특히 UCSD 파스칼(1978년)과 터보 파스칼(1983년)은 파스칼의 영향을 받은 에이다(1980년)와 마찬가지로 "유닛" 형태로 포함시켰다.Extended Pascal ISO 10206:1990 표준은 모듈라2에 가까운 모듈러 지원을 유지했습니다.Standard ML(1984)[2]은 모듈 간에 매핑하는 펑터(파라미터화된 모듈)를 포함하여 가장 완전한 모듈 시스템 중 하나를 갖추고 있습니다.

1980년대와 1990년대에 모듈러 프로그래밍은 특히 C++와 Java의 인기로 인해 객체 지향 프로그래밍에 의해 가려졌고 종종 통합되었다.예를 들어 C패밀리의 언어에서는 C++(원래 C with Classes, 1980) 및 Objective-C(1983)의 오브젝트 및 클래스가 지원되었으며 30년 이상 경과한 모듈만 지원되었습니다.Java(1995)는 패키지 형태의 모듈을 지원하지만 코드 구성의 기본 단위는 클래스입니다.그러나 Python(1991)은 처음부터 모듈과 오브젝트를 모두 사용하여 코드 구성의 주요 유닛으로 모듈을 사용하고 대규모 유닛으로 "패키지"를 사용했습니다.Perl 5(1994)는 모듈과 오브젝트 모두를 지원하며 CPAN(1993)에서 광범위한 모듈을 사용할 수 있습니다.OCaml(1996)은 모듈 및 펑터를 지원하면서 ML에 이어 실시되었습니다.

모듈러 프로그래밍은 현재 널리 보급되어 있으며 1990년대 이후 개발된 거의 모든 주요 언어에서 찾아볼 수 있습니다.모듈의 상대적 중요도는 언어에 따라 다르며 클래스 기반 객체 지향 언어에서는 조직화 및 캡슐화 단위로서의 클래스와 여전히 중복 및 혼동이 있지만 둘 다 별개의 개념으로 잘 확립되어 있습니다.

용어.

어셈블리라는 용어( 참조).C#, F#, Visual Basic NET 언어.NET) 또는 패키지(Dart, Go 또는 Java )가 모듈 대신 사용될 수 있습니다.Python에서는 패키지가 모듈의 집합인 반면 Java 9에서는 새로운 모듈 개념(액세스 제어 기능이 강화된 패키지의 집합)이 구현되었습니다.

게다가 「패키지」라고 하는 용어는, 소프트웨어에서도 다른 용도가 있습니다(예를 들면,NET NuGet 패키지).컴포넌트는 비슷한 개념이지만 일반적으로 상위 레벨을 나타냅니다.컴포넌트는 시스템 전체의 일부이며 모듈은 개별 프로그램의 일부입니다."모듈"이라는 용어의 규모는 언어마다 크게 다릅니다. Python에서는 매우 작은 규모이며 각 파일은 모듈인 반면 Java 9에서는 대규모로 계획되어 있습니다. Java 9에서는 모듈이 패키지 모음인 경우, 차례로 파일 모음입니다.

모듈의 다른 용어로는 파스칼 방언에서 사용되는 유닛이 있습니다.

언어 지원

공식적으로 모듈 개념을 지원하 언어는 Ada, 알골, BlitzMax, C++, C#, Clojure, 코볼, Common_Lisp, D, 다트, eC, 얼랑, Elixir, 느릅 나무, F, F#, 포트란, 가 해스켈, IBM/360 어셈블러, 제어 언어(CL), IBMRPG, Java,[를]MATLAB, 맥스, Modula, Modula-2, Modula-3, Morpho, NEWP, 오베론은, Oberon-2, 오브젝티브-C, OCaml, 여러 derivati을 포함한다.vesPascal(Component Pascal, Object Pascal, Turbo Pascal, UCSD Pascal), Perl, PHP, PL/I, PureBasic, Python,[4] R, Ruby, Rust,[5] JavaScript, Visual Bascal.NET 및 WebDNA.

모듈 지원이 부족한 언어의 두드러진 로는 C와 C++ 및 Pascal이 있습니다., C와 C++는 헤더 파일을 사용하여 별도의 컴파일 및 선언 인터페이스를 지정할 수 있습니다.iOS 7(2013)에서 Objective-C에 모듈이 추가되었고 C++[6]20에서 C++에 Pascal이 추가되었으며 Pascal은 처음부터 모듈을 포함했던 Modula와 Oberon으로 대체되었습니다.JavaScriptECMAScript 2015부터 네이티브 모듈을 탑재하고 있습니다.

모듈러 프로그래밍은 예를 들어 C와 같이 프로그래밍 언어가 명명된 모듈을 지원하는 명시적 구문적 특징이 없는 경우에도 수행할 수 있습니다.이는 코딩 규칙, 프로그래밍 숙어 및 물리적 코드 구조와 같은 기존 언어 기능을 사용하여 수행됩니다.IBM i는 ILE(Integrated Language Environment)에서 프로그래밍할 때도 모듈을 사용합니다.

주요 측면

모듈러 프로그래밍에서는 모듈이 논리적으로 분리된 기능을 수행하며 명확하게 정의된 인터페이스를 통해 상호 작용하도록 문제가 분리됩니다.대부분의 모듈은 directed ascyclic graph(DAG; 유도 비순환 그래프)를 형성합니다.이 경우 모듈 간의 주기적 의존관계는 이들 모듈이 단일 모듈임을 나타냅니다.모듈이 DAG를 형성하는 경우 계층으로 배열할 수 있습니다.이 계층에서는 최하위 모듈은 다른 모듈에 의존하지 않고 상위 모듈은 하위 모듈에 의존합니다.특정 프로그램 또는 라이브러리는 자체 계층의 최상위 모듈이지만 상위 프로그램, 라이브러리 또는 시스템의 하위 모듈로 볼 수 있습니다.

모듈러 시스템을 작성할 때는 (최소 컴포넌트가 전체인) 단일 애플리케이션을 작성하는 대신 여러 개의 작은 모듈을 별도로 작성하여 함께 구성하면 실행 가능한 애플리케이션 프로그램을 구축합니다.일반적으로 이들은 별도의 컴파일을 통해 개별적으로 컴파일되고 링커에 의해 링크됩니다.저스트 인 타임 컴파일러는 런타임에 이러한 구성의 일부를 "즉시" 수행할 수 있습니다.

이러한 독립적 기능은 일반적으로 프로그램 제어 기능 또는 특정 태스크 기능으로 분류됩니다.프로그램 제어 기능은 하나의 프로그램에 대해 작동하도록 설계되었습니다.다양한 프로그램에 적용할 수 있도록 구체적인 업무 기능을 면밀히 준비합니다.

따라서 모듈식 설계 시스템은 올바르게 구축되면 기존의 일체식 설계보다 훨씬 재사용이 용이해집니다.이러한 모듈식 시스템의 모든(또는 많은 모듈)을 다른 프로젝트에서 (변경 없이) 재사용할 수 있기 때문입니다.또, 프로젝트를 몇개의 소규모 프로젝트로 「분할」하는 것도 용이하게 됩니다.이론적으로 모듈화된 소프트웨어 프로젝트는 대규모 팀이 쉽게 조립할 수 있습니다.팀원이 시스템 전체를 작성하거나 시스템 전체를 파악할 필요가 없기 때문입니다.할당된 작은 작업에만 집중할 수 있습니다.

「 」를 참조해 주세요.

메모들

  1. ^ "패키지"라는 용어는 JLS의 [3]모듈 아날로그에 사용됩니다. Java 패키지를 참조하십시오.패키지 모음의 일종인 "모듈"은 프로젝트 직쏘일부로서 Java 9용으로 계획되어 있습니다.이것들은 이전에는 "슈퍼 패키지"라고 불리며 Java 7용으로 계획되어 있었습니다.

레퍼런스

  1. ^ Lindsey, Charles H. (Feb 1976). "Proposal for a Modules Facility in ALGOL 68" (PDF). ALGOL Bulletin (39): 20–29. Archived from the original (PDF) on 2016-03-03. Retrieved 2014-12-01.
  2. ^ David MacQueen (August 1984). "Modules for Standard ML, LFP '84 Proceedings of the 1984 ACM Symposium on LISP and functional programming": 198–207. {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  3. ^ James Gosling, Bill Joy, Guy Stele, Gilad Bracha, Java Language Specification, 제3판, ISBN 0-321-24678-0, 2005.서론에는 "7장에서는 Modula의 모듈과 유사한 패키지로 구성된 프로그램의 구조를 기술한다"고 명시되어 있다.자바에서 "module"이라는 단어는 특별한 의미가 없습니다.
  4. ^ "Class: Module (Ruby 2.0.0)".
  5. ^ ECMAScript® 2015 언어 사양, 15.2 모듈
  6. ^ "N4720: Working Draft, Extensions to C++ for Modules" (PDF).

외부 링크