
14-12-2007, 22:36
|
 |
אדמין לשעבר
|
|
חבר מתאריך: 25.10.01
הודעות: 20,292
|
|
יש כמה תשובות לשאלה שלך, אני אענה מכיוון אחד.
בפרויקט תוכנה תעשייתי מושקעות שנות אדם בקידוד. ישנם פרויקטים (כמו חלונות לדוגמא) שנושקים
לעשרות אלפי שנות אדם. הכוונה היא שהמון אנשים עבדו במשך שנים לייצר את הקוד הזה.
כשמישהו בא לפתור בעיה כלשהי, הוא יעדיף תמיד לקחת חלקים מן המוכן - ולכתוב רק את מה שהכרחי.
כך לדוגמא, כשאתה בא לפתח היום תוכנה בחלונות.. לא תעלה על הדעת אפילו לפתח פרוטוקול TCP/IP
בעצמך, שכן אתה מקבל את זה במתנה ממערכת ההפעלה.
חבילות התוכנה האלו נקראות ספריות או מודולים. עכשיו תשאל את עצמך - אוקי.. אבל גם בתכנות פרוצדורלי
אני יכול לייצר קבצי LIB ולהפיץ אותם לכל המעוניין.. כאן נכנסת העובדה שמי שכותבים תוכנה - הם בני אדם.
בני אדם חושבים כברירת מחדל באובייקטים. כשאנחנו באים לנתח בעיה/מערכת, אנחנו מראש חושבים על
הישויות במערכת. לדוגמא, קופה רושמת. ישנם מוצרים, ישנה הקופה, ישנה מגרת הכסף, ישנו המוכר, ישנה החשבונית וכו'..
ברגע שאתה מתחיל לחשוב בצורה כזאת, אתה יכול לתת מענה לכל אחד מהם בנפרד. כך לדוגמא, אם פיתוח של קופה כזו יכול לקחת מספר שנות אדם - אנחנו נעסיק מספר אנשים כאשר כל אחד מהם יפתח
חלק נפרד.
כך לדוגמא, מישהו אחד ייצר משהו שמייצג את הצד של המוכר. ככל הנראה המדובר יהיה בממשק משתמש (מקלדת לדוגמא) שבו המוכר יוכל להקליד את הסכום. מישהו אחר יפתח ישות שנקראת מוצר.
יש קטלוג מוצרים, לכל מוצר יש מאפיינים. כל מוצר ניתן לגרוע מהקטלוג ברגע שהוא נמכר.
וכך אתה מבצע חלוקה הגיונית יותר של האפליקציה.
אבל... לא כל הנוצץ זהב. לפיתוח אובייקטלי יש חסרונות, והבולט שבהם הוא התקורה שבקוד הניהול הנוסף של האובייקטים. כך לדוגמא - פעולות שבתכנות פרוצדורלי ניתן לעשות בלי זכרון, בתכנות אובייקטלי יצרכו זכרון בשביל לשמור את הInstances של האובייקט. בנוסף, ישנן תקורות בקוד המקור.
ברגע שאנחנו מפרידים את הבעיה לישויות - יכול להווצר מצב שאותה פעולה מתבצעת גם בישות אחת
וגם בישות שניה. לזה גם יש כמובן פתרונות. ישנם מצבים בהם פעולות שיכולת לבצע ע"י מניפולציה
לא יתבצעו כך. לדוגמא, אוביקט שמייצג מעגל. הוא יודע לתת לך את ההיקף של המעגל ואת השטח שלו.
מאידך, אם תרצה לחשב נפח של כדור - תצטרך לקחת אחד מאלו ולחלק אותו בפאי ובמקדמים המתאימים בשביל לקבל את הרדיוס - היות וזה לא נחשף החוצה באובייקט..
התשובה שלי מאוד מנסה לפשט את הבעיה ומסבירה את הבסיס של הבסיס. אני ממליץ לך לקרוא עוד באינטרנט. חפש OOP בwikipedia ואני מניח שתמצא תובנות מקצועיות יותר.
_____________________________________
דורון
|