JAVA มีพื้นฐานอยู่บนแนวคิดของการเขียนโปรแกรมเชิงวัตถุ ซึ่งช่วยให้คุณสามารถก้าวไปสู่ระดับนามธรรมที่สูงขึ้นเพื่อแก้ไขปัญหาต่างๆ ในลักษณะที่สมจริง วิธีการเชิงวัตถุทำให้เกิดแนวคิดในการแก้ปัญหาในแง่ของวัตถุในโลกแห่งความเป็นจริงที่ง่ายต่อการนำมาใช้ซ้ำในแอปพลิเคชัน ตัวอย่างเช่นChair(เก้าอี้), Fan(พัดลม), Dog(สุนัข), Computer(คอมพิวเตอร์) และอื่นๆ ใน JAVA คลาสคือโครงร่าง เทมเพลต หรือต้นแบบที่กำหนดลักษณะการทำงานทั่วไปของออบเจ็กต์ประเภทที่กำหนด อินสแตนซ์คือการใช้งานคลาสแยกต่างหาก และอินสแตนซ์ทั้งหมดของคลาสมีคุณสมบัติเหมือนกัน ซึ่งอธิบายไว้ในคำจำกัดความของคลาส ตัวอย่างเช่น คุณสามารถกำหนดคลาสชื่อ House โดยมีจำนวนห้องเป็นแอตทริบิวต์ และสร้างอินสแตนซ์ของคลาส เช่น บ้านสองห้อง บ้านสามห้อง และอื่นๆ แนวคิดการเขียนโปรแกรมเชิงวัตถุ Java - 1ข้อดี: รายการด้านล่างนี้คือข้อดีบางประการของการพัฒนาซอฟต์แวร์เชิงวัตถุ
  • ลดต้นทุนการสนับสนุนซอฟต์แวร์ สาเหตุหลักมาจากการดำเนินการแบบโมดูลาร์
  • ปรับปรุงการใช้โค้ดซ้ำผ่านฟีเจอร์ต่างๆ เช่น การสืบทอด ส่งผลให้การพัฒนาซอฟต์แวร์เร็วขึ้น
  • เพิ่มความน่าเชื่อถือและความยืดหยุ่นของโค้ด
  • เข้าใจง่ายเนื่องจากการจำลองในโลกแห่งความเป็นจริง
  • นามธรรมที่ดีขึ้นในระดับวัตถุ
  • ลดความซับซ้อนของการเปลี่ยนแปลงจากระยะการพัฒนาหนึ่งไปอีกระยะหนึ่ง
OOP มีคุณลักษณะหลักสี่ประการ:
  • การห่อหุ้ม
  • มรดก
  • ความแตกต่าง
  • นามธรรม

การห่อหุ้ม

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

ความแตกต่าง

ความหลากหลายในการเขียนโปรแกรมคือความสามารถในการจัดเตรียมอินเทอร์เฟซเดียวกันสำหรับรูปแบบพื้นฐานที่แตกต่างกัน (ประเภทข้อมูล) ซึ่งหมายความว่าคลาสที่มีฟังก์ชันการทำงานที่แตกต่างกันใช้อินเทอร์เฟซเดียวกันร่วมกัน และสามารถเรียกแบบไดนามิกโดยการส่งพารามิเตอร์โดยการอ้างอิง ตัวอย่างคลาสสิกคือคลาสShape(รูปร่าง) และคลาสทั้งหมดที่สืบทอดมาจากคลาสนั้น: square(สี่เหลี่ยมจัตุรัส), circle(วงกลม), dodecahedron(สิบสองหน้า), irregular polygon(รูปหลายเหลี่ยมผิดปกติ), splat(หยด) และอื่นๆ ในตัวอย่างนี้ แต่ละคลาสจะมีวิธีการของตัวเองDraw()และโค้ดไคลเอ็นต์ก็สามารถทำได้:
Shape shape = new Shape();
Shape.area()เพื่อให้ได้พฤติกรรมที่ถูกต้องของรูปร่างใดๆ ความสวยงามของความหลากหลายก็คือโค้ดที่ทำงานกับคลาสต่างๆ ไม่จำเป็นต้องรู้ว่ามันใช้คลาสไหน เนื่องจากโค้ดทั้งหมดทำงานบนหลักการเดียวกัน กระบวนการที่ใช้โดยภาษาโปรแกรมเชิงวัตถุเพื่อใช้ความหลากหลายแบบไดนามิกเรียกว่าการเชื่อมโยงแบบไดนามิก หมายเหตุ: Polymorphism คือความสามารถในการเลือกวิธีการเฉพาะเจาะจงมากขึ้นในการดำเนินการโดยขึ้นอยู่กับวัตถุ ความแตกต่างเกิดขึ้นเมื่อไม่เกี่ยวข้องกับคลาสนามธรรม ข้อดี:
  • การสร้างโค้ดที่นำมาใช้ซ้ำได้ นั่นคือเมื่อสร้าง นำไปใช้ และทดสอบคลาสแล้ว ก็จะสามารถใช้งานได้อย่างอิสระโดยไม่ต้องกังวลว่าคลาสจะเขียนอะไรลงไปกันแน่
  • ซึ่งช่วยให้สามารถใช้โค้ดทั่วไปและโค้ดคู่ที่หลวมมากขึ้น
  • เวลาในการรวบรวมลดลง ซึ่งจะทำให้การพัฒนาเร็วขึ้น
  • การเชื่อมโยงแบบไดนามิก
  • อินเทอร์เฟซเดียวกันสามารถใช้สร้างวิธีการที่มีการใช้งานต่างกันได้
  • การใช้งานทั้งหมดสามารถถูกแทนที่ได้โดยใช้ลายเซ็นวิธีการเดียวกัน
วิธีการเอาชนะซึ่งเป็นส่วนหนึ่งของความหลากหลาย การแทนที่โต้ตอบกับสองวิธี: วิธีการในคลาสพาเรนต์และวิธีการในคลาสที่ได้รับ วิธีการเหล่านี้มีชื่อและลายเซ็นเหมือนกัน การแทนที่ช่วยให้คุณสามารถดำเนินการเดียวกันในวิธีที่แตกต่างกันสำหรับออบเจ็กต์ประเภทต่างๆ ตัวอย่างเช่น:
while(it.hasNext()) {
Shape s = (Shape) it.next();
totalArea += s.area(dim); //будет применен полиморфизм и вызван нужный метод для каждого an object.
}
แนวคิดการเขียนโปรแกรมเชิงวัตถุ Java - 2วิธีการโอเวอร์โหลดหรือความหลากหลายเฉพาะกิจหรือความหลากหลายคงที่ การโอเวอร์โหลดโต้ตอบกับวิธีการหลายวิธีในคลาสเดียวกันที่มีชื่อเหมือนกัน แต่มีลายเซ็นของวิธีการที่แตกต่างกัน การโหลดซ้ำทำให้คุณสามารถอธิบายการดำเนินการเดียวกันในรูปแบบที่แตกต่างกันสำหรับข้อมูลที่ต่างกันได้ บางครั้งเรียกว่าความหลากหลายแบบคงที่ แต่จริงๆ แล้ว มันไม่ใช่ความหลากหลาย นี่ไม่ใช่อะไรมากไปกว่าการมีสองวิธีที่มีชื่อเดียวกัน แต่เป็นรายการข้อโต้แย้งที่แตกต่างกัน การรีบูตเครื่องไม่เกี่ยวข้องกับการสืบทอดและความหลากหลาย และวิธีการโอเวอร์โหลดนั้นไม่เหมือนกับวิธีการที่ถูกแทนที่เลย Parametric Polymorphism ผ่านการสร้างใน JAVA เมื่อประกาศคลาส ฟิลด์ชื่อสามารถเชื่อมโยงกับประเภทที่แตกต่างกัน และชื่อวิธีการสามารถเชื่อมโยงกับพารามิเตอร์และประเภทการส่งคืนที่แตกต่างกัน JAVA รองรับความหลากหลายแบบพาราเมตริกโดยใช้ข้อมูลทั่วไป
List<String> list = new ArrayList<String>();
เหตุใดเราจึงไม่สามารถแทนที่วิธีคงที่ใน JAVA ได้ การเอาชนะขึ้นอยู่กับการมีอยู่ของอินสแตนซ์ของคลาส แนวคิดของความหลากหลายคือคุณสามารถสร้างคลาสย่อยได้ และวัตถุที่ใช้งานโดยคลาสย่อยเหล่านั้นจะทำงานแตกต่างออกไปด้วยวิธีการเดียวกันของคลาสพาเรนต์ (แทนที่ในคลาสย่อย) วิธีการคงที่ไม่เกี่ยวข้องกับอินสแตนซ์ใด ๆ ของคลาส ดังนั้นจึงไม่สามารถใช้แนวคิดของการแทนที่ตัวเองได้ ผู้สร้าง JAVA ได้รับคำแนะนำจากข้อพิจารณาสองประการที่มีอิทธิพลต่อแนวทางนี้ ประการแรก มีปัญหาในการรันโค้ด: มีการวิพากษ์วิจารณ์ Smalltalk มากมายในเรื่องการทำงานช้า (การรวบรวมขยะและความหลากหลายเป็นส่วนหนึ่งของปัญหานี้) และ JAVA ได้รับการออกแบบเพื่อหลีกเลี่ยงปัญหานี้ ข้อพิจารณาประการที่สองคือการตัดสินใจว่ากลุ่มเป้าหมายของ JAVA จะเป็นนักพัฒนา C++ การมีวิธีการแบบคงที่ทำงานในลักษณะนี้เป็นที่คุ้นเคยสำหรับโปรแกรมเมอร์ C++ และยังช่วยเร่งความเร็วของสิ่งต่าง ๆ เนื่องจากไม่จำเป็นต้องขึ้นลำดับชั้นของคลาสเพื่อดูว่าจะเรียกใช้วิธีใด คุณตรงไปที่ชั้นเรียนแล้วเรียกวิธีการเฉพาะ

มรดก

การสืบทอดคือการรวมเอาพฤติกรรม (เช่น วิธีการ) และสถานะ (เช่น ตัวแปร) ของคลาสพื้นฐานเข้าไว้ในคลาสที่ได้รับ เพื่อให้สามารถใช้งานได้ในคลาสที่ได้รับนั้น ข้อได้เปรียบหลักของการสืบทอดคือ มีกลไกอย่างเป็นทางการสำหรับการใช้โค้ดซ้ำและหลีกเลี่ยงการทำซ้ำ คลาสที่สืบทอดมาจะขยายฟังก์ชันการทำงานของแอปพลิเคชันโดยการคัดลอกพฤติกรรมของคลาสพาเรนต์และเพิ่มฟังก์ชันการทำงานใหม่ สิ่งนี้ทำให้โค้ดเชื่อมโยงกันอย่างมาก หากคุณต้องการเปลี่ยน superclass คุณจะต้องทราบรายละเอียดทั้งหมดของ subclasses เพื่อไม่ให้โค้ดเสียหาย การสืบทอดเป็นรูปแบบหนึ่งของการใช้ซอฟต์แวร์ซ้ำโดยที่คลาสใหม่ (คลาสย่อย) ถูกสร้างขึ้นจากคลาสที่มีอยู่ (ซูเปอร์คลาส) ซึ่งจะขยายฟังก์ชันการทำงานและใช้คุณสมบัติบางอย่างของซูเปอร์คลาส ดังนั้นหากคุณมีคลาสพาเรนต์แล้วคลาสย่อยก็ปรากฏขึ้น เด็กจะสืบทอดทุกสิ่งที่คลาสพาเรนต์มี ข้อดี:
  • ปรับปรุงการใช้รหัสซ้ำ
  • ความสัมพันธ์เชิงตรรกะ “คือ” (คือบางคน บางสิ่งบางอย่าง) ได้รับการจัดตั้งขึ้น ตัวอย่างเช่น: สุนัขเป็นสัตว์ (สุนัขก็คือสัตว์)
  • การทำให้เป็นโมดูลของโค้ด
  • ไม่รวมการทำซ้ำ
ข้อบกพร่อง:
  • การจับคู่อย่างแน่นหนา:คลาสย่อยขึ้นอยู่กับการใช้งานของคลาสพาเรนต์ ทำให้โค้ดเชื่อมโยงกันอย่างแน่นหนา
มีอะไรให้อ่านอีก:

กลุ่มนักพัฒนา Java:

นามธรรม

Abstraction หมายถึงการออกแบบคลาสตามอินเทอร์เฟซและฟังก์ชันการทำงาน โดยไม่คำนึงถึงรายละเอียดการใช้งาน คลาสนามธรรมแสดงถึงอินเทอร์เฟซโดยไม่รวมถึงการใช้งานจริง มันแยกความแตกต่างระหว่างการใช้งานวัตถุจากพฤติกรรมของมัน Abstraction ทำให้โค้ดง่ายขึ้นโดยการซ่อนรายละเอียดที่ไม่สำคัญ ข้อดี:
  • เมื่อใช้นามธรรม เราสามารถแยกสิ่งที่สามารถจัดกลุ่มเป็นประเภทใดประเภทหนึ่งได้
  • คุณสมบัติและวิธีการที่แก้ไขบ่อยสามารถจัดกลุ่มเป็นประเภทแยกกันได้ ดังนั้นประเภทหลักจะไม่ได้รับการเปลี่ยนแปลง สิ่งนี้ตอกย้ำหลักการ OOP: “โค้ดควรเปิดสำหรับส่วนขยาย แต่ปิดเพื่อการเปลี่ยนแปลง
  • นามธรรมทำให้การแสดงโมเดลโดเมนง่ายขึ้น
ความแตกต่างระหว่างสิ่งที่เป็นนามธรรมและการห่อหุ้ม การห่อ หุ้มเป็นกลยุทธ์ที่ใช้เป็นส่วนหนึ่งของสิ่งที่เป็นนามธรรม การห่อหุ้มหมายถึงโครงสร้างของวัตถุ: วัตถุห่อหุ้มคุณสมบัติและซ่อนไว้จากการเข้าถึงจากภายนอก ผู้ใช้คลาสโต้ตอบโดยใช้วิธีการของมัน แต่ไม่สามารถเข้าถึงโครงสร้างคลาสได้โดยตรง ด้วยวิธีนี้ รายละเอียดการใช้งานบทคัดย่อของชั้นเรียนที่เกี่ยวข้องกับการออกแบบ นามธรรมเป็นคำทั่วไปมากขึ้น นอกจากนี้ยังสามารถทำได้โดยใช้คลาสย่อย เหนือสิ่งอื่นใด ตัวอย่างเช่น คลาสList(รายการ) ในไลบรารีมาตรฐานคือสิ่งที่เป็นนามธรรมสำหรับลำดับขององค์ประกอบ ซึ่งจัดทำดัชนีตามตำแหน่งในรายการ ตัวอย่างเฉพาะของรายการListคือArrayListหรือLinkedList. รหัสที่โต้ตอบกับรายการListจะสรุปรายละเอียดของรายการที่ใช้ บ่อยครั้งที่นามธรรมเป็นไปไม่ได้หากไม่ได้ซ่อนสถานะที่ซ่อนอยู่โดยใช้การห่อหุ้ม หากคลาสเปิดเผยโครงสร้างภายใน คลาสนั้นจะไม่สามารถเปลี่ยนการดำเนินการภายในได้ และดังนั้นจึงไม่สามารถแยกออกมาได้ คลาสนามธรรมและวิธีการนามธรรมคืออะไร? มันเกิดขึ้นว่าในระหว่างการพัฒนาคุณต้องการให้คลาสพื้นฐานจัดเตรียมอินเทอร์เฟซให้กับคลาสที่ได้รับเท่านั้น นั่นคือคุณไม่ต้องการให้ใครสร้างอินสแตนซ์ของคลาสพื้นฐาน คุณต้องใช้อินเทอร์เฟซในลักษณะที่คุณส่งวัตถุไปเท่านั้น (นี่คือการส่งโดยนัยที่อนุญาตพฤติกรรมแบบโพลีมอร์ฟิก) abstractสิ่งนี้สามารถทำได้โดยการทำให้ คลาสนี้เป็นนามธรรมโดยใช้คีย์เวิร์ด สิ่งนี้กำหนดข้อจำกัดบางประการ เช่น ไม่สามารถสร้างอินสแตนซ์ของคลาสนามธรรมได้ เมื่อใช้คลาสนามธรรม จำเป็นต้องใช้วิธีนามธรรม สิ่งนี้ทำให้มั่นใจได้ถึงความหลากหลาย คลาสนามธรรมสามารถมีทั้งวิธีการเชิงนามธรรมและเป็นรูปธรรม หากมีการประกาศอย่างน้อยหนึ่งวิธีในคลาสที่เป็นนามธรรม ทั้งคลาสจะต้องได้รับการประกาศให้เป็นนามธรรมด้วย อย่างไรก็ตาม ไม่จำเป็นต้องปฏิบัติตามกฎในทิศทางตรงกันข้าม หากมีการประกาศคลาสที่เป็นนามธรรม ก็อาจจะไม่มีวิธีที่เป็นนามธรรม วิธีการที่เพียงกำหนดลายเซ็นและไม่มีการดำเนินการเรียกว่านามธรรม การใช้งานจริงของมันถูกปล่อยให้เป็นคลาสย่อยซึ่งขยายคลาสนามธรรม วัตถุไม่สามารถใช้วิธีนามธรรมได้ มีเพียงคลาสอื่นเท่านั้นที่สามารถขยายได้ เมื่อใดที่คุณควรใช้คลาสนามธรรม? คลาสนามธรรมช่วยให้คุณสามารถกำหนดพฤติกรรมเริ่มต้นบางอย่างได้ และให้คลาสย่อยจัดเตรียมพฤติกรรมเฉพาะเจาะจง ตัวอย่างเช่น: List(list) คืออินเทอร์เฟซ ในทางกลับกันAbstractListจะกำหนดลักษณะการทำงานพื้นฐานของ List ซึ่งสามารถใช้เป็นหรือปรับแต่งในคลาสย่อยได้ ตัวอย่างเช่น ในArrayList(list array) อินเทอร์เฟซคืออะไร? แนวคิดของอินเทอร์เฟซเป็นคลาสนามธรรม แต่อินเทอร์เฟซ (กำหนดโดยคำหลักinterface) ก้าวไปอีกขั้นหนึ่ง มันป้องกันการนำวิธีการหรือฟังก์ชันไปใช้เลย คุณสามารถประกาศได้เฉพาะเมธอดหรือฟังก์ชันเท่านั้น แต่ไม่สามารถจัดเตรียมการนำไปปฏิบัติได้ คลาสที่ใช้อินเทอร์เฟซจะต้องดูแลการใช้งานจริง อินเทอร์เฟซมีประโยชน์มากและใช้กันอย่างแพร่หลายใน OOP เนื่องจากพวกเขาแบ่งปันอินเทอร์เฟซและการใช้งานร่วมกัน พวกเขาจึงมีข้อดีหลายประการในการใช้งาน:
  1. มรดกหลายรายการ
  2. ข้อต่อหลวม . มีนามธรรมของการดำเนินการ เช่น การแบ่งชั้น และการนำไปใช้อย่างเป็นรูปธรรมสามารถเป็นอะไรก็ได้: JDBC, JPA, JTA เป็นต้น
  3. โปรแกรมอินเทอร์เฟซไม่ได้ถูกนำมาใช้
  4. Dynamic Binding Polymorphism : ส่วนต่อประสานการเขียนโปรแกรมของอ็อบเจ็กต์ถูกเปิดเผยโดยไม่เปิดเผยการใช้งานจริง
  5. ระดับนามธรรมการแยกฟังก์ชันการทำงาน
ความแตกต่างระหว่างอินเทอร์เฟซและคลาสนามธรรม
  • อินเทอร์เฟซคือความสัมพันธ์ตามสัญญากับคลาสที่ใช้อินเทอร์เฟซนี้ โดยระบุว่าการใช้งานเกิดขึ้นในลักษณะที่กำหนดโดยอินเทอร์เฟซ นี่คือเชลล์ว่างพร้อมวิธีการประกาศ
  • คลาสนามธรรมกำหนดพฤติกรรมทั่วไปบางอย่างและขอให้คลาสย่อยกำหนดพฤติกรรมที่ผิดปกติหรือเฉพาะเจาะจงสำหรับคลาสของพวกเขา
  • วิธีการและสมาชิกของคลาสนามธรรมสามารถกำหนดได้ด้วยตัวแก้ไขการเข้าถึงใดๆ ในทางกลับกัน วิธีการอินเทอร์เฟซทั้งหมดจะต้องเป็นแบบสาธารณะ
  • เมื่อสืบทอดคลาสนามธรรม คลาสสืบทอดจะต้องกำหนดวิธีนามธรรม ในขณะที่อินเทอร์เฟซสามารถสืบทอดอินเทอร์เฟซอื่นโดยไม่จำเป็นต้องกำหนดวิธีการของมัน
  • คลาสสืบทอดสามารถขยายคลาสนามธรรมได้เพียงคลาสเดียว แต่อินเทอร์เฟซสามารถขยายได้หรือคลาสสามารถใช้อินเทอร์เฟซอื่น ๆ ได้มากมาย
  • คลาสสืบทอดสามารถกำหนดวิธีการเชิงนามธรรมด้วยตัวแก้ไขการเข้าถึงที่จำกัดเหมือนกันหรือน้อยกว่า แต่คลาสที่ใช้อินเทอร์เฟซจะต้องกำหนดวิธีการที่มีระดับการมองเห็นเท่ากัน
  • อินเทอร์เฟซไม่มีตัวสร้าง ในขณะที่คลาสนามธรรมมี
  • ตัวแปรที่ประกาศในอินเทอร์เฟซ Java ถือเป็นที่สิ้นสุดตามค่าเริ่มต้น คลาสนามธรรมสามารถมีตัวแปรที่ยังไม่สิ้นสุด
  • สมาชิกทั้งหมดของอินเทอร์เฟซ Java คือpublic. สมาชิกของคลาสนามธรรมสามารถเป็นได้publicฯลฯprotected

องค์ประกอบ

การใช้รหัสซ้ำสามารถทำได้โดยใช้ทั้งการสืบทอดและองค์ประกอบ แต่การใช้องค์ประกอบจะให้ระดับของการห่อหุ้มที่สูงกว่าการสืบทอด เนื่องจากการเปลี่ยนแปลงคลาสส่วนหลังไม่จำเป็นต้องส่งผลกระทบต่อโค้ดที่เป็นของคลาสส่วนหน้า องค์ประกอบเป็นเทคนิคการออกแบบที่ใช้ความสัมพันธ์แบบ "has-a" (มี, รวม) ในชั้นเรียน ทั้งการสืบทอด Java และองค์ประกอบของอ็อบเจ็กต์สามารถใช้เพื่อนำโค้ดกลับมาใช้ใหม่ได้ สาระสำคัญของการจัดองค์ประกอบคือการแสดงความสัมพันธ์ "มี" ระหว่างวัตถุต่างๆ คิดถึงเก้าอี้.. เก้าอี้ก็มีที่นั่ง เก้าอี้มีพนักพิง เก้าอี้มีจำนวนขาที่แน่นอน วลี “has a” บ่งบอกถึงความสัมพันธ์ที่เก้าอี้มีหรืออย่างน้อยก็ใช้วัตถุอื่น นี่คือความสัมพันธ์แบบ "มี-a" อย่างชัดเจน ซึ่งเป็นพื้นฐานขององค์ประกอบ ข้อดี:
  • การควบคุมการมองเห็น
  • สามารถเปลี่ยนการใช้งานได้ในขณะรันไทม์
  • การมีเพศสัมพันธ์แบบหลวม ๆ เนื่องจากคลาสอินเทอร์เฟซไม่ได้ขึ้นอยู่กับการใช้งาน
ความแตกต่างระหว่างองค์ประกอบและมรดก
เลขที่ องค์ประกอบ (มี / มี) มรดก (เป็น / เป็น)
1 รองรับความหลากหลายและการใช้โค้ดซ้ำ รองรับความหลากหลายและการใช้โค้ดซ้ำ
2 วัตถุรันไทม์ได้ถูกสร้างขึ้นแล้ว วัตถุถูกสร้างขึ้นแบบไดนามิกในเวลารวบรวม
3 สามารถเปลี่ยนการใช้งานได้ในขณะรันไทม์ การใช้งานสามารถเปลี่ยนแปลงได้ในเวลารวบรวม
4 คลาสย่อยไม่ขึ้นอยู่กับคลาสพาเรนต์ ซึ่งสนับสนุนการเชื่อมต่อแบบหลวม ๆ (โดยเฉพาะภายใต้การควบคุมอินเทอร์เฟซ) คลาสย่อยขึ้นอยู่กับการดำเนินการของคลาสพาเรนต์ ดังนั้นการเชื่อมโยงจึงถือว่าแข็งแกร่ง
5 การใช้: บ้านมีห้องน้ำ ผิดที่จะบอกว่าบ้านคือห้องน้ำ มรดกมีทิศทางเดียว: บ้านก็คืออาคาร แต่อาคารไม่ใช่บ้าน
หมายเหตุ:อย่าใช้การสืบทอดเพียงเพื่อให้แน่ใจว่าโค้ดถูกนำมาใช้ซ้ำ หากไม่มีความสัมพันธ์ “เป็น” (เป็น) องค์ประกอบจะถูกใช้เพื่อวัตถุประสงค์เหล่านี้ ความแตกต่างระหว่างองค์ประกอบและการรวมกลุ่มอยู่ที่ความสัมพันธ์ของวัตถุ การรวมกลุ่มคือความสัมพันธ์ที่คลาสหนึ่งเข้ากับคอลเล็กชันได้ มันเป็นส่วนหนึ่งของความสัมพันธ์ทั้งหมด โดยที่ส่วนนั้นสามารถดำรงอยู่ได้โดยไม่ต้องมีทั้งหมด ความสัมพันธ์ดังกล่าวอ่อนแอลงมาก ไม่มีการพึ่งพาแบบวนรอบ ตัวอย่างเช่น: คำสั่งซื้อและผลิตภัณฑ์ การเรียบเรียงคือความสัมพันธ์ที่คลาสหนึ่งเข้ากับคอลเลกชั่นได้ นี่เป็นส่วนหนึ่งของความสัมพันธ์ทั้งหมด ซึ่งส่วนหนึ่งไม่สามารถดำรงอยู่ได้หากไม่มีทั้งหมด หากทั้งหมดถูกทำลาย ส่วนประกอบทั้งหมดก็จะถูกทำลายไปด้วย มันเป็นความสัมพันธ์ที่แข็งแกร่งยิ่งขึ้น ตัวอย่างเช่น รูปหลายเหลี่ยมและจุดยอด ลำดับและส่วนประกอบ