ความแตกต่างคือระหว่างอะไรบางสิ่งบางอย่างและวิธีการสิ่งที่จะทำงาน
มีหลายภาษาที่พยายามทำให้ทั้งสองภาษามารวมกัน แต่พวกมันค่อนข้างชัดเจน
ถ้าเป็นอย่างไรและอะไรคือ ...
หากทุกอย่างสืบทอดมาจากobject
นั้นผลประโยชน์บางอย่างที่เกิดขึ้นเช่น: ตัวแปรของวัตถุใด ๆ สามารถเก็บค่าใด ๆ ที่เคย แต่นั่นก็คือการถูทุกอย่างจะต้องประพฤติ ( อย่างไร ) เหมือนobject
และดูเหมือน ( อะไร ) object
และ
แต่:
- เกิดอะไรขึ้นถ้าวัตถุของคุณไม่มีคำจำกัดความที่มีความหมายของความเท่าเทียมกัน
- เกิดอะไรขึ้นถ้ามันไม่มีแฮชที่สื่อความหมาย?
- ถ้าวัตถุของคุณไม่สามารถโคลนได้ แต่วัตถุสามารถเป็นได้
ทั้งobject
ประเภทกลายเป็นไร้ประโยชน์เป็นหลัก - เนื่องจากวัตถุที่ให้ความธรรมดาในทุกกรณีที่เป็นไปได้ หรือจะมีวัตถุที่มีคำจำกัดความแตกหัก / รองเท้า - เขา / ไร้สาระของคุณสมบัติสากลบางอย่างที่สันนิษฐานว่าพบobject
ซึ่งพิสูจน์พฤติกรรมเกือบสากลยกเว้นสำหรับ gotchas จำนวนมาก
หากมีข้อผูกมัดอย่างไรบ้าง
อีกวิธีหนึ่งคุณสามารถเก็บอะไรและวิธีแยก จากนั้นหลายประเภทที่แตกต่างกัน (มีอะไรที่เหมือนกันในทุกสิ่ง ) สามารถประพฤติในทางเดียวกันเท่าที่เห็นจากผู้ร่วมงานว่า ในแง่นี้ความคิดของนั้นIterator
ไม่ได้เป็นเฉพาะสิ่งที่แต่วิธีการ โดยเฉพาะวิธีการทำคุณโต้ตอบกับสิ่งที่คุณยังไม่ทราบว่าสิ่งที่คุณกำลังมีปฏิสัมพันธ์กับ
Java (และที่คล้ายกัน) อนุญาตวิธีการนี้โดยใช้อินเตอร์เฟส อินเทอร์เฟซในเรื่องนี้อธิบายวิธีการสื่อสารและโดยปริยายโปรโตคอลการสื่อสารและการกระทำที่ตามมา สิ่งใดก็ตามที่ประกาศว่าตัวเองเป็นของวิธีการที่ระบุระบุว่ามันสนับสนุนการสื่อสารที่เกี่ยวข้องและการกระทำที่ระบุไว้โดยโปรโตคอล นี้จะช่วยให้ผู้ร่วมงานใด ๆ ที่จะพึ่งพาวิธีและไม่ได้รับจมลงโดยระบุว่าที่อะไร 's สามารถนำมาใช้
C ++ (และที่คล้ายกัน) อนุญาตวิธีการนี้โดยการพิมพ์เป็ด เท็มเพลตไม่สนใจว่าประเภทการทำงานร่วมกันประกาศว่ามันเป็นไปตามพฤติกรรมเพียงแค่ว่าในบริบทการรวบรวมที่กำหนดว่าวัตถุสามารถโต้ตอบกับในลักษณะที่เฉพาะเจาะจง สิ่งนี้อนุญาตให้พอยน์เตอร์ C ++ และโอเปอเรเตอร์การโอเวอร์เฮดของอ็อปเจ็กใช้รหัสเดียวกันได้ เพราะตรงตามรายการตรวจสอบเพื่อพิจารณาเทียบเท่า
- รองรับ * a, a->, ++ a และ a ++ -> iterator อินพุต / ฟอร์เวิร์ด
- รองรับ * a, a->, ++ a, a ++, --a และ a-- -> iterator แบบสองทิศทาง
ประเภทพื้นฐานไม่จำเป็นต้องวนซ้ำคอนเทนเนอร์มันอาจเป็นอะไรก็ได้ ยิ่งไปกว่านั้นมันช่วยให้ผู้ทำงานร่วมกันบางคนเป็นสามัญมากขึ้นจินตนาการถึงความต้องการฟังก์ชั่นเท่านั้นa++
ตัววนซ้ำสามารถตอบสนองได้ดังนั้นตัวชี้จึงสามารถเป็นจำนวนเต็มดังนั้นวัตถุใด ๆ ที่สามารถนำไปปฏิบัติoperator++
ได้
ภายใต้และสูงกว่าข้อกำหนด
ปัญหาเกี่ยวกับวิธีการทั้งสองอยู่ภายใต้และเกินสเปค
การใช้อินเทอร์เฟซต้องการวัตถุที่จะประกาศว่ามันสนับสนุนพฤติกรรมที่กำหนดซึ่งหมายความว่าผู้สร้างต้องซดสิ่งนั้นตั้งแต่ต้น สิ่งนี้ทำให้บางสิ่งที่ไม่ทำให้บาดแผลในขณะที่พวกเขาไม่ได้ประกาศ ก็หมายความว่าเคยสิ่งที่มีบรรพบุรุษร่วมกันอินเตอร์เฟซที่เป็นตัวแทนของวิธี object
นี้ไม่วงกลมกลับไปเริ่มต้นของปัญหา สิ่งนี้ทำให้ผู้ทำงานร่วมกันระบุความต้องการมากเกินไปในขณะเดียวกันก็ทำให้วัตถุบางอย่างไม่สามารถใช้งานได้เนื่องจากขาดการประกาศหรือถูกซ่อน gotchas เนื่องจากพฤติกรรมที่คาดหวังมีการกำหนดไว้ไม่ดี
ใช้แม่แบบต้องการให้ผลงานที่ทำงานร่วมกันกับที่ไม่รู้จักสมบูรณ์อะไรและผ่านการมีปฏิสัมพันธ์ของมันกำหนดวิธี ที่มีขอบเขตนี้จะทำให้การเขียนทำงานร่วมกันหนักขึ้นในขณะที่มันจะต้องวิเคราะห์อะไรสำหรับวิทยาการสื่อสาร (ฟังก์ชั่น / เขต / ฯลฯ ) ขณะที่หลีกเลี่ยงข้อผิดพลาดการรวบรวมหรือที่จุดน้อยวิธีการที่กำหนดสิ่งที่ไม่ตรงกับความต้องการของสำหรับวิธี นี้จะช่วยให้ผู้ทำงานร่วมกันที่จะต้องน้อยที่สุดจากการใดก็ตามสิ่งที่ช่วยให้ช่วงกว้างของสิ่งที่เป็นที่จะใช้ น่าเสียดายที่นี่มีข้อเสียของการอนุญาตการใช้วัตถุที่ไร้สาระซึ่งทางเทคนิคให้การสื่อสารพื้นฐานสำหรับสิ่งที่กำหนดอย่างไรแต่ไม่ปฏิบัติตามโปรโตคอลโดยนัยทำให้สิ่งเลวร้ายทุกประเภทเกิดขึ้น
iterators
ในกรณีนี้Iterator
จะเป็นวิธีย่อสำหรับคำอธิบายของการโต้ตอบ สิ่งใดที่ตรงกับคำอธิบายนั้นเป็นคำจำกัดความIterator
และ รู้วิธีช่วยให้เราสามารถเขียนขั้นตอนวิธีการทั่วไปและมีรายชื่อของ ' วิธี ' s รับเฉพาะสิ่งที่ว่าจะต้องมีการระบุไว้ในการที่จะทำให้การทำงานของอัลกอริทึม รายการนั่นคือฟังก์ชัน / properties / etc การใช้งานของพวกเขาคำนึงถึงเฉพาะสิ่งที่ถูกจัดการโดยอัลกอริทึม