מערכת פקודות

ASP zone

New member
RTTI?

לא מכיר. אם זה מכוער אז אני גם לא רוצה את זה. אני אשתדל לממש את הObserver... תודה. אני אעדכן אתכם. יש לי עוד שאלה. האם כדאי להישתמש בObserver בשביל לתפוס שגיאות זמן ריצה?
 

עידו פ

New member
לא בטוח שזה הפתרון המתאים

הרעיון של Observer הוא לאפשר למחלקות שונות לדעת שקרה משהו לאובייקט בו הן תלויות. הרעיון בשגיאות בזמן ריצה מורכב משני שלבים: 1. זיהוי השגיאה ותפיסתה 2. דיווח ותיעוד השגיאה למקרה הראשון יש לרוב מנגנונים בסביבת הפיתוח (גם ב-++C יש מנגנוני try catch אם זכור לי נכון). למקרה השני יש מגוון פתרונות, אך זה גם תלוי בסביבת הפיתוח. בדוט נט לדוגמה, יש את מנגנון ה-Exception שבמערכות גדולות נהוג לעטוף אותו במחלקה מיוחדת שמטפל בתיעוד השגיאות (נניח ללוג צדדי כלשהו). בסביבה כמו ++C אני לא בטוח אם יש מנגנון דומה לטיפול ב-Exceptions, אבל בין אם כן ובין אם לא, את נושא התיעוד ניתן לתקף באמצעות שימוש ברכיב תיעוד כלשהו (רכיב תיעוד ללוג בקובץ / במערכת ההפעלה / ב-DB או בכל מקום אחר) שלרוב ממומש באמצעות ה-pattern של singleton. הנה דוגמה בסיסית למימוש טיפול ב-Exception ב-++C שמצאתי בגוגל (ע"י חיפוש הביטוי Exception handling C++) http://www.eastcoastgames.com/articles/cppexception.html
 

ASP zone

New member
הבעיה היא שאני צריך לזרוק חריגה

מהבנאי... זה דופק הכל לפי מה שהבנתי בפורום שפות תכנות.
 

עידו פ

New member
אכן לא מומלץ

אני מניח שבפורום שפות תכנות יוכלו להסביר לך למה. בכל אופן, אם אתה צופה בעיות בזמן הרצת ה-constructor, נסה להמנע מלרשום את הקוד ב-cons. שקול להעביר את הלוגיקה הזו לאיזשהי מתודת אתחול, או לחילופין, לאפשר לקבל instance של המחלקה לא ע"י שימוש בפקודת new אלא ע"י רצף ההגדרות הבאות: 1. מנע אפשרות ליצור מופע של המחלקה ע"י new מחוץ למחלקה עצמה (יכול להיות מבוצע ע"י נניח הגדרת ה-cons. כ-protected) 2. צור מתודה סטטית שמחזירה Instance של המחלקה ואשר בתוכה מבוצע ה-new 3. סדר כך שמתודה זו תבצע לאחר ה-new את האתחול של המחלקה (כלומר, המתודה גם תקבל פרמטרים ולפיהם תבנה את המחלקה). 4. סדר כך שמתודה זו תיזום שגיאות במידה ויש בעיות עם אתחול האובייקט כך אתה גם יוצר את האובייקט וגם מבטיח אפשרות לקבל דיווח שגיאות.
 

ASP zone

New member
אבל אז אני נדפק מצד אחר

כי אתה חייב להשתמש בפוינטרים -> עוד מקום לעוד שגיאות (דליפות זיכרון למשל...). אלא אם כן אתה מכיר דרך אחרת להחזיר אובייקט בלי לגרום שיצא מהסקופ. reference יכול לעזור כאן אבל זה יראה מכוער.
 

ASP zone

New member
שחכתי גם לציין

בכל קונסטרקטור שלי יש מקום לשגיאות.
 

עידו פ

New member
מאחר ואתה מודע לבעיה בזה

אז יש מספר הצעות, כפי שכבר הצעתי: 1. לא להשתמש ב-cons. בשביל לבצע את האתחול (כפי שכבר דיסקסנו מקודם) 2. להכיל על האובייקטים האלו ניהול סטאטוסים, כך שכשלון ביצירת האוביקט לא גורם לו לקרוס אלא לשנות את מצבו. כמובן שכל שאר המתודות שיבוצעו צריכות לקרוס או להחזיר שגיאה אם מנסים להריץ אותם כאשר הסטטוס הוא "לא אותחל"
 

עידו פ

New member
ב-++C עבודה עם פוינטרים

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