ลุงบ๊อบหมายความว่าอะไรโดย 'ชื่อวลีคำนาม'?


14

ฉันอ่านรหัสสะอาดโดยลุงบ๊อบ เนื่องจากฉันไม่ใช่เจ้าของภาษาฉันจึงไม่เข้าใจข้อความต่อไปนี้:

คลาสและวัตถุที่ควรจะมีคำนามหรือนามวลีชื่อเช่น Customer, WikiPage, และAccount AddressParserคำหลีกเลี่ยงชอบ Manager, Processor, DataหรือInfoในชื่อของชั้นเรียน ชื่อคลาสไม่ควรเป็นคำกริยา

ที่ผมรู้ว่าไม่มีใครManager, Processor, DataและInfoเป็นคำกริยาไม่ได้หรือไม่ อะไรคือจุดที่เขาต้องการเน้น


บางทีลุงบ็อบกำลังใช้ความคิดสงบในการยกย่องคุณธรรมของทรัพยากรที่เป็นวัตถุ

คำตอบ:


21

จุดสามจุดแยก:

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

  • คำบางคำควรหลีกเลี่ยง Managerบ่งบอกถึงความเป็นไปได้ระดับพระเจ้า InfoและDataอาจบ่งบอกถึงที่เก็บข้อมูลจำลอง คำเช่นนี้อาจบ่งบอกถึงการสร้างแบบจำลองที่ไม่ดีของพื้นที่ปัญหา

  • คำกริยาไม่ควรเป็นชื่อคลาส ดูจุดแรก - สิ่งที่เรียนรูปแบบวิธีการดำเนินการรูปแบบ


1
คำเช่นนี้อาจบ่งบอกถึงการสร้างแบบจำลองที่ไม่ดีของพื้นที่ปัญหา - อย่างใดอย่างหนึ่งอาจคิดว่าพื้นที่ปัญหาเป็นแบบอย่างไม่ดีหรือไม่เป็นอิสระจากชื่อที่เลือก ชื่อที่ดีไม่ได้ช่วยการออกแบบที่แย่ และการออกแบบที่ดีนั้นได้รับความเสียหายเพียงเล็กน้อยจากชื่อที่ไม่ดี
Ingo

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

หากโครงการของคุณมีคลาสที่คุณควรพิจารณาโทร "ผู้จัดการ" หรือ "ข้อมูล" หรือ "ข้อมูล" ก็น่าจะมีคลาสดังกล่าวโหลซึ่งหมายความว่าคุณจะไม่ใช้ชื่อเหล่านี้ คุณจะมี ThisManager และ ThatManager และ AnotherManger และอื่น ๆ
gnasher729

เขาบอกว่าคำกริยาไม่ควรอยู่ในชื่อคลาส แต่ฉันแค่อ่านการเพิ่มบริบทที่มีความหมายและในตัวอย่างของเขาในหน้า 29 เขาตั้งชื่อคลาส GuessStatisticMessage ตอนนี้ฉันสับสนกับกฎเพราะฉันตีความการใช้ Guess เป็นคำกริยาเมื่อเทียบกับคำนาม dictionary.com/browse/guess?s=t
Devin Gleason Lambert

2
@DevinGleasonLambert แต่ก็ไม่เดา มันเป็นข้อความสถิติเดา ข้อความเป็นคำนาม สถิติการเดาเพียงอธิบายประเภทของข้อความว่าเป็น - หนึ่งที่ข้อความเกี่ยวกับสถิติการเดา
Thomas Owens

7

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

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


5
น่าเสียดายที่การคิดแบบนี้สามารถนำไปสู่การออกแบบที่ผิด หนึ่งในตัวอย่างสำคัญคือตัวอย่างเบื้องต้นแบบคลาสสิกของบัญชีธนาคาร ในตำรา OO เกือบทั้งหมดAccountเป็นวัตถุbalanceเป็นเขตข้อมูลและtransferเป็นวิธีการ แต่การออกแบบที่ถูกต้องจะเป็น: Transferเป็นวัตถุaccountเป็นสนามและbalanceเป็นวิธีการ นั่นคือวิธีการนำระบบธนาคารมาใช้จริงและวิธีการทำงานของธนาคารก่อนคอมพิวเตอร์
Jörg W Mittag

@ JörgWMittag: เรื่องเตือนนั้นคุ้มค่าที่จะโพสต์เป็นคำตอบ สิ่งเหล่านี้เป็นแนวทางทั่วไปและในบางกรณีอาจนำไปสู่การสลายตัวที่ไม่ดี
smci
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.