תכנות מונחה־עצמים#

ב־Perl קיימות שתי מערכות עצמים זו לצד זו: התחביר המודרני class/field/method שהוצג ב־5.38 (שם קוד Corinna), והמודל הקלאסי bless/@ISA שקדם לו בשלושה עשורים. pperl תומכת בשניהם, ושניהם מופיעים בקוד אמיתי שתקראו ותתחזקו.

הגרסה הקצרה:

  • עבור קוד חדש, השתמשו ב־class. התחביר מובנה בשפה, הבנאי נוצר עבורכם, השדות פרטיים באמת, ולירושה יחידה יש צורה הצהרתית נקייה.

  • עבור קוד מורשת, הבינו את bless, את @ISA, ואת המוסכמה $self = shift. תפגשו בהם בכל בסיס קוד שקדם ל־5.38, בכל הפצת CPAN מרכזית, ובחלק גדול מ־Perl עצמה.

  • Moose, Moo, Class::Accessor, Object::Pad הן מערכות אקולוגיות של CPAN שטשטשו את הפינות החדות של המודל הקלאסי בזמן שתכונת הליבה עדיין הייתה בעיצוב. הן פרק היסטורי; קוד חדש פונה במקום זאת אל class של הליבה.

עץ ההדרכה הזה מכסה את שתי המערכות מקצה לקצה. קראו את הפרקים לפי הסדר בקריאה ראשונה, או דלגו לזה שמתאים לקוד שמולכם.

איזה פרק מתאים לכם#

מתי בכלל להשתמש ב־OO#

OO הוא כלי, לא סגנון. פנו אליו כאשר:

  • לבעיה יש אוצר מילים קטן של שמות עצם (משתמש, מושב, בקשה, רשומה) ואוצר מילים גדול יותר של פעלים הפועלים על כל אחד מהם.

  • פיסת נתונים נושאת אינווריאנטים שצריך לאכוף בנקודה אחת בקוד, ולא בכל אתר קריאה.

  • אתם צופים שהמימוש שמאחורי קבוצת פעולות ישתנה בעוד הפעולות עצמן יישארו יציבות.

  • אתם מדגמים קטגוריה עם וריאנטים ורוצים שפולימורפיזם יבחר את ההתנהגות הנכונה.

אל תפנו ל־OO כאשר:

  • התוכנית קטנה, לינארית, ואין בה שמות עצם הניתנים לשימוש חוזר.

  • האש פשוט של האשים או closure מספיקים.

  • הסיבה היחידה לכתוב מחלקה היא ״זה הרגיש יותר מקצועי״. סקריפט בן שתים עשרה שורות לא צריך מחלקה.

הערה על היקף#

העץ הזה הוא הדרכה, לא מדריך עיון. טבלאות התחביר המלאות נמצאות בדפי העיון לכל מילת מפתח:

היכנסו אליהם דרך הקישורים בכל פעם שנדרשת לכם החתימה המלאה; העץ הזה מספק לכם את הסקירה למתכנת הפועל.