תגובות על פאסודו-הגדרה של OOP

Justin Angel

New member
תגובות על פאסודו-הגדרה של OOP

ב-12-13 לחודש אני מעביר קורס מבוא לארכיטקטורת שכבות בדוט נט. כתבתי לקורס את התיאור הבא. ארנון נתן את ההערה הבאה בבלוג שלי וגם זרק הערה על איך מדובר בהגדרה לא נכונה של OOP במפגש הבלוגרים: ”שלום גסטין -לומר שהרעיון של לכתוב משהו רק במקום אחד הוא רעיון של OOP זה לא כל כך נכון - זה רעיון של תכנות פרוצדורלי (במקום לפזר קוד בכל מקום בוא נארגן אותו בפרוצדורות ומודולים) לOOP יש רעיונות מרכזיים אחרים ארנון„ רציתי לדעת מה המחשבות שלכם בנושא של באמת ההגדרה החופשית שכתבתי בתיאור הקורס? אם יש נקודות שבעלי מקצוע רוצים לעלות, אני אשמח לשמוע ולהתייחס.
 

arnonrgo

New member
OO

הי ג'סטין בהמשך לשיחה בארוחת הבלוגרים- כדאי באמת לנצל את ההזדמנות ולתת התיחסות יותר רצינית מאשר להגיד שההגדרה לא נכונה ככה הנושא של לכתוב קוד פעם אחת ולבצע שימוש חוזר עתיק כמו מקצוע המחשבים עצמו – אתה יכול לקרוא למשל בספר Software Conflict (2 או המקורי) של Robert L. Glass על הSHARE catalog שבו פורסמו רוטינות מדובגות ועובדות לשימוש חוזר (מודפס – בכל זאת שנות ה50) הרעיון מאחורי תכנות פרוצדורלי – הוא לקחת קוד חוזר ולמקמם אותו במקום אחד (פרוצדורה) ואז לקרוא לא שוב ושוב. אגב, אפשר לראות את המוטיב של כל דבר מופיע פעם אחת גם בחוקי נרמול לDB בשנות ה70 Dijkstra וחברים הגדירות תיכנות מובנה או מודולרי (Structured/modular programming) כאן כבר מדובר על מודולים נפרדים המאגדים בתוכם גם נתונים וגם פרוצדורות זו בעצם טכניקה יותר מתקדמת של תכנות פרוצדורלי – חסרים כמה מאפיינים של OO (שתכף אני אני אדבר עליהם) אבל בהחלט יש כאן את הרעיון של לכתוב משהו פעם אחת ולא להעתיק אותו ברחבי האפליקציה – מדובר על שפות כמו ADA-83 למשל (להבדיל מ ADA-95 או ADA-2005 שכבר OO) אז מה כן מאפיין OO בנוסף לרעיונות הנ"ל? מבחינה כרונולוגית הדבר הראשון שהופיע (אם אני לא טועה) היה הרעיון של ההפרדה בין Class לInstance (למשל בסימולה שזו שפה מ67). אח"כ עלה נושא של Information Hiding ע"י Parnas (לא זה מהטברנה ) ב72. ידוע גם בשם Protected Variation או Open Closed Principle וזה בעצם משהו מאד משמעותי לOO. לא סתם חלוקה למודולים אלא באמת ליצר הכמסה (או איך שלא כותבים את זה בעברית) של החלטות בתוך ה"מודול" כך שניתן יהיה להרחיב ולהשתמש בהם אבל בלי פגיעה בהם ב74 ברברה ליסקוב (שאחראית גם לLiskuv Substitution Princple שמספר לנו איך לעשות ירושה נכון) הגדירה עוד מושג חשוב לOO והוא ה Abstract data type שזה עוד נושא שמיחד את OO מול הפרדיגמות הישנות יותר. יש עוד כמה עקרונות כמו Dependency Inversion Principle Single Responsibility, Principle שאפשר לקרוא עליהם במאמרים מצוינים באתר של ObjectMentor (http://www.objectmentor.com/resources/publishedArticles.html) או בספר של Robert C. Martin בשם Agile Principles, Patterns and Practices in C# (או כנ"ל עם Java) למצער אפשר גם לקרוא מאמר שלי ב http://www.rgoarchitects.com/Files/ooprimer.pdf שמנסה לתת overview של העקרונות.
 

ייוניי

New member
בעקרון אני מסכים

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

מתכNET

New member
יש לך טעות בסיסית OO לא קשור לתוכנה

יש OOA שזה OBJECT ORIENTED ANALYSIS יש OOD שזה OBJECT ORIENTED DESIGN יש OOP שזה OBJECT ORIENTED PROGRAMMING ויש...... ויש OO שזה סתם OBJECT ORIENTED וזה יכול להיות קשר גם לתוכנה וגם לחנות פלאפל באותה מידה.
 
למעלה