ความแตกต่างใน OOP คืออะไร การเขียนโปรแกรมเชิงวัตถุ (OOP): ความหลากหลาย

12.01.2024 เครื่องเสียง

ตกลง. ความหลากหลายไม่ควรถูกพิจารณาแยกจากแนวคิดพื้นฐานอื่นๆ - นามธรรม การห่อหุ้ม และการสืบทอด วัตถุและสิ่งที่คล้ายกันนั้นแนบมาจากสัจพจน์ (แม้ว่าสิ่งเหล่านี้จะเป็นสัจพจน์ด้วยก็ตาม)

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

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

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

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

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

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

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

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

OOP พยายาม "ทำลาย" แนวคิดการเขียนโปรแกรมโบราณนี้ถึงสองครั้ง แต่ "ห่วง" ของการเข้ารหัสข้อมูลและอัลกอริธึมรูปแบบคลาสสิกยังคงแข็งแกร่ง

ระดับและคุณวุฒิ

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

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

รูปแบบของ OOP polymorphism แนวคิดเกี่ยวกับการห่อหุ้มโค้ดและการสืบทอดคุณสมบัติ (วิธีการ) อยู่ในขอบเขตของการเขียนโปรแกรม แต่ไม่ใช่ในขอบเขตของปัญหาที่กำลังแก้ไข

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

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

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

ความแตกต่างและ OOP

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

  • การห่อหุ้ม;
  • ความหลากหลาย;
  • มรดก

บางคนยังเสริมว่า: นามธรรมและส่วนใหญ่มักจะใช้สิ่งนี้และเป็นประเด็นหลักจริงๆ เป็นรากฐานในการอธิบายสาระสำคัญของ OOP

ดังนั้น ความคิดเห็นเกี่ยวกับ OOP มีความหลากหลาย: พวกเขาอธิบายสิ่งหนึ่ง ได้รับการออกแบบที่แตกต่างกัน หรือในทางกลับกัน พวกเขาอธิบายสิ่งต่าง ๆ แต่ขึ้นอยู่กับตำแหน่งที่เหมือนกันสี่ตำแหน่ง

หลักการประชาธิปไตยไม่ใช่ลักษณะของสาขาเทคโนโลยีสารสนเทศ แต่ควรได้รับเนื่องจาก: การผสมผสานและการอยู่ร่วมกันของความคิดเห็นมากมายเกี่ยวกับสิ่งเดียวกันคือความหลากหลายที่แท้จริงในการดำเนินการ

คำจำกัดความยอดนิยมของความหลากหลาย

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

  1. ความหลากหลายในการเขียนโปรแกรมคือความสามารถในการจัดเตรียมอินเทอร์เฟซเดียวกันสำหรับรูปแบบพื้นฐานที่แตกต่างกัน (ประเภทข้อมูล)
  2. Polymorphism คือความสามารถของวัตถุในการนำไปใช้งานที่แตกต่างกัน
  3. Polymorphism คือความสามารถของฟังก์ชัน...
  4. คลาสสิก (จากผู้สร้าง C/C++): “อินเทอร์เฟซเดียว - การใช้งานมากมาย”
  5. ความหลากหลายแบบพาราเมตริกหมายถึง...
  6. Polymorphism เป็นบทบัญญัติของทฤษฎีประเภท...
  7. สิ่งที่เป็นนามธรรมเป็นไปไม่ได้หากไม่มีการห่อหุ้มและการสืบทอด เช่นเดียวกับความหลากหลายที่เป็นไปไม่ได้หากไม่มีการสืบทอด...

เราตกลงกันว่าทั้งหมดนี้หมายถึงสิ่งเดียวกัน แต่รูปแบบการแสดงออกของความคิด แก่นแท้ และเนื้อหาไม่เหมือนกัน แต่ยังมีบางอย่างที่เหมือนกัน

เอนทิตี: นักพัฒนา - ลูกค้า

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

วงจรของกระบวนการแก้ไขปัญหานี้แสดงให้เห็นว่ามีการรวมเอนทิตีที่แตกต่างกันโดยสิ้นเชิงสองรายการไว้ที่นี่:

  • คอมพิวเตอร์ไม่สามารถแก้ไขปัญหาได้เอง
  • จำเป็นต้องมีโปรแกรมเพื่อให้คอมพิวเตอร์สามารถ "เข้าใจ" และ "แก้ไข" ปัญหาได้

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

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

Windows ปุ่ม และวัตถุอื่นๆ

ประวัติความเป็นมาของเทคโนโลยี Air Art, Object Magazine, Turbo Vision, Graph Vision นั้นเป็นประวัติศาสตร์ไปแล้ว มีคนไม่กี่คนที่จำการใช้งาน OOP เหล่านี้ได้จริง ๆ แล้วพวกมันไม่ได้ใช้และถูกลืม แต่อินเทอร์เฟซหน้าต่าง Windows นั้นคุ้นเคยกับผู้ใช้หลายล้านคนและอ็อบเจ็กต์ใน PHP, JavaScript และภาษาเทคโนโลยีอินเทอร์เน็ตอื่น ๆ ถูกใช้โดยนักพัฒนาโค้ดหลายแสนคน และผู้เยี่ยมชมแหล่งข้อมูลบนเว็บหลายล้านคนก็รู้เกี่ยวกับสิ่งเหล่านี้

นี่อาจเป็นวิธีเดียวที่ถูกต้องที่ OOP ควรพัฒนา: การห่อหุ้ม, การสืบทอด, ความหลากหลายสำหรับนักพัฒนา แต่ไม่ใช่สำหรับผู้ใช้ เป็นลักษณะเฉพาะที่ตำแหน่งนี้เป็นตำแหน่งหลักในการพัฒนาการออกแบบภาพ (อินเทอร์เฟซ) ของซอฟต์แวร์ Windows และแอปพลิเคชันเช่น Turbo Vision และ Graph Vision

แนวคิดเบื้องหลังผลิตภัณฑ์เช่น Air Art Technology และ Object Magazine นั้นแตกต่างอย่างมีนัยสำคัญ ในที่นี้ วัตถุนามธรรมเป็นบรรพบุรุษแรกของโครงสร้างข้อมูล โดยห่อหุ้มโค้ดประมวลผลข้อมูลในระดับนามธรรม วัตถุของหน้าต่าง ปุ่ม และองค์ประกอบการออกแบบภาพถือเป็นเรื่องรองที่นี่

ในเวอร์ชันแรก (Windows & ฯลฯ) กระบวนทัศน์ OOP: การห่อหุ้ม การสืบทอด ความหลากหลายถูกกำหนดในระดับบรรพบุรุษที่เป็นนามธรรม และการนำโค้ดไปใช้ถูกสร้างขึ้นในระดับของผู้สืบทอดเฉพาะแต่ละรายตามสาขาการสืบทอดตาม ถึงโครงสร้างและเนื้อหาที่ต้องการ

ในตัวเลือกที่สอง (Air Art Technology และ Object Magazine) ระดับของวัตถุนามธรรมมีความสำคัญ สิ่งที่ผู้สืบทอดคนใดคนหนึ่งจะมีนั้นไม่ใช่ประเด็น สิ่งสำคัญคือสาขาการสืบทอดนั้นตอบสนองความต้องการของผู้ปกครองทุกคนจนถึงรากเหง้าที่เป็นนามธรรม

วัตถุและระบบของวัตถุ: อัลกอริธึม

แนวคิดเชิงวัตถุในอุดมคติสามารถจัดการวัตถุและระบบของวัตถุเท่านั้น

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

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

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

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

วัตถุและระบบของวัตถุ: ปัญหาและแนวทางแก้ไข

คอมพิวเตอร์-โปรแกรมเมอร์-งาน ลิงค์กลางซ้ำซ้อน ตามหลักการแล้ว ควรมีเพียงสองวงจรที่ขึ้นต่อกันค่อนข้างมาก: (คอมพิวเตอร์ - โปรแกรมเมอร์) - งาน นั่นคือผู้ใช้ ลูกค้า หรือผู้เยี่ยมชมมีเครื่องมือในการแก้ปัญหาของตน ลูกค้าไม่สนใจว่าเครื่องมือจะถูกนำไปใช้อย่างไร

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

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

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

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

การเขียนโปรแกรมแบบดั้งเดิมและแบบออบเจ็กต์

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

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

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

รายการและคิวได้รับการเปลี่ยนแปลง แนวคิดขององค์ประกอบแรกและสุดท้ายของอาเรย์ปรากฏขึ้น ลูป "สำหรับแต่ละ" ปรากฏขึ้น และตัวเลือกการอ้างอิงสำหรับการตั้งชื่อ การใช้ และการดำเนินการเริ่มได้รับความนิยมมากขึ้นกว่าเดิม

จริงๆ แล้ว ความจริงที่ว่าตัวแปรสูญเสียใบหน้าที่ "ชัดเจน" ไปแล้ว (ประเภทของตัวแปรสามารถเปลี่ยนแปลงได้ตามต้องการ และไม่จำเป็นต้องอธิบายตัวแปรเลย) บอกว่าในความเป็นจริงแล้ว ตัวแปรคลาสสิกกลายเป็นวัตถุเมื่อนานมาแล้ว มุ่งเน้นและยอมรับหลักการพื้นฐานของ OOP: การห่อหุ้ม การสืบทอด ความหลากหลายเป็นแนวคิดที่มีความสำคัญอย่างยิ่ง

มันขึ้นอยู่กับอะไร: วัตถุหรือระบบ?

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

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

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

  • เกี่ยวกับตัวเลือกในการแก้ปัญหา (เช่น เมนู)
  • เกี่ยวกับเงื่อนไขเริ่มต้น (การประยุกต์ใช้ปัญหาในเงื่อนไขข้อมูลต่าง ๆ )
  • เกี่ยวกับโหมดการทำงาน (การทดสอบ การกำหนดค่า การทำงาน)

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

ประวัติความเป็นมาของกระบวนการแก้ไขปัญหา

หลักการที่สำคัญที่สุดของ OOP: polymorphism และ abstraction - จัดลำดับความสำคัญของวัตถุเริ่มต้นเป็นระบบของวัตถุ ในการโต้วาทีว่าอะไรควรเกิดก่อน ไก่หรือไข่ ที่นี่ไก่ชนะ

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

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

โปรแกรมเมอร์ใน OOP มีความสนใจน้อยที่สุดในแนวคิดของไฟล์ฐานข้อมูลอัลกอริธึม - นี่เป็นรายละเอียด ที่นี่โปรแกรมเมอร์คิดในวัตถุ แต่วัตถุมีอยู่ในเวลาและการเปลี่ยนแปลงในเส้นทางของการบรรลุเป้าหมายที่ต้องการ

ดังนั้นในตอนแรกวัตถุจึงเป็นระบบของวัตถุและตรรกะของระบบนี้ - มาตราส่วนเวลา: การเริ่มงาน การสร้างวัตถุแรก การป้อนหรือรวบรวมข้อมูล การสร้างวัตถุถัดไป แต่ไม่มีอะไรป้องกันวัตถุแรกจาก ดำเนินการแก้ไขปัญหาถัดไป

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

ตัวอย่างความหลากหลาย OOP จริง

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

ไลบรารี่ PHPOffice/PHPWord ได้รับการพัฒนาเมื่อไม่นานมานี้ แต่เพื่อที่จะใช้ความสามารถของมัน คุณมักจะต้องสร้างระบบออบเจ็กต์ของคุณเองเกือบทุกครั้ง ตัวอย่างเช่น ไฟล์ *.docx แบบธรรมดา:

เป็นไฟล์ zip ของไฟล์และโฟลเดอร์จำนวนมากในรูปแบบ Office Open XML (OpenXML, OOXML) แต่ละไฟล์ถูกเขียนด้วยแท็ก XML และเมื่อเพิ่ม เปลี่ยนแปลง และลบตัวอักษร คำ ตาราง รายการ และองค์ประกอบอื่น ๆ เนื้อหาของไฟล์จะเริ่มแสดงลำดับของแท็กที่ไม่ได้มีองค์ประกอบที่สมบูรณ์เสมอไป ซึ่งมักจะมีองค์ประกอบเดียว เขียนด้วยแท็กมากมาย

หากคุณจินตนาการว่าไฟล์นี้เป็นลำดับของแท็ก คุณจะได้ภาพที่น่าสนใจ:

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

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

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

รัฐพื้นที่ OOP

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

โดยทั่วไปแล้ว การเปลี่ยนจากการเขียนโปรแกรมแบบคลาสสิกไปเป็นการเขียนโปรแกรมเชิงวัตถุจะใช้เวลาสองถึงสามเดือน แต่ค่าใช้จ่ายก็คุ้มค่าเกินคุ้ม ศักยภาพของภาษาโปรแกรมสมัยใหม่ โดยเฉพาะ PHP และ JavaScript จะตอบสนองนักพัฒนาที่มีความซับซ้อนมากที่สุด

OOP สมัยใหม่ - ความหลากหลาย การสืบทอด และความสามารถในการสร้างคุณสมบัติของวัตถุ - สะดวกและใช้งานได้จริง ไวยากรณ์ภาษาและเครื่องมือเสริมช่วยให้มั่นใจในการใช้งานและประสิทธิภาพของโค้ด

มุมมองต่อแนวคิดวัตถุ

ค่อนข้างยากที่จะบอกว่าการเขียนโปรแกรมแบบคลาสสิกจะอยู่ได้นานแค่ไหน และ OOP จะพัฒนาอย่างไร เห็นได้ชัดว่านักพัฒนาเครื่องมือไม่ได้วางแผนที่จะพิจารณาบริบทของผู้บริโภค (ผู้ใช้ ลูกค้า)

เครื่องมือ OOP - ความหลากหลาย การสืบทอด การห่อหุ้ม และนามธรรม - มุ่งเน้นที่นักพัฒนา

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

การเขียนโปรแกรมเชิงวัตถุ(OOP) เป็นแนวทางในการสร้างโปรแกรมโดยอาศัยคลาสและอ็อบเจ็กต์ที่มีปฏิสัมพันธ์ระหว่างกัน

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

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

มรดกขยายออกไป

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

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

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

ลองพิจารณาตัวอย่างคำอธิบายของคลาส java "นักเรียน Student ซึ่งมีชื่อ นามสกุล อายุ และหมายเลขกลุ่ม เราจะสร้างคลาสนักเรียนตามซูเปอร์คลาสของผู้ใช้ User ซึ่งมีอยู่แล้ว ชื่อ นามสกุล และอายุที่กำหนด:

ผู้ใช้คลาสสาธารณะ ( int age; String firstName; String LastName; // Constructor ผู้ใช้สาธารณะ (int age, String firstName, String LastName) ( this.age = age; this.firstName = firstName; this.lastName = LastName; ) )

ตอนนี้เราสร้างคลาส Student แยกต่างหาก ซึ่งสืบทอดคุณสมบัติของคลาสซุปเปอร์ เมื่อสืบทอดคลาส คุณต้องแทนที่ Constructor ของคลาสพาเรนต์ด้วย:

นักเรียนคลาสสาธารณะขยายผู้ใช้ ( int group; // Constructor public Student(int age, String firstName, String LastName) ( super(age, firstName, LastName); ) boolean isMyGroup(int g) ( return g == group; ) )

คำสำคัญ ขยายแสดงว่าเรากำลังสืบทอดมาจากคลาส User

คีย์เวิร์ด ซุปเปอร์

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

มาดูกันว่ามันเกิดขึ้นได้อย่างไร มรดกในแง่ของการสร้างวัตถุ:

นักเรียน นักเรียน = นักเรียนใหม่(18, "Kisa", "Vorobyaninov", 221);

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

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

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

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

คลาส A ( int i; ) // สืบทอดจากคลาส A คลาส B ขยาย A ( int i; // ชื่อตัวแปรจับคู่และซ่อนตัวแปร i ในคลาส AB(int a, int b) ( super.i = a; // access เป็นตัวแปร i จากคลาส A i = b; // เข้าถึงตัวแปร i จากคลาส B ) void show() ( System.out.println("i จาก superclass is " + super.i); System.out.println(" i ในคลาสย่อยคือ " + i); ) ) คลาส MainActivity ( B subClass = new B(1, 2); subClass.show(); )

ด้วยเหตุนี้ เราควรเห็นในคอนโซล:

ฉันจากซูเปอร์คลาสคือ 1 i ในคลาสย่อยคือ 2

วิธีการแทนที่, แทนที่

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

หากคุณต้องการเข้าถึงเวอร์ชันของเมธอดที่ถูกแทนที่ซึ่งกำหนดไว้ในซูเปอร์คลาส คุณต้องใช้คีย์เวิร์ด สุด ๆ.

อย่าสับสนระหว่างการแทนที่กับการโอเวอร์โหลด การแทนที่วิธีการจะเกิดขึ้นก็ต่อเมื่อชื่อและประเภทของลายเซ็นของทั้งสองวิธีเหมือนกัน มิฉะนั้นทั้งสองวิธีก็จะโอเวอร์โหลด

คำอธิบายประกอบปรากฏใน Java SE5 @แทนที่;- หากคุณต้องการแทนที่เมธอด ให้ใช้ @Override และคอมไพเลอร์จะส่งข้อผิดพลาดหากคุณโอเวอร์โหลดโดยไม่ได้ตั้งใจแทนที่จะแทนที่มัน

ใน Java คุณสามารถสืบทอดจากคลาสเดียวเท่านั้น

การห่อหุ้ม

ในวิทยาการคอมพิวเตอร์ การห่อหุ้ม (ละติน: en capsula) คือการบรรจุภัณฑ์ข้อมูลและ/หรือฟังก์ชันไว้ในวัตถุเดียว

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

ตัวดัดแปลงการเข้าถึง

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

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

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

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

ตัวอย่างคำอธิบายหุ่นยนต์อย่างง่าย

หุ่นยนต์คลาสสาธารณะ ( private double x = 0; // พิกัด X ปัจจุบัน private double y = 0; // พิกัด Y ปัจจุบัน private double course = 0; // หลักสูตรปัจจุบัน (เป็นองศา) public double getX() ( return x; ) โมฆะสาธารณะ setX(double x) ( this.x = x; ) public double getY() ( return y; ) public void setY(double y) ( this.y = y; ) public double getCourse() ( return course; ) // การกำหนดหลักสูตร โมฆะสาธารณะ setCourse(หลักสูตรคู่) ( this.course = course; ) // การย้ายไปยังระยะทาง โมฆะสาธารณะไปข้างหน้า(ระยะทาง int) ( // การเข้าถึงฟิลด์วัตถุ X x = x + ระยะทาง * Math.cos ( course / 180 * Math.PI); // เข้าถึงฟิลด์อ็อบเจ็กต์ Y y = y + Distance * Math.sin(course / 180 * Math.PI ) // พิมพ์พิกัดหุ่นยนต์ public void printCoordinates() ( System.out .println(x + "," + y);

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

ในวิธีการต่างๆ ชุดเราส่งค่าผ่านพารามิเตอร์ที่เป็นทางการไปยังขั้นตอน ในโค้ดขั้นตอน เรากำหนดค่าให้กับตัวแปรอ็อบเจ็กต์/คลาสโดยใช้คีย์เวิร์ด นี้.

This.course = คอร์ส ...

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

ความแตกต่าง

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

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

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

// การกำหนดอาร์เรย์ของกราฟิกดั้งเดิม Square s = new Square ; บรรทัด l = บรรทัดใหม่; วงกลม c = วงกลมใหม่ ; สามเหลี่ยม t = สามเหลี่ยมใหม่; // เติมอาร์เรย์ทั้งหมดด้วยวัตถุที่เหมาะสม - - // วนซ้ำทุกเซลล์ของอาร์เรย์ สำหรับ (int i = 0; i< s.length; i++){ // вызов метода draw() в случае, если ячейка не пустая. if (s[i] != null) s.draw(); } for(int i = 0; i < l.length; i++){ if (l[i] != null) l.draw(); } for(int i = 0; i < c.length; i++){ if (c[i] != null) c.draw(); } for(int i = 0; i < t.length; i++){ if (t[i] != null) t.draw(); }

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

การใช้ความหลากหลายทำให้การใช้งานฟังก์ชันดังกล่าวง่ายขึ้นอย่างมาก ก่อนอื่น เรามาสร้างคลาสพาเรนต์ Shape ทั่วไปสำหรับคลาสทั้งหมดของเรากัน

รูปร่างคลาสสาธารณะ ( public void Draw() ( System.out.println("Stub"); ) )

หลังจากนี้ เราจะสร้างคลาสสืบทอดต่างๆ: Square, Line, Circle และ Triangle:

คลาสสาธารณะ Point ขยายรูปร่าง ( public void Draw() ( System.out.println("Square"); ) ) คลาสสาธารณะ Line ขยายรูปร่าง ( public void Draw() ( System.out.println("Line"); ) ) คลาสสาธารณะ Circle ขยายรูปร่าง ( public void Draw() ( System.out.println("Circle"); ) ) คลาสสาธารณะ Triangle ขยายรูปร่าง ( public void Draw() ( System.out.println("Triangle"); ) )

ในลูกหลานเราได้แทนที่วิธีการวาด เป็นผลให้เราได้รับลำดับชั้นของคลาสดังแสดงในรูป

ตอนนี้เรามาดูคุณสมบัติที่น่าทึ่งของความหลากหลาย:

// การกำหนดและเริ่มต้นอาร์เรย์รูปร่าง a = รูปร่างใหม่ (รูปร่างใหม่ (), สามเหลี่ยมใหม่ (), จัตุรัสใหม่ (), วงกลมใหม่ ()); // วนซ้ำองค์ประกอบอาร์เรย์ for(int i = 0; i< a.length; i++) { a[i].draw(); }

บรรทัดต่อไปนี้จะถูกพิมพ์ไปที่คอนโซล:

วงกลมสี่เหลี่ยมสามเหลี่ยมว่างเปล่า

ด้วยวิธีนี้ แต่ละคลาสลูกหลานจะเรียกวิธีการวาดของตัวเอง แทนที่จะเรียกวิธีการวาดจากคลาสรูปร่างหลัก

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

วิธีการโอเวอร์โหลด, โอเวอร์โหลด

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

โมฆะ println() // ไปที่บรรทัดใหม่ โมฆะ println(บูลีน x) // พิมพ์ค่าของตัวแปรบูลีน (จริงหรือเท็จ) โมฆะ println(สตริง x) // พิมพ์สตริง - ค่าของพารามิเตอร์ข้อความ

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

หุ้นขนาดใหญ่

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

ทุกอย่างเริ่มต้นอย่างไร?

พันธุศาสตร์เริ่มพัฒนาอย่างรวดเร็วในช่วงทศวรรษที่ 60 ของศตวรรษที่ผ่านมา ตอนนั้นเองที่เอนไซม์ในเจลเริ่มถูกนำมาใช้ซึ่งทำให้สามารถระบุความหลากหลายทางพันธุกรรมได้ วิธีนี้คืออะไร? ด้วยความช่วยเหลือของมัน โปรตีนจึงเคลื่อนที่ในสนามไฟฟ้า ซึ่งขึ้นอยู่กับขนาดของโปรตีนที่ถูกเคลื่อนย้าย โครงสร้างของมัน และประจุทั้งหมดในส่วนต่างๆ ของเจล หลังจากนี้ ขึ้นอยู่กับตำแหน่งและจำนวนจุดที่ปรากฏ สารที่ระบุจะถูกระบุ ในการประเมินความหลากหลายของโปรตีนในประชากร ควรตรวจดูประมาณ 20 ตำแหน่งขึ้นไป จากนั้น ใช้วิธีการทางคณิตศาสตร์เพื่อกำหนดจำนวนและอัตราส่วนของโฮโม- และเฮเทอโรไซโกต ตามการวิจัย ยีนบางตัวสามารถเป็น monomorphic ได้ ในขณะที่บางตัวอาจเป็น polymorphic ที่ผิดปกติ

ประเภทของความหลากหลาย

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

ความหลากหลายของยีนและโครโมโซม

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

พหุสัณฐานเฉพาะกาล

Transitional Polymorphism เกิดขึ้นเมื่ออัลลีลที่ครั้งหนึ่งเคยพบเห็นได้ทั่วไปถูกแทนที่ในประชากรกลุ่มหนึ่งด้วยอีกกลุ่มหนึ่งที่ทำให้พาหะของอัลลีลมีความสามารถในการปรับตัวมากขึ้น (เรียกอีกอย่างว่าอัลลีลหลายรูปแบบ) ด้วยความหลากหลายที่กำหนด จะมีการเปลี่ยนแปลงทิศทางในเปอร์เซ็นต์ของจีโนไทป์ เนื่องจากวิวัฒนาการเกิดขึ้นและพลวัตของมันดำเนินไป ปรากฏการณ์ของกลไกทางอุตสาหกรรมสามารถเป็นตัวอย่างที่ดีที่แสดงลักษณะของความหลากหลายในช่วงเปลี่ยนผ่าน สิ่งที่แสดงให้เห็นโดยผีเสื้อธรรมดา ๆ ซึ่งด้วยการพัฒนาของอุตสาหกรรมทำให้สีขาวของปีกของมันเปลี่ยนเป็นสีเข้ม ปรากฏการณ์นี้เริ่มถูกพบเห็นในอังกฤษ โดยที่ผีเสื้อมากกว่า 80 สายพันธุ์เปลี่ยนจากดอกสีครีมซีดไปเป็นดอกสีเข้ม ซึ่งพบเห็นครั้งแรกหลังปี 1848 ในแมนเชสเตอร์เนื่องจากการพัฒนาอย่างรวดเร็วของอุตสาหกรรม ในปี พ.ศ. 2438 ผีเสื้อกลางคืนมากกว่า 95% มีปีกสีเข้ม การเปลี่ยนแปลงดังกล่าวเกี่ยวข้องกับความจริงที่ว่าลำต้นของต้นไม้มีควันมากขึ้นและผีเสื้อสีอ่อนก็กลายเป็นเหยื่อของนักร้องหญิงอาชีพและนกโรบินได้ง่าย การเปลี่ยนแปลงเกิดขึ้นเนื่องจากอัลลีลเมลานิสติกกลายพันธุ์

ความหลากหลายที่สมดุล

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

ตัวอย่างของความหลากหลายที่สมดุล

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

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

ความสมดุลทางพันธุกรรม

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

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

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

การกลายพันธุ์แบบเฮเทอโรไซกัสและความหลากหลาย

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

กระบวนการวิวัฒนาการ

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

ยีนไฟบริโนเจน

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

ความแตกต่างคือความสามารถของสารที่มีองค์ประกอบเดียวกันที่จะดำรงอยู่ได้ขึ้นอยู่กับสภาวะภายนอกในรูปแบบผลึกหลายรูปแบบ (การดัดแปลงโพลีมอร์ฟิก) ที่มีโครงสร้างต่างกัน (สำหรับสารธรรมดาปรากฏการณ์นี้บางครั้งเรียกว่า allotropy)

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

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

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

เมื่อการดัดแปลงที่อุณหภูมิสูงถูกเปลี่ยนเป็นอุณหภูมิที่ต่ำกว่า โดยปกติแล้วรูปร่างภายนอกดั้งเดิมของผลึกจะยังคงอยู่ ในขณะที่โครงสร้างภายในของสารจะมีการเปลี่ยนแปลง การเก็บรักษารูปแบบภายนอกที่ไม่สอดคล้องกับโครงสร้างที่สร้างขึ้นใหม่ของโครงตาข่ายคริสตัลนี้เรียกว่าพารามอร์โฟซิส Paramorphoses เป็นที่รู้จักในธรรมชาติ β -ควอตซ์ (สมมาตรตรีโกณมิติ) ตาม α -ควอตซ์ (สมมาตรหกเหลี่ยม), แคลไซต์ CaCO 3 (สมมาตรตรีโกณมิติ) เหนืออาราโกไนต์ (สมมาตรออร์โธฮอมบิก) ฯลฯ

โดยไม่คำนึงถึงลักษณะของการเปลี่ยนแปลงโครงสร้างที่เกิดขึ้นระหว่างการเปลี่ยนแปลงแบบโพลีมอร์ฟิก มีสองประเภทที่แตกต่างกัน: การแปลงแบบ enantiotropic (ย้อนกลับได้) และการเปลี่ยนแปลงแบบ monotropic (ไม่สามารถย้อนกลับได้)

การเปลี่ยนแปลงแบบพลิกกลับได้ของการดัดแปลงหนึ่งไปเป็นอีกการเปลี่ยนแปลงหนึ่ง ดำเนินการที่ความดันคงที่และอุณหภูมิการเปลี่ยนแปลง (จุด) ที่แน่นอน ซึ่งการดัดแปลงเหล่านี้อยู่ในสภาวะสมดุล เช่น มีความเสถียรเท่ากัน เรียกว่า enantiotropic ซึ่งสามารถแสดงเป็นแผนผังได้ดังนี้:

α ↔ β↔ของเหลว

เหล่านั้น. การเปลี่ยนแปลง α → β คือ enantiotropic ตัวอย่างของการแปลงโพลีมอร์ฟิกแบบ enantiotropic คือการแปลงระหว่างรูปแบบโพลีมอร์ฟิกของ SiO 2 ˸

ความแตกต่าง--แนวคิดและประเภท การจำแนกประเภทและคุณสมบัติของหมวดหมู่ "Polymorphism" 2015, 2017-2018

  • - ความหลากหลายของบุคคล

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


  • - การก่อกวนสนับสนุนการอนุรักษ์ประเภทที่รุนแรงและการกำจัดประเภทกลาง นำไปสู่การอนุรักษ์และเพิ่มประสิทธิภาพของความหลากหลาย

  • - ความแตกต่างเฉพาะของมนุษยชาติ เชื้อชาติเป็นการแสดงออกของความหลากหลายทางพันธุกรรมของมนุษยชาติ ความสามัคคีของมนุษยชาติ

    ความแตกต่างภายในสายพันธุ์ของมนุษยชาติ: นับตั้งแต่การถือกำเนิดของ H. sapiens สังคมในมนุษย์ได้กลายเป็นแก่นแท้ของเขา และวิวัฒนาการทางชีววิทยาก็เปลี่ยนไป โดยแสดงให้เห็นอย่างชัดเจนในการเกิดขึ้นของความหลากหลายทางพันธุกรรมในวงกว้าง ความหลากหลายทางพันธุกรรมในระดับ... .