การส่งข้อความเป็นวิธีที่แตกต่างในการจัดการความต้องการในรหัส OO สำหรับวัตถุหนึ่งเพื่อรับวัตถุอื่น (หรืออาจเป็นของตัวเอง) เพื่อทำบางสิ่งบางอย่าง
ในภาษาที่ทันสมัยที่สุดที่สืบทอดมาจากวิธี C ++ เราทำเช่นนั้นด้วยวิธีการโทร ในกรณีนี้อ็อบเจกต์ที่เรียกว่า (ผ่านการกำหนดคลาส) จะวางรายการใหญ่ ๆ ว่าเมธอดใดที่เรียกว่ามันยอมรับและจากนั้นตัวเข้ารหัสของออบเจ็กต์การเรียกก็เพียงแค่เขียนการเรียก:
public void doSomething ( String input )
...
other_object.dosomething ( local )
สำหรับภาษาที่พิมพ์แบบคงที่แล้วคอมไพเลอร์สามารถตรวจสอบประเภทของสิ่งที่ถูกเรียกและยืนยันว่าวิธีการได้รับการประกาศ สำหรับภาษาที่พิมพ์แบบไดนามิกนั้นจะถูกดำเนินการตอนรันไทม์
แต่ในสาระสำคัญสิ่งที่เกิดขึ้นคือชุดของตัวแปรจะถูกส่งไปยังบล็อกรหัสเฉพาะ
ข้อความผ่าน
ในข้อความที่ผ่านภาษา (เช่น Objective C) แทนที่จะเป็นวิธีการมีผู้รับ แต่วิธีการกำหนดและเรียกพวกเขากว้างเหมือนกันมาก - ความแตกต่างคือวิธีการจัดการของมัน
ในข้อความที่ผ่านภาษาคอมไพเลอร์อาจตรวจสอบว่าผู้รับที่คุณเรียกว่ามีอยู่จริง แต่ที่แย่ที่สุดมันจะปรากฏขึ้นเพื่อเตือนว่าไม่แน่ใจว่ามีอยู่หรือไม่ นี่เป็นเพราะเวลาทำงานสิ่งที่จะเกิดขึ้นคือบล็อกของรหัสบนวัตถุที่รับจะถูกเรียกว่าผ่านทั้งชุดของตัวแปรและลายเซ็นของผู้รับที่คุณต้องการโทร บล็อกรหัสนั้นจะมองหาผู้รับและเรียกมันว่า อย่างไรก็ตามหากผู้รับไม่มีอยู่รหัสก็จะคืนค่าเริ่มต้น
ด้วยเหตุนี้หนึ่งในสิ่งประหลาดที่พบเมื่อย้ายจาก C ++ / Java -> Objective C คือการเข้าใจว่าคุณสามารถ "เรียกใช้เมธอด" บนวัตถุที่ไม่ได้ประกาศในเวลาคอมไพล์และไม่ได้มีอยู่บน ชนิดรันไทม์ ... และการโทรจะไม่ส่งผลให้เกิดข้อยกเว้นที่ถูกส่งออกไป แต่ในความเป็นจริงแล้วผลลัพธ์จะถูกส่งคืน
ข้อดีของวิธีนี้คือทำให้คลาสย่อยแบนราบและหลีกเลี่ยงความต้องการส่วนใหญ่สำหรับอินเตอร์เฟส / การสืบทอดหลายประเภท / เป็ด นอกจากนี้ยังอนุญาตให้วัตถุกำหนดพฤติกรรมเริ่มต้นเมื่อถูกขอให้ทำบางสิ่งที่ไม่มีผู้รับ (โดยทั่วไป "ถ้าฉันไม่ทำส่งคำขอไปยังวัตถุอื่นนี้") นอกจากนี้ยังสามารถลดความซับซ้อนของการเชื่อมโยงไปยังการเรียกกลับ (เช่นสำหรับองค์ประกอบ UI และเหตุการณ์ที่กำหนดเวลา) โดยเฉพาะอย่างยิ่งกับภาษาที่พิมพ์แบบคงที่เช่น Java (ดังนั้นคุณสามารถให้ปุ่มเรียกผู้รับ "runTest" แทนการเรียก "actionPerformed" "RunTestButtonListener" ซึ่งจะโทรหาคุณ)
อย่างไรก็ตามดูเหมือนว่าจะมีค่าใช้จ่ายที่จำเป็นสำหรับการตรวจสอบเพิ่มเติมโดยผู้พัฒนาว่าการโทรที่พวกเขาคิดว่าพวกเขากำลังทำอยู่บนวัตถุที่ถูกต้องด้วยประเภทที่ถูกต้องและผ่านพารามิเตอร์ที่เหมาะสมในลำดับที่ถูกต้องเพราะคอมไพเลอร์อาจไม่ เตือนคุณและมันจะทำงานได้อย่างสมบูรณ์แบบที่รันไทม์ (เพิ่งส่งคืนการตอบกลับเริ่มต้น) นอกจากนี้ยังมีเนื้อหาที่ได้รับผลกระทบจากการค้นหาพิเศษและการส่งผ่านพารามิเตอร์
วันนี้ภาษาที่พิมพ์แบบไดนามิกสามารถให้ประโยชน์มากมายกับข้อความที่ส่งผ่าน OO โดยมีปัญหาน้อยลง