모듈 및 구성 요소라는 용어에 약간의 문제가 있습니다. 내 생각에 모듈은 번들 클래스이며 잘 정의 된 인터페이스를 통해서만 액세스 할 수 있습니다. 모든 구현 세부 사항을 숨기고 재사용 할 수 있습니다. 모듈은 의존하는 모듈을 정의합니다.
구성 요소와의 차이점은 무엇입니까? 일부 책에서 찾아 보았지만 구성 요소에 대한 설명은 매우 비슷합니다.
모듈 및 구성 요소라는 용어에 약간의 문제가 있습니다. 내 생각에 모듈은 번들 클래스이며 잘 정의 된 인터페이스를 통해서만 액세스 할 수 있습니다. 모든 구현 세부 사항을 숨기고 재사용 할 수 있습니다. 모듈은 의존하는 모듈을 정의합니다.
구성 요소와의 차이점은 무엇입니까? 일부 책에서 찾아 보았지만 구성 요소에 대한 설명은 매우 비슷합니다.
답변:
용어는 비슷합니다. 나는 일반적으로 "모듈"이 "구성 요소"보다 크다고 생각합니다. 구성 요소는 일반적으로 범위가 비교적 작은 단일 부품으로, 범용 일 수 있습니다. 예를 들어 UI 컨트롤 및 타이머, 스레딩 어시스턴트 등과 같은 "배경 구성 요소"가 있습니다. "모듈"은 전체의 큰 부분으로, 대개 외부 간섭없이 복잡한 기본 기능을 수행합니다. 전자 우편이나 데이터베이스와의 통합을 제공하는 응용 프로그램의 클래스 라이브러리 일 수 있습니다. ERP / 회계 플랫폼의 "채권 수취 모듈"과 같이 스위트의 단일 응용 프로그램만큼 클 수 있습니다.
또한 "모듈"은 더 호환 가능한 것으로 생각합니다. 새로운 구성 요소는 오래된 구성 요소처럼 보이지만 어떤 방식 으로든 "더 나은"구성 요소를 복제 할 수 있지만 일반적으로 시스템 설계는 구성 요소 (또는 해당 구성 요소의 특정 동작에 맞게 설계된 대체 구성 요소)에 더 엄격하게 의존합니다. 비 컴퓨터 용어로, "구성 요소"는 자동차의 엔진 블록 일 수 있고; 엔진 내에서 땜질을하고 엔진을 완전히 교체 할 수는 있지만 자동차에는 엔진이 있어야하며 자동차의 "스톡"엔진을 교체하려면 치수, 무게, 장착 지점 등과 같은 매우 엄격한 사양을 준수해야합니다. 원래 설계되었습니다. 반면 "모듈"은 "플러그인"유형 기능을 의미합니다. 그 모듈이 무엇이든 시스템의 다른 부분에 미치는 영향을 최소화하면서 모듈을 제거 및 / 또는 교체 할 수있는 간단한 방법으로 통신 할 수 있습니다. 집의 전기 시스템은 고도로 모듈화되어 있습니다. 120V15A 플러그가있는 모든 것을 120V15A 콘센트에 꽂을 수 있으며 플러그가 작동하는 것을 기대할 수 있습니다. 시스템의 단일 브랜치에서 전력 요구가 안전 한계를 초과하지 않는 한, 집 배선은 어디에 꽂혀 있는지를 신경 쓰지 못했습니다.
모듈 의 일반적인 의미는 하나의 특정 프로그램에 묶이지 않고 재사용 가능한 코드 그룹입니다. 이것은 전체 GUI 라이브러리 세트에서 단일 클래스에 이르기까지 모든 것이 될 수 있습니다.
일반적인 의미 구성 요소 는 특정 인터페이스를 사용하여 대체 가능성을 추가로 제한하는 모듈입니다. GUI 위젯 구성 요소를 작성하는 경우 호출 코드에서 특별한 작업을 수행하지 않고도 위젯이 예상되는 모든 위치에서 사용할 수 있습니다. 일반적으로 모듈에는 그러한 제한이 없습니다. Qt와 GTK +는 모듈이지만 코드를 호출하는 데 상당한 노력을 기울이지 않고 다른 모듈을 교체 할 수 없으므로 구성 요소가 아닙니다.
많은 프레임 워크 나 프로그래밍 언어는이 용어를 사용하여 훨씬 더 구체적인 것을 의미하므로 사람들이 문맥에 대해 묻는 이유입니다. 일반적인 의미의 구성 요소 일 수 있지만 매우 구체적인 IComponent인터페이스를 구현하지 않으면 컨텍스트에서 구성 요소로 간주되지 않을 수 있습니다. 파이썬에서는 명령을 module사용하여 얻을 수있는 매우 구체적인 기술적 의미가 있습니다 import. 일반적으로 사람들은 이러한 상황 별 의미를 말합니다.
특정 언어, 프레임 워크 및 자체 해석을 추상화하려면 추상 소프트웨어 세분성 계층 구조는 다음과 같습니다.
Product - application, library, service
Module - GUI, core logic, data, etc...
Component - purpose specific collection of objects
Object - collection of primitives
Primitive - numbers, functions, etc...
간단하고 간단하게 제품은 연결된 기능 모듈의 작업 모음입니다.
이름에서 알 수 있듯이 모듈의 동기는 모듈성입니다. 많은 주장과 달리 실제로 코드 재사용을 의미하지는 않습니다. 실제로 재사용 할 수없고 설계되지 않은 어떤 것에도 맞지 않는 많은 모듈이 있습니다.
다른 소프트웨어 계층을 분리하여 소프트웨어를 구현 및 유지 관리하기가 훨씬 쉬워지고 다른 GUI 프레임 워크에 대한 프론트 엔드와 같은 것을 다시 구현해야하는 경우 모듈화를 통해 중단없이 쉽고 안전하게 수행 할 수 있습니다. 사방에 코드.
모듈은 모듈 요구 사항에 정의 된대로 공통의 목적을 모두 수행하는 구성 요소 콜렉션을 캡슐화합니다. 모듈은 자체 포함되고 완전해야하며 실제로 자체적으로 사용할 수는 없지만 적합한 구현과 함께 작동 할 수 있어야합니다.
세분성 측면에서 컴포넌트는 모듈과 객체 사이에 있습니다. 구성 요소의 목적은 범용 오브젝트를 모아 목적 별 단위를 구성하는 것입니다.
이름에서 알 수 있듯이, 모듈과 달리 구성 요소는 "자체 포함"이 아니며 더 큰 기능 전체의 일부입니다.
객체는 구성 요소의 더 작은 빌딩 블록입니다. 객체는 프리미티브의 모음으로, 좀 더 구체적인 수준을 유지하면서도보다 낮은 수준의보다 보편적 인 기능을 제공하기 위해 이들을 결합합니다.
프리미티브는 가장 작고 단순하며 가장 낮은 수준의 소프트웨어 개발 세분성입니다. 대부분의 언어에는 추가 "일등 시민"이 있지만 기본적으로 정수와 실수 및 함수 / 연산자입니다.
프리미티브로 할 수있는 일은 거의 없으며 동시에 거의 모든 레벨을 달성 할 수있는 매우 낮은 레벨입니다. 프리미티브와 직접 작업하면서 달성하는 것은 매우 장황하고 매우 복잡하고 불가능합니다.
위에서 이미 언급했듯이 프리미티브로 직접 작업하는 것은 매우 나쁜 생각입니다. 오늘날의 소프트웨어 개발을 위해 수행하는 것은 매우 복잡하고 느리고 지루할뿐만 아니라 테스트 및 유지 관리에 매우 방해가되고 방해가됩니다.
이러한 개념 부분을 모두 소프트웨어 개발에 통합하면보다 쉽고 빠르며 간단하며 안전합니다. 다재다능하고 보편적 인 원자의 수에 관계없이 원자로 집을 만들지 않습니다. 그것은 무익한 운동이 될 것이다. 당신의 원자는 프리미티브이고, 점토는 물체이며, 벽돌은 구성 요소, 벽, 바닥 및 지붕은 모듈이며 함께 조립되어 최종 제품을 나타냅니다.
인간은 실제로 어떤 것도 발명하지 않으며, 우주에서 이미 존재하는 것을 발견 한 다음 복사하여 우리의 삶에 적용합니다. 동일한 세분성 계층 구조는 원자와 그 아래에서 유기 분자, 단백질, 조직, 장기, 유기체 등 우주 자체에 내재되어 있습니다. 현실 자체는 작고 단순하며 기능이 제한적이며 목적이있는 추상적 인 것을 결합하여 동일한 원칙을 따릅니다. 더 크고, 더 복잡하고, 더 기능적인 것들과 더 특정한 목적의 것들.
기술적으로 그들은 모두 "개체"이며, 소프트웨어 개발의 "구성 요소"이며, 모두 함께 사용할 수있을만큼 "모듈 식"이며, 제작 된 의미에서 "제품"입니다. ..
이것은 용어 나 명명법에 관한 것이 아니라 사물을 확대 및 축소하는 것이 창의성과 생산성의 다양한 측면에 어떤 영향을 미치는지에 관한 것입니다. 그리고 다른 모든 수준을 사용하는 것의 중요성뿐만 아니라 잘못된 수준에서 목표를 달성하지 않으려는 것의 중요성에 대해서도 비생산적 일 수 있습니다.
상황에 따라 다릅니다. 모듈은 이미 다른 언어의 '패키지'또는 '조립'과 유사한 일부 언어의 DLL 수준 그룹을 참조하는 데 사용됩니다. 컴포넌트는 게임 개발에서 일반적으로 사용되는 엔티티 기반 컴포넌트뿐만 아니라 COM에 사용됩니다.
일반적으로 아키텍처 용어로, 모듈과 컴포넌트는 모두 잘 정의 된 인터페이스 뒤에있는 일부 코드 번들을 나타내는 경향이 있습니다. 일반적으로 모듈은 더 큰 번들을 나타내는 경향이 있습니다. 종종 인터페이스 세트가 있으며 모듈은 자체적으로 견딜 수있는 경향이 있습니다.
반면에 구성 요소는 전체 코드보다 작은 코드 묶음 인 경향이 있습니다. 그들의 이름으로, 그들은 더 큰 것의 구성 요소 인 경향이 있습니다. 때로는 응용 프로그램 자체이지만 클래스 디자인에서 컴포지션 사용이 증가함에 따라 더 큰 객체의 구성 요소가 더 자주 나타납니다. 구성 요소에 대해 잘 정의 된 인터페이스는 또한 앱이 서로를 위해 구성 요소를 교체 할 수 있도록하는 경향이 있습니다. 모듈은 그러한 교환 성을 갖지 않는 경향이 있습니다.