תכנות מונחה עצמים ב – C++ - המחלקה להנדסת חשמל ומחשבים
Transcription
תכנות מונחה עצמים ב – C++ - המחלקה להנדסת חשמל ומחשבים
מעודכן לסימסטר א' תשע"ה הפקולטה למדעי ההנדסה המחלקה להנדסת חשמל ומחשבים מעבדת מיקרו מחשבים מתקדמת )(36114693 ניסוי מס' 2 OOP )מדריך מעבדה :אלכס רייזנסון ([email protected] .1הקדמה C++הינה שפת תכנות המיישמת .)Object Oriented Programming( OOP הרעיון הכללי שהביאה תפיסת OOPהוא כתיבת ה( METHODS-פונקציות) תוך הצמדתם ל( INSTANCES-פרטי מידע) .בשפת Cההיסטורית ( )ANSI Cאנו בונים פונקציות ,לאחר מכן ,וללא קשר מגדירים נתונים ,ועקרונית אין הגבלה אילו פונקציות להפעיל על איזה נתון .לעומת זאת ב OOP-בכלל וב C++-בפרט כל נתון מוגדר לצורך משימות מסוימות ,לכן אין טעם לאפשר הפעלת כל הפונקציה עליו, אלא מוטב להגדיר את פונקציות בתוכנית פר נתון .בגישה זו לכל נתון נבנה סדרה של שירותים ( )METHODSעבורו .לנתון +שירותים נקרא אובייקט (,)OBJECT ומעתה ואילך נוכל להכליל את ה"ישות" הזו בכל תוכנית שנרצה לבנות בעתיד. האובייקט מגדיר הן את פרטי המידע שלו,והן את השירותים שמטפלים בהם. .2מטרות הניסוי 1.1הכרת מחלקות ,עצמים וההיררכיה של מחלקות; 1.1הקצאה דינאמית של זיכרון; 1.1שימוש במקימים ומפרקים; 1.1הכרת תכונת כמוס (;)Encapsulation 1.1הכרת תכונת התורשה; 1.1הכרת תכונת ריבוי-הצורתיות; 1.1הכרת תכונת העמסת פונקציות; 1.1הכרת תכונת העמסת הפועלים; 1.1שימוש בפונקציות ידידות; 1.11לימוד והכרת סביבת העבודה וכלי הפיתוח שישמשו לתכנות; 1.11עבודה עם פונקציות MEXשל .MATLAB .3ספרות מומלצת אתר של מעבדה מיקרו-מתקדמת .http://www.ee.bgu.ac.il/~adcomplab 1 מעודכן לסימסטר א' תשע"ה 1. H. M. Deitel, and P. J. Deitel. C++ how to program, Upper Saddle River, NJ,Prentice Hall (2001). BGU Library: QA 76.73.C153D45. 2. G. Voss. Object-Oriented Programming: An Introduction. McGraw-Hill Osborne Media, (1991). .4הציוד הנדרש .1.1מחשב .PC .1.1מערכת הפלה Windowsאו .Linux .1.1כל סוג של .toolchain C++ .5שאלות הכנה ענה בהרחבה על שאלות הכנה: .1.1הגדר את המושגים הבאים :מחלקות ,Classes -תורשה – ,Inheritanceריבוי צורתיות – .Polymorphism .1.1מהי החשיבות שבהסתרת מידע ומהם האמצעים העוזרים לנו ליישם זאת? מהן ההרשאות השונות האפשריות לחברים במחלקה? .1.1מה זה פעולת העמסה ( )overloadingאופרטורים? תן הסבר מפורט עם דוגמאות. .1.1לשתיים מתוך פונקציות החבר של המחלקה יש תפקיד מיוחד – למקים Constructorולמפרק .Destructorמה תפקידן וכיצד מגדירים אותן? .1.1מהי הקצאת זיכרון דינאמית? מהם הכלים המאפשרים לנו הקצאה דינאמית מהם היתרונות וחסרונות שבהקצאה הדינאמית? איפה במרחב זכרון מחשב נשמרים נתונים מסוג זה? .6מהלך הניסוי מאחר ולמרבית הסטודנטים זו ההתנסות הראשונה בכתיבת מונחה עצמים, הניסוי מורכב מכתיבת מספר תכניות כאשר רמת הקושי עלה בהדרגה .מומלץ לכתוב את התכניות על-פי סדר הופעתן בדפי הניסוי. לפני שניגשים לכתוב יש לשבת ולתכנן את היישום מרמת האלגוריתמים ועד לממשק. חשוב מאוד לרשום הערות רבות בגוף התוכנית .עם זאת אין טעם להסביר דברים מובנים מאליהם .יש להסביר את מהות הקוד ולא" לתרגם "אותו . 2 מעודכן לסימסטר א' תשע"ה לדוגמא -אין צורך לרשום הערה מעין זו" :זוהי לולאה שרצה בין 1ל,11- במקום זאת יש לרשום מה הלולאה עושה ,כגון" :לולאה לסריקת כל האותיו". יש לתת שמות הגיוניים למשתנים ,פונקציות ואובייקטים ,כך שמתוך השם יהיה ניתן להבין מהי מהות המשתנה או האובייקט. נא להקפיד להימנע מלהשתמש במשתנים גלובליים .משתנים כאלה מהווים סיכון לקיום התוכנית .רצוי להגיע למצב בו התוכנית תשתמש במשתנים לוקליים בלבד .משתנים אלה יועברו ממקום למקום מבלי שניתן יהיה לשנותם מחוץ לעצמים ,פרוצדורות או פונקציות. .1.1תישם שלוש שיטות לאכסון נתונים: .1.1.1הכן מחלקה בשם ARRAY_OF_INTהמחביאה טבלת שלמים בגודל .11הגדר שרות PRINTהמדפיס את תוכן המערך ARRAY_OF_INT הגדר שרות בשם ) SET(i,jהמעביר ערך iלכניסה jבמערך .הכן תכנית ראשית בה מוגדר אובייקט מתאים .הגדר תפריט המאפשר להוסיף נתון למערך ,להציג את המערך ולצאת מהתכנית. .1.1.1צור עצם מסוג CVectorהמכיל מערך דינאמי של ( intמצביע המצביע לכל גודל אפשרי של מערך) .צור שרות SETו PRINT-בדומה לתרגיל הקודם .בשרות SETנדרשת הגדלה אוטומטית של המערך אם האינדקס גדול מגודל המערך. .1.1.1צור עצם מסוג CVectorהמכיל מערך דינאמי של intדו-ממדי (מצביע המצביע למערך של מצביעים) .צור שרות SETו PRINT-בדומה לתרגילים הקודם .בשרות SETנדרשת הגדלה אוטומטית של מספר שלם של שורות המערך אם האינדקס גדול מגודל המערך. בונוס :להעמיס אופרטורים ][ ו <<-בנוסף לשרותים SETוPRINT- לצורת עבודה יותר נחה ואינטויטיבית .לדוגמא: ;CVector myvector ;myvector[5] = 10 // prints content of vector .1.1נתון מעגל הבאה: 3 ;cout << myvector מעודכן לסימסטר א' תשע"ה כאשר C = aaa nF ,R = 100 Omhו( .L = bbb mH-ת.ז .של בן זוג אחד הוא xxxxxaaaות.ז .של בן זוג שני הוא .)yyyyybbb כתוב תוכנה שתחשב VC , VRו , V L -כאשר . V V0 cos wtאמפליטודה ותדר של מקור מתח Vניתנים לקביעה ע''י משתמש וארכים התחלתיים הם - . f 100Hz - V0 3Vהתוכנה תציג תוצאות בשני אופני תצוגה – ע''י מספר מורכב וע''י אמפליתודה ופאזה – לפי בחירת המשתמש. לצורך ביצוע עבודה יש להגדיר מחלקה Complexשתאפשר עבודה עם מספרים מורכבים .בנוסף לכך יש להגדיר שתי מחלקות PassiveElementו- ,RCLכאשר בעזרת מחלקה PassiveElementניתן ליצר עצמים C ,RוL- ומחלקה RCLמתארת תכונות של כל המעגל. תרגיל מכיל שני חלקים: )1חלק ,MATLABבו יש לממש מערכת לקליטת נתונם ואופן עבודה בתחילת ההרצה ותצוגת נתונים שהתקבלו אחרי חישובים. )1חלק ,++Cהמקבל נתונים מ MATLAB-מחשב נתונים לפי אופן עבודה ומחזיר אותם ל MATLAB -לצורך תצוגה. למימוש חלק ++Cכתוב שירותים הבאים: • שירות Normשל מחלקה Complexשתאפשר חישוב אמפליטודה של מספר מורכב; • שירות Argשתאפשר חישוב של פאזה; • שרות Setשתאפשר קליטה של ארך חדש של C ,Rאו ;L • שרות Calcשתאפשר VC , VRו; V L - 4 מעודכן לסימסטר א' תשע"ה • שרות Printשתאפשר הצגת התוצאות בשני אופני תצוגה – ע''י מספר מורכב או ע''י אמפליטודה ופאזה; • שירות FreqResשתאפשר חישוב של תדר תהודה ()Frequency Resonant למעגל. • שירות Saveשתאפשר הדפסת התוצאות תוך יצור שני קבצי .datכאשר אחד המכיל אוסף אמפליטודות ושני אוסף פאזות .צרף סרטוטי Bodeמ- ( MATLABגם של אמפליטודה וגם של פאזה) לדו''ח מסכם כאשר תצוגה של סקלה תדרים היא בסקלה לוגריתמית. ממש תוכנה כפונקציה .MEXהוסיף הוראות הפעלה ובחירת אופן הפעלה כ- in-line helpשל פונקציה .MATLAB .1.1תיצור מחלקה בסיסית CPersonהמכילה שדות :שם פרטי ,שם משפחה ,ת.ז. ותאריך לידה .המחלקה צריכה להכיל שני שירותים Set -ו Print-המאפשרים להדקן שדות ולהדפיס אותם .הדפסה צריכה להכיל שתי אפשרויות להדפיס הכול או להדפיס רק שורה ספציפית .על בסיס מחלקה זאת יש ליצור שתי מחלקות נוספות CStudentו .CTeacher-תוסיף למחלקה CStudentמערך מסוג ( CCourseמחלקה או )structעם שדות – שם קורס וציון .תוסיף שירותים הבאים: • הוספת הקורס; • הוספת ציון הקורס; • הדפסת רשימת הקורסים עם ציונים; הערה :יש לעבוד עם מערך דינאמי. למחלקה CTeacherתוסיף שדה מסוג CRaitingעם שדות – ,easiness helpfulnessו .clarity-תוסיף שירותים שמאפשרים להתקן ולהדפיס פרמטרים הללו. כתוב תוכנה שתייצר מערך מסוג CStudentהמכיל שני סטודנטים ותמלא פרטים הרלוונטיים .תייצר מערך CTeacherהמכיל שלושה מדריכים ותמלא פרטיים הרלוונטיים .תדפיס נתונים שייכים לסטודנטים ,תדפיס נתונים שיכים למדריכים. .1.1בשאלה זאת יש ליצור תוכנה שתאפשר קריאת תמונה ,תצוגתה ,הפעלת סט מסננים על התמונה ,שמירה והצגה של תמונה אחרי סינון .לצורך מימוש של 5 מעודכן לסימסטר א' תשע"ה שאלה יש להיעזר בתוכנת MATLABשמאפשרת קריאה ,שמירה ותציגה של קבצי תמונות בצורה נוחה .יחד עם זאת יש לממש פונקציה ,imagefilt המיושמת כקובץ .MEXהתוכנית צריכה לאפשר טעינת תמונה ממקום מוגדר בדיסק קשיח (תיקיה שמכילה) ולשמור תמונה במקום מוגדר .במסגרת עבודה צריך לבצע: קריאת תמונה בפורמט bmpבגוון שחור לבן בגודל 111x111בעזרת ;MATLAB עיבוד תמונה בעזרת קונבולוציה עם אחד מהגרעינים שמוצגים למטה (יש להעברם מ:)MATLAB- .1.1.1 Averaging .1.1.1 4-neighbour Laplacian ; ; .1.1.1 Gaussian Smoothing .1.1.1 Unsharp Filter ; ; ;median filter 3x3 .1.1.1 .1.1.1 Sobel filters for edge detection ; שמירת לקובץ ;bmp 6 מעודכן לסימסטר א' תשע"ה בתחילת עבודה יש להגדיר מחלקה ,Imageהמכילה שירותים הבאים: ;Constructor(int numRows, int numCols) .1 ;void setImageInfo(int numRows, int numCols, int maxVal) .1 ;void getImageInfo(int &numRows, int &numCols, int &maxVal) .1 ;int getPixelVal(int row, int col) .1 ;void setPixelVal(int row, int col, int value); .1 .1 void getSubImage(int upperLeftRow, int upperLeftCol, ;)int lowerRightRow, int lowerRightCol, Image& oldImage ומשתנים: // number of rows .1 ;;int N // number of columns .1 ;;int M ;;int **pixelVal //2D array .1 לצורך בדיקות יש להשתמש בתמונות Lenaו Baboon-בפורמט 111x111 פיקסלים בגוון שחור לבן. נא לשים לב להגשת העבודות בהתאם לדרישות המפורטות לעיל. בדו"ח מסכם יש לענות על שאלות הכנה .בנוסף יש להסביר מבנה ואופן הפעלה של תוכנית ומחלקות שהוגדרו לצורך ביצוע משימה. .7הציון להלן האופן בו יורכב הציון על ניסוי זה: 1% שאלות הכנה מהלך הניסוי 11% נוחות משתמש ,הגשת הדו'ח 11% ביצוע שאלה ראשונה במלואה 11% (לפי ההוראות הניסוי) ביצוע שאלה שנייה במלואה 11% (לפי ההוראות הניסוי) ביצוע שאלה שלישית במלואה 11% (לפי ההוראות הניסוי) ביצוע שאלה רביעית במלואה 11% (לפי ההוראות הניסוי) והגנה על ניסוי כתיבה נכונה ובהירה של הקוד (הערות שמות משתנים הגיוניים וכו' .נוחות משתמש, מקוריות ,עיצוב ויצירתיות סה"כ 11% 111% בהצלחה !!! 7