โปรแกรม CS ของโรงเรียนของฉันหลีกเลี่ยงการกล่าวถึงการเขียนโปรแกรมเชิงวัตถุดังนั้นฉันจึงต้องอ่านด้วยตัวเองเพื่อเสริม - โดยเฉพาะการสร้างซอฟต์แวร์เชิงวัตถุโดย Bertrand Meyer
เมเยอร์ชี้ให้เห็นซ้ำ ๆ ว่าคลาสควรซ่อนข้อมูลเกี่ยวกับการนำไปปฏิบัติให้มากที่สุดเท่าที่จะทำได้ โดยเฉพาะเขาให้เหตุผลซ้ำ ๆ ว่าแอตทริบิวต์ (เช่นคุณสมบัติแบบคงที่และไม่คำนวณของคลาส) และรูทีน (คุณสมบัติของคลาสที่สอดคล้องกับการเรียกใช้ฟังก์ชัน / โพรซีเดอร์) ไม่สามารถแยกกันได้
ตัวอย่างเช่นถ้าคลาสPerson
มีคุณสมบัติage
เขายืนยันว่ามันเป็นไปไม่ได้ที่จะบอกจากสัญลักษณ์ไม่ว่าจะPerson.age
สอดคล้องภายในกับสิ่งที่ชอบreturn current_year - self.birth_date
หรือเรียบง่ายreturn self.age
ที่self.age
ได้รับการกำหนดเป็นแอตทริบิวต์คงที่ เรื่องนี้ทำให้รู้สึกถึงฉัน อย่างไรก็ตามเขายังคงเรียกร้องต่อไปนี้:
เอกสารไคลเอนต์มาตรฐานสำหรับคลาสที่เรียกว่ารูปแบบสั้น ๆ ของคลาสจะถูกคิดขึ้นใหม่เพื่อไม่ให้เปิดเผยว่าคุณลักษณะที่กำหนดเป็นคุณลักษณะหรือฟังก์ชัน (ในกรณีที่อาจเป็นได้)
กล่าวคือเขาอ้างว่าแม้แต่เอกสารสำหรับชั้นเรียนควรหลีกเลี่ยงการระบุว่า "ผู้เอา" ทำการคำนวณใด ๆ
นี่ฉันไม่ทำตาม เอกสารไม่ใช่ที่เดียวที่ควรแจ้งให้ผู้ใช้ทราบถึงความแตกต่างนี้หรือไม่ ถ้าฉันต้องออกแบบฐานข้อมูลที่เต็มไปด้วยPerson
วัตถุมันจะไม่สำคัญที่จะรู้ว่าPerson.age
การโทรที่มีราคาแพงหรือไม่ดังนั้นฉันจึงสามารถตัดสินใจได้ว่าจะใช้แคชบางประเภทหรือไม่ ฉันเข้าใจผิดในสิ่งที่เขาพูดหรือเขาเป็นเพียงตัวอย่างที่ยอดเยี่ยมที่สุดของปรัชญาการออกแบบ OOP หรือไม่?