มีความแตกต่างระหว่างส่วนประกอบและโมดูล


30

ฉันมีปัญหาเล็กน้อยกับโมดูลข้อกำหนดและองค์ประกอบ ในความคิดของฉันโมดูลเป็นคลาสที่รวมซึ่งสามารถเข้าถึงได้ผ่านอินเทอร์เฟซที่กำหนดไว้อย่างดีเท่านั้น พวกเขาซ่อนรายละเอียดการใช้งานทั้งหมดและนำมาใช้ซ้ำได้ โมดูลกำหนดโมดูลที่พวกเขาพึ่งพา

ส่วนประกอบต่างกันอย่างไร ฉันค้นหามันในหนังสือบางเล่ม แต่รายละเอียดของส่วนประกอบคล้ายกันมาก


5
ภาษาไหน? สถาปัตยกรรมแบบไหน คำจำกัดความของโมดูลของคุณทำงานได้ ฉันคิดว่าส่วนประกอบเป็นสิ่งที่เสียบเข้ากับบางสิ่งเพื่อพูด GUI ในขณะที่โมดูลไม่สามารถเสียบเข้ากับ GUI ได้ โมดูลสามารถทำงานใน GUI ได้ถ้าโครงสร้างแบบ GUI ห่อ / รองรับ
Guy Coder

3
ดูที่Class vs. Component vs. Controlหมายเหตุ: ฉันไม่ได้ตอบเพราะคำถามของคุณไม่ได้กล่าวถึงหรือโครงสร้าง
Guy Coder

ใช่ในกรณีนี้ฉันคิดถึงคำจำกัดความทั่วไป
Mirco

2
ฉันไม่ได้อยู่หลังคะแนนมากขึ้นหลังจากให้แน่ใจว่าคุณได้รับคำตอบที่ถูกต้อง หากคุณพบว่าถูกต้องคุณสามารถแก้ไขคำถามของคุณและเพิ่มลิงค์ตามคำตอบที่คุณต้องการ ฉันจะไม่โพสต์เป็นคำตอบเพราะคำถามนั้นกว้างเกินไปและคำตอบเฉพาะนั้นอาจทำให้คนอื่นเดือดร้อน
Guy Coder

ใช่ฉันคิดว่าคำถามของฉันกว้างมากและคำตอบนั้นขึ้นอยู่กับภาษาที่ใช้หรือสภาพแวดล้อม Nerver คิดว่ามีคำจำกัดความที่แตกต่างกันมากสำหรับคำเหล่านี้
Mirco

คำตอบ:


12

ข้อกำหนดมีความคล้ายคลึงกัน ฉันมักจะคิดว่า "โมดูล" ว่าใหญ่กว่า "องค์ประกอบ" องค์ประกอบเป็นส่วนเดียวมักจะค่อนข้างเล็กในขอบเขตอาจเป็นวัตถุประสงค์ทั่วไป ตัวอย่างเช่นการควบคุม UI และ "ส่วนประกอบพื้นหลัง" เช่นตัวนับการช่วยเธรดเป็นต้น "โมดูล" เป็นชิ้นส่วนที่ใหญ่กว่าโดยทั่วไปเป็นสิ่งที่ทำหน้าที่หลักที่ซับซ้อนโดยไม่มีการรบกวนจากภายนอก อาจเป็นไลบรารีคลาสของแอปพลิเคชันที่ให้การรวมเข้ากับอีเมลหรือฐานข้อมูล อาจมีขนาดใหญ่เท่ากับแอปพลิเคชั่นชุดเดียวเช่น "โมดูลบัญชีลูกหนี้" ของแพลตฟอร์ม ERP / การบัญชี

ฉันยังคิดว่า "โมดูล" ว่าใช้แทนกันได้มากขึ้น ส่วนประกอบสามารถทำซ้ำได้ด้วยชิ้นส่วนใหม่ที่ดูเหมือนเก่า แต่จะ "ดีกว่า" ในบางด้าน แต่โดยทั่วไปแล้วการออกแบบระบบนั้นขึ้นอยู่กับส่วนประกอบอย่างเข้มงวดมากขึ้น (หรือการทดแทนที่ออกแบบมาเพื่อให้สอดคล้องกับพฤติกรรมที่เฉพาะเจาะจงขององค์ประกอบนั้น) ในแง่ที่ไม่ใช่คอมพิวเตอร์ "ส่วนประกอบ" อาจเป็นบล็อกเครื่องยนต์ของรถยนต์ คุณสามารถคนจรจัดภายในเครื่องยนต์เปลี่ยนได้ทั้งหมด แต่รถจะต้องมีเครื่องยนต์และจะต้องสอดคล้องกับข้อกำหนดที่เข้มงวดมากเช่นขนาดน้ำหนักจุดยึด ฯลฯ เพื่อแทนที่เครื่องยนต์ "หุ้น" ที่รถ ถูกออกแบบมาให้มี "โมดูล" ในทางกลับกันหมายถึงฟังก์ชั่น "plug-in" -type อะไรก็ตามที่เป็นโมดูล สามารถสื่อสารได้ด้วยวิธีที่มีน้ำหนักเบาซึ่งสามารถถอดโมดูลและ / หรือเปลี่ยนได้โดยมีผลกระทบน้อยที่สุดในส่วนอื่น ๆ ของระบบ ระบบไฟฟ้าของบ้านเป็นแบบแยกส่วน คุณสามารถเสียบอะไรก็ได้ด้วยปลั๊ก 120V15A เข้ากับเต้ารับ 120V15A และคาดหวังว่าสิ่งที่คุณเสียบเข้ากับการทำงาน การเดินสายไฟในบ้านไม่สามารถดูแลสิ่งที่เสียบอยู่ตรงนั้นได้เพราะความต้องการพลังงานในสาขาเดียวของระบบไม่เกินขีด จำกัด ที่ปลอดภัย


4
คำตอบทั้งหมดช่วยฉันได้จริงๆ แต่ฉันยอมรับได้เพียงข้อเดียวเท่านั้น ดังนั้นฉันจึงยอมรับ KeithS เพราะเขามีตัวแทนที่ต่ำที่สุด
Mirco

12

ความหมายทั่วไปของโมดูลคือกลุ่มของรหัสที่นำกลับมาใช้ใหม่ได้โดยไม่ผูกติดอยู่กับโปรแกรมใดโปรแกรมหนึ่งโดยเฉพาะ นี่อาจเป็นทุกอย่างตั้งแต่ไลบรารี GUI ทั้งชุดไปจนถึงคลาสเดียว

ความหมายทั่วไปขององค์ประกอบคือโมดูลที่มีข้อ จำกัด เพิ่มเติมของความสามารถในการทดแทนโดยใช้ส่วนต่อประสานที่เฉพาะเจาะจง หากคุณสร้างส่วนประกอบ GUI Widget สามารถใช้งานได้ทุกที่ที่คาดว่าจะมี Widget โดยไม่ต้องทำอะไรพิเศษในรหัสโทรศัพท์ โมดูลโดยทั่วไปไม่มีข้อ จำกัด ดังกล่าว Qt และ GTK + เป็นโมดูล แต่ฉันไม่สามารถสลับหนึ่งสำหรับอีกอันได้โดยไม่ต้องทำงานมากในการเรียกรหัสดังนั้นมันจึงไม่ใช่ส่วนประกอบ

เฟรมเวิร์กหรือภาษาการเขียนโปรแกรมจำนวนมากใช้คำศัพท์เพื่อหมายถึงบางสิ่งที่เฉพาะเจาะจงมากขึ้นซึ่งเป็นสาเหตุที่ผู้คนถามเกี่ยวกับบริบท บางสิ่งอาจเป็นส่วนประกอบในแง่ทั่วไป แต่ถ้ามันไม่ได้ใช้IComponentอินเทอร์เฟซที่เฉพาะเจาะจงมากมันอาจไม่ถือว่าเป็นองค์ประกอบในบริบท ในไพ ธmoduleอนนั้นมีความหมายทางเทคนิคเฉพาะเจาะจงของสิ่งที่คุณสามารถใช้importคำสั่ง โดยปกติผู้คนจะอ้างถึงความหมายเฉพาะบริบทเหล่านี้


คำจำกัดความของคุณดี แต่ตัวอย่างของคุณ (Qt vs. GTK +) นั้นมีข้อบกพร่อง (แม้ว่าฉันยอมรับว่าฉันจะไม่เรียกองค์ประกอบใด ๆ ของพวกเขาด้วย) IMHO Qt และ GTK + ทั้งสองมีส่วนประกอบขนาดเล็กหลายร้อยจึงส่งผลให้คอลเลกชันของอินเตอร์เฟซที่กว้างมาก นั่นทำให้ไม่น่าเป็นไปได้มากที่ใครบางคนจะใช้เวลาในการสร้างการแทนที่อินเทอร์เฟซที่เข้ากันได้สำหรับหนึ่งในนั้นและนั่นคือ IMHO สาเหตุที่พวกเขาไม่ใช่ส่วนประกอบ อย่างไรก็ตามเนื่องจากซอฟต์แวร์สองชิ้นไม่สามารถสับเปลี่ยนกันได้จะไม่ตัดสิทธิ์พวกเขาเป็นส่วนประกอบ แต่เป็นเพียงส่วนประกอบที่มีอินเทอร์เฟซทั่วไป
Doc Brown

8

ถ้าเราจะสรุปจากภาษาเฉพาะกรอบงานและการตีความของตัวเองลำดับชั้นของซอฟต์แวร์ที่เป็นนามธรรมมีดังต่อไปนี้:

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 ที่แตกต่างกัน รหัสทุกสถานที่

โมดูลห่อหุ้มคอลเลกชันของส่วนประกอบซึ่งทั้งหมดมีวัตถุประสงค์ร่วมกันตามที่กำหนดโดยข้อกำหนดของโมดูล โมดูลควรมีในตัวและเสร็จสมบูรณ์และแม้ว่าจะไม่สามารถใช้งานได้ด้วยตัวเอง แต่ก็สามารถทำงานร่วมกับการใช้งานที่สอดคล้องกันได้

  • ตัวแทน

ในแง่ของความละเอียดส่วนประกอบจะอยู่ระหว่างโมดูลและวัตถุ วัตถุประสงค์ขององค์ประกอบคือการรวบรวมชุดของวัตถุวัตถุประสงค์ทั่วไปเพื่อสร้างหน่วยเฉพาะวัตถุประสงค์

เนื่องจากชื่อมีความหมายซึ่งแตกต่างจากโมดูลส่วนประกอบจึงไม่ "อยู่ในตัวเอง" จึงเป็นส่วนหนึ่งของทั้งฟังก์ชันที่มีขนาดใหญ่กว่า

  • วัตถุ

วัตถุเป็นหน่วยการสร้างขนาดเล็กของส่วนประกอบ วัตถุคือชุดของวัตถุโบราณและจับคู่กันเพื่อให้บริการในระดับที่ต่ำกว่าเป็นสากลมากขึ้นในขณะที่ยังคงวัตถุประสงค์ที่ค่อนข้างเฉพาะ

  • ดั้งเดิม

Primitives เป็นระดับที่เล็กที่สุดง่ายที่สุดและต่ำสุดของการพัฒนาซอฟต์แวร์อย่างละเอียด มันเป็นเพียงจำนวนเต็มและจำนวนจริงและฟังก์ชั่น / ผู้ประกอบการถึงแม้ว่าภาษาส่วนใหญ่มี "พลเมืองชั้นหนึ่ง" ของตัวเองเพิ่มเติม

มีน้อยมากที่คุณสามารถทำได้ด้วยการดึกดำบรรพ์และในเวลาเดียวกันมันอยู่ในระดับที่ต่ำซึ่งคุณสามารถทำทุกสิ่งได้สำเร็จ มันเป็นเรื่องที่ละเอียดมากซับซ้อนน่าเบื่อและเป็นไปไม่ได้ที่จะทำให้สำเร็จในขณะที่ทำงานกับไพรเมตโดยตรง

  • ประเด็นทั้งหมดนี้คืออะไร?

ดังที่ได้กล่าวมาแล้วการทำงานกับคำสั่งเบื้องต้นโดยตรงนั้นเป็นความคิดที่ไม่ดีอย่างยิ่ง ไม่เพียงเพราะมีความซับซ้อนเป็นไปไม่ได้ช้าและน่าเบื่อสำหรับการพัฒนาซอฟต์แวร์ยุคใหม่ แต่ยังมีสิ่งที่น่ารำคาญอย่างมากและเป็นอุปสรรคต่อการทดสอบและบำรุงรักษา

การมีส่วนต่าง ๆ ของแนวคิดเหล่านั้นรวมอยู่ในการพัฒนาซอฟต์แวร์ทำให้ง่ายขึ้นเร็วขึ้นง่ายขึ้นและปลอดภัยขึ้น คุณไม่ได้สร้างบ้านจากอะตอมโดยไม่คำนึงว่าอะตอมที่หลากหลายและสากลเป็นอย่างไร นั่นจะเป็นการออกกำลังกายที่ไร้ประโยชน์ อะตอมของคุณเป็นแบบดั้งเดิมดินเป็นวัตถุของคุณอิฐเป็นส่วนประกอบผนังพื้นและหลังคาเป็นโมดูลของคุณประกอบเข้าด้วยกันซึ่งจะแสดงผลิตภัณฑ์ขั้นสุดท้าย

มนุษย์ไม่ได้คิดค้นสิ่งใดจริง ๆ เราค้นพบสิ่งที่มีอยู่แล้วในจักรวาลแล้วคัดลอกและนำไปใช้กับชีวิตของเรา ลำดับชั้นของเมล็ดเดียวกันมีความสำคัญต่อเอกภพตั้งแต่อะตอมและต่ำกว่าไปจนถึงโมเลกุลอินทรีย์โปรตีนเนื้อเยื่อเนื้อเยื่ออวัยวะอวัยวะสิ่งมีชีวิตและอื่น ๆ ในความเป็นจริงเชื่อฟังหลักการเดียวกัน - การรวมสิ่งเล็ก ๆ น้อย ๆ ที่เรียบง่าย ใหญ่ขึ้นซับซ้อนมากขึ้นทำงานได้มากขึ้นและใช้สิ่งเฉพาะเจาะจงมากขึ้น

  • คำศัพท์คำศัพท์

ในทางเทคนิคแล้วมันคือ "วัตถุ" ทั้งหมดเป็น "ส่วนประกอบ" ของการพัฒนาซอฟต์แวร์พวกมันทั้งหมดเป็น "แบบแยกส่วน" พอที่จะสามารถรวมเข้าด้วยกันพวกมันเป็น "ผลิตภัณฑ์" ทั้งหมดในแง่ที่ว่าพวกเขาผลิตขึ้นมา ..

นี่ไม่เกี่ยวกับคำศัพท์หรือศัพท์เฉพาะมันเกี่ยวกับการปรับขนาดของสิ่งต่าง ๆ ที่ส่งผลกระทบต่อแง่มุมต่าง ๆ ของความคิดสร้างสรรค์และผลผลิต และเกี่ยวกับความสำคัญของการไม่เพียง แต่ใช้ระดับต่าง ๆ เหล่านั้นทั้งหมด แต่ยังรวมถึงความสำคัญของการไม่พยายามที่จะบรรลุเป้าหมายในระดับที่ไม่ถูกต้องซึ่งสามารถต่อต้านได้


1
โมดูลรุ่นของคุณเสียงเหมือนแพ็คเกจ
JM Becker

1
@JMBecker ไม่ได้จริงๆในแง่ของความละเอียดเล็กแพคเกจสามารถประกอบด้วยอะไรจากการรวบรวมวัตถุเพื่อผลิตภัณฑ์แบบสแตนด์อโลนเต็ม บรรจุภัณฑ์เป็นสิ่งที่สะดวกสบายมากกว่าสำหรับการนำโค้ดกลับมาใช้ใหม่มากกว่าลิงก์ในเชนย่อย
dtech

3

ขึ้นอยู่กับบริบทของคุณ โมดูลถูกใช้เพื่ออ้างถึงกลุ่มระดับ DLL ในบางภาษาคล้ายกับ 'แพ็คเกจ' หรือ 'ชุดประกอบ' ในภาษาอื่น ๆ Component ใช้สำหรับสิ่ง COM เช่นเดียวกับ Entity Based Component ที่ใช้กันทั่วไปในการพัฒนาเกม

ในแง่สถาปัตยกรรมทั่วไปโมดูลและส่วนประกอบทำทั้งสองอย่างมักจะอ้างถึงชุดรหัสบางส่วนที่อยู่ด้านหลังอินเตอร์เฟสที่กำหนดไว้อย่างดี โดยทั่วไปโมดูลมักอ้างถึงบันเดิลที่ใหญ่กว่า มักจะมีชุดของอินเทอร์เฟซและโมดูลมีแนวโน้มที่จะสามารถยืนได้ด้วยตัวเอง

ในทางกลับกันส่วนประกอบมีแนวโน้มที่จะเป็นชุดของรหัสขนาดเล็กมักจะมีขนาดเล็กกว่าชั้นเรียนเต็ม โดยชื่อของพวกเขาพวกเขามักจะเป็นองค์ประกอบของบางสิ่งที่ใหญ่กว่า บางครั้งนั่นเป็นแอปพลิเคชั่น แต่ด้วยการเพิ่มการใช้องค์ประกอบในการออกแบบคลาสมันก็มักจะหมายถึงส่วนประกอบของวัตถุขนาดใหญ่ อินเทอร์เฟซที่กำหนดไว้อย่างดีสำหรับส่วนประกอบยังมีแนวโน้มที่จะอนุญาตให้แอปสลับส่วนประกอบในซึ่งกันและกัน โมดูลมักจะไม่สามารถสลับได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.