15
ฉันไม่เข้าใจข้อโต้แย้งกับการใช้งานเกินพิกัด [ปิด]
ฉันเพิ่งอ่านหนึ่งในบทความของ Joelที่เขาพูดว่า: โดยทั่วไปฉันต้องยอมรับว่าฉันกลัวคุณสมบัติภาษาเล็กน้อยที่ซ่อนสิ่งต่างๆ เมื่อคุณเห็นรหัส i = j * 5; …อย่างน้อยคุณรู้ไหมว่า j นั้นถูกคูณด้วยห้าและผลลัพธ์ที่เก็บไว้ใน i แต่ถ้าคุณเห็นตัวอย่างรหัสเดียวกันใน C ++ คุณจะไม่รู้อะไรเลย ไม่มีอะไร วิธีเดียวที่จะรู้ว่าสิ่งที่เกิดขึ้นจริงใน C ++ คือการค้นหาประเภทของฉันและ j คืออะไรบางอย่างที่อาจถูกประกาศในที่อื่นทั้งหมด นั่นเป็นเพราะ j อาจเป็นประเภทที่มีการoperator*ใช้งานมากเกินไปและจะทำสิ่งที่มีไหวพริบมากเมื่อคุณพยายามคูณมัน (เน้นที่เหมือง) กลัวความสามารถทางภาษาที่ซ่อนสิ่งต่าง ๆ หรือไม่? คุณจะกลัวสิ่งนั้นได้อย่างไร การซ่อนสิ่งต่าง ๆ (หรือที่เรียกว่านามธรรม ) เป็นหนึ่งในแนวคิดหลักของการเขียนโปรแกรมเชิงวัตถุหรือไม่? ทุกครั้งที่คุณเรียกใช้เมธอดa.foo(b)คุณจะไม่มีความคิดว่าจะทำอะไร คุณต้องค้นหาว่าประเภทใดaและbเป็นอะไรบางอย่างที่อาจถูกประกาศในที่อื่นทั้งหมด ดังนั้นเราควรทำอย่างไรกับการเขียนโปรแกรมเชิงวัตถุเพราะมันซ่อนสิ่งต่าง ๆ จากโปรแกรมเมอร์มากเกินไป? และj * 5แตกต่างจากj.multiply(5)ที่คุณอาจต้องเขียนในภาษาที่ไม่รองรับการบรรทุกเกินพิกัดได้อย่างไร อีกครั้งคุณจะต้องค้นหาประเภทของjและมองเข้าไปในmultiplyวิธีการเพราะแท้จริงและดูเถิดjอาจเป็นประเภทที่มีmultiplyวิธีการที่ทำสิ่งที่มีไหวพริบมาก "Muahaha ฉันเป็นนักเขียนโปรแกรมที่ชั่วร้ายที่ตั้งชื่อวิธีการmultiplyแต่สิ่งที่จริง ๆ แล้วมันคือความคลุมเครือและไม่เข้าใจสัญชาตญาณโดยสิ้นเชิง …