לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #3  
ישן 01-11-2005, 11:13
צלמית המשתמש של bazooka joe
  bazooka joe bazooka joe אינו מחובר  
 
חבר מתאריך: 16.07.02
הודעות: 6,814
Facebook profile
תראה את זה
בתגובה להודעה מספר 2 שנכתבה על ידי bazooka joe שמתחילה ב "הכי נוח שתעשה אובייקט שפוט אחראי על השגיאות"

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


BJ_ERROR << "some error";


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


קוד:
#include <iostream.h> class CError { public: void operator <<( char *strErr ) { cout << "ERROR: " << strErr << endl; } } BJ_ERROR ; class A { public: void error() { BJ_ERROR << "class A - bla bla"; } }; class B { public: void error() { BJ_ERROR << "class A - bla bla"; } }; int main( void ) { A obj1; B obj2; obj1.error(); obj2.error(); return 0; }

_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 01-11-2005, 11:34
צלמית המשתמש של fat fish
  fat fish fat fish אינו מחובר  
 
חבר מתאריך: 20.06.03
הודעות: 5,616
הרעיון שלך נכון אבל לא מדוייק.
בתגובה להודעה מספר 3 שנכתבה על ידי bazooka joe שמתחילה ב "תראה את זה"

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

אני אדגים שיטה לדוגמה לביצוע

נגדיר מחלקה בסיסית שממנה יירשו כל!!!! המחלקות שאני כותב.
כמו כן, תהיה לי מחלקה לטיפול בחריגות/שגיאות:

קוד:
class ErrorHandler { private: # here come vars and functions to handle error # and output to file log and so on protected: void set_error(here come error id or any type of way to identify the error or the object sent it); } class BaseObject { protected: ErrorHandler* err; ..... } class A : public BaseObject { ..... # here when you have the try-catch block # you use the set_error to write an error to log file }


_____________________________________
[ זיו ]
[ fat fish ]


נערך לאחרונה ע"י fat fish בתאריך 01-11-2005 בשעה 11:36.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #10  
ישן 01-11-2005, 15:02
צלמית המשתמש של fat fish
  fat fish fat fish אינו מחובר  
 
חבר מתאריך: 20.06.03
הודעות: 5,616
מממ...
בתגובה להודעה מספר 9 שנכתבה על ידי yagelin שמתחילה ב "משהו כאן לא נראה לי"

למה כל המופעים צריכים "לקבל" את הערך logfile...?

בוא נראה מבנה עקרוני של המחלקה ErrorHandler
כתבתי כמה שורות על מנת שנוכל לנתח אותן:



קוד:
class ErrorHandler { public: ErrorHandler(); ErrorHandler(CString); virtual ~CErrorHandler(); protected: CString sErrFile; void rise_err(UINT,UINT); }; ErrorHandler::CErrorHandler() : sErrFile("log.txt") { } ErrorHandler::CErrorHandler(CString errfile) : sErrFile(errfile) { } void ErrorHandler::rise_err(UINT nObjid, UINT nErrid) { while (file is already open with another session); add to file nObjid, nErrid, date, time }




במחלקה יש לנו בנאי ברירת מחדל שמגדיר לנו את המשתנה sErrFile
משתנה זהב מחזיק את הנתיב לקובץ השגיאות שלנו.

במקרה זה נתתי לו ערך בעצמי, אך כמובן שהערך ששולחים אליו, יכול להיות קבוע (const)

יש לנו גם בנאי לא טריוויאלי, אשר דרכו ניתן להגדיר קובץ אחר.

בתכנית שלך, כמו שאני מבין, מספיק הבנאי הראשון.
בתכניות בהן רוצים לדוגמה להפריד בין סוגי השגיאות (שגיאות קלט/פלט) שגיאות
טיפול בקבצים וכו - ניתן להגדיר בכל אובייקט את שם הקובץ.

כמובן שאנו לא צריכים ממש לכתוב את שם הקובץ בכל מחלקה ומחלקה, אלא שוב
ליצור מחלקה בין מחלקת הבסיס שלנו לבין המחלקות המתאימות, לדוגמה:
מחלקה בשם io_base, מחלקה שממנה ירשו כל המחלקות המטפלות ב-io והיא עצמה
תירש מ- BaseObject.
הבנאי של מחלקה זו - הוא זה המגדיר את קובץ הפלט שלנו (לדוגמה io_err.txt)

גם את נושא התזמון של כתיבה לקובץ, ניתן לפשט ולכתוב לחוצץ בזיכרון (שהתזמון
שלו יותר פשוט) ולתת למחלקה הראשית של התכנית לתזמן מתי כל החוצץ יכתב/יזרק
לקובץ (dumping).

אני מקווה שההסבר הזה היה ברור יותר,
(:


_____________________________________
[ זיו ]
[ fat fish ]

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #17  
ישן 02-11-2005, 10:00
  AlexKarpman AlexKarpman אינו מחובר  
 
חבר מתאריך: 20.12.01
הודעות: 20,962
בוודאי, ברגע שתקרא את ההודעה שלי שוב :)
בתגובה להודעה מספר 16 שנכתבה על ידי fat fish שמתחילה ב "אלכס...על איזו קדושה אתה מדבר?"

לא אמרתי פונקציונאליים יותר, אלא במידה מספקת.

CPP אינה מונחית-עצמים "באופן מוחלט". כך לדוגמה, קיים בה מנגנון
התבניות(שאינו OO), במקום החלופה(מודל-אובייקטים בסגנון ג'אווה; זה
דווקא OO-י), כך שממילא אנחנו רואים שב-CPP תוכננה כשפה "חצי
מונחית עצמים".

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

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

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 21:07

הדף נוצר ב 0.07 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2025 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר