-1-
הפתוחההאוניברסיטה
המחשבולמדעילמתמטיקההמחלקה
בתעשייה לשימוש מתיאוריה :תוכנה בהנדסת( עיצוב תבניות) תכן דפוסי
Design Patterns in Software Engineering: From Theory to Production
תוארלקבלתמהדרישותכחלקהוגשהזומסכמתעבודה
חשבהמבמדעי.M.Sc"למדעיםמוסמך"
הפתוחהבאוניברסיטה
המחשבלמדעיהחטיבה
ידי-על
איזקאלי
571520120.ז.ת
[email protected]:ל"דוא
אהרונידןר"דשלובהדרכתהוכנההעבודה
ארליךציפיר"דשלההדרכתבהוכנהמאושרתהצעה
24/01/2013:תאריך
-7-
תודות
המסכמתהעבודהבהכנתירותבמסאותישהנחהאהרונידןר"לדרבהתודה.
.המסכמתלעבודהההצעהבהכנתבמסירותאותישהנחתהארליךציפיר"לדרבהתודה
המקצועיותהערותיועללורנץדודלפרופסוררבהתודה.
-3-
העניינים תוכן
6.......................................................................................................................ואיוריםטבלאותרשימת
1................................................................................................................................................תקציר
15.........................................................................................................................................מבוא 1
ןדפוסי 1.1 כ 15.........................................................................................................ת
15......................................................................................עצמיםמונחיתכןדפוסי 1.2
11...................................................................................................העבודהמטרת 1.3
11............................................................................................העבודהבהמשךמה 1.5
13.............................................................................................................................היסטורירקע 7
13........................................................................התכןדפוסיצמחושורשיםמאיזה 7.1
15.................................................................תוכנהבהנדסתהתכןדפוסיהתפתחות 7.7
10.......................................................................................................................................הגדרה 3
10....................................................................................להגדרהמשלימותהערות 3.1
12........................................................................................................תכןבדפוסילשימושהצדקה 5
11....................................................................והארותהערות,ספרותסקירת—תכןבדפוסיסוגיות 0
11...................................................................תוכנהמערכתשלנכוןעיצובעקרונות 0.1
73......................................................................................תכןדפוסישלקטגוריות 0.7
70.......................................................................................התכןדפוסיביןקשרים 0.3
72.........................................................................................ומורכבותקושידרגות 0.5
35...............................................................................................ברדוקציהשימוש 0.0
33....................................................................תכןדפוסיעםעבודהלתחילתגישות 0.6
33............................................................................................תוכנהלעצבהקושי 0.6.1
33....................................................................תכןבדפוסיהשימושלהפנמתגישות 0.6.7
30...........................................................................עצמיםמונחיתכןדפוסילהצגתכלי-UMLשפת 6
-5-
30................................................................................................................מבוא 6.1
32.......................................................................נבחריםסטטייםתרשימיםסקירת 6.7
53.....................................................................נבחריםדינאמייםתרשימיםסקירת 6.3
01...........................................................................................................נבחריםתכןדפוסיסקירת 2
01........................................................................Behavioralבקטגוריהתכןדפוסי 2.1
01.......................................................................................Observerהתכןדפוס 2.1.1
02.........................................................................................Strategyהתכןדפוס 2.1.7
67..........................................................................................Iteratorהתכןדפוס 2.1.3
60.........................................................................Creationalבקטגוריהתכןדפוסי 2.7
60.............................................................................Factory Methodהתכןדפוס 2.7.1
23.......................................................................................Singletonהתכןדפוס 2.7.7
22.........................................................................Structuralבקטגוריהתכןדפוסי 2.3
22.........................................................................................Adapterהתכןדפוס 2.3.1
27...........................................................................................Bridgeןהתכדפוס 2.3.7
26....................................................................................Compositeהתכןדפוס 2.3.3
11.......................................................בתעשייהפיתוחובסביבותעבודה-במסגרותתכןבדפוסישימוש 2
17...........................................................................................Spring-בתכןדפוסי 8.1
15.............................................................................................JUnit-בתכןדפוסי 2.7
16......................................................................................Java JDK-בתכןדפוסי 2.3
11........................................................................................C# SDK-בתכןדפוסי 2.5
151.....................................................................תוכנהפיתוחבתהליךתכןבדפוסילשימושדוגמאות 9
151............................................................חומרהעםבשילובתוכנהלבדיקתתוכנה 1.1
153.................................................................................פשוטמחשבמשחקפיתוח 1.7
-0-
150..............................................................נבחריםעצמיםמונחי(anti-patterns)נגד-דפוסיסקירת 15
15.1 Call Supper156...................................................................................................
15.7 Sequential Coupling156.....................................................................................
15.3 Base Bean152.....................................................................................................
15.5 God Object152....................................................................................................
152......................................................................................................................................סיכום 11
151....................................................................................אנגלית-עבריתמונחיםרשימת–'אנספח 12
115..................................................Spring Framework-הבעזרתDIעיקרוןפיעלעבודה–'בנספח 13
116........................................................................................................................מקורותרשימת 15
-6-
ואיורים טבלאות רשימת
טבלאות
31..............................................................(א.א—ותרגוםעריכה)[Pete]המחלקותביןהיחסים:1טבלה
151.....................................................................................................ותרגומםמונחיםרשימת:7טבלה
איורים
76....................................................................................[bean]MVCהארכיטקטוניהתכןדפוס:1איור
72............................................................................[Huy]Proxyהתכןדפוסשלמחלקותתרשים:7איור
31.........................................................[.Commons]Compositeתכןהדפוסשלמחלקותתרשים:3איור
31..................................................................[.Commons]עץהרקורסיביהנתוניםמבנהשלאיור:5איור
37..............................[.Commons]Chain Of Responsibilityהתכןדפוסשלטיפוסיעצמיםמבנה:0איור
37...................................[.Commons]Chain Of Responsibilityהתכןדפוסשלמחלקותתרשים:6איור
55...........................................................................................[Tech]מחלקותתרשיםשלדוגמא:2איור
51............................................................................................[Tech]רכיביםתרשיםשלדוגמא:2איור
57...............................................................................................[Mill]פריסהתרשיםשלדוגמא:1איור
53...........................................................................................[Tech]פעילותתרשיםשלדוגמא:15איור
55................................................................[.Holub]פעילותבתרשיםשגיאהבמצבטיפולהצגת:11איור
55.....................................................................[.Holub]פעילותבתרשיםבסיגנליםטיפולהצגת:17איור
50............................................................................................[Mill]מצביםתרשיםשלדוגמא:13איור
56.................................................................................................[Mill]רצףתרשיםשלדוגמא:15איור
52................................................................................................[Mill]רצףתרשיםשלדוגמא:10איור
52................................................................[Inform]רצףבתרשיםOptהמסגרתלשילובדוגמא:16איור
-2-
52.......................................................................[.Inform]רצףבתרשיםמסגרותלשילובדוגמא:12איור
51..................................................................................[Puff]שימושמקריתרשיםשלדוגמא:12איור
05................................................................................[Devx1]שימושמקריתרשיםשלדוגמא:11איור
07..........................................................................................[dev]מודולאריתלאשמעמערכת:75איור
07.......................................................................(א.א—עריכה)[dev]מודולאריתשמעמערכת:71איור
03.................................................[Gof]מוטיבציהלצורךObserverהתכןבדפוסלשימושדוגמא:77איור
05.................................................................[Code]Observerהתכןדפוסשלמחלקותתרשים:73איור
05..........................................................................[Blog]Observerהתכןדפוסשלרצףתרשים:75איור
02.......................................[Mak]Strategyהתכןדפוסשלהעיקרוןאתשמתארמחלקותתרשים:70איור
01......................................................................[Rav]Strategyהתכןדפוסשלמחלקותתרשים:76איור
01.................................................[.Tod]Strategyהתכןבדפוסשימוששמדגיםמחלקותתרשים:72איור
63.....................................................................[Dof2]Iteratorהתכןדפוסשלמחלקותתרשים:72איור
62......................................................[Dof3]Factory Methodהתכןדפוסשלמחלקותתרשים:71איור
61...............................................................[Jam]Factory Methodהתכןדפוסשלרצףתרשים:35ראיו
25...............................(א.א—עריכה)[Dof3]Simple Factoryהתכנותסגנוןשלמחלקותתרשים:31איור
21................................[Gof]Factory Methodהתכןבדפוסלשימושדוגמאשלמחלקותתרשים:37איור
25.................................................................[Mak2]Singletonהתכןדפוסשלמחלקותתרשים:37איור
21..................................................[Fbs]Adapterהתבניתלתיאורהיומיוםמחייבדוגמאשימוש:33איור
21........................................................[Dof4]Adapterהתכןדפוסאתשמתארמחלקותתרשים:35איור
27................................................Bridgeהתכןדפוסאתשמסבירהשלילדוגמאמחלקותתרשים:30איור
23................................................Bridgeהתכןדפוסאתשמסבירהשלילדוגמאמחלקותתרשים:36איור
25.....................................................................[.Dof1]Bridgeהתכןדפוסשלמחלקותתרשים:32איור
-2-
22.............................................[Gof]Compositeהתכןבדפוסלשימושדוגמא-מחלקותתרשים:32איור
22....................[Gof]Compositeהתכןדפוסשיוצר(עץ)רקורסיביעצמיםלמבנהספציפיתדוגמא:31איור
22.................................................................[Gof]Compositeהתכןדפוסשלמחלקותתרשים:55איור
22...................................[Gof]Compositeהתכןדפוסשיוצראפשרי(עץ)רקורסיביעצמיםמבנה:51איור
17...........(א.א—עריכה)[Dof3]Factory Methodהתכןבדפוסשימושלהדגמתמחלקותתרשים:57איור
15..........................................[Forg]JUnitשלTestCaseהמחלקהאתשמתארמחלקותתרשים:53איור
155.....................(א.א—תוספות)[Ravi]Strategyהתכןבדפוסשימושלהדגמתמחלקותתרשים:55איור
151..................................................................[Acd]חומרהשללבדיקותנאיבימחלקותתרשים:50איור
157..........................[Acd]Strategyהתכןבדפוסשמשתמשחומרהשללבדיקותמחלקותתרשים:56איור
153........................................[Wick]Game of Lifeלמשחקנאיביעיצובשמציגמחלקותתרשים:52איור
155.............[Wick]Game of Life-לObserverהתכןבדפוסחלקישימוששמציגמחלקותתרשים:52איור
-1-
תקציר
בעיצובשכיחהלבעיהכלליפתרוןהמשמשתכללית(דפוסאו)תבניתהוא(design patterns)"ןכתדפוס"
.רביםביישומיםתוכנהלעיצובשימושיתלהיותשעשויהתוכנה
.((object oriented design patterns"עצמיםימונחדפוסיתכן"העבודהמתמקדתב
-למשלנעשהבהםשימושרבבמסגרות,ישכיוםמשקלרבבתעשייתהתוכנה"עצמיםמונחידפוסיתכן"ל
.איךזהקרהומהההצדקהלכךהעבודהמתארת.(frameworks)עבודה
דפוסיכיצדמוסבר.באופןנכוןאיתםלעבודללמודווכיצדכדאידפוסיתכןהצורךהמעשיבהעבודהמציגהאת
ודוגמאותמתעשייתמעשיותדוגמאותוךשימושבתתוכנההנדסתעקרונותיישוםלשיפורורמיםתתכן
,האצלהבמקוםבהורשההרכבהושימושב:הםמוצגיםחלקמעקרונותהנדסתהתוכנהש.התוכנה
Single Responsibility Principle (SRP),Open Close Principle (OCP),Inversion of Control (IoC) ,
Liskov Substitustion Principle (LSP).
:כמוקרוביםיםנושאבקצרהסוקרתהעבודה,כמוכן
דפוסיתכןשלארכיטקטורתתוכנהשהםדפוסיתכןשמספקיםתבניותלארכיטקטיםשלתוכנה
.לעיצובמערכותמורכבותשלתוכנהמקצהלקצה
מונחיעצמיםנגד-דפוסי(Object Oriented Anti Patterns)להימנעאותנושמלמדיםתכןדפוסישהם
.שגויעיצובמונחהעצמיםמ
-15-
מבוא 1
אתמטרתואזאתארבקצרה"דפוסיתכןמונחיעצמים"ועל"דפוסיתכן"הסברמקדיםעלבפרקזהאביא
.מהצפויבהמשךהעבודההעבודהו
ןכ ת דפוסי 1.1
ן"מילההשלהתרגום.design patterns))"ןכתדפוסי"המושגשלהלשוניתבמשמעותתחילנ כ באנגלית"ת
במקום.stylingולאdesignשלבמשמעות"עיצוב"להשתמשבמילהגםניתן,"תכן"במקום.Designהינו
תבניות"הנפוץםבשמגםנקראיםתכןדפוסיאכןו"תבנית"להשתמשבמונחניתן,(pattern)"דפוס"המונח
."עיצוב
תבניתשזאתנאמר,בהקשרשלהנדסתתוכנה(10בעמודתובאהגדרה)"תכןדפוס"שלראשוניכתיאור
אבל.רביםביישומיםשימושיתלהיותשעשויהתוכנהבעיצובשכיחהלבעיהכלליפתרוןהמשמשתכללית
,[Alex]עריםעיצובובנייהדפוסיתכןשימשוב.םאחרירביםבתחומיםגםהנדסילשיפורוזריםעתכןדפוסי
[Ais]עיצובבאפילו דפוסיתכןמשמשים.ורקבהמשךהנושאתפסתאוצהבעולםהתוכנהכפישנראהבהמשך
.[Berg]שיעורשלפדגוגי
כלליותהנדסיותתבניותמספקשהואכךבתוכנהבהנדסתעקרונותשלליישוםתורםתכןבדפוסישימוש
עיצובבטעויותלמנועכדיוזאת.בהןלהשתמשיכולהתוכנהמפתחהבנויותעלעקרונותשלהנדסתתוכנהש
.ולמנועפיתוחחוזרשלתבניותשכברפותחו[Mha], [Weis]התוכנהשלההנדסי
עיצובשלהיבטיםלפיגםאלא,שלהריתםהאלגוי"עשמוכתבתההתנהגותפיעלרקלאלהימדדצריכהתוכנה
כאן(.Scalability)במקבילהמשתמשיםמספרשלושלהקודבסיסשללהרחבהוגמישותלשינויעמידותכמו
.[Mgj]התכןדפוסילעזורבאים
עצמים מונחי תכן דפוסי 2.1
מתודולוגיהשלבםנעזריהתכןדפוסילרובאבל,מסוימתמחשבבשפתתלוייםלאהתכןדפוסיכללבדרך
,בהמשךשאציגכפי.עצמיםמונחיתכןבדפוסיבעיקראתמקדזובעבודה,לכן.[Sid]עיצובמונחהעצמים
לצורךעיצובמונחהעצמיםשלחשוביםהנדסייםיסודותשלמיטבישילובמציגיםעצמיםמונחיתכןדפוסי
.תכןדפוסכליצירת
-11-
עיצובמונחהבשימושנעשההיהלאאםאבלעיצובמונחהעצמיםעלמבוססיםלהיותחייביםלאתכןדפוסי
–תכןדפוסיבשםעיצובמונחהעצמיםשלליסודותקוראיםהיופשוטאזרביםתכןדפוסיליצירתעצמים
יצירתלצורךבסיסייםתכןדפוסיכאלוביסודותלהשתמשהיהאפשרשובואז.ופולימורפיזםהורשהלמשל
גםוכדאיתכןדפוסיללימודהיסודאבניאתנותןעיצובמונחהעצמיםשגםנאמר.[Gof]אחריםההתכןדפוסי
.[Ppp]ביחדאותםוללמודאלונושאיםביןלהפרידשלא
.העצמיםמונחיהתכןדפוסיאתלהציגלנועוזרת,בהמשךבקצרהוצגשת,UMLשפת
מטרת העבודה 1.1
"עצמיםמונחידפוסיתכן"הנושאהחשובבהנדסתתוכנהשנקראבאופןמקיףאתאסקורבעבודהזאת
Object Oriented Design Patterns)).
שלתשיטחיבסקירהאתהנושאלעומקבהיבטיםשלהנדסתתוכנהולאלהסתפקלהציגמטרתיהיא
קשהלהבנה)בסופושלדברמובילליצירתקודתוכנהגרוע,לימודשיטחישלדוגמאות,שהרי.דוגמאות
.זהקורהבגללשימושלאראויבכליםשנעשהבהםשימושמבלילהביןאותםהיטב.(ולתחזוקה
מה בהמשך העבודה 1.1
.שיעזורלתתמוטיבציהללימודהנושא,אציגרקעהיסטורי7בפרק
.והצדקההגדרהאתן5-ו3בפרקים
עקרונותיישוםלשיפורורמיםת"תכןדפוסי"נראהכיצד.דוןבסוגיותשונותלצורךהרחבהבנושאנ0בפרק
אתאראתהמורכבותשלוואתהקשריםביניהם"דפוסיהתכן"שיטותהקטלוגשלנראהתוכנההנדסת
.שוניםואתהגישותללימודשלהםותחילתעבודהאיתם"דפוסיתכן"
עלקצרהתריענוןסקיראתן,בומתמקדתעבודהזאת"דפוסיתכןמונחיעצמים"כהכנהלנושא,6בפרק
למשל–מונחהעצמיםעיצובכלעלשונותראיהזוויותגראפיתבצורהשמציגיםUMLתרשימיבהשימוש
לעומת,התוכנהקודעיצובוהשלהמבנהאתשמתארסטטיהינותרשים(class diagram)מחלקותתרשים
אותןשלעצמיםביןהנשלחיםהמסריםאתציגשמדינאמיתרשיםינושה(sequence diagram)רצףםתרשי
.מחלקות
.אציגדפוסיתכןנבחרים2בפרק
מעשיותדוגמאותאביא,למשל.בתעשייהפיתוחובסביבותעבודה-מסגרותבתכןבדפוסישימושאציג2בפרק
.תכןבדפוסיתמשתמש( (frameworkעבודה-מסגרתכיצדלמשל–תוכנהכמפתחעובדאניבהמהתעשייה
-17-
.נראהדוגמאותכיצדלהשתמשבדפוסיתכןבמהלךפיתוחתוכנה1רקבפ
object oriented anti)"מונחיעצמיםנגד-דפוסי"אציגאתהנושאהמשליםשנקרא,15בפרק,לבסוף
patterns.).שגויעיצובמונחהעצמיםמלהימנעאותנושמלמדיםתכןדפוסיאלוהם
"(המחשבבמדעימתקדםפרויקט"הקורסבמסגרתהמתבצע)עשיממתקדםבפרויקטתלווהזאתעבודה
.כאןשיתוארוהתוכנההנדסתשלהתיאורטייםביסודותמעשישימוששידגים
התוכנהבקודתכןבדפוסינכוןשימוששלדוגמהלתתהפרויקטמטרת.ציורתוכנתיהיההמעשיהפרויקט
העיצובבמסמך.UMLתרשימיבעיצובשיעשהשימושךמסמבעזרתעוצביהפרויקט,כלומר.עיצובהובמסמכי
מונחיתתהתכנותבשפיפותחהפרויקט.הפרויקטפיתוחלצורךבהםשאיעזרתכןדפוסיעלהסברויינתןיודגם
כמו–תכןבדפוסישתתמוךכךבעצמההורחבהזאתשפה.Javaשפת–בתעשייהמאודשנפוצההעצמים
.בהמשךכדוגמאשאביאObserverהתכןבדפוסתמיכהלמשל
-13-
היסטורי רקע 2
התכן דפוסי צמחו שורשים מאיזה 1.1
למשל,התוכנהבתעשייתםבההשימושלפניהרבהעודבתחומיהנדסהשוניםהתפתחהתכןדפוסינושא
מסויםבגובהנבניםחלונות,למשל)מסויםדפוסלפישנבניםבתיםלבנייתתכןדפוסייםקיימ.באדריכלות
(.לביתהכניסהדלתלידממוקםלאכללבדרךשינהחדרו
תורתמאבותכאחדשמוכר)אלכסנדרכריסטופרהאדריכלעלשמספרתהיסטוריתסקירהניתנת[Part]בספר
דומהבעיהלפתורשנועדובנייהשיטותמהםואסףגבוההבאיכותשנבנומבניםשחקר(תכןדפוסיבהשימוש
קראהואאלכסנדרכריסטופרשפרסםבספרים.אלובנייהבשיטותעצמםעליםשחוזרדבריםהאתמצאואז
שללאדריכלותיםשקשורדפוסיםבעסקאלכסנדר,כאמור(.patterns)דפוסיםבשםהאלוהדומיםלדברים
.וכבישיםגנים,בנייניםכמומבנים
[Ais]:הבאהמפורסםטהמשפאתכתבאלכסנדר,(התוכנהבתעשיית)רביםבמקורותמצוטטשהואכפי
"The elements of this language are entities called patterns. Each pattern describes a
problem that occurs over and over again in our environment, and then describes the core of the
solution to that problem, in such a way that you can use this solution a million times over, without
ever doing it the same way twice." (p. 10)
-15-
תוכנה בהנדסת התכן דפוסי התפתחות 1.1
שלהחשוביםמהיסודותאחד,למשל.והכרחיתטבעיתחותהתפהיאתוכנהבהנדסתהתכןדפוסיתפתחותה
,למשל.לשינוישמועדתוכנהקודשל(encapsulation)סכימוהואתכןדפוסיי"עשממומשתוכנההנדסת
לקוחותמה(כימוסלועושה)שלההמימושאתשמחביאהבסיסיתישותהיאמחלקה,עיצובמונחהעצמיםב
התמיכהזמןליחסיתמאודקצרלזמןנחשבתוכנהפיתוחזמןשהרי.מפרסמתשהיאבשירותיםשנעזריםשלה
שלאספקטיםשלכימוסהנעשאםלכן(.התוכנהעלותלעגםמשפיעשזה)וךהארהזמןהואש,והתיקונים
לצמצםנוכל,הקודאתלשנותשנרצהברגעאז(זאתעבודהבהמשךכךעלארחיב)לשינוישמועדיםהתוכנה
מפרויקטלקחים(.ועודאדםכוח,הארגוןמיקוד,כסף,זמן:במשאביםנחסוךובכך)קטןלתחוםהשינויאת
.[Dgd]במאמרלמצואניתןבעברשפותחלדוגמהדומה
זהשספרכפיאך,(בהמשךשאתארכפי)[Gof]הספרפרסוםעםגדולהמרץזריקתקיבלהתכןדפוסינושא
פורסמופעמיםוהרבהבתעשייהפיתוחאנשישלהעבודהבמהלךהתפתחויםרבתכןדפוסי,בעצמומעיד
מבחניאתששרדואלהםהקובליםהמהתכןדפוסי(.באינטרנטיםבפורומלמשל)רשמילאובאופןבמבוזר
עכשיושהומצאתכןדפוס,כלומר)ולוטשושופרוםההזמןובמשךהשניםלאורךהתוכנהתעשייתשלהקבלה
.(מיידיבאופןבתעשייהמקובלכדפוסלהתקבליוכללא
אובקצרהGang of Fourהמפורסםהחיבהבשםבקיצורביחדשידועיםארבעהחוקריםפרסמו1115בשנת
Gofהספראת[Gof]בתחוםך"תנשנחשב.
.שלהםבספרתכןדפוסי73קיטלגוהםושנים5-מיותרארכההםשלמחקרהבודתע
בשנת,למשל.[Gof]הספרפירסוםלפניהרבההתכנהבתעשייתהתפתחוהתכןדפוסי,לעילשנאמרכפיאבל
תכןדפוסיפיתחואלכסנדרהאדריכלשלמספריושהושפעוקנינגהםוארד-ובקקנטהתוכנהאנשי,1987
(עיצובמונחהעצמיםבשעוסקכנס)OOPSLAבכנסמצגתוהציגומשתמשימנשקבנייתלצורךתוכנהעיצובל
נכתבו[Gof]ספרהפרסוםלאחר.עיצובמונחהעצמיםאנשיי"ענתרמובנושאומצגותמאמריםהרבהומאז
תעבודהומסגרבתוךלמשל,תכןדפוסיבנרחבשימושנעשה,בתעשייה.בנושארביםוספריםריםמאמעוד
.[Acd]שלרובמממשותדפוסיתכן
-10-
הגדרה 3
.תכןכדפוסלהיחשביוכלמהנגדירעתה."תכןדפוס"שלהלשוניתהמשמעותאתהצגתיהמבואבפרק
דפוסכאשר,נתון(context)בהקשרתוכנהעיצובשלתכלליבעיהשללפיתרוןמופשטתכדרךתכןדפוסנגדיר
:[Alex, Gof]הבאותבדרישותלעמודצריךהתכן
ושונותרבותתוכנהעיצובבעיותלפיתרוןחוזרלשימושניתן
בהמשךשנראהכפיתוכנהשלנכוןעיצובבעקרונותטיואלגניעילבאופןלהשתמשצריך
הפיתרוןנותןשוהחסרונותהיתרונותאתלתארצריך
האקדמיתוהקהילההמקצועאנשימצדוהביקורותהזמןמבחןאתלשרודחייב
להגדרה משלימות הערות 1.2
משמשיםהתכןדפוסי.המקצועאנשיביןידעהעברתתוךטובהבפרקטיקהחוזרשימושנעשהתכןבדפוסי
.[[Mullבעיותלפתרוןואלגנטיותיעילותלדרכיםטובותדוגמאות
רהמושגלעילבהגדרההוזכר קש תכןדפוסמגדיר[Alex]בספרואלכסנדרכריסטופרהאדריכל(.context)ה
רקה אתשמגדירהכשלישייה רביןש קש נושאאתבחשבוןלקחתמאודחשוב.והפיתרוןבעיה,מסוים ה
הטובבמקרהצורךללאסיבוךלהוספתגורמתבהקשרלהתחשבמבליבתוכנהתכןדפוסהטמעתכיהקשרה
[Wick].
:זאתבעבודהנבחריםתכןדפוסיאציגגםכך.[Abcm]תכןדפוסלהציגמקובלתההדרךלהלן
.המשתמששלהמיליםאוצראתומרחיבאחיזהכנקודתמשמש–דפוסהשם .1
.והבעיהההקשרהצגת .7
.הפיתרון .3
.חסרונותהויתרונותהותאורהפיתרוןשלהתוצאות .5
-16-
מה"–אחדכלשלהמבטבנקודתתלויהתכןכדפוסלהיחשביכוללאמהההחלטהשבכךההגדרהאתנסייג
הנתוניםמבנה,למשל.[Gof]"פרימיטיביבנייהכבלוקיראהאחראדם,תכןכדפוסיראהאחדשאדם
-לבניגוד)תכןדפוסאיננוSingleton-שהטועניםויש[[Gofפיעלתכןדפוסלנחשבאל"מקושרותרשימות"
Gof).
-12-
תכן בדפוסי לשימוש הצדקה 4
התייחסותתוך,שמתקבליםמהיתרונותחלקלהלן.רביםיתרונותנותןתוכנההנדסתבתכןבדפוסיהשימוש
(:מקורותממגווןאלויתרונותאספתי)עצמיםמונחיתכןלדפוסי
.[Gof]אחריםמפתחיםשלמניסיונםללמודנועדותכןדפוסי-בניסיון שימוש .1
,הורשה)עיצובמונחהעצמיםביסודותשגויבאופןלהשתמשמאודקל-הנדסיים בכלים נכון שימוש .7
מאודקשהתוכנהנוצרתשכך(ומימושםיםמנשק,כימוס,פולימורפיזם,קומפוזיציה,אגריגציה
.מפתחיםשאנובתוכנהמיטביתבצורהאלויסודותלשלבלנועוזריםהתכןדפוסי–ולתחזוקהלהבנה
להיותצריכהמחלקה-(OCP)Open-Close Principle-ה בעיקרון עמידההיאנוספתטובהדוגמא
כאשרנרצהלשנותדבריםאזהקודשלהמחלקה,כלומר.[Bert]לשינוייםסגורהאךלהרחבותפתוחה
.אצלההבהורשהושימושבי"נשנהיהיהתוספתשלמחלקותחדשותעשכןמה.לאלהשתנותשצריך
לחשוףללקוחרקאת)נדאגלעשותלהכימוס,כךשכאשרנכתובאתהמחלקהי"אתזהנשיגע
המחלקהתיהיהאחראיתעל,כלומר.ונדאגשהיאתיהיהרכיבמודולריקטן(המנשקההכרחיאליו
(.SRP)Single Responsibility Principle-עיקרון ה פי-וזאתעלבלבדנושאאחדבודד
(העצמיםמונחית)התוכנהממערכתחלקיםלתארשנצטרךבמקום-משותף מילים אוצרב שימוש .3
כלשלפירוטלמשלחסכנובכך–התכןדפוסשםאתלומרכ"בסהיכוליםאנומפורטבאופןשלנו
,המחלקותביןהתקשורתאופן,מבצעותשהןהפעולות,מחזיקותשהןהמידע,המשתתפותהמחלקות
.[Fbs]ועודםמנשקיוההמחלקותבין(מימוש,הכלה,רשההולמשל)היחסים
להרבהדומהמבנהבעלייהיושלנומהתוכנהגדוליםחלקים-(reuse)החוזר השימוש הרחבת .5
דבר–(הורשהי"עלמשל)במחלקהחוזרשימוששלברמהרקולאאחריםושלשלנואחרותתוכנות
.[Njga]ותחזוקתההתוכנהבדיקת,התוכנהתיעודעלמאודשיקל
מערכתשלנכוןבעיצועקרונות"פרקבכךעליורחב–שישתנו שסביר עיצובב אספקטים של הסתרה .0
.11בעמוד"תוכנה
.פעולהשמשתפיםמודולים/עצמיםביןחלש(coupling)לצימודלשאוףיש-חלש צימוד .6
החלשמהצימודצימודרמותשלבסולםשמובאותהבאותהאפשרויותאתכולל"צימוד"גהמוש
:[Knob]ביותרהחזקלצימודועד(צימודחוסרלמעשה)ביותר
לשנותמבלימהםאחדכללשנותוניתןאחרקודבקטעתלויאינואחדקודקטע–צימודחוסר
.האחראת
חתימהצימוד(signature coupling)תלותכלומר,מסוימתמחלקהשלבחתימהתלויקוד-
שלההמלאהשםי"עשניתן,המחלקההמלאשלבזיהויוהמחלקהשלהמתודותשלבחתימה
-12-
[package+name]מנשקבשימושי"עזאתלפתורניתן.ממנויורשתשהיאהמחלקותובעץ
(interface).
נתוניםצימוד(data coupling)–.קטגוריהמאותהלנתוניםיחדניגשיםשוניםמודולים
סטודנטיםניהול"מודולרק,למשל.בלבדאחריותושבתחוםבנתוניםיטפלמודולשכלנרצה
."הסטודנטיםנתוניבעדכוןיטפל
בקרהצימוד(control coupling)–.אחרמודולפעולתעללהשפעהבקרהנתונישולחאחדמודול
פיעלפעולתואופןאתמשנהYמודולואז[3..1]בתחוםמספרYלמודולשולחXמודול,למשל
.זהמספר
חיצוניצימוד(external coupling) –.מסוימתבחומרהאומסוימתשלישיצדבתוכנתתלות
משותףצימוד(common coupling)–(.זיכרוןתאלמשל)משאבלאותוישירותניגשיםמודולים
תוכןצימוד(content coupling)–.אחרמודולשלפנימייםלנתוניםישירותניגשמודול
ברמהלחשובבמקוםדפוסיםשליותרגבוההברמהלחשובלנויםמאפשרהתכןדפוסי–הפשטה .2
.[Fbs]הקטניםהפרטיםבכלשעוסקתמימוששליותרנמוכה
-11-
הערות והארות, סקירת ספרות —סוגיות בדפוסי תכן 5
תוכנה מערכת של נכון בעיצו עקרונות 1.1
העלותאתלהפחיתיעזורנכוןעיצוב.התוכנהבתעשייתמאודחשובדברהואתוכנהמערכותשלנכוןעיצוב
קטנהבתוכנהמדובראם–ומורכבותגדולותתוכנהמערכותעלמדוברבעיקר.המערכתתחזוקתשלהגבוהה
(overhead)תקורהמחיריששהרי,כאןשיובאובכליםמשימושלהימנעדווקאכדאילפעמיםאזופשוטה
.אלובכליםלשימוש
:אותםרואהשאניכפי,מקצועיותורמתמורכבותשלעולהבסידורעיצובעקרונותלהלן
Anti-Patternשלשמוזהושנראהבהמשך)"ספגטיקוד"למובילשמודולרילאקוד–עיצוב ללא .1
יותרקשהיהיההזמןבמשך.הקודחלקיביןתקשורתלצורךגלובלייםבמשתניםולשימוש(מפורסם
(.לבדוק,לתעד,לתקן,להרחיב,לשנותכלומר)הקודאתלתחזקויותר
י"עגדלהדולריותמוה– םביניה יםשמתקשר( components) לרכיבים תוכנה מערכת תחלוק .7
.כיביםהרביןהיטבמוגדריםבמנשקיםושימושגלובלייםבמשתניםהשימושצמצום
של(scope)התחוםצמצוםי"עמערכת-תת/רכיבכלבתוךגםגדלההמודולריות–פרוצדוראלי עיצוב .3
-תתבתוךהיטבמוגדריםבמנשקיםשימוש,בקודחוזרשימוש,שלהםהחייםזמןושלהמשתנים
.המערכת
-תתבתוךדלהגהמודולריות.תוכנהמערכת-תתבתוךקודשלמודוליםיוצרים–קוד של מודולים .5
.המודוללתוךמצטמצםהפרוצדורותשלגםוהגלובלייםהמשתניםשלהתחוםשכךבהמערכת
עתההיאהתוכנהמערכת)הקודשלהפשטההרמתהרחבתמקבליםאנחנו-עיצוב מונחה עצמים .0
,(מסוימותמטרותלהשגתיחדשעובדיםעצמיםשלמקבוצהשמורכבתמסוימתמציאותשלמודל
החוזרהשימושאופןהרחבת)הורשה,(ובמנשקיםכימוסבהשימושהרחבתי"עלמשל)יותמודולר
.פולימורפיזם,(בפרוצדורותרקשימושלעומת
-נכון עיצוב מונחה עצמים עיצוב בעקרונות שימוש .6
:[Fbs]הבאיםהחשוביםעיצובהעקרונותנשתמשב,למשל
.מודולאריקודשליתוחלפעוזר–מימושמולולאמנשקמולתכנות/עיצוב
הרכבההעדפת(composition)והאצלה(delegation)בהורשהשימושפניעל.
-75-
בקשהקבלמXשלמחלקההאצלהנוצרתכאשרעצם:[GoF]-כפישמתוארבנגדירהאצלה
העצם,למימושספציפיXאזבמקוםשנשתמשבהורשהשלהמחלקה.לביצועפעולהמסוימת
Xממחלקהיכךשהואמבקשאתהעזרהשלעצם"ולבבקשהזאתעצילאתהטיפיאYוזאת.
ראה.(YיצביעעלX-יכךש"נממשזאתע)ביחסשלהרכבהYמכילאתעצםXעצםכאשר
.".(א.א—עריכהותרגום)[Pete]המחלקותביןהיחסים:1טבלה"-יחסשלהרכבהב
להפסיקXלעצםגרוםעליחסשלהורשהבכךשניתןבזמןריצהללהאצלהישישיתרון
X-גרמנובזמןריצהשהבקשהל,כך.ממחלקהאחרתעצםולהצביעעלYלהצביעעלהעצם
כאשראנומשתמשים.יהיהמודעלכךXתקבלטיפולשונהמבלישהלקוחשעובדמולהעצם
.לאנוכללעשותשינויזהבזמןריצה,בהורשה
במערכותגדולותיהיהקשהיותר.מיותהרבהשנותנתלנוההאצלההיאגםחיסרוןשלההדינ
.לעומתקודסטטייותר,להביןולתחזקאתהקוד
:(בהמשך מיד כך על ארחיב) שישתנו שסביר עיצובב אספקטים של הסתרה .2
Open-Close Principle(OCP)סגורהאךלהרחבותפתוחהלהיותצריכהמחלקה-
.ייםלשינו
פעולהשמשתפיםעצמיםביןחלשלצימודלשאוףיש.
(SRP) Single Responsibility Principle-מחלקהשללשינויאחתסיבהרקלהיותצריכה.
(.בהמשךמידעליוארחיב)LSP–העיקרוןהואומפורסםחשובעיקרוןעוד
.זאתבעבודהמובאיםשהיתרונותאתלנונותןזה– תכן דפוסיב שימוש .2
.העבודהבהמשךפעמיםכמהכךעלארחיב–תכן דפוסי בין פעולה שיתוף .1
:עבודה-מסגרתב שימוש .15
:[GoF]עבודה-מסגרתהגדרת
(.OOD software framework)עבודהעלבסיסתוכנהמונחיתעצמים-מדוברעלמסגרת
ואיךהןשזהכוללאתהמחלקותמראשאתהעיצובשלהקודהעבודהמספקת-מסגרת
מפתחהתוכנהנדרשרקלשתול.ואפילואתהקונפיגורציהאחתעםחברתהמשתפותפעולה
העבודהוזהיגרום-קודשלמסגרתלתוךה(למשלמחלקותחדשות)אתקטעיהקודשלו
עבודהמדגישהשימוש-מסגרת,כך.העבודהלקרואלקודהחדשבמהלךריצתה-למסגרת
כאשראנומשתמשיםבספריותשל)בקודתוכנהרקושחוזרחוזרבעיצובתוכנהלעומתשימ
עבודהמשתמשת-מסגרת.(אזאנחנועושיםשימושחוזררקבקודשלתוכנהקודתוכנה
אוIoC = Inversion of Control)")היפוךשליטה"בעיקרוןידועבתעשייתהתוכנהשנקרא
היאעושה.”youcallwillweuscallDon’t“שאומר"העיקרוןההוליוודי"בשםהחיבה
-71-
.זהנעשהלהיפך,התוכנה-יכךשבמקוםשהקודשלהמפתחיקראלקודשלמסגרת"זאתע
.הקודשלמסגרתהתוכנהקוראלקודשלהמפתח,כלומר
עקרונותעיצובטובים"יורשים"איכותיתאזאנחנועבודה-כאשראנחנומשתמשיםבמסגרת
פעמיםרבותמסגרת)נהיותרתוךשימושבעקרונותאלווגםמסתגליםלצורתעבודהנכו
במאמרשכתבתיבמקוםעבודתיוגמאדמוצגת(.עלינואופןעבודהנכוןיותרהעבודהתיכפה
[Eli].151שלעבודהזאתבעמוד'וצירפתיכנספחא
עיצובמונחהעצמיםהיסודותאבל.מונחהעצמיםעיצובמחייבלאתכןדפוסיבששימוש,שובכאןעירא
.[GoF]אחריםתכןדפוסילבנייתבהםלהיעזרניתןשבסיסייםתכןדפוסיכלהיחשביכולים
ליסקובברברהי"עשנכתב(Liskov Substitution Principle)LSPהמפורסםהעיקרוןעלנרחיב
.[Liskov]וינגנט'וג
:[Lisk]כךנכתבתהפורמאליצורתובLSP-העיקרון
.Let q(x) be a property provable about objects x of type T“
Then q(y) should be true for objects y of type S where S is a subtype of T." [p. 1811]
ממחלקתלקוחה ציפה לה המקורית ההתנהגותאתלשנותשלאחייבתיורשתמחלקה,פשוטותבמיליםאו
כלומר–להןציפהלאשהואתוצאותיקבלהואPolymorphism-בשימושיעשהלקוחהכאשר,אחרת)האב
.(מבחינתונכונותלאתוצאות
הבאההדוגמאשמסבירהכפי,מחלקותביןביחסשלהורשהןבאופןלאנכוהשתמשלנוטיםרביםמפתחים
.LSP-העיקרוןשלהפרהשמציגה
מרובעשלסוגאמנםהואריבועכיצדמראה,זהעיקרוןבהצגתכללבדרךשמובאת,המפורסמתגמאהדו
.הריבועאתשמייצגתבמחלקהשמשתמשלקוחה מצפה לה התנהגותהמבחינתלאאבלמתמטית מבחינה
לעדכוןמתודהשמכילמנשקלחשוףצריכהולכןהמרובעמחלקתאתיורשתעהריבושמחלקתהיאהבעיה
בכלמעדכןהריבועמחלקתשלהמימוש,בפועלאבל.הריבוערוחבשלעידכוןלמתודהוגםהריבועגובה
אזאבל,בסדרנראההכלכאןעד.שוותהריבועצלעותכלשהריהריבועצלעשהינויחידערךאותואתמתודה
Xלערךשלהםגובההאתומעדכן(ריבועיםהםשחלקם)מוכניםמרובעיםשלמערךמקבללקוחהשנניח
שמוצגיםהריבועיםשלהשטחאבל.שלהםהשטחאתמדפיסהואואזYלערךשלהםהרוחבאתמכןלאחרו
.S=X*YלקבלמצפהשהואלמרותS=Y*Y-כיודפסכמרובעיםלקוחל
יםשונתכןדפוסי.שישתנושסבירעיצובבאספקטיםשלהסתרה,לעילשהזכרתיבנושאמעטארחיבעתה
עיצובמונחהבבסיסיבאופן.[Gof]לשינוישמועדים,שלנובתוכנהשוניםאספקטיםלהחביאלנויםעוזר
המציעותדפוסדוגמאותלהלן.רביםאספקטיםעודלהחביאניתןאבלמחלקהשלמימושמחביאיםעצמים
:[Gof] תכןלכלאחדמהאספקטיםשרוציםלהחביא
.Factory–עצמיםיצירתאופןהחבאת .1
.Bridge–מימושתהחבא .7
-77-
.Facade–יםמנשקהחבאת .3
.Flyweight–עצמיםהשלהאחסוןאופןהחבאת .5
.Proxy–(אחרבמחשבליהיותכוליעצםהלמשל)עצםשלמיקוםהחבאת .0
.Iterator–עצמיםשללסדרההגישהאופןשלהחבאה .6
.State–חייובמהלךעצםשלהפנימיהמצבשלהחבאה .2
.Strategy–הספציפיםהאלגוריתשלהחבאה .2
.Mediator–מתקשריםהםעצמיםאיזהועםעצמיםביןהתקשורתאופןשלהחבאה .1
-73-
תכן דפוסי של גוריותקט 1.1
:[GoF]הבאותותםלקטגוריותנוכללחלקא,למשל.התכןדפוסיאתלקטלגנוהגים
Creational Patterns.עצמיםיצירת–
Factory Method–וSingleton:התכןדפוסילמשל
Structural Patternsמחלקותאועצמיםהרכבת–(Composition.)
.Proxy–וAdapter:התכןדפסוילמשל
Behavioral Patterns.פעולהמשתפיםעצמיםוההמחלקותשבההדרךאפיון–
.Mediator–וObserver:התכןדפוסילמשל
האחרותהקטגוריותלשתייםמחולקהתכןדפוסישבעזרתו(Scope)טווחשלנוסףמימדנוכללתת,בנוסף
:[GoF]הבאות
שלאסטטייםבקשריםעוסקותהן.מהןשיורשותובמחלקותבמחלקותשעוסקיםםדפוסי–מחלקה .1
.הקומפילציהשלבלאחרמשתנים
Adapter-וFactory Method:למשל
הריצהזמןבמהלךלהשתנותיכוליםאלוקשרים.עצמיםשביןבקשריםשעוסקיםדפוסים–עצם .7
.דינאמייםיותרוהם
.Flyweight–וBuilder:למשל
.[GoF]בהםהשימושאופןלפיהתכןדפוסילימודאתלארגןגםניתן
.Composite, Iterator, Visitor:התכןדפוסיבביחדכ"בדמשתמשיםלמשל
-וCompositeביןברורקשריש,למשל.[GoF]ביניהםהקשריםלפיהתכןדפוסיאתלארגןיתןנוכן
Decoratorדומיםמאודגםוהם(אתבהמשךאציגכאשרזאתאסבירComposite.)
[:Part]תכןדפוסישלקטגוריותעוד
1. Basicהתכןדפוסילמשל–Monitorו-Immutable Object
7. Concurrencyהתכןדפוסילמשל–Critical Section–וRead-Write Lock
קשרים "בפרקבהמשךזהבנושאעודאגע)תכןשלארכיטקטורותתוכנהדפוסישלהקטגוריהקיימת,כמןכן
להתייחסשבמקוםתכןדפוסי,כלומר(.ושאבנעוסקתלאזאתעבודהאך,70שבעמוד"התכןדפוסיבין
וכיצדמערכות-מתתשמורכבתתוכנהמערכתשלארכיטקטורהמציגיםהם,מסויימתמערכת-בתתלמחלקות
:[Phd]הבאיםהנפוציםיםארכיטקטוניההתכןדפוסיאתנוכללמצואזאתבקטגוריה.ביניהןקשריוצרותהן
-75-
1. MVCשכוללותתוכנהבמערכותמאודץשנפוארכיטקטוניתכןדפוס–GUIדפוסעלמעטארחיב.
."התכןדפוסיביןקשרים 0.3"הבאהפרק-תתב,בהמשךזהתכן
7. Layersלתוכנהמערכותשלהפרדה–-nשכבות(N-Tiers)היארתביוהנפוצההארכיטקטורהכאשר
:הבאותהשכבותאתשכוללת,Three-Tiers
המידעשכבת(information tier/bottom tier/data tier)–בנתוניםישירותמטפלתזאתשכבה.
העבודהבמקוםמפתחשאניבתוכנות)נתוניםבבסיסשנמצאיםבנתוניםמטפלתהיאכללבדרך
(.DbLayerבשםזאתלשכבהקוראאנישלי
האמצעשכבת(middle tier/business tier)–גםנקראתזאתשכבהBusiness Tierנותנתהיאכי
במדיניותהתחשבותכדיותוךהמידעמשכבתמקבלתשהיאבנתוניםשימושי"עללקוחשירות
.אותםלעדכןגםיוכלמנהלואילובלבדבנתוניםלצפותיוכלבחברהעובד,למשל.העיסקית
הלקוחשכבת(client tier/top tier)-הצגתי"עלמשל,ללקוחישירותשירותיםנותנתזאתשכבה
.האינטרנטדפדפניהיאזאתבשכבהשמשמשתלתוכנהנפוצהדוגמא.ללקוחGUI-המסך
אנועודכלהאחרותבשכבותתלותללא(תוכנהמערכת-תתשהינה)שכבהכללשנותיכוליםאנו,כך
.ותהשכבביןההתקשרותפרוטוקולאתמשניםלא
-70-
התכן דפוסי בין קשרים 1.1
התכןדפוסיאתלמצואכךכדיותוך(top-down)בפרטיםהתעמקותואזעלממבטתוכנהמערכתלנתחיש
התכןדפוסיביןהקשריםאתלהביןהצורךעלנכתב[Gof]בספר.[Weis]םביניהוהקשריםיםהמתאימ
אבל,יןזההמקוםלהביאאתהתרשיםבמלואוא.תכןדפוסיביןקשריםשלתרשיםשםמובאואףיםהשונ
:ההזתרשיםבאתהקשריםהבאיםהמוצגים,אצייןכדוגמא
התכןפוסדChain of RespobsibilityהתכןדפוסעבורהשרשוראתלהגדיריכולComposite.
התכןדפוסCompositeהתכןדפוסבלהיעזריכולIteratorשמשתתפיםעצמיםהאתרוקלסבכדי
.הרקורסיביהעץמבנהב
התכןדפוסFacadeגםנשתמשולכןבלבדאחדמופעלהשיהיהנרצהשלרובאחתבמחלקהמשתמש
.Singletonהתכןבדפוס
התכןדפוסאתבקצרהאציגעתה.תכןדפוסיביןקשריםיוצריםשלארכיטקטורתתוכנהתכןדפוסיגם
תכןדפוס[Fbs]בספר)עצמים-מונחיתכןדפוסיובתוכלשלבניתןאיךנראהואזMVCהארכיטקטוני
-תתשלוששםעלכךנקראMVCארכיטקטוניהתכןהדפוס.(”Compound Pattern“נקראהזארכיטקטוני
.Model, View, Controller:ואותשמרכיביםהמערכות
.MVC-במערכת-תתכלשלהתפקידיםאתמציג,להלן1איור
-76-
MVC [bean] הארכיטקטוני התכן דפוס: 1 איור
-וStrategy,ObserverהעצמיםונחימהתכןדפוסיאתובתוכשלבליכולMVCהארכיטקטוניהתכןדפוס
CompositeהבאבאופןFbs]]:
ה-ModelהתכןדפוסבמשתמשObserverהאתלעדכןבכדי-Viewsבצימודלהיותזאתועם
.איתםחלש
ה-Controllerכמשמש-Strategyהעבור-Viewה–-Viewבמימושיםלהשתמשיכול
.Controller-השלשונים
ה-ViewהתכןדפוסבמשמשתCompositeלקוחלהגראפימנשקהאתלממשבכדי(GUI.)
.טקסטותיבותכפתוריםכמופקדיםובתוכהדיאלוגתיבתשמכילחלון,למשל
שכברController-וView-לחדשModelהתאמתלצורךAdapterהתכןדפוסבלהשתמשניתןכןכמו
.קיימים
MVCכאשרמפתחים.לתחזוקהולהרחבה,טכךשיהיוקליםיותרלבדיקהאינטרנלבנייתשירותיגםעוזר
Dispatcherרכיבזהנקרא.View-לביןהModel-נוהגיםלהוסיףעודרכיבתוכנהביןה,שירותיאינטרנט
.[Sbhs]ביןשכבותאלוObserver-והואמפחיתעודיותראתהצימודהחלששיוצרה
-72-
אנוואזםמסויתכןדפוסבנזכריםשאנוכךי"עםאותלזכורעוזרגםהתכןדפוסיביןהקשריםלימוד
.ואלייםשקשוריםאחרתכןדפוסימשחזרים
כלשליותרטובהלהבנהלתרוםיכוליםאלוהבדלים.יםדומתכןדפוסיביןההבדליםאתללמודכדאי,בנוסף
התכןדפוס,למשל.נתקלנובהמסוימתעיצובתלבעיתכןדפוסכלשליותרטובהולהתאמהתכןדפוס
AdapterהמוכרהתכןלדפוסבפעולתודומהProxyשהואביניהםההבדלאבל-Adapterמנשקללקוחמספק
כפיללקוחהמנשקאותואתמספקProxyזאתולעומתמולולעבודההלקוחאתמתאיםשהואלעצםשונה
.בקצרהכאןאותואתארולכןProxyהתכןדפוסאתהזכרתי.[Gof]אליולגשתרוצהשהלקוחהעצםשמספק
מבליוזאתRealSubjectלושנקרא,מסויםלעצםהלקוחשלבגישהלשלוטמאפשרProxyהתכןדפוס
הלקוחואזמרוחקמחשבעללפעוליכולRealSubjectהעצם,למשל.7איורבשמוצגכפי,זאתיידעשהלקוח
.RealSubjectלעצםידיעתוללאהלקוחאתשמקשרProxyהעצםלמועובד
Proxy [Huy] התכן דפוס של מחלקות תרשים: 1 איור
-72-
ומורכבות קושי תודרג 1.1
התוכנהאתלשפרדולמלבהדרגהואזתכןדפוסיבשימושללאמחשבתוכנתפתחללמודללהתחילמומלץ
.[Mgj]תכןדפוסיבעזרת
:למשל.יםפשוטתכןדפוסיבהתחלהדוללממומלץ,כמוכן
Singleton
Proxy
Iterator
:למשל.ויותריותריםמורכבתכןדפוסיבהדרגהדוללמאפשרבהמשך
Compositeלהבנהיותרקשהשלעיתיםרקורסיבימבנהעלמבוססאבלמסובךכךכללא–.
Factory Methodעםאותומבלבליםכימאודלפשוטנחשבהוא–Static Factoryעםאו
SimpleFactoryהזההתכןדפוסאתבהמשךכשאציגזאתנראה.כללתכןדפוסישאינם.
Abstract Factoryהתכןפוסמדיותרמורכב–Factory Methodסוגישלמשפחותליצירתמשמש.
.Factory Method-בשלוConcreteFactory-בלהשתמשניתן(.Productsנקראים)עצמים
ביותרהפשוטותהתבניותאתללמודשתתחילכדאיאזעצמיםמונחותמערכותשלמנוסהעצבמלאאתהאם
:[Gof] הבאותביותרוהנפוצות
Adapter
Composite
Decorator
בוDouble Dispatch-המנגנון.Visitorיכולליהיותםשלהדומילהאתדחותלשכדאיהתכןדפוסיבין
.[Acd](Accessibility)"נגישות"במילהזאתתארנ.ולזכירהללימודמורכבדיהואהזתכןדפוסמשתמש
קשהיהיהזהאזמידימורכבתבדוגמאשימושי"עתכןדפוסנדגיםאםאומורכבהינוהתכןדפוסאם,כלומר
.התכןדפוסאתיעילבאופןדוללמ
Compositeתכןהדפוסבשימושלמשל.תכןדפוסיביןמשילובשמורכביםפתרונותדוללמניתןבהמשך
תאחידופעולותולעשותשונותממחלקותשנוצריםעצמיםשלעץלבנותבבואנוVisitorתכןדפוסעםבשילוב
עיצובבקורס,למשל.נוספותכמתודותפעולותאותןבהעמסתצורךללאשלובצמתיםהנשמרהמידעעלשונות
-71-
:שלמדויםהבאהתכןדפוסישלבשילובהשתמשוהםכךלצורך.לקוחלגראפימנשקהסטודנטיםבנותוכנה
Command,Proxy,Composite–וMediator[Abcm].
ביןקשרים "בפרקשהוצגMVCכמויםארכיטקטוניתכןדפוסישללימודהיותליכולמתקדםשלבעוד
.70בעמוד"התכןדפוסי
-35-
ברדוקציה שימוש 1.1
.[Baat]יתרגוםשלהלקבוצהשלבעיותשקללפתוראותן"רדוקציהמאפשרתלפתורבעיהע
דפוסיהרבהגםיםקיימאך.SingletonאוFactoryלמשל,במהירותםאותלהביןשקלפשוטיםתכןדפוסייש
.Visitorלמשל,יותרמאוחרםאותלזכוריותרקשהויהיהללמודזמןיותרייקחםשאותיותרמורכביםתכן
:הבאיםהיתרונותאתלנושמעניקההרדוקציהלעזרתנולבואיכולהכאן
.החומרשליותרפשוטהוהדרגתיתהצגה
ביותרהפשוטיםבשלביםשנזכריםזהי"עהתכןדפוסאתבזיכרוננולשחזרעזרה.
מוצאיםלאואנולפתורנדרשיםשאנומורכבתבעיההיאתכןדפוסיבנושאברדוקציהלשימושנוספתדוגמא
פיתרוןדאחכליםשנותנתכןדפוסיכמהלשלבשנוכללהיותיכולאבל.הבעיהלפיתרוןםשמתאיתכןדפוס
כולללפתרוןמיטביתבצורהלשלבםבכדיהתכןדפוסימחלקקלותלשנותאפילונצטרךואולי.יותרפשוט
.המוצגתלבעיה
ברדוקציהלהשתמשמתקדמיםסטודנטיםשלוגםמתחיליםסטודנטיםשלקשייםעלמדווחיםמחקרים
מקוריפיתרוןלתפירתרצוןלמשל)פסיכולוגייםקשייםניהםבי,[Baat]אלולקשייםאפשריותסיבותונמנים
אבל–ברדוקציהיותרלהיעזרנטומתקדמיםשסטודנטיםמדווחזאתעם(.קיימיםפתרונותעלנסמךשלא
,ברדוקציהשהשימושהזאתהסמינרבעבודתמסופרעוד.זהחשובבכליבשימושבקשייםנתקלוהםגםעדיין
לולמצואשכדאימחדלשזהשםנטען.בלבדעקיףבאופןנלמד,באוניברסיטהואפילוםהתיכונייהספרבבתי
.פיתרון
.עץ-נתוניםמבנהשלללימודרדוקציהי"עCompositeהתכןדפוסשללימודהיאטובהדוגמא
.Compositeהתכןדפוסאתיותרקלבאופןלהביןנוכלרקורסיבינתוניםמבנההינושעץמביניםשאנולאחר
.[Gof]עץהנתוניםמבנהי"עCompositeהתכןדפוסאתלהסבירניתן
אבללהבנהקשהבהתחלהלהראותשעלולCompositeהתכןדפוסשלמחלקותתרשיםמציג3איורלהלן
איךלמשללהסבירניתןאזו.שלאחריו5איורבשהבאתינתוניםעץשללאיורולגשתברדוקציהלהיעזרניתן
.בניםלהשישבעץכצומתמתפקדCompositeעצםכל
-31-
Composite [Comm] תכן דפוסה של מחלקות תרשים :1 איור
[Comm] עץ הרקורסיבי הנתונים מבנה של איור: 1 איור
Chain ofהתכןדפוסאתקודםדוללמגםניתןרדוקציהי"עCompositeהתכןדפוסשלהבנהלצורךש,אעיר
RespobsibilityהתכןדפוסאתהדרגתיתבצורהלהביןיותרקלואזComposite.בשנילהשתמשניתן,למשל
.Chain of Respobsibilityהתכןדפוסאתשממחישיםהבאיםהאיורים
-37-
.גרפיתבצורהChain of Respobsibilityהתכןדפוסאתםמציגי6איורו0איור,הבאיםהאיורים
Chain Of Responsibility [Comm] תכןה דפוס של טיפוסי עצמים מבנה :1 איור
Chain Of Responsibility [Comm] תכןה דפוס של מחלקות תרשים: 6 איור
-33-
תכן דפוסי עם עבודה תחילתל גישות 1.6
תוכנה לעצב הקושי 1.6.5
ליצוראפשריבלתיכמעטזה.קשהמשימההיאחוזרלשימוששניתנתעצמיםמונחיתתוכנהשלטובעיצוב
תוךבניסיונםנעזריםעצמיםמונחיתתוכנהשלמנוסיםמפתחים.[Gof]הראשונהבפעםכזהטובעיצוב
מנוסיםפחותתוכנהמפתחילעומתזאת.בעברטובפתרוןכנותנותהוכחושבתבניותושובשובחוזרשימוש
עיטורכמובתבניותמשתמשיםהמנוסיםהמפתחים.שלהםחדשפיתרוןי"עבעיהכללפתורשנוטים
(decorate)בתוכנהמצביםשלייצוגאולתוכנהיכולותבקלותלמחוקאולהוסיףבכדיעצמיםשל(states)י"ע
בעברששולבותכןדפוסיםהלבחורשכדאיהתכןשדפוסיהואמוצלחלעיצובלעזורשיכוללכל.עצמים
.בהצלחהתוכנהבמערכות
תכן בדפוסי השימוש פנמתלה גישות 1.6.5
האימרהנכתבה,[Gina]טעויותעשייתבעקבותשבאבלימודשמשתמשתהמחשבמדעיהוראתעלבמאמר
מהטעויותיותרטובלומדאתה"יותרהחזקההאמרהוגם"ושהעשאתהמהטעויותלומדאתה"–הידועה
לפחותלנועוזרתאכןהיאפעמיםוהרבהשלנובאינטואיציהנעזריםאנותחומיםבהרבה."עושהשאתה
הגשתלצורךנושלבאינטואיציהרקפעמיםהרבהמשתמשיםאנחנו,במאמרשנכתבכפיאבל.חלקיתבצורה
מדויקיםבכליםשימושדורשיותרמדויקפיתרוןוהרי.יותרמדויקפיתרוןרשותדושמטבעןלבעיותפיתרון
מדווח(.מתמטיתבאינדוקציהשימושי"עלמשל)הכלליבמקרהתקףשפיתרוןלהוכיחהצורךלמשלכמו,יותר
עלאותובדקושהםבגללאליהשנדרשולבעיהטובפתרוןהואשלהםשהפתרוןטועניםשסטודנטים,במאמר
.טובפיתרוןהואשהפיתרוןלהם"ברור"שפשוטאודוגמאותמספר
להיבטיםלבשמיםולאשלהההתנהגותאתמעריכיםשהםכךי"עתוכנהשלנכונותלמדודנוטיםסטודנטים
,(Scalability)במקבילהמשתמשיםמספרשלושלהקודבסיסשלרחבהלהאפשרותמתןמוכעיצובשל
.[Mgj]להרחבהישותוגמלשינויעמידות
?האינטואיציהמגבלותעללהתגברללמודניתןכיצדאז
בנוסף.הנכוןכפיתרוןאותםמחליףלבסוףהתכןדפוסכאשרמוטעיםתוכנהעיצובפתרונותנסותלניתן
בעיהאיתולפתורלנסותואז"נכון"תכןדפוסקחתלכלומר.קיימיםתכןבדפוסימוטעהשימושנסותלאפשר
"הקשר"הנושאאתמעשיבאופןמתרגליםאנחנוכאןכלומר.עבורהנכוןכפיתרוןמתאיםלאהתכןשדפוס
(context)תכןדפוסבהגדרתשמופיע[Mha].
אותםעודדואףלטעותלסטודנטיםאפשרותנתןהכותבשבופשוטשיעורהועבראיךנכתב[Weis]במאמר
לתקןקשהיהיהכיצדלהםוהראהלבעיההרחבותהוסיףמכןולאחרבהתחלהפשוטהבעיההצגתי"עלטעות
(שכרלחישובמערכת)דוגמאנותןהואבמאמר.המורחבתהבעיהלפיתרוןשיתאימוכךשהציגוהפתרוןאת
אתחדשכרעיוןמציגהואלבסוף.פיתרוןבכלהבעייתיותאתמסבירואזמוטעיםלפיתרונותרעיונותוסוקר
-35-
הבעיהאתטובהבצורהפותראכןזהפיתרוןלמהומסבירמלכתחילהללמדרצהותואןהנכוהפיתרון
.Factory Method-וSingletonכמותכןדפוסיהוצגו,זאתבדרך.שהוצגה
מחשבהפחותשלהשקעהעםיותרקשהלעבודנוטיםתוכנהומפתחיוגודלהולךהתוכנהבעולםהסיבוך
י"עיותררבהוהערכהעבודתםשליותרטובהנראותכמורביםנתפסיםיתרונותלהםנותןזה.קודמת
.[Ster]תכןבדפוסימיטבישימושנזנחפעמיםהרבהלכן.שלהםהמנהלים
ילמדושהסטודנטיםצורךיש.,[Czbd][Trt]למתחיליםכקורסתכןדפוסיללמדטעםשאיןמחקריםהראו
עוזריםתכןדפוסיאמנם.זהבתחוםניסיוןירכשוגםשהםודמאוחשובטובהבצורהעיצובמונחהעצמים
להשתמשלדעתבכדיעיצובמונחהעצמיםשלטובהבהכרהצורךישאבלתוכנהמערכתשלעיצובהאתלשפר
עיצובמונחהעצמיםבוניסיוןידעמניחיםשהם,םספרשלבהקדמה,כותביםGoFגם.תכןבדפוסיהיטב
[Gof].
עצמםעלשחוזריםתוכנהשלבמבניםשהתנסומנוסיםלמפתחיםאפילוקשהנושאהואתכןדפוסילימוד
[Weis].מונחהפיתוחשללימודעםיחדתכןדפוסילימודלשלבעדיףואפילושכדאיהטועניםישאמנם
יסותהתפבשינוייותרהתקשויותרמאוחרבשלבתכןדפוסישלמדושסטודנטיםנטעןכאשר.[Ppp]עצמים
שללהעברההשלביםועללסטודנטיםשהועברוקורסיםמדוברעלואמנם.הזמןבמשךאצלםשהתגבשו
וניתןאמיתייםקורסיםעלהםגםחוקריםאחריםמסתמכיםמאמרזאתלעומתאבל,יותרקלהבצורההחומר
שלהמתקדםהנושאאתללמודמתחיליםסטודנטיםשלהבעייתיתהבשלותמידתעל[Trt]מהםלהתרשם
עיצובמונחהיסודותכמו,הרקעבחומרוניסיוןידעמספיקצברולאעדייןהסטודנטיםכאשרתכןדפוסי
–נכוןעיצובלבנותכיצדללמודאלא,אותםלהגדירולדעתתכןדפוסישלשמותלשנןלאהואהרעיון.עצמים
.[Mha]הפיתוחאנשישלבשלותדרושהכךלצורך
שללימודלשלבהיאלהציעשאוכלפשרהגישת."תפסתלאמרובהתפסת"שלמצבכאןלהתקייםעלוללדעתי
נושאללמודלסטודנטקצרההכנהמעיןיעניקשזהכךהבסיסיהחומרבתוךביותרמועטהבצורהתכןדפוסי
.לכךיותרבשליהיההואכאשרזהמתקדם
-30-
יםעצמ מונחי תכן דפוסי להצגת כלי - UML שפת 6
מבוא 6.1
שמתענייןשמימניחאני.הנושאאתללמדבאואינו(רענוןלצורך)UMLעיקריאתבקצרהמציגזהפרק
.UML-ועיצובמונחהעצמיםלמדכברתכןדפוסישלבנושא
UMLבשפתמשתמשיםומבניתסטנדרטיתקלהבצורהעיצובמונחהעצמיםשלוהתנהגותמבנהלתעדבכדי
(Unified Modeling Language.)
UMLאיחדוובהמשךעיצובמונחהעצמיםשללניתוחמתודולוגיותבנפרדשיצרושלושהחוקריםי"ענוצרה
.[Jose]עבודתםאת
.(עליהמעידששמהכפי)מודליםלתיאורשפההיאUMLשפת
מוגדריםסימוניםבעזרתודרישותהחלטות,יחסים,רעיונותלתפיסתאמצעיהינומודל.מודלעתהנגדיר
(abstract)מופשטלתיאורמשמשיםמודלים.[Pilo]שוניםתחומיםלהרבהמיושםליהיותשיכולהיטב
[Tome]מורכבותישויותשל(simplified)ומפושט
.פרטכלשלמלאתיעודלעומתפשרהזאת–לפרטיםירידהללאהעקרונייםבאלמנטיםמתמקדמודל
האמיתיתישותל"תרגום"דורשמודל
שונותלפרשנויותחופשדרגותישבמודל
.משולבאוטקסטואלי,גראפילהיותיכולמודל
[Tome]הבאיםהכלליםי"עמוכתבתהמודלמשתמשבההגראפיתהשפה
והטקסטהגראפיותהצורותהןאלו-(בית-אלף)חוקייםסמליםשלאוסף .1
הסמליםאוסףשלםחוקייצירופים-(תחביר)חוקייםצירופים .7
חוקיצירוףכלשלהמשמעות-(סמנטיקה)משמעויות .3
במודללבטאניתןמה-(expressiveness)ביטויכושר .5
-36-
.עיקריותקטגוריותלשתינחלקיםהמודלים
.ביניהםוקשריםישויותהמתארמודל-מבני/סטטימודל .1
.מצבשינוייאותהליךשלזרימההמתארמודל-תפקודי/התנהגותי/דינמימודל .7
לתתבאותהןוכןהעיצובשליותרמעמיקהלהבנהשנועדושונותראייהזוויותנותנותאלוקטגוריותשתי
למשל–העיצובשלשונהראיהזוויתגראפיתבצורהמציג,המודלשמציג,תרשיםכל.שוניםענייןלבעלימענה
דינאמיתרשיםלעומתמחלקותבתרשיםהמחלקותהצגתי"עהקודשלהמבנהאתשמתארסטטיתרשים
.רצףבתרשיםמחלקותאותןשלעצמיםביןהנשלחיםהמסריםאתשמראה
-32-
נבחרים סטטיים תרשימים סקירת 6.1
(Class Diagram) מחלקות תרשים
רטיותהפפונקציות/השיטות,המחלקהשםלמשל)יםמנשקוההמחלקותהצגתי"עהקודשלהמבנהתאור
.ביניהןוהיחסים(המאפיינים,והציבוריות
.הבאה1טבלהבמפורטיםהמחלקותביןהיחסיםהצגת
תאור סימון המחלקותביןהיחס
מחלקותשתיכאשר
לשנייהאחתקשורות
שליחסנוצר,דרךבכל
.בינהןאסוציאציה
התאחדות=אסוציאציה
(Association)
שלאסוציאציהיחס
הרבהאולאחדהרבה
"הרבה"נסמן.להרבה
.כוכביתי"ע
(Multiplicity)ריבוי
ביןאסוציאציהיחס
כיוונידוהואמחלקות
י"ע.מחדלכברירת
אתנקבעחץראשהוספת
.האסוציאציהיחסכיוון
יוצאהחץ,כלומר
המכילהמהמחלקה
מכוונתאסוציאציה
(Directed Association)
-32-
.המוכלתהמחלקהלכיוון
אסוציאציהליחסדוגמא
למחלקהכאשרהיאכזה
סוגישלמגווןיש
.אחריות
עובד,למשל
יכולבאוניברסיטה
אופרופסורליהיות
.הביתאבאודוקטור
באסוציאציהכמוחץשלסימוןאותו
מהמחלקהיוצאשהחץאלא,נתמכוו
.עצמהאל
משקפתאסוציאציה
(Reflexive Association)
נוצרתמחלקהכאשר
מחלקותשלכאוסף
ליחסנקראאז,אחרות
יחסבשםזהאסוציאציה
.אגרגאציה
יוצמדהמעוייןסימון
.המכילהלמחלקה
התקבצות=אגרגאציה
(Aggregation/Has A)
היאקומפוזיציה
יחסעלוריאציה
שליחס.האגריגאציה
מרמזקומפוזיציה
מקשרחזקחייםשמחזור
למשל.המחלקותבין
קיוםזכותאיןלמכללה
.סטודנטיםללא
המלאהמעוייןסימון
.המכילההלמחלקיוצמד
הרכב=קומפוזיציה
(Composition)
היאהיורשתהמחלקה
מחלקתכמוסוגמאותו
.האב
ליצורמאפשרזהיחס
.חוזרלשימושאלמנטים
הכללה/הורשה
(Inheritance/Generalization/
Is A)
-31-
בעצםהיורשתהמחלקה
התפקודיותאתיורשת
שהוגדרההמשותפת
.האבבמחלקת
שלביחס,כללבדרך
אחתיישות,מימוש
אךמנשקלרובשהיא)
גםלמשלליהיותיכולה
כלומרמופשטתמחלקה
(מימושללאמחלקה
שלקבוצהמגדירה
שלבצורהתפקודיות
אחרותיישויותואז.חוזה
(מחלקותהןאלולרוב)
.החוזהאת"מממשות"
מימוש
(Realization)
.(א.א —עריכה ותרגום )[ Pete] המחלקות בין היחסים: 1 טבלה
-55-
.ביניהןיחסיםהעלמסבירומחלקותתרשיםשלדוגמאמציגהבא2איור
[Sagg] מחלקות תרשים של דוגמא: 7 איור
-51-
(Component Diagram) רכיבים תרשים
.ביניהםיםמנשקוהתוכנהרכיביתאורמציגהבא2איור
[Sagg] רכיבים תרשים של דוגמא :8 איור
-57-
(Deployment Diagram) פריסה תרשים
.עליהםהמותקניםהתוכנהרכיבישלוביניהםיםמנשקוההחומרהמארזישלתאור
.זהתרשיםבתוךלעילשהוצג(Component Diagram)הרכיביםשלתרשיםהאתמשלביםבעצם
[ Mill] פריסה תרשים של דוגמא: 9 איור
-53-
נבחרים דינאמיים תרשימים סקירת 6.1
(Activity Diagram) פעילות תרשים
הזרימהתרשיםשל(expressiveness)ביטויכושרישזהלתרשים.תהליכיםזרימתזהותיאורשל
(flowchart)מתחיליםלתכנותבקורסישלומדים[Jose]שלתוספתי"עהביטויכושראתמרחיבאוהאך,
swimlanes(לוגייםנושאיםלפיתרשיםהחלוקת),Guard conditionsתנאימקבלבתהליךמעברכל)
,(exceptions)חריגיםבמקריםטיפול,(זמניתבושקוריםבתהליכיםטיפול)A fork and join,(לביצועו
.סיגנלים
(.בהמשךתוארי)המצביםתרשיםבפעילותשלביצועטלפרבכדיזהתרשיםבלהשתמשניתן
[Sagg] פעילות תרשים של דוגמא: 11 איור
-55-
.שגיאהבמצבטיפולמציג11איור
.[Alle] פעילות תרשיםב שגיאה מצבב טיפול הצגת: 11 איור
.בזמןשתלויסיגנל,סיגנלקבלת,סיגנלשליחת:בסיגנליםטיפולמציג17איור
[Alle] פעילות תרשיםב בסיגנלים טיפול הצגת: 11 איור
-50-
(Statechart Diagram) מצבים תרשים
.לאירועיםכתגובה(עצמיםשלפנימייםמצביםמוצגיםלרוב)במערכתמצביםביןהמעברים
שקרההאירועאתלכתובנוכל(מרובעיםי"עמיוצגיםהמצבים)מצביםביןהמעבראתשמציגחץכלעל
(event)התנאיאת,(guard)הפעולהואתהמעברלביצוע(activity)במערכות:הערה)המעברבזמןצעתשמתב
.event [guard] / activity:הבאבאופןזאתנכתוב(.אפסיהינוהמעברשזמןמודגשאמתזמן
(.מהמצביציאהאוכניסהשלאירועלמשל)בושמתבצעותהפעולותאתדומהבאופןלכתובנוכלמצבכלבתוך
[ Mill] מצבים תרשים של דוגמא: 11 איור
-56-
(Sequence Diagram) רצף תרשים
(.מסרשלכסוגלזהלהתייחסניתן)עצמיםשלהומחיקהיצירוכןהעצמיםביןהנשלחיםהמסריםתאור
מלמעלהמתקדםיחידעצםשלופעילותוחייוזמןואילולימיןמשמאלמתקדםהעצמיםביןעילותהפזמן
(.lifelineנקראזהקו)ממנושיורדמקווקוקווכןשמואתשמכילמרובעי"עמיוצגעצםכל.למטה
(איורראה)המוחזרתהתשובהסוגאתנצייןואףעצםכלשללמתודותכקריאההמסריםאתנציגרשמיבאופן
כלשמשתנהמימושלביןעיצובביןהפרדהלצורך)המסרמהותאתשיסבירשםרקלצייןבתעשייהנהוגאבל
(.הזמן
[ Mill] רצף תרשים של דוגמא :11 איור
-52-
[ Mill] רצף תרשים של דוגמא :11 איור
מסגרותבעזרתנעשהזאתאת.ועודהסתעפויות,לולאותלהוסיףהאפשרותנוספהUML-2-ב
שניאציגהבאהמההרשילאחר.[Info]רצףתרשיםללהוסיףשניתןמסגרותלהלן(.Interaction Frames)
.לדוגמאתרשימים
Altבוצעימתקייםושלשהתנאיחלקהרק.ייםאלטרנטיבחלקיםכמה-.
Optלדומה.אופציה–-Alt.מתקייםשלוהתנאיאםרקשיבוצעבלבדאחדבחלקמדוברשכאןאלא
Parבמקבילמבוצעחלקכל.מקבילי–.
Loopהוסימוןעצמועלחוזרהחלק.לולאה–-Guard.האיטראציהבסיסאתמגדיר
Regionרק.קריטיאזור–Thread.זמניתבוזהבחלקלהתבצעיכולאחד
Negאפשריתלאפעילותמציג.שלילי–.
Refאחרלתרשיםהקוראאתשמפנהסימון.התייחסות–.
Sdזהבסימוןהרצףתרשיםכלאתלמסגרפשוטאפשררוציםאם.רצףתרשים–.
:במסגרותהשימושלהדגמתרצףתרשימישניאציגעתה
-52-
[Info] רצף תרשיםב Opt המסגרת שילובל דוגמא: 16 איור
[Info] רצף תרשיםב מסגרות לשילוב דוגמא :17 איור
-51-
(Use Case Diagram) מקרי שימוש תרשים
המבטמנקודתמוצגתהמערכתעם(קבלהפקיד,חולה,רופאשללמ)החיצונייםהשחקניםשלהאינטראקציה
(Use Case)מקרהשימושמייצגתתרשיםבאליפסהכל.איךעלופחותעושההמערכתמהעלדגשניתן.שלהם
תנאים:כוללשזהמקרהשימושכלשלפירוטייכתבהמערכתעיצובבמסמך.מבצעתשהמערכתמשימהשהינו
תנאים,(post conditions)בסיוםמתקיימיםשתנאים,הפעולותפירוט,(preconditions)מקדימים
.פיתרוןעדייןלהםניתןשלאנושאים,(exceptions)איתםהמערכתוהתמודדותבכישלוןשמתקיימים
ששמושחקןנציגואזכלשהוחיצונילשחקןקשרללאשמתרחשתהמערכתשלפעולהלהציגנרצהלפעמים
Timerברקעשמתרחשיםמקרישימושלתזמןידוותפק.
אואחריםUse CasesשכולליםUse Uase,Use Cases-העםשמתקשריםשחקניםמציגהבא12איור
.שםלהונותנתהמערכתאתשתוחמתמסגרתוכןאחריםUse Casesשמרחיבים
[Puff] מקרי שימוש תרשים של דוגמא :18 איור
שלבהקשר(generalization)אחרActorשלתפקידיואתשיורשActorלמשלכמותרשיםלהרחבותקיימות
.הבא11איורבלראותשניתןכפי,המערכת
-05-
[Devx1] מקרי שימוש תרשים של דוגמא: 19 איור
-01-
נבחרים תכן דפוסי סקירת 7
מתוךבתעשייהנפוציםתכןדפוסישלמדגםלהציגבחרתי.קטגוריותלפינבחריםתכןדפוסיאסקורזהבפרק
.קטגוריותשלמדגם
.רביםעיצובשיקוליעברבעיצובופרטוכלרבהמחשבהלאחר,בהמשךוהתפתח,נוצרתכןדפוסכל
.שאציגהתכןידפוסלעיצובהשיקוליםמחלקאציג
.עלייהחביבObserverהתכןדפוסבתאוראתחיל
Behavioral קטגוריהב תכן דפוסי 7.1
.עצמיםאומחלקותוהתקשורתביניהםמכילהדפוסיתכןשעוסקיםבהתנהגותשלBehavioralהקטגוריה
ביןעצמיםלצורךדפוסיהתכןבקטגוריהזאתמשתמשיםביחסשלהורשהביןמחלקותאוביחסשלהרכבה
.[GoF]החבאהשלאופןההתקשרותביןהמחלקותאוהעצמים
Observer התכן דפוס 1.5.5
זה תכן לדפוס שניתנו שמות (1
Observerהשם-Observer"המידעמקור"עצםבשנעשיםהמידעבשינויי"צופים"עצמיםשהכךעלמרמז
[GoF]הזתכןדפוסלשניתנואחריםשמותלהלן..
Dependentsהמידעמקור"עצםבעצמיםהשלהתלותעלשמרמזשם–"[GoF] .
. [GoF] הזתכןדפוסבעצמיםהביןהפעילותאתשמתארשםזהו-Publish-Subscribe
.אליהםמתפרסםהמידעואזמידעשינוייעלעדכוניםלקבלתנרשמיםעצמים
Model-View–Modelואילומידע-למקורכללישםהינוViewמצב.מידעאותוייצוגלאופןכללישםהינו
.Model [GoF] -בשמוחזקהמידעבמצבתלויView-ה
והבעיה ההקשר הצגת (1
-07-
רמקולעםישנהרדיומערכתמוצגתהבאבאיור.היומיוםמחיייכךשאתןדוגמאפשוטה"אציגאתהבעיהע
?הבעיהמהאז–קצרהתקופהבמשךםמרוציוהיינוזאתמערכתקנינו.שמעליציאתשקעיםוללאמובנה
[dev] מודולארית לא שמע מערכת: 11 איור
:שזיהינובעיות
.מסביבנולאנשיםלאאבללנונעיםמהרדיושבוקעקולהלפעמים
הרמקולאתלהחליףוקשהיותרטובהבאיכותרמקולבחנותמצאנו.
הפיתרון (1
שמעמערכתמוצגת,להלן73באיור.שלנוישןההרדיובמקוםחדישהמודולאריתמערכתלקנותהחלטנואז
אותותרקמייצרתהמערכת(.אחרשמעאמצעיכלאו)ואוזניותרמקולאליהלחברשאפשרכזומודולארית
.האוזניותאוהרמקולרקמפיקיםהשמעואתחשמליים
"הרשמה"בשםזהחיבורלקראיהתכןדפוס.למערכתהשמעאמצעיאתלחברישכלקודםאז
(Registration.)אותותאתשמפיקההמערכת.המערכתמפיקהשמהכלאתמהםנשמעאוטומטיבאופןואז
אלושמעאמצעישללקיומםמודעתלא,(SubjectאוModel)הנתוניםמקורלהיקראהתכןדפוסש,השמע
,אחראמצעילכלקלותבלהחליפםניתןולכן(ObserversאוViews)התצוגהאמצעילהםקראיהתכןשדפוס
בעליעצמיםעם"לדבר"רקיודעתהשמעאותותאתשמפיקההמערכת.שנקנהחדשההגברהלמערכתלמשל
.שלהלמנשקשמתאיםמנשק
(.א.א — עריכה) [dev] מודולארית שמע מערכת: 11 איור
-03-
,(Observerבאיורשנקרא)גראפיחלוןכלב.הבא77איורבמובאתהתוכנהלעולםיותרקרובהנוספתדוגמא
שלשונההצגהישנה,(Subjectבאיורשנקרא)הנתוניםממקור(registration)המידעלקבלתאותושרשמנו
.הנתונים
[Gof] יהמוטיבצ לצורך Observer התכן דפוסב שימושל דוגמא: 11 איור
?לעילהדוגמאותלשתימשותףמה:שאלה
הנתוניםלהצגתהאמצעיםלבין(SubjectאוModelשנקרא)הנתוניםמקורביןחזקצימודמנענו:תשובה
(.ObserversאוViewsשנקראים)
אתלשנותאולהחליףמבלילהחליפםוגםObservers-האתלנתק/לחברהדינאמיתהאפשרותחשובה
מה.נרצהאםSubject-האתגםלהחליףנוכלדומהבאופן.המערכתאתלכבותמבליאפילוואףSubject-ה
.התצוגהלאמצעיהנתוניםמקורביןשהוגדרמנשקהרקזהמשתנהשלא
הנתוניםמקורשהינועצםביןהצימודאתלהמעיטנרצהכאשרזאתתכןבדפוסלהשתמשנרצה,שראינוכפי
נוכלכך(.תצוגהאושמעאמצעיעבוררקלאנכוןזה)במצבותלויבםשמצעצמיםהלבין
.כולההמערכתבפעולתפגיעהללאשלנובמערכת(עצם)חלקכללהחליף/לשנות/לחבר/לנתק
או"נושא"לושנקראמסויםעצםשלהפנימיבמצבועצמיםכמהשלתלותלממשבאObserverהתכןדפוס
לשינוייגרוםזה,משתנההזהעצםהשלהפנימימצבושכאשר,כךי"עאתזעושהאוה."המידעמקור"
.האחריםהעצמיםשלבמצבםאוטומטי
שיםמשממעצמים(attach/register)לרשוםניתןכיצדלראותניתן,הבא73איורבשהמחלקותבתרשים
.SubjectגמסועצםבתוךשנמצאתרשימהתוךבObserverמנשק
-05-
שלהמפתח,למשל.במצבושינוייםעלObservers-הכלאתיעדכןSubjectמסוגעצםה,זהרישוםלאחר
במצבלשינוישגורמתמתודהמתוךNotifyלמתודהקריאהי"עזאתיעשהConcreteSubjectמסוגהמחלקה
(.להקוראלקוחה)עצםה
Observer [Sks] התכן דפוס של לקותמח תרשים: 11 איור
Observers-שהלאחרהנתוניםבמקורלשינויהתכןדפוסשלהתגובהאתמתאר,להלן75איורבהרצףתרשים
.Subject-האצלכברנרשמו
Observer [Vetr] התכן דפוס של רצף תרשים:11 איור
-00-
דפוסשלהמחלקותבתרשיםבעיקרובפיתרוןמעטנתעמקאם.[GoF] כאןקצתלהרחיבמעונייןאניעתה
.פשוטיותרהרבהלאעיצובולמהלשאולנרצה,לעילObserverהתכן
שמציגהוהמחלקההנתוניםמקורשהיאהמחלקה-בלבדמחלקות7-במשתמשהיההנאיביהפיתרון
.הנתוניםאת
השלעדכוןכללמה-Observersבשקייםבמידע-Subject.לפחותפעולותמשתימורכב
.הבאותהספציפיותוהתשובותהשאלותבעזרתכךעלנענה
המופשטתהמחלקהאתצריךלמה:שאלהSubject?
ספרייתמתוךכלליתכמחלקהלשמשיכולהSubjectהמחלקה.חוזרשימושלצורךנעשהזה:תשובה
אותהמתוךכללימנשקשהינוObserverמנשקהאתרקמכירההיא–כללילשימושמחלקות
ושליחתפנימיתמרשימהObserverאתמשיםמשמעצמיםשלהסרה/בשיוךהואעיסוקהוכלספרייה
מחלקההיאConcreteSubjectהמחלקה,זאתלעומת.שינוישחל(חסרתפרמטריםהודעה)הודעה
.הספציפיתלאפליקציהששייכת
מנשקהאתצריךלמה:שאלהObserver?
בזמןדינמיבאופןנוכל.Observerמנשקהאתשיממשושונותמחלקותלפתחנוכלזהבאופן:תשובה
.Observerאתשמממשתנוספת/אחרתמחלקהמסוגעצםלרשוםריצה
למה:שאלהConcreteSubjectחסרתפרמטריםהודעהשולח(המתודהupdate)מצבשינויעל
יבצעConcreteSubject-שהבמקוםוזאתConcreteObserver-הי"עמידעמשיכתשגוררהמידע
?במצבוהשינויעללספרפשוטיכולזהםעצהודעהלשלוחבמקוםכלומר,המידעשלפשוטהדחיפה
אזמסויימיםנתוניםלהםישלחהואאם.Observers-האתיכירלאהנתוניםשמקורנרצה:תשובה
מקוראתלהכיריכוליםObservers-ה,זאתלעומת.מסויםבמנשקלשימושאותםמגבילהוא
ConcretSubject-שהלומרניתן,כלומר.אליובהתאמהמצבםאתלשנותצריכיםהםכיהנתונים
.מולולעבודהתפוריםObservers-האליוובניגודעליהםאחראישהואהנתוניםעםלעבודהמוגבל
-06-
.והחסרונות היתרונות ותאור הפיתרון של התוצאות (1
.לשינוייםוחסינהדינאמית,מודולאריתמידעוהפצתהרשמהמערכתיוצרObserverהתכןדפוס
שלמימושלשנותגםוניתןObservers-השלשוניםמימושיםלהסיר/להוסיף/שנותניתןריצהבזמן
.האחרותבמחלקותהקודאתלשנותלצורךיגרמולאהללווהשינויים.Subject-ה
:יתרונות
אחתהודעהשולחSubject-ה(.multicast)לרביםאחדשלבשידורתומךObserverהתכןדפוס .1
באופןמגיעהזאתהודעה.ההודעהמיועדתלמילצייןמבליאצלוהשתנהשמשהומאודפשוטה
.Publish-Subscribe-המנגנוןשלהקסםזהו.פעםאיאצלושנרשמוObservers-הלכלאוטומאטי
הצימודבגללהתוכנהבמערכתהפשטהשלשונותבשכבותלהימצאיכוליםObservers-והSubject-ה .7
יהיוObservers-הואילוDBLayerלהשנקראבשכבתליהיותיכולSubject-ה,למשל.ביניהםהחלש
.GUI-בהנתוניםלהצגתוישמשוהתצוגהבשכבת
.הבאיםהעצמיםמונחהתהתכנובעקרונותטובשימושםמדגיהזתכןדפוס .3
ה–שישתנושסבירעיצובבאספקטיםשלהסתרה-Observersהמפנימוסתריםהספציפיים-
Subject.
Open-Close Principleנעשהזה-(לשינוייםסגורהאךלהרחבותפתוחהלהיותצריכהמחלקה)
המידעשללהצגהאותהלהרחיבנוכלכך,המידעבהצגתגםעוסקתלאSubject-שכךי"ע
.אותהלשנותשנצטרךבלאשונותבצורות
–פעולהשמשתפיםעצמיםביןחלשלצימודלשאוףישSubjectלדעמולא-Observers
.כללימנשקדרךרקאלאעובדהואאיתםהספציפיים
שלהמימוש–מחלקהשללשינויאחתסיבהרקלהיותצריכהSubjectאםרקלהשתנותאמור
.מחזיקשהואבמידעהטיפולאופןאתלשנותנרצה
:חסרונות
.ובקודוןבתכנטובתיעודדורש,ידעורענוןלימודדורש–מורכביחסיתמבנה .1
.להשתמשלאעדיףמתילדעתכדיניסיוןצריך .7
הואממנומקבליםשהםמהכל.Subject-בהשתנהמידעאיזהלחקורנאלציםהשוניםObservers-ה .3
.השתנהשמשהוהודעה
-02-
הם.שוניםגורמיםי"עואףשוניםבזמניםשמפותחיםשוניםמימושיםלהיותיכוליםObservers-ה .5
שלויקרהממושכתלפעולהלגרוםיכולשבמערכתבמידעשינויואזSubjects-כצמםבעלשמשיכולים
לאהםכי(מסוימותמהודעותהתעלמותי"עלמשל)כזאתבבעיהיטפלולאObservers-ה.עדכונים
.[Gof]השינויפרסוםשלהכולללמחירמודעיםלאהםולכןבמערכתהאחריםObservers-למודעים
-הניהולשנושאהיאהטענה.Subject-מלרשתצריךלאConcreteSubject-שהטועניםיש .0
Observersמנפרדלהיותצריך-ConcreteSubjectהשמורהמידעאתלנהלרקלהיותצריךשתפקידו
Observers-הניהול,שנימצד.כאןובנדוןשלאWhite Boardתכןדפוסאתמציעיםהםכךלשם.בו
מעונייניםאנואםבזהירותלשקולצריךלכןלשנותנרצהלאהמקריםשברובוקצרפשוטבקודנעשה
.הנוספתבתקורה
נעדיףשלאלשלםאתמחירההאטהשגורםבמערכותתוכנהשדורשותזמניתגובהמהיריםמאוד .6
.[Zer]דפוסתכןזה
-02-
Strategy התכן דפוס 1.5.5
זה תכן לדפוס שניתנו שמות (1
Strategy-וPolicyהעבודהשיטת/אסטרטגיה/במדיניותעוסקזהתכןשדפוסיםמספראלומותש– [GoF] .
והבעיה ההקשר הצגת (1
.פשוטהדוגמאי"עהבעיהאתציגא
לאופיבהתאם.והעדפותמגבלותמראשיודעיםלאאנחנואבלמספריםשלמערךלמיוןמחלקהכותביםאנו
אויותרמהירלמיוןהעדפהכמולהעדפותובהתאם(?חלקיתיןממוכברהואהאם,למשל)המספריםמערך
.המיטביתהמיוןשיטתעללהחליטללקוחלתתנרצה,הפנויבזיכרוןהשימושלמידתהעדפה
.מיזוגמיון,מהירמיון,מנייהמיון,(Radix Sort)בסיסמיון,בועותמיון:ביןלבחוריוכלהלקוח,למשל
שתקרא…if… else if… else ifשלמערכתולכתובמימושכלעבורמתודהלכתובנוכלהלקוחשלבקודאז
אתלעדכןשנרצהפעםבכלהלקוחשלהקודאתלשנותנצטרךאזאבלהלקוחהעדפתלפיהרצויהלמתודה
.לטעויותופגיעלתחזוקהיותרקשהגםולכןמורכבויהיהיגדלהלקוחשלהקוד,כןכמו.המיוןשיטת
ןהפיתרו (1
אבלמסוימתפעולהמבקשהלקוח.האלגוריתםבחירתשלהמדיניותאתהלקוחשלמהקודלהחביאנרצה
.הבא70איורבשמתוארכפייהיההפיתרוןכלליבאופן.תתבצעהיאהיאדרךבאיזהיודעלאהוא
Strategy [Mak] התכן דפוס של עיקרוןה את שמתאר מחלקות תרשים :11 איור
-01-
לראותשניתןכפי.המימושלביןהלקוחשלהקודביןשתחצוץהפשטהשלאחתשכבהעודלהוסיףלנונותר
קייםבהשרק,Contextהמחלקהמוללעבודצריךהלקוחשלקודה.Contextהמחלקהנוספה,הבא76איורב
.Strategyהמנשקמולישירותולא,לבחורישספציפיאלגוריתםבאיזההידע
Strategy [Rav] התכן דפוס של מחלקות תרשים: 16 איור
נשקמהבתפקידכאןמשמשתLoggerנשקהמ.זהתכןבדפוסומעשייפהשימושמדגיםהבא72איור
Context.לעילשהוזכר
Strategy [Tod] התכן בדפוס שימוש שמדגים מחלקות תרשים: 17 איור
ליהיותתחילהשמ(switchהאחרתהסינטקטיתבצורתהאו)if else ifהסתעפותשלנובקודנמצאכאשר
.Strategyהתכןבדפוסשימושעללחשובמקוםהזהאזומורכבתגדולה
-65-
.והחסרונות היתרונות ותאור הפיתרון של התוצאות (1
מימושואתהרצויהבאסטרטגיההבחירהאתהלקוחשלמהקודלהוציאלנועוזרStrategyהתכןדפוס
הזאתההחלטהאבללבחור(אלגוריתם)אסטרטגיהבאיזהלהחליטצריךמישהודברשלבסופו.האסטרטגיה
ההחלטהאתתקראContextהמחלקהאזוקונפיגורציהבקובץמראשנכתבתהיאלמשלמהלקוחמוחבאת
בתוךיהיו.…if… else… ifשההסתעפויותאפילוגםניתןביותרהפשוטבאופן)הקונפיגורציהבקובץשנעשתה
.(Contextהמחלקהשלהקוד
:יתרונות
או)…if…else ifשלהסתעפויותהוספתעללוותרעתהיכולהלקוח,לעילבדוגמאשראינוכמו .1
switch.לתחזוקהיותרקלהתיהיההתוכנהכך.בעיהשללפיתרוןבאסטרטגיהלבחורכשנרצהבקוד(
.לבחירהאלגוריתמיםשלמשפחותליצורניתןכך.Strategyמחלקתמכלהורשהעץליצורניתן .7
.למשל,העצמיםמונחהתהתכנובעקרונותטובשימושםמדגיהזתכןפוסד .3
.ולזכורללמודקל,ואינטואיטיביפשוטמבנה
.מודולאריקודשללפיתוחעוזר–מימושמולולאמנשקמולתכנות/עיצוב
לבחורספציפיאלגוריתםבאיזהההחלטה–שישתנושסבירעיצובבאספקטיםשלהסתרה
.חמהלקומוסתרת
Open-Close Principle(OCP)את.לשינוייםסגורהאךלהרחבותפתוחהלהיותצריכהמחלקה-
במקוםוזאתחדשאלגוריתםכלשלמימוששמכילהמחלקההוספתי"עמבצעיםאנוההרחבה
.אלגוריתםלשנות/להוסיףשנרצהפעםבכלהלקוחמחלקתאתלהרחיב
העצמיםאתמכירהלאהלקוחמחלקת–פעולהפיםשמשתעצמיםביןחלשלצימודלשאוףיש
.המימושאתשמספקים
בלבדאחדבאלגוריתםמטפלתמחלקהכל–מחלקהשללשינויאחתסיבהרקלהיותצריכה.
העדפתCompositionשלההוספהי"עממומשזהעיקרון–בהורשהשימושפניעלוהאצלה
(.ריצהזמןלפני)המימושאתלהכיראלהלקוחשללקודמאפשרזה.Contextהמחלקה
:חסרונות
.ספציפיאלגוריתםלכלנפרדתמחלקה–בקודהמחלקותמספראתמגדילזהתכןדפוס .1
שלמספרשאותואומרזה.StrategyהמנשקלביןContextהמחלקהביןקשיחמנשקקיים .7
מממשתהיאאםגםConcreteStrategyמחלקהלכללבסוףיגיעפרמטריםשלסוגואותופרמטרים
-61-
לכלזקוקאינוהואאבלאלגוריתמיםשלמשפחהלאותהשייךשאמנםמאודפשוטאלגוריתם
.הפרמטרים
-67-
Iterator התכן דפוס 1.5.7
זה תכן לדפוס שניתנו שמות (1
Iterator –נתוניםשללמערךגישהלנומאפשרזהתכןשדפוסמורהזהשם(to iterate over) [GoF].
Cursorבעזרתושכסמןמשמשהתכןשדפוסמורהזהשם.נתוניםבבסיסיגםדומהבמשמעותקייםזהשם–
. [GoF]הנתוניםמערךאתסורקים
והבעיה ההקשר הצגת (1
.פשוטהדוגמאי"עהבעיהאתציגא
.מחלקהתהאושלמופעשהינםעצמיםשלמסוימתברשימהששמוריםלערכיםלגשתמעונייניםשאנונניח
עצמיםשלבמערךנשמריםעצמיםשהיודעשלנולקוחשהכךבאמצעותנאיביבאופןבהתחלהזאתלממשתןני
תאכלמיקוםאתשמצייןבאינדקסשימושי"עישירהבצורהבמערךעצםלכללולאהבעזרתניגשהואולכן
מספקתAssembler-השפתאפילו-במערךתאכלשלבזיכרוןהכתובתציון,יותרגרועאפילואו.במערך
בטכנולוגייתתלויליהיותצריךשלאמופשטנתוניםמבנההואמערךשהרי)מכךלהימנעסינטקטייםכלים
.(מסויימתמחשוב
בזיכרוןשימושיעילותמשיקוליעצמיםהשמירתאופןאתלשנותמעונייניםאנו,חדשהדרישהנציגעתה
במקרה.מקושרתברשימהיישמרושהםכךי"ע([fragmentation]הפרגמנטציהבעייתעלהתגברותלצורך)
(.שלנולקודשלוהקודביןחזקצימודקיים)שלוהקודאתלשנותצריךשלנולקוחהזה
-63-
הפיתרון (1
.השמוריםהעצמיםסקירתשלהמימושואתהעצמיםרשימתאתשמכילהמימושאתיכירלאלקוחשהנרצה
המימושי"עמוגדראליווהמעברהבאהעצם)הבאלעצםלעבורהאפשרותתארקשלנולקוחלנחשוףלמשל
(.לקוחמהשמוחבא
.Iteratorהתכןבדפוסשנעשיתהמימושהחבאתאתממחישלהלן72איור
שלהלמתודהלקראצריךלקוחוההנתוניםרשימתאתמכילהConcreteAggregateהמחלקה
CreateIteratorמסוגהעצםאתלקוחלשתחזירבכדיConcreteIteratorאתלסרוקיוכללקוחהשבעזרתו
מסוגבעצםשמוחזקהבאהנתוןאתלושתחזירלמשלNextלמתודהקריאהי"ע)הנתונים
ConcreteAggregate.)
Iterator [Dof2] התכן דפוס של מחלקות תרשים: 18 איור
-65-
והחסרונות היתרונות ותאור הפיתרון של התוצאות (1
הגבלהאין)נתוניםמבניעםלמשל,יותרגבוהההפשטהברמתעבודלללקוחעוזרIteratorהתכןדפוס
שלהבעיהליהיותצריכהזאתהנתוניםסריקתשלמימושבלעסוקצריךלאלקוחה(.נתוניםבמבנירקלשימוש
.עצמוהנתוניםמבנה
:יתרונות
.ולזכורללמודקל,ואינטואיטיביפשוטמבנה .1
איטראציהלולאותשיוצרותהבאותהבעיותאתפותרוזהמהלקוחהמימושאתמסתירזהתכןדפוס .7
:while-וforכמו
מהלקוחהאיטראציהדפוסתכןזהמסתיראתמימוש?1-מאו5-מאיטרציההאתלהתחילהאם.
במשתמשיםכאשר-Indexבטעותערכואתמשנההתוכנהמפתחלפעמיםאז,מספרשהינו,
.דפוסתכןזהמסיראתהצורךבשימושבאינדקס.האיטראציהריצתבמהלך
דפוסתכןזה.הלקוחאצלההאיטראצישלהקודאתלשנותצריךאזמשתנההמימושכאשר
.מהלקוחהאיטראציהמסתיראתמימוש
.הלןל,העצמיםמונחהתהתכנובעקרונותטובשימושםמדגיהזתכןדפוס .3
הנתוניםסוגוכןהנתוניםמבנהשלמימושה–שישתנושסבירעיצובבאספקטיםשלהסתרה
.לקוחמהמוחבא
עובדלקוחשההמנשקבחלקהמחלקות–הפעולשמשתפיםעצמיםביןחלשלצימודלשאוףיש
.המימושחלקאתמכירותלאישירותאיתן
.מימושמולולאמנשקמולעיצוב
המתודה–בהורשהשימושפניעלוהאצלההרכבההעדפתCreateIteratorשלתלותמונעת
.בהאצלהשימושי"עהמימוששלבחלקלקוחה
:חסרונות
.הנתוניםמבנהעםלעבודוהפשוטההישירההדרךלעומתיותרמורכבעיצוב .1
.ConcreteIteratorמחלקהנוספתConcreteAggregateכלעבור-מחלקותריבוי .7
ועבורמשלהConcreteIteratorמחלקהנצטרךArrayListהמחלקהעבור,Javaבשפת,למשל
.משלהConcreteIteratorמחלקהכןגםנצטרךLinkedListהמחלקה
-60-
Creational קטגוריהב תכן דפוסי 7.1
.מחלקותאיתחולשלמכילהדפוסיתכןשעוסקיםביצירהשלעצמיםאוCreationalהקטגוריה
דפוסיהתכןבקטגוריהזאתמשתמשיםביחסשלהורשהביןמחלקותאוביחסשלהרכבהביןעצמיםלצורך
פשרתגמישותרבהבהחלטותשלקטגוריהזאתמא.העצמיםיצירתהמחלקותאואיתחולהחבאהשלאופן
.[GoF](למשלבזמןקומפילציהאובזמןריצה)איךנוצרומתינוצר,מיהיוצר,מהנוצר
Factory Method התכן דפוס 1.5.5
זה תכן לדפוס שניתנו שמות (1
Factory Method –עצמיםלקוחלשמייצרתמתודהמספקהתכןשדפוסמרמזזהשם[GoF].
Factoryיותרהמפורטלשםקיצורהואזהשם–Factory Methodבספרלמשלבשימוש.[Fbs].
Virtual Constructorשפת–C++עצמיםשמייצרתאב-מחלקתשלמתודהלתארבכדיזהבשםמשתמשת
היורשתבמחלקהתלויהעצםכליהיהספציפי-סוגמאיזהההחלטהאבלמחלקהאותהשלהעל-מסוגשהם
.[GoF]Constructor-האתשתממש
עבורושנוצרהעצםלסוגישירותמקושרלאלקוחשהלכךמתייחסזהשם,++Cבשפהזהבשםלשימושבדומה
.התוכנהשלהריצהבזמןרקתיהיהליצורעצםשלסוגאיזההסופיתלטהחההובעצםשלולייצוגרקאלא
והבעיה ההקשר הצגת (1
כמואנשי.[Tony]המאמרמועםשינוייםקליםבקיצורןכאשאציגפשוטהדוגמאשאביאי"עהבעיהאתציגא
גםהאדםשכתבאתהדוגמא,(וכמונילפנישכתבתיאתהעבודההמסכמתהזאת)מקצוערביםוטוביםאחרים
לכןאציגאתהדוגמאשלוואתקןאותהולאחרמכןאסביר.Factory Methodהזאתטעהבהצגתדפוסהתכן
.התיקוןמהותאתהטעותואת
.הצגתטעותנפוצהולימודאיךלתקןאתהטעותהיאדרךנפלאהללמוד-
.מנשקהגדרתנתחילב(.log/trace)נרצהלכתובקודשיעזורלתוכנהשלנולכתובדוחמעקבשלפעולותיה
public interface Trace { public void debugTitle( ); public void debug( String message ); }
-66-
.והמימושהשנייכתובלמסך מימושאחדיכתובלקובץ.נממשאתהמנשקבשניאופניםעתה
:המימושהראשוןכותבלקובץ
public class FileTrace implements Trace { private java.io.PrintWriter pw; public FileTrace() throws java.io.IOException { pw = new java.io.PrintWriter( new java.io.FileWriter( "c:\trace.log" ) ); } public void debugTitle( ) { pw.println( “Log started on date:”+newDate)( ); } public void debug( String message ) { pw.println( "DEBUG: " + message ); } }
:המימושהשניכותבלמסך
public class SystemTrace implements Trace { private boolean enableDebug; public void debugTitle( ) { pw.println(“Logstartedondate:”+newDate)( ); } public void debug( String message ) { System.out.println( "DEBUG: " + message ); } }
:לעבודישירותמולהמימושהלקוחיכול
SystemTrace log = new SystemTrace(); log.debugTitle( ); log.debug( "entering first log" );
עתהנראהאיךכותבהדוגמאפותרזאתולאחרמכן .לקוחתלויישירותבמימושמסוייםהאבלכךהקודשל
.תקןאתהפיתרוןשלוא
-62-
הפיתרון (1
:יהוספתמחלקהשתכמסאתההחלטהבאיזהמימושנשתמש"אתהקודעבמקצתנשפר
public class TraceFactory { public static Trace getTrace() { return new SystemTrace(); } }
:עתההקודשלהלקוחייראהכך.בחירתהמימושמוסתרתמהלקוחכך
Trace log = new TraceFactory().getTrace(); log.debugTitle( ); log.debug( "entering first log" );
שכךאנחנולאנצטרךלשנותאתהקודשלהלקוחבכלפעםשנרצהלשנותאתהדוגמאהזאתמסבירכותב
.TraceFactoyכמסבתוךהמחלקהובגללשהמימושמזאת.Traceמימוששלהמנשקה
חיוביאבלזהצעדאוה,בכדילהסתיראתהפעולהמהלקוח,אזאמנםהכימוסהזהשליצירתהעצםהמסויים
הואשיטהיפתגםתכנות.(programming idiom)יתכנותפתגםהדוגמאלעילמציגהבעצם.לאמספיק
,”Static Factory“שנקראפתגםהתכנותהדוגמאלעילמציגהאת .שמתכנתיםנוהגיםלהשתמשבהפשוטה
.[Tony]”Factory Method“כאילוהואדפוסהתכןבטעותמציגיםאותואנשים
.ואתןהסברים”Factory Method“עתהאציגתיקוןלדוגמאלעילבכדילהפוךאותהלדפוסהתכן
:ולותמהדוגמאלעילנסחשתיבעיותשעא
.(השינויכמוסבתוךהמחלקהלמרותש)TraceFactoryבמחלקהישירותהקודשלהלקוחתלוי.1
,בדוגמאלעיל.שנוצרעבורוTraceללקוחגמישותגדולהמידילאופןהשימושבעצםהחדשמסוגניתנת.7
לחייבאתהקריאהלמתודהנרצה.לאלקרואלהבכללשאוdebugTitleלקראלמתודההלקוחיכול
debugTitle.בשלבהאיתחול
-62-
וסיףלהמתודהבשםוגםנתאבחלקלמTraceFactoryנהפוךאת,לעילבכדילפתוראתשתיהבעיות
initializeלקרואלהממחלקהשיורשתאתידרשישהלקוחTraceFactory:
public class TraceFactory { //Factory Method pattern calls this method: AnOperation public Trace initialize( ) {
Trace trace = getTrace( ); trace.debugTitle ( ); return trace;
} //Factory Method pattern calls this method: FactoryMethod public Trace getTrace( ) { //Implemented in sub classes only. } }
(:initializeדהאלאאמורהלדרוסאתהמתוהי)ראהכךיתTraceFactoryשלחלקותהיורשותהמתאח
// Factory Method pattern calls this class: ConcreteCreator public class SystemTraceFactory extends TraceFactory { public Trace getTrace( ) { return new SystemTrace(); } }
:ראהכךואזהקודשלהלקוחי
TraceFactory traceFactory = new SystemTraceFactory( ); Trace trace = traceFactory.initialize( ); Trace.debug( “Enteringfirst log”(;
.לעילמהותהתיקוןבכדילהביןאתאוסיףהסבריםו”Factory Method“סהתכןעתהאציגאתדפו
.Factory Methodהתכןדפוסשלהכלליהמבנהאתמראה,להלן71איור
Factory Method [Dof3] התכן דפוס של מחלקות תרשים: 19 איור
-61-
מאפשרשימושבשתיהיררכיותמקבילותשלFactory Methodדפוסהתכן,לעיל71איורכפישניתןלראותב
קתבדרךהייחודיתליצירתכלמוצרוהשנייהעוס(products)אחתעוסקתבהגדרתהמוצרים.הורשה
(creators.)
:[GoF]באופןהבאFactory Methodאתדפוסהתכןנגדיר
“Define an interface for creating an object, but let subclasses decide which class to instantiate.
Factory Method lets a class defer instantiation to subclasses.” (p. 107)
.ProductיחליטומאיזהמחלקהליצוראתהעצםמסוגCreatorרקהמחלקותשיורשותאת,כלומר
ואפילולאאתProductהלקוחלאמכירבכללאתהמחלקותשיורשותאת,כפישראינובדוגמאלעיל
Product.
.Factory Methodהתקשורתביןהעצמיםבדפוסהתכןמראהאת,להלן,35איור
Factory Method [Jam] התכן דפוס שלרצף תרשים: 11איור
-25-
למפתחיםאפשרותמתןתוך,Product–וCreatorהמופשטותתהמחלקואתליצורותנוהגעבודה-מסגרות
לסוגהייחודיהיצירהאופןאתלספקוכןלמערכתעצמיםשלחדשסוגהכרתלצורךאלומחלקותלרשת
.[GoF]העצמיםשלהחדש
Simple"שנקראים(Programming Idioms)התכנותפתגמיאתאציגעתה.בנושאיותרקצתנתעמקעתה
Factory"ו-"Static Factory"בטעותלהםקוראיםבתעשייהרביםאנשים."Factory Pattern"שהםלמרות
."Factory Method"התכןדפוסמהםשונהבמהנראה.[Fbs]תכנותסגנוןרקאלאכללתכןדפוסאינם
המחלקההאםהשאלהלעלותהיכול,לעיל71איורשבהמחלקותתרשיםאתבוחניםכאשר
ConcreteCreator(המחלקהאתלרשתשצריכהCreator)לאפשרהכלבסךמעונייניםאנחנוהרי?הכרחית
.ישתנהולאכךעלידעלאהלקוחשלשהקודכך,פעםבכללמערכתחדשConcreteProductבקלותלהוסיף
לדחותמבליProductמסוגעצמיםתיצורהיאכלומר,בנושאלבדהתטפלCreatorהמחלקהפשוטאוליאז
וזהבתעשייהכזהמחלקותמבנהבשימושעושיםואכן.אותהשתירשלמחלקהאותםליצוראיךההחלטהאת
איננונחשבלדפוסתכן”Simple Factory“.[Fbs]תכןדפוסלאזהואבל"Simple Factory"בשםנקרא
.כפישנראהכאןבהמשך”Open-Close Principle“-מכיווןשהואמפראתעיקרוןה
.Simple Factoryהתכנותסגנוןשלהמחלקותתרשיםאתמציג,להלן31איור
.(א.א — עריכה) Simple Factory [Dof3] התכנות סגנון של מחלקות תרשים: 11 איור
ולאCreatorבמחלקהסטטיותמתודותרקללקוחולתתפשוטיותרזאתלעשותףאנוהגיםבתעשייהאנשים
Static"בשםנקראזהתכנותסגנון.(כפישראינובדוגמאלעיל)זאתממחלקהעצמיםליצורלאפשר
-21-
Factory" תכןלדפוסנחשבלאזהגםו[Fbs]התכנותסגנוןשלהחיסרון.Static Factoryואשהבכךהוא
."Open-Close Principle"-העיקרוןשלהפרהזאת,להרחבותפתיחותפחותתוךגמישותחותפמספק
קודלכתובבבואנולמשלגמישותמאיתנומונעזה,כןכמו.Creatorחלקהבמישירותתלויהלקוח,כלומר
רתאחמחלקהשלבעצםתשתמשהנבדקתשהתוכנהשנרצהנניח,כלומר.שלנוהתוכנהריצתאתשבודק
CreatorMock(במחלקהמשתמשתלאכברשהיא"יודעת"לאהנבדקתהתוכנהCreator)לצורךרקשכתבנו
קבועהעבודהסביבתהנבדקתהתוכנהעבורהדמותלרוציםאנחנוהבדיקהתרחישילצורךכי)הבדיקות
.לותבקזאתלעשותנוכללאאזסטטיותהןCreatorבמחלקההמתודותאםאז(.מראשוידועה
CreatorמהמחלקהלרשתמידירבחופשנותןשהואבכךהואSimple Factoryהתכנותסגנוןשלהחיסרון
-השמתודתבעצמיםהשימושעלשליטהמאבדיםאנובכך(.בהמשךמיידאסבירשהדגמתילעילוכפי)
Factoryתיצור[Fbs].
שללמימושקשורלאהלקוח"Factory Method"התכןבדפוס,לעילשתיארתיהתכנותלסגנונותבניגוד
אתלרשתחייבתConcreteCreatorמסוגחדשהמחלקהשכלבגלללכךובנוסף(Products)המוצריםיצירת
71איורבנעשהזה.המוצריםסוגיבכלבעינינושנכוןהשימושאתלחייביכוליםאנחנואזCreatorהמחלקה
מתודהיורשתConcreteCreatorהמחלקהוכךCreatorלמחלקהAnOperationהמתודההוספתי"עלעיל
-בתכןדפוסי"הפרק-בתתבקצרהמציגשאני)Template Method-כאותנומשמשתזאתמתודה.זאת
JUnit"במתודהמשתמשתהיאכלומר(15בעמודFactoryMethodזאתדגיםנ.בהלהשתמשהלקוחועל
Factory Method-בשמשתמשתTemplate MethodהינהNewDocumentהמתודהשבו,להלן37איורב
.CreateDocumentשנקראת
Factory Method [Gof] התכן בדפוס לשימוש דוגמא של מחלקות תרשים: 11 איור
.והחסרונות היתרונות ותאור הפיתרון של התוצאות (1
.סוגיםלשלושהלחלקשניתןמתכנתיםשותפיםזהתכןדפוספיעלשנכתבלקודשמסיקאני
-27-
שלמפיתוחחלקשהןבמחלקותכאןמדוברלפעמים.Product-וCreatorהמחלקותשלהמפתח .1
.עבודה-מסגרת
במחלקותכאןמדוברלפעמים.Concrete Product-וConcreateCreatorהמחלקותשלהמפתח .7
.הסופיהלקוחעבורכספריהלשמששנועדו
נוספיםלקוחותליהיותיכוליםלושגםכמובןכי,הפשטותלצורך)הסופיהלקוחשהינוהמפתח .3
(.כולםשלהכובעאתלחבושיכולגםאחדשמפתחוכמובן
שהואהעצםשלהסוגאתלקבועהאחריותאתהסופיהלקוחשלמהקודמוציאFactory Methodהתכןדפוס
הקודלמשל)ConcreteCreatorהמחלקהשלבקודבצעתתשנוצרהעצםשלהסוגעלההחלטה.ליצוררוצה
מראששליטהמשאירזהתכןדפוסזאתועם(.מהמשתמשקלטמתוךאוקונפיגורציהקובץמתוךיקראהזה
עצםבכלעתידיבשימוש(Framewrokשמפתחבאדםלמשלמדובר–Creatorהמחלקהאתשכותבמיל)
.[Fbs]שיווצרחדש
:יתרונות
:הבאיםהעצמיםמונחהתהתכנובעקרונותטובשימושםמדגיהזתכןדפוס
.ולזכורללמודקל,ואינטואיטיביפשוטמבנה
לקוחמהמוחבאמימושה–שישתנושסבירעיצובבאספקטיםשלהסתרה.
עובדלקוחשההמנשקבחלקהמחלקות–פעולהשמשתפיםעצמיםביןחלשלצימודלשאוףיש
.המימושחלקאתמכירותלאישירותאיתן
מימושמולולאמנשקמולעיצוב[Fbs].
העדפתCompositionהמתודה–בהורשהשימושפניעלוהאצלהfactoryMethodתלותמונעת
.בהאצלהשימושי"עהמימוששלבחלקהסופיוחלקהשל
Open-Close Principleאת.לשינוייםסגורהאךלהרחבותפתוחהלהיותצריכהמחלקה-
שניצורלעצםחדשסוגתיהיהאחת.מחלקותשתיהוספתי"עמבצעיםאנוההרחבה
(ConcreteProduct)בלבדאותוליצורשיודעתמחלקהתיהיהוהשנייה(ConcreteCreator)וזאת
.[Fbs]חדשמסוגעצםליצורשנרצהפעםבכלהסופיהלקוחמחלקתאתלהרחיבבמקום
:חסרונות
-23-
ומחלקהConcreteCreatorמחלקהקיימתProductשלסוגכלעבור–מחלקותריבוי .1
ConcreteProduct.
עלולהלקוח,לכן.עיללשהזכרתיAnOperationבמתודהלהשתמשהלקוחעלכופהלאזהתכןדפוס .2
במתודהלהשתמששלאיכולשהואמכיווןFactoryMethodבמתודהרצוילאשימושלעשות
AnOperationבמתודההרצויהשימושאתשמספקתFactoryMethod.
-25-
Singleton התכן דפוס 1.5.5
זה תכן לדפוס שניתנו שמות (1
Singleton –יותרבאופןאו.ויחידאחדמופעלהשישמחלקהליצורלנומאפשרזהתכןשדפוסמורהזהשם
.[GoF]הלקוחשללשימושויחידמשאביצירת,כללי
והבעיה ההקשר הצגת (1
.תוכנהכמפתחמעבודתידוגמאכאןאתן
שאחראיDbManagerלוקוראשאנייחידעצםליצורנוהגאניאז,Javaבשפתפרויקטיםמפתחאניכאשר
עיצובשלהעיקרוןפיעל)מופשטותאותןולעשותהנתוניםבסיסמולהתוכנהקודשארשלהפעולותאתלפשט
(.מימושמולולאמנשקמול
פיעלהנתוניםמבסיסמידעלטעון,טרנזקציהלסיים,טרנזקציהלהתחיל,למשל,זהמעצםלבקשיכולאני
.בלבדשאילתהשלשם
הנתוניםבסיסמולהעבודהשלהפרטיםאתיכיר,DbManagerשלהלקוחשהינו,הקודששארמבליזאתוכל
חדשעצםליצורתצטרךלא,הנתוניםבסיסמוללעבודשצריכה,בקודמחלקהשכלמעונייןאני.המסויים
לקוחשלשימושכלעבור(state)שלוהפנימיהמצבעללשמורצריךשלאעצםהואכי,DbManagerמסוג
.מסוים
נצטרךלאואזהלקוחלשרותמחלקה-מתודותשתחשוףDbManagerבמחלקהרקאשתמששלאלמה:שאלה
?(הפנימימצבועללשמורצריךלאשניצורהעצםממילאשהרי)המחלקהשלמופעיםבכללליצור
.הקודלבדיקתשוניםתרחישיםליצורמעונייןאניושלילקודבדיקותעורךאניהפיתוחבזמן:תשובה
אותווכךהנתוניםבסיסאת(simulate)מדמהאני.Unit TestsאוDeveloper Testsתנקראואלובדיקות
ממהאחריםנתוניםבדיקהתרחישבכלמקבל(הנתוניםמבסיסשירותיםשצורךקוד)אותובודקשאניקוד
צועביבזמן,לכן.קודאותושלבהתנהגותלבדוקרוצהשאנימהפיעל"הנתוניםבסיס"זהושמבחינתו
יבחיןשהקודמבליוזאת.DbManagerMockלהקוראשאניאחרתמחלקהמוליעבודהתוכנהקוד,הבדיקות
.DbManagerאתיורשתDbManagerMockכיבכך
-20-
הפיתרון (1
של(עצמים)חדשיםמופעיםליצורמהלקוחנמנעוSingletonבשםלהקוראהתכןשדפוסהמחלקהאתניצור
הגדרתותוךDefault Cosnstructor-השלבקודמפורשתהצהרהי"עלעשותניתןתזאאת.מחלקהאותה
ציבוריתכמתודהאוטומטיתשנוצרDefault Constructor-העלדורכיםאנו,בכך(.private)פרטיתכמתודה
(public)עבורגםנעשהכך.הלקוחלשימושConstructors.מחלקהאותהשלאחרים
לאותולגשתובהמשךמחלקהשלהיחידהמופעאתליצורויחידהאחתפעםיוכללקוחשהנרצהזאתובכל
.instanceיהיהששמהציבוריתמחלקהמתודתנחשוףלכן.יחידמופעאותונוצרמתילדעתמבליוזאתמופע
תחזירהיאלהשנקראהפעמיםובכלהיחידהמופעאתלהשנקראהראשונהבפעםרקתיצורזאתמתודה
.יחידמופעאותואתלקוחל
.Singletonהתכןדפוסאתתארמ,להלן33איור
Singleton [Mak2] ןהתכ דפוס של מחלקות תרשים: 11 איור
.ביותרוהנפוץהפשוטבאופןSingletonהמחלקהאתמממשJavaבשפתהבאהקודקטע
ריבויעםלעבודהמתאיםאינוזהשקודלזכורישאך.כלליתספרייהלתוךתשתיתיכקודזהקודלהכניסניתן
.מעטעודכךעלארחיב–(Multi-Threaded)נימים
public class Singleton { static private Singleton instance = null; //Class member that refers to the single object. protected Singleton() { }; //Overrides the Default Constructor, to prevent user access to it.
static public Singleton instance() { //This is a class-method. if ( null == instance ) { //Creates a new instance only on the first call to this method. instance = new Singleton(); } return instance; //Returns to the user the one and only instance (object) of this class.
} }
-26-
.Private-כולאProtected-כהוגדרהDefault Constructor-השמתודתלבלשיםכדאי
-כאותההגדרנוכאשרואילו.הזאתהמחלקהאתלרשתאפשרהיהלאאזPrivate-כמוגדרתהיתההיאאם
Protectedהבאותושנמצאותמחלקותאז-Package.ממנהלרשתיכולות
בהורשהלשימושגמישותלהוסיףאפשרלמשל,אחרותרבותבדרכיםומשממליהיותיכולזהתכןדפוס
.[Gof]בקצרהמתוארשכפיSingletonמהמחלקה
Registry of Singletonsבשימושי"עמימוש--RegistryהמחלקהבתוךSingletonאנוכלומר,
SingletonקתמחלמאותהשיורשותמחלקותשלעצמיםSingletonהמחלקהבתוךמראשרושמים
שלרשימהשהינו)Registry-בלושניתןהשםי"עפמסויימתמחלקהשלעצםלבקשיכולהלקוחואז
שמחייבהצימודאתלמנוענוכל(.אותורושמיםאנוכאשרעצםלכלנותניםשאנוהשםעםיחדעצמים
Environmentבתוךזהשםכתיבתי"עלמשלצריךשהואהעצםשלהשםאתלספקהלקוחאת
Variableבמחלקההקודשללשימושו,ההפעלהמערכתשלSingleton.
נימים ריבוי עם עבודה
מופעיםשנייוצריםהלקוחשל(threads)נימיםששנימצבלהיווצרשעלולהיאלעילשהצגתיבקודהבעיה
נוכל.אטומיתתאחכיחידהמתבצעתלאInstanceהמתודהכיקורהוזהSingleton-המחלקתשלשונים
כולההמתודההגדרתאבלsynchronized-כאותהנגדיראםאטומיבאופןלהתבצעInstanceלמתודהלגרום
שברובבשבילרקזאתוכל(נימיםסינכרון)בעבודתהמאודמשמעותיתלהאטהורמתגsynchronized-כ
מקביליותהמעולםהתכןבדפוסוששימי"עלמשללפתורניתןזהאת.קייםכברהמופעאםנשאלהפעמים
(concurrency)שנקרא"Double Checked Locking"קייםכברהמופעאםבדיקותשתיעושהשהואבגלל.
-כהפעםמוגדרתאבלזההנוספתבדיקהכהבתווקייםהמופעאםומהירהרגילהבדיקהבודקהוא
Synchronizedרקמתבצעתהיאאבלזמןהרבהצורכתהאטומיתהפנימיתהבדיקה.אטומיתהיאולכן
בהרחבהויותר[Fbs]בספרכךעללקראניתן.הראשוןהמופעאתליצורמנסיםנימיםשכמהבזמן,בהתחלה
.[Hagg]-בגםו[Koch] במאמר
מהדיסקנטענתהמחלקהכאשרעודלהיווצרהיחידלמופעשגורם,[Fbs]Javaבשפתהבאהקודאתציגנ
.לעילשהצגתיהקודעםבנימיםשימוששלבעיהאתפותרהז.לזיכרון
public class Singleton { private static final Singleton uniqueInstance = new Singleton(); private Singleton() { } public static Singleton getInstance() { return uniqueInstance; } }
-22-
לקוחאףאםגםואז(.lazy initialization)העצלהאיתחולאתנפסידאזזהבקודמשתמשיםאנוכאשראבל
המופעביצירתשכרוכותהפעולותכלנעשותעדייןהתוכניתריצתבמהלךSingleton-בלהשתמשצריךאינו
אתלאתחלהאפשרותאתכךבגללנפסיד,כןכמו(.זיכרוןומשאביזמןשצורכותכאלוהרבהליהיותיכולות)
.צורךבוישכאשררקSingleton-ה
והחסרונות היתרונות ותאור הפיתרון של התוצאות (1
הלקוח.מחלקהשלבלבדאחד(עצם)במופעשימושהלקוחעללכפותהדרךאתלנונותןSingletonהתכןדפוס
.ואיךהמופענוצרמתייודענואיוהואהמופעליציתאחראילאכבר
:יתרונות
.ולזכורללמודקל,ואינטואיטיבימאודפשוטמבנה .1
.למשל,העצמיםמונחהתהתכנובעקרונותטובשימושםמדגיהזתכןדפוס .7
איך,היחידהמופענוצרמתימהלקוחמסתירים–שישתנושסבירעיצובבאספקטיםשלהסתרה
(.Singletonאתשיורשת)הואפיתספצימחלקהאיזהשל,נוצרהוא
עלישפיעשזהמבלייקבלשהלקוחהעצמיםיצירתמדיניותאתבקלותבהמשךלשנותניתן,כך
לשלוטואףאחדממופעליותרגישהיקבלשהלקוחבהמשךלהחליטניתן,למשל–שלוהקוד
.[Gof]יקבלשהלקוחהמופעיםבמספר
מחלקהה–מימושמולולאמנשקמולעיצובSingletonלרשתואפשרהכלליהמנשקאתנותנת
.ממנה
שהדגמתיכפי(developer tests)התכןדפוס,Singletonבמתודותשימושלעומתגמישותמוסיף-
.[Gof]Singletonמהמחלקהירושהי"עהמימושאתלעדןקל,למשל.בלבדמחלקה
הקודעלישפיעשזהמבלייקבלשהלקוחהעצמיםיצירתמדיניותאתבקלותבהמשךלשנותניתן
.הלקוחשל
השלאחדבמופערקלהשתמששרוציםלהחליטאפשר-Singletonלשנותניתןיהיהעדייןאבל
.[Mak3]ידיעתוללאוזאתאליהםגישהיקבלשהלקוחהעצמיםמספראתבהמשך
-22-
:חסרונות
פוגעיםשכידוע,גלובאלייםיםבמשתנרבלשימושכתרוץזאתבמחלקהלהשתמשנוטיםמפתחים .1
המשתניםבעייתאתפותרתלאSingltonמסוגבעצםנתוניםשמירת.התוכנהשלבמודולאריות
.[Mak3]הבעיהשםאתמחליפהרקאלאהגלובאליים
ולספקמראשהיחידהעצםאתליצור,למשלאפשר.Singleton-בלהשתמשכדאילאמקריםבהרבה .7
האיתמשתמששאניהעבודה-מסגרתלמשלעושהכך)שירותיואתצריךשלעצםאליוהגישהאת
(.Springתשנקרא,בעבודתי
להוסיףנצטרךSingleton-העצםמשירותיםשדורשים(multy-threaded)מיםניריבויעםעבודהב .3
.מייצגהואשאותוהיחידהמשאבמולהנימיםשלהעבודהאתשמסנכרןנוסףקוד
-21-
Structural וריהקטגב תכן דפוסי 7.1
גדוליםשלעצמיםאושלמחלקותליצירתמבניםהרכבהמכילהדפוסיתכןשעוסקיםבCreationalהקטגוריה
.(יצירתמבניםרקורסיבייםבזמןריצה,למשל)ומורכביםיותר
דפוסיהתכןבקטגוריהזאתמשתמשיםביחסשלהורשהביןמחלקותאוביחסשלהרכבהביןעצמיםלצורך
.[GoF]העצמיםשלהמחלקותאושלההרכבההחבאהשלאופן
Adapter התכן דפוס 1.7.5
זה תכן לדפוס שניתנו שמות (1
Adapterשיוכלונרצהאךאותןלשנותנרצהשלאשונותחלקותמביןלתאםבאהתכןשדפוסמורהזהשם–
.[GoF]ביניהןלתקשר
Wrapperמולהלעבודווכליתואחרחלקותשמכךשונהמנשקבמחלקהעוטפיםשאנולכךמתייחסזהשם–
.[GoF]להשתנותמבלי
Patcherבומשתמשים,קיימתתוכנהמערכתלתקןשבמקוםבגלל.זהתכןלדפוסלהעניקשבחרתישםהזה–
שלהתיעודתיקון,כסף,פיתוחזמןכמובמשאביםחיסכוןתוךחייהאתלהאריךשיעזרוטלאיםלהוסיףכדי
כלומרנכוןבדתעועדייןששונתההמערכת-שתתבדיקהכלומר(regression tests)נסיגהבדיקות,המערכת
.תעבודשהיאשהסכמנובאופןהשינוילפניעבדהשהיאכפילפחותאוהמקוריותהדרישותי"עפ
והבעיה ההקשר הצגת (1
.[Fbs]בספרהמובאתהיומיוםמחייפשוטהדוגמאי"עהבעיהאתנציג
לחשמלתקעעםמחשבבאמריקהקנינואבלאירופאיתקולפיעשוייםשלושהחוריםחשמלשקעבקירלנויש
.ביניהםקשרליצוריכוליםשלאעצמיםשנילנוישכלומר.אמריקאיתקןלפישמיוצר
הפיתרון (1
.זהעםזהלעבודהעצמיםלשנישיעזורמתאםניצור
-25-
Adapter [Fbs] התבנית לתיאור היומיום מחיי בדוגמא שימוש: 11 איור
למתודהלקרארגילהשClientהמחלקהביןמתאמתAdapterהמחלקהכיצדלראותניתן,הלןל30איורב
RequestהמחלקהלביןAdapteeהמתודהאתשחושפתSpecificRequst.
Adapter [Dof4] התכן דפוס את שמתאר מחלקות תרשים: 11 איור
.קצתכאןרחיבא
?חדשהTargetמחלקתנכתובפשוטאולי?TargetמהמחלקהלרשתצריכהAdapterהמחלקהלמה:שאלה
-21-
.הבאיםתפקידיםהבשניכאןמשמשההורשהיחס:בהתשו
תוכלClientהמחלקה.TargetלביןClientהותיקותהמחלקותביןבזמנושנחתםהחוזהתנאיקבלת .1
ההתחייבויותכלאתתספקהחדשהשהיישותבתנאימולהעובדתשהיאהיישותלשינוי"להסכים"
.הישנות
במחלקהתלויוהואיותרנגישאינואפילושאוליקודתוךבכתובהליהיותיכולהClientהמחלקה .7
Targetמהמחלקההורשהי"ע.יותרנגישאינושלההקודםגשTargetמחלקהלאומריםאנוClient
.Targetמסוגמחלקהעםעובדעדייןיאההשמבחינת
.והחסרונות היתרונות ותאור הפיתרון של התוצאות (1
בניגודזאת.אותןלשנותנרצהשלאקיימותלקותמחשתיביןמנשקיםשלאמהלהתמענהנותןזהתכןדפוס
לביןהשירותאתשנותןהקודביןהמערכתעיצובשלהראשוניםבשלביםעודמפרידשBridgeהתכןלדפוס
.(ההבדליםאתיותרנביןאז)Bridgeהתכןדפוסשלבסקירהיותרשאסבירכפי,[Gof]אליוהמנשק
אתמתרגמתובעצםהמחלקותביןשחוצצתחדשה(layer)שכבהשלהוספהי"עיתנעששקיםהמנהתאמת
.בהןתומכותשרותשנותנותשהמחלקותבקשותשלאוסףאולבקשהמסויימתמחלקהשלהשירותבקשת
:יתרונות
.ולזכורללמודקל,ואינטואיטיביפשוטמבנה .1
(לעילזהתכןדפוסשלהסקירהבתחילתמהםחלקפירטתי)ויקריםרביםפיתוחמשאבילחסוךעוזר .7
.קייםקודשלתיקוניםבמקוםטלאיםתפירתי"ע
.למשל,העצמיםמונחהתהתכנובעקרונותטובשימושםמדגיהזתכןדפוס .3
לקוחמהמוחבאמימושה–שישתנושסבירעיצובבאספקטיםשלהסתרה.
בלבדהמתאמתבמחלקהתלוילקוחה–פעולהשמשתפיםעצמיםביןחלשלצימודלשאוףיש.
העדפתCompositionבספרשנכתבכפי–בהורשהשימושפניעלוהאצלה[Gof]אתלממשניתן,
-שנעדיףאך.AdapteeהמחלקהאתתירשAdapterשהמחלקהכךי"עגםהזההתכןדפוס
AdapterלמחלקההעבודהאתתאצילAdapteeאותהתירשולא.
:חסרונות
,קייםבקודמשינויהימנעותי"עפיתוחמשאבילחסוךעוזרשהואבכך,זהתכןדפוסשמביאכההבר .1
תאורטיבאופן.למערכתטלאיםועודעודלהוסיףלהמשיךשנוטיםבגלללקללהבהמשךהופכת
-27-
וגםאותןלאתרשקשההתאמותחוסרנגרמותבמציאותאבלהבעיותאתפותריםהאלוהטלאים
.אותןלתחזק
-תתביןהתאוםלצורךמורכבותפעולותלעשותצריךשלפעמים)החוצצתבשכבהנוסףבקודשימושה .7
לגרוםוכן(לתקלותסיכוייותר=קודיותר)נוספותצפויותלאלתקלותפתחלתתיכול(המערכות
.המערכתשליותראיטיתלפעולה
-23-
Bridge התכן דפוס 1.7.5
זה תכן לדפוס שניתנו שמות (1
Bridgeהשם,בהמשךשנראהכפי–Bridgeלביןללקוחחושפיםשאנוהמנשקביןשנוצר"גשר"העלמרמז
.[GoF]הפנימיהמימוש
Handle/Bodyלמנשקמתייחסזהשם,כלומר.התכןדפוסאתשמרכיביםהחלקיםלשנימתייחסזהשם–
.[GoF]הפנימיהמימוששהינולגוףמתייחסוכןעבורואחיזהכידיתללקוחחושפיםשאנו
והבעיה ההקשר הצגת (1
בגללהזאתבמחלקהתלויהנעשיתהיאאזמסויימתבמחלקהמשתמשתתוכנהשכאשרהואהבעיהמקור
.מחלקהאותהשלבמנשקמשתמשתשהיא
עץ-מפעל:רכבכלישהםצעצועיםלייצורמפעליםשנישקיימיםנניח.פשוטהדוגמאי"עהבעיהאתנציג
זהיםהמוצריםאבל,בפלסטיקרקמשתמשפלסטיק-מפעלואילובעץרקמשתמשעץה-מפעל.פלסטיק-ומפעל
.שונהבחומרלשימושפרט
.שלהםבמפעלהייצורקויעלשתשלוטתוכנהמערכתאצלינוהזמינוהמפעליםששנינניח
נצטרךצעצוע-ניתמכולבניית,למשל.צעצועכלעבורמחלקותשתיליצורנצטרך,שניהםעבורשנבנהבתוכנה
מחלקותשתיעודנצטרךדומהובאופן(הלןל36איורראה)PlasticCar-וWoodCarהמחלקותאתלבנות
המחלקותמספראתלצמצםנוכלאיך.PlasticMotorcycle-וWoodMotorcycleצעצוע-אופנועלבנייתכאלו
?גומי-למפעללמשל,נוספיםלמפעליםיותרהרמלהתאיםשנוכלתוכנהליצורוגם
Bridge התכן דפוס את שמסבירה דוגמאל מחלקות תרשים: 16 איור
-25-
הפיתרון (1
.האיוראחרישמוסברוכפילהלן32איורבשמתוארכפי,הבאבאופןהמימושלביןהמנשקביןנפריד
Bridge התכן דפוס את שמסבירה דוגמאל מחלקות תרשים: 17 איור
.לקוחל שנחשוף המנשק חלק את רק ניצור כל קודם
בשםכזאתלמחלקהקוראהתכןדפוס)Toyלהשנקראצעצועיםלייצורמופשטתמחלקהניצור
Abstraction מופשטותמחלקותניצור,עתה .(ההפשטהשלביותרהגבוהההרמהאתמספקתכי
בשםלהןקוראהתכןדפוס)Motorcycle-וCarלהןונקראToyהמחלקהאתשיורשות
RefinedAbstractionמימושמספקותלאהןעדייןאבלההפשטהאתמחדדות/מעדנותהןכי.)
שלהשתמוכיצדלהשתמשחומרבאיזה)צעצועכלממשלייצרכיצדיודעותלאזהבחלקהמחלקות
.לאופנועגלגליםלבנייתבקשהלמשלכמוכלליותבנייהבקשותמהלקוחלקבלרקאלא(בחומר
(.לקוחל חשוף שלא) המימוש את רק ניצור עתה
ToyImplלהשנקראצעצועיםלייצור(המימושבחלקנמצאתשהיאלמרות)מופשטתמחלקהניצור
חלקשלהמנשקאתמפרסמתיאהכי Implementorבשםכזאתלמחלקהקוראהתכןדפוס)
הספציפיהצעצועאתייצרוהן,ToyImplמהמחלקהשיורשתמחלקהיצורנמפעלכלעבור.(המימוש
למחלקותקוראהתכןדפוס)מפעלאותושלובטכניקהמפעלאותושלהייחודיחומרבשימושויעשו
.(הספציפיהמימושאתמכילותהןכיConcreteImplementorבשםכאלו
מהמחלקה"גשר"ניצור,לבסוףToyהמחלקהאלToyImpl.ביניהןאגרגאציהשליחסהוספתי"ע
מןהמימושחלקלהסתרתשגורםזהשהואמכיווןBridgeהתכןבדפוסהעיקריהדברהואזה"גשר"
.הלקוח
למחלקהאפשרמוזה.ממנהשנוצרההורשהעץולכלImplementor-הבמחלקתלשימושמודעלאהלקוח,כך
המחלקהאצללשינוילגרוםמבלישלהןהמנשקאתלשנותואףלהשתנותממנההיורשותהמחלקותולכלזאת
.הלקוחמשתמשבה
-20-
.להלן32איורבמובאזהתכןדפוסשלהכלליהמבנה
Bridge [Dof1] התכן דפוס של מחלקות תרשים: 18 איור
.והחסרונות היתרונות ותאור הפיתרון של התוצאות (1
.המימושלביןהלקוחביןשחוצצתשכבהמוסיףBridgeהתכןדפוס
שניביןההבדלמהאזדומהדברעושהלעילשתיארתיAdapterהתכןשדפוסלצייןמעניין,[Gof]שמסבירכפי
?אלותכןדפוסי
,העיצובבשלבודע,נועדBridge-שבעודקיימותמערכות-תתביןלהתאיםנועדAdapter-שבכךהואההבדל
להשתנותיוכלוהמימוששלבהיררכיההמחלקותכלוהמנשקשלבהיררכיההמחלקותכלשבהמערכתלבנות
.חברתהעלתשפיעאחתשהיררכיהמבלי
:יתרונות
.במימושתלותללאלהתפתחיכולעצמוהמנשקעתה.במנשקהשימושעיקרוןשלהעצמה .1
.הבאיםהעצמיםמונחהתהתכנובעקרונותטובשימושםמדגיהזתכןדפוס .7
מהלקוחמוחבאתמימושהשלההיררכיהכל–שישתנושסבירעיצובבאספקטיםשלהסתרה.
Open-Close Principle-(לשינוייםסגורהאךלהרחבותפתוחהלהיותצריכהמחלקה)
פתוחותאךלהשתנותצריכותלאהמימושובחלקהמנשקשבחלקהמופשטותהמחלקות
.להרחבה
עובדשהלקוחהמנשקבחלקהמחלקות–פעולהשמשתפיםעצמיםביןחלשלצימודלשאוףיש
.זהתכןשבדפוסהמימושחלקאתמכירותלא(תהמופשטהמחלקהללא)ישירותאין
-26-
.מימושמולולאמנשקמולעיצוב
העדפתCompositionלמנועבכדיהאצלהי"ענוצר"גשר"ה–בהורשהשימושפניעלוהאצלה
.המימוששלבחלקהלקוחשלעקיפהתלות
:חסרונות
עדיףמתילדעתכדיניסיוןצריך,ובקודתכנוןבטובתיעודדורש,ידעורענוןלימודדורש–מורכביחסיתמבנה
.להשתמשלא
-22-
Composite התכן דפוס 1.7.7
זה תכן לדפוס שניתנו שמות (1
Composite –מרכיבזהתכןדפוס(Composes)חלקשלהיררכיותלהציגבכדיעציםשללמבניםעצמים-
שמורכבמכלולמייצגשלהופעמכלשבגללCompositeנקראתזהתכןבדפוסהמחלקותאחת.[Gof]מכלול
.אחריםעצמיםועודממנה
והבעיה ההקשר הצגת (1
לקוחללאפשרמעונייןאני,"המחשבבמדעימתקדםפרויקט"הקורסבמסגרתמפתחשאניהציורבתוכנת
אנימעונייןואז;Picture-1נקראבחרשהואהזאתלקבוצה;ולאחדאותןלקבוצהאחתשונותצורותלסמן
.המסךעלאחדכגוףהקבוצהכלאתהזיזולציירללואפשרל
שהלקוחPicture-2עםיחדגםואוליאחרתצורהעםיחדPicture-1אתעתהלסמןיוכלהלקוחאופןובאותו
בהרבהלמצואשאפשרהתנהגותזאת.Picture-10בשםלהנקראולאחדןלקבוצהחדשהשמקודםהגדיר
.ווקטורישרטוטתוכנות
מיכלליצוראצטרך(.ולהרחיבלתחזקקשהיהיהכךשאחר)מורכבדיקודלכתובאצטרךזהאתלממשבכדי
(Container)קודלכתובאצטרך,הזאתהקבוצהאתלהזיזללקוחלאפשרוכדי.צורותשלקבוצהכלעבור
.לזוזמהןולבקששבמיכל(Iteratorהתכןבדפוסלהשתמשאוכל)הצורותכלעלשעובר
הפיתרון (1
המופשטתהמחלקהבתוךבהםהטיפולואתהמיכליםאתנסתיר,לכן.במיכליםהטיפולעםלהתעסקלאנרצה
GraphicsכמושמחלקותכךPictureהמתודהעללדרוךוגםבמיכליםהטיפולאתממנהלרשתיוכלוDraw
לראותשניתןכפי,DrawכמוהבסיסיותהפונקציונאליותהמתודותעלרקידרכוRectangleכמוומחלקות
.להלן31איורב
-22-
Composite [Gof] התכן בדפוס לשימוש דוגמא - מחלקות תרשים: 19 איור
מבנהיוצרGraphicsשלההמופשטתהאב-תלמחלקPictureהמחלקהביןהאגרגאציהשיחסלבלשיםכדאי
מסוגעצמיםעודלתוכולקבץיכולGraphicמסוגעצםגםשהינוPictureמסוגעצםכלומר,רקורסיביעצמים
Graphics(מסוגאחריםעצמיםגםכוללשזהPicture.)הרקורסיביהמבנהאתמתארלהלן55ראיו
.שתיארתי
Composite [Gof] התכן דפוס שיוצר( עץ) רקורסיבי עצמים מבנהל ספציפית וגמאד: 11 ראיו
-21-
.להלן51איורבהתכןדפוסמוצג,כלליבאופן
Composite [Gof] התכן דפוס של מחלקות תרשים: 11 איור
.להלן57איורבמוצגכלליבאופןליצורשאפשרהרקורסיביהעצמיםמבנה
Composite [Gof] התכן דפוס שיוצר אפשרי( עץ) רקורסיבי עצמים מבנה: 11 איור
לאשאניDecoratorהתכןלדפוס,למשל.התכןדפוסיביןקשריםישנם,קודםבפרקשציינתיכפי.כאןנרחיב
הבדלביניהםישאבל,עצמיםשלרקורסיבימבנהשמתארמאודדומהמחלקותתרשיםשיזאתבעבודהמציג
שרשורבעזרתמסוייםלעצםתפקידיםלהוספתמשמשDecorator.שנוצרהרקורסיביובמבנהבשימוש
וגםהלקוחבקשתאתאליוומעבירבשרשרתהבאהעצםעלמצביעעצםכלכלומר.אליועצמיםשלרקורסיבי
להרחיבושניתן)דינאמיבשיפורכאןמדובר,כלומר.בקשהאותהאתלשרתבכדיחדשמשהומוסיףםעצכל
אתיציגהראשוןהעצםאזחלוןלהציגמבקשהלקוחאם,למשל)הלקוחלבקשתהשירותשל(ריצהבזמן
-לבניגודזאתו(.שהוצגלחלוןגלילהפסייציגהבאהעצםואז.חלקואתלהציגהבאמהעצםויבקשהחלון
Compositeעצמיםביןדינאמיהכלהיחסשלשירותלנושנותן[Gof].
שרשרתיצריםשניהם)Decorator–ליותרדומהאפילוChain of Responsibilityהתכןשדפוסלהעירכדאי
-15-
היאChain of Responsibilityשלמטרתו)שוניםבתפקידיםמדוברכאןגםאבל(עצמיםשלרקורסיבית
לקוחי"ע[Fbs]-במודגםזה.השירותאתלונתנועצמיםאיזהברורהידיעהללאשירותלבקשיוכלשהלקוח
(.לשףההזמנהאתשמעבירמהמלצרמנהשמזמיןבמסעדה
.והחסרונות היתרונות ותאור הפיתרון של התוצאות (1
קלנוצרשהמבנהלאחר.עצמיםביןהכלהשלרקורסיבייםמבניםליצורלנומאפשרCompositeהתכןדפוס
.מסויםעץ-בתתאושבעץהעצמיםלכלבקשה/הודעהלשדרללקוח
:יתרונות
.הלקוחשלרצונולפיריצהבזמןשוניםעציםבבנייתגדולהגמישותלנונותןשנוצרהרקוסיביהמבנה .1
עוברתירותשלקבלתהלקוחשלהבקשה.מפורשבאופןעצםמכלבנפרדשירותלבקשצורךאין .7
המבנהבצורתתלותללאוזאתנפרדתקשורתערוץביצירתצורךללאהעצמיםמבנהבתוךבמהירות
.שיתקבל
:הבאיםהעצמיםמונחהתהתכנובעקרונותטובשימושםמדגיהזתכןדפוס .3
מהלקוחמוסתרבמיכליםהטיפול–שישתנושסבירעיצובבאספקטיםשלהסתרה.
Open-Close Principleההמחלק-(לשינוייםסגורהאךלהרחבותפתוחהלהיותצריכהמחלקה)
-וCompositeמחלקותי"עלהרחבההפתוחאךלהשתנותהצריכלאComponentהמופשטת
Leaf.
מסוגעצםכל–פעולהשמשתפיםעצמיםביןחלשלצימודלשאוףישCompositeשהוארקיודע
.מזהיותראולComponentמסוגאחריםעצמיםמקבץ
המחלקהמולעובדהלקוח,למשל–מימושמולולאמנשקמולעיצובComponentחייבולא
.ממנהשיורשותהמחלקותאתלהכיר
:חסרונות
.מסוייםעצםשלחיפושכמולפעולותרקורסיבייםאלגוריתמיםלהפעילנצטרךולכןעצמיםשלעץנוצר .5
ולתעדאותםלתחזקקשהיותרולכןיותרמורכביםתמיםלאלגורינחשביםרקורסיבייםאלגוריתמים
.אותם
שנמצאמעצםמבקששהלקוחבקשהכאן,Observerהתכןדפוסשלבהצגהשראינולמהדומהבאופן .0
למשמעותמודעיהיהלאהלקוחלפעמים,לכן.העץבמורדלעצמיםרבותלבקשותתתורגםהעץבמעלה
-11-
נבנהלאהעץמקריםשבהרבהבגללבעיקר)לבקשתוהמערכתהיענותשל(התוכנהעבודתמבחינת)
(.עצמוהלקוחלמשלכמואחריםגורמיםידיעלאלאהמפתחי"עמראש
-17-
בתעשייה פיתוח סביבותבו ודהבע-מסגרותב תכן דפוסיב שימוש 8
.התוכנהבתעשייתשונותפיתוחובסביבותעבודה-מסגרותבנרחבבשימושנמצאיםתכןדפוסי
.לכךדוגמאותבקצרהכאןאסקורהבאיםםבעמודי
-13-
Spring-ב תכן דפוסי 8.1
Springנרחבבשימושוהואבעבודתיבומשתמששאני,פתוחקודמבוססתוכנהלפיתוחעבודה-מסגרתהינו
הוא,אחרותעבודה-מסגרותבהרבהכמו,Spring-במרכזיעיקרון.[Spri]בעולםJavaמפתחיי"עמאוד
שלמימושהינוDIהתכןדפוס.(DIבקיצוראוDepency Injection")תלות-הזרקת"תכןהבדפוסהשימוש
אומר"היפוךהשליטה"עיקרון,בקצרה.(IoCבקיצוראוInversion of Control")השליטה-היפוך"עיקרון
קוד,משלל)אזקייםקודאחר,(שנמצאלמשלבספריותשלקודתוכנה)שבמקוםשהקודשלךיקראלקודאחר
שייקראלקודשלךובנוסףהקודהאחרגםייקבעאתהמימוששלהקודהאחר(עבודה-התוכנהשלמסגרת
עלשמרחיב[Eli]שליהעבודהבמקוםשכתבתימאמרצירפתי,151שבעמוד'אבנספח.שהקודשלךתלויבו
SpringועלDIו-IoCעלבעיקרומתבסס[Mart1].
1) Spring התכן בדפוס משתמש Factory Method
SpringהתכןדפוסבמשתמשFactory MethodלטעינתBeansהשם)"Bean"כללילשימושמחלקותמתאר
שמרחיבApplicationContextבאמצעותגםו)BeanFactoryבאמצעות(Javaבשפתנרחבשימושבהןשנעשה
.[John]קודלשדוגמאןללה(.BeanFactoryאת
BeanFactory bf = new XmlBeanFactory(new ClassPathResource("myFile.xml", getClass())); MyBusinessObject mbo = (MyBusinessObject) bf.getBean("exampleBusinessObject");
ואז(כזהקובץשלתוכןאדגיםהבאהבדוגמא)myFile.xmlמהקובץBean-ההגדרתאתקוראלעילהקוד
(.בעברנוצראועכשיושנוצרעצם)שקיבלנוהעצםעלצביעלהmboמשתנהלגורם
דפוסאיךזהמחלקותלתרשיםהוספתי,הלןל53איורב.Factoryהתכןדפוסשלהמחלקותבתרשיםניזכר
.לעילבקודשמוזכרתמחלקהלכלקוראהתכן
(.א.א — עריכה) Factory Method [Dof3] התכן דפוסב שימוש להדגמת מחלקות תרשים: 11 איור
-15-
1) Spring התכן בדפוס משתמש Singleton
דוגמאנראה,Factory Metodהתכןבדפוסשימושי"עSpringבעזרתBeanלקבלתדוגמאשראינולאחר.Singletonהתכןבדפוסשימושסףבנונראההפעםאבל.כזאתנוספתשקורא[7Devx]מתוךהבאהקודבקטעלראותניתןSingletonהתכןבדפוסSpringשללשימושיפהדוגמא .הקודקטעלאחרמובאשתוכנוXML-הקובץאת
InputStream is = new FileInputStream("src/examples/spring/beans.xml"); BeanFactory factory = new XmlBeanFactory(is); DataProcessor dataProcessor = (DataProcessor) factory.getBean("fileDataProcessor"); Result result = dataProcessor.processData();
.Singletonהתוכןבדפוסהשימושאתהדגשתי.XML-הקובץתוכןלהלן
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean name="fileDataProcessor" class="examples.spring.DataProcessor" singleton="true"> <constructor-arg> <ref bean="fileDataReader"/> </constructor-arg> </bean> <bean name="fileDataReader" class="examples.spring.FileDataReader" singleton="true"> <constructor-arg> <value>/data/file1.data</value> </constructor-arg> </bean> </beans>
-10-
JUnit-ב תכן דפוסי 8.1
Junit התכן בדפוס משתמש Template Method
JUnitכלומר.כתבשהואלקודבדיקהתרחישיליצורהתוכנהלמפתחלעזורהשמטרת,עבודה-מסגרתהינו
הואהרעיון.JUnitהשםניתןומכאןUnit TestsגםשנקראיםDeveloper Testsליצורהתוכנהלמפתחלעזור
.הנבדקהקודעלשוניםבדיקהתרחישישיריץתוכנהקודכתובל
"Frameworks-השלהאבא"גםשנקראTemplateהתכןדפוסאתבקצרהנכיר,כאןשאתןהדוגמאבמהלך
-מסגרתבשמשתמשהתוכנהלמפתחמאפשרהואכלומר.Hot Spotsליצירתהבסיסאתנותןשהואכךעל
.העבודתבמהלךשימושבהםעשהתהעבודה-מסגרתשמסויימיםבמקומותקודלכתוב,העבודה
למשלאפשר,עיצובמונחהעצמיםבשימושמחייבתלאזאתעבודהשיטת.Hot Spotsנקראיםאלומקומות
ידית/ייחוס/מצביע/הכתובתאתהעבודה-מסגרתליםמספקאנחנוכלומר.Callback Functions-בלהשתמש
התעבודבמהלךואזשכתבנופרוצדורה/הפונקציהלהפעלת(address/pointer/reference/handle)אחיזה
.עיצובמונחהעצמיםבנעשהזהצדיכדוגמאנראהעתה.שלנוקודבשתמשהעבודהת-מסגרת
JUnitבשםמחלקהמספקTestCase.להלן55איורבשמוצגותכפיהבאותהמתודותאתבעיקרשחושפת
.Template Methodבשםrunלמתודהקוראיםאנולמהאסבירבהמשך
JUnit [Forg] של TestCase המחלקה את שמתאר מחלקות תרשים :11 איור
לקרואנרצההבדיקהבתחילתכלומר.הבודקהקודשלשלםחייםמחזורמספקתTestCaseהמחלקה
קודלהריץנרצהולבסוףrunTestלמתודהקריאהי"עעצמההבדיקהאתלהריץנרצהואזsetupמתודהל
למתודותקוראתפשוטrunהמתודה.tearDownלמתודהקריאהי"עההבדיקשלפניהמצבאתשמחזיר
.הנכוןהסדרלפיהאחרות
-16-
מהמחלקהשיורשתמחלקהבכותהואאזשלוהקודאתשיבדוקקודלכתוברוצההתוכנהמפתחכאשר
TestCaseלעיל.JUnitהבאהמימושאתמספקת[Forg]מתודהלrun.
public void run() { setUp(); runTest(); tearDown(); }
.TearDown-וrunTest,setupהמתודותאתTestCase-משיורשתשלובמחלקהלממשצריךהתוכנהמפתח
הנכוןבסדרלמתודותלקרואתדאגוהיאשלומחלקהמהשנוצרעצםהשלrunלמתודהלקרואצריךהואואז
ולקרואאותהלרשתרקאלאrunהמתודהאתשלובמחלקהלממשצריךלאחתפהמ,כלומר.מראששהוכתב
.האחרותלמתודותהקריאהלאופןתבניתמספקתהיאכיTemplate Methodנקראתrunהמתודה.לה
.התוכנהמפתחשיוצרHot SpotsמספקותTearDown-וrunTest,setupהמתודות
.Hook Methodsבשםגםנקראותאלהמתודות
.JUnit-בלמימושבאשהואכפיTemplate Methodהתכןדפוסשלהרעיוןזה
-12-
Java JDK-ב תכן דפוסי 8.1
.תכןדפוסיבJava JDKשללשימושדוגמאותלוששכאןאתן
1) Java JDK התכן בדפוס משתמש Observer
התכןדפוסלשSubjectהמופשטתהמחלקהבעצםהיאJava.util.Observerableהמופשטתהמחלקה
Observer(התכןדפוסשללקותמחתרשים:73איורראהObserver[Sks])מנשקהJava.util.Observer
.ObserverהתכןדפוסשלObserverהמנשקועלימעידוששמכפיואה
.ObserverהתכןדפוסעלמבוססJavaשלGUI Event Model–ה
Event Source-כשישמשעצםי"עמיוצגיהיהשלנוהאפליקציהשלהגראפימנשקב"OK"כפתורלמשל
.ConcreteSubject-כמתפקדבעצםזהעצםאבלJavaשלבתיעוד
-כמתפקדבעצםזהעצםאבלJavaשלבתיעודEvent Listener-כשישמשעצםכמיוצגיהיהגראפיחלון
ConcreteObserverמנשקלממשלויכראפיהגהחלון.ActionListenerכמתפקדשבעצם,-Observerכמו.
(Observerבעצםשזה)Event Listener-כהגראפיהחלוןאתלרשוםנצטרך,Observerהתכןדפוסבראינוש
ורושםהכפתורעצםאתיוצרהואנוצרהגראפיהחלוןשכאשרנהוג,למשל.הכפתוראתשמייצגעצםהתוךב
.okButton.addActionListener(this):כךהכפתוראצלעצמואת
-12-
1) Java JDK התכן בדפוס משתמש Iterator
Java JDK-השמספקIteratorבמחלקהשימושמציגה[Prac1]הבאההפשוטההדוגמא
.[Dof2]Iteratorהתכןדפוסשלמחלקותתרשים:72איורראה)
-בלשימושמאודשדומה,Generics-בשימוששזה"<Iterator<String"כתובהבאבקוד:הערה
TemplatesבשפתC++למחרוזותבאיטראטורלהשתמשמבקשיםאנו,כלומר..
import java.util.*; public final class LoopStyles { public static void main( String... aArguments ) { List<String> flavours = new ArrayList<String>(); flavours.add("chocolate"); flavours.add("strawberry"); flavours.add("vanilla"); useWhileLoop( flavours ); useForLoop( flavours ); } private static void useWhileLoop( Collection<String> aFlavours ) { Iterator<String> flavoursIter = aFlavours.iterator(); while ( flavoursIter.hasNext() ){ System.out.println( flavoursIter.next() ); } } // Note that this for-loop does not use an integer index. private static void useForLoop( Collection<String> aFlavours ) { for ( Iterator<String> flavoursIter = aFlavours.iterator(); flavoursIter.hasNext(); ) { System.out.println( flavoursIter.next() ); } } }
מרומזתבצורהלהשתמשהתוכנהלמפתחייותרנוחהדרךמספקותJavaשלהאחרונותהגרסאות
נקראתבמהותשינויללאהתוכנהמפתחלשימושזאתנוחהדרך.Iteratorהתכןבדפוסבלבד
.[Prac2]קודשלדוגמאלהלן(.Syntax Sugar)"סוכרסינטקטי"
List<String> trees = Arrays.asList("Maple", "Birch", "Poplar"); for (String tree: trees) {
log(tree); }
-11-
1) Java JDK ןהתכ בדפוס משתמש Facade
המחשבבמדעישנילתוארלימודייבמסגרת"Javaבשפתמתקדםתכנות"הקורסאתלמדתי
.[Phd]הספרליווההזההקורסאת.הפתוחהבאוניברסיטה
.FacadeהתכןבדפוסJava JDK-השללשימושהבאההדוגמאמובאתבספר
.Facade-כמשמשתjava.netשנקראpackage-בשנמצאתURLהמחלקה
המחשבשלIP-הכתובתעלמידעשמכילInetAddressמהמחלקהלעצםמצביעמכילההמחלקה
הואשתפקידוURLStreamHandlerמהמחלקהלעצםמצביעמכילההמחלקה,כןכמו.המארח
.המארחשבמחשבURL-הלכתובתהתקשורתאתליצור
שהלקוחמבליזאתאבללעילשהוזכרוהמחלקותשלבשרותמשתמשURLהמחלקהשלהלקוח
.URLהעצםמאחוריתפקידםאתמבצעיםהאלוהמחלקותשלהעצמיםכיצדיידע
-155-
C# SDK-ב תכן דפוסי 8.1
.תכןדפוסיבC# SDKשללשימושדוגמאכאןאתן
C# SDK התכן בדפוס משתמש Strategy
שלעיקרוןהאתשמתארמחלקותתרשים:70איורראה)StrategyהתכןדפוסבמשתמשתListהמחלקה
יכולשהואכךי"עהמיוןאסטרטגייתאתלבחורלקוחלגמישותנותנתהיא(.[Mak]Strategyהתכןדפוס
המחלקהשלSortהמתודהאתציגשמלהלןהקודבקטעלראותשניתןכפיIComparerמנשקהאתלממש
List.
public void Sort(IComparer<T> comparer)
.[Dijk]קודשלדוגמאלהלן
using System; using System.Collections.Generic; namespace IComparer { public class ReverseStringComparer : IComparer<string> {
public int Compare(string x, string y) { // We reverse the result by flipping the input parameters. return String.Compare(y,x);
} } class MainClass { public static void Main(string[] args) {
List<string> myList = new List<string>(); myList.Add("a"); myList.Add("b"); myList.Add("c"); ReverseStringComparer myComparer = new ReverseStringComparer(); myList.Sort(myComparer);
} } }
דפוסאיךזהמחלקותלתרשיםהוספתילהלן50איורב.Strategyהתכןדפוסשלהמחלקותבתרשיםניזכר
.לעילבקודשמוזכרתמחלקהלכלקוראהתכן
-151-
(.א.א —תוספות )Strategy [Ravi ] התכן בדפוס שימוש להדגמת מחלקות תרשים: 11 איור
-157-
בדפוסי תכן בתהליך פיתוח תוכנה שימושל דוגמאות 9
חומרה עם בשילוב תוכנה בדיקתל כנהתו 9.1
תוכנהשלמודולמפתחיםזאתשיטהלפי.[Acd]והחומרההתוכנהבתעשייתמאודנפוצהפיתוחשיטת,להלן
שניהםאתמפתחיםאלאמוכןיהיה'בשהמודולעדמחכיםלאאבל,'בבמודולשמשתמש'אמודוללושנקרא
שהםבגלל.חומרהשלמודוליםשהינםA, B, Cבמודוליםשתמשמ'אמודולשנניח,דומהבאופן.במקביל
,בהםלהשתמששמאפשרתתוכנהמהםאחדכלעםביחדמספקהחומרהיצרןלרובאזחומרהשלמודולים
עםיחד)החומרהאתמפתחיםהזהבמקרהגםאזקיימתלאעדייןהחומרהאם.Driverנקראתזאתתוכנה
.'אהתוכנהמודוליתוחלפבמקביל(שלהDriver-ה
מחלקה.ClassUnderTestהזאתלמחלקהנקרא.'אמודולשלבתוכנהמסוימתמחלקהלבדוקנרצה,עתה
.להלן56איורבמובאזאתמחלקהלבדיקתנאיבימימוש.החומרהשלהמודוליםמולעובדתזאת
[Acd] חומרה של לבדיקות נאיבי מחלקות יםתרש: 16 איור
-153-
המחלקהאתלבדוקשנתחיללפנימוכניםיהיוDrivers-שהדורשלעילשהובאהנאביהמימושאבל
ClassUnderTestהתכןבדפוסנשתמש,זאתלפתורבכדי.Strategyהביןמנשקהוספתי"ע-Driversלבין
,מוכניםלאעודDrivers-הכאשרהפיתוחבזמן,נוכלכך.להלן52איורבלראותשניתןכפי,שלנוהתוכנה
בשםזהלקודנקרא)שוניםבדיקהבתרחישיDrivers-הפעולתאתשלנוהבדיקהעבורשידמהקודפתחל
Mock Driver.)
Strategy [Acd] התכן בדפוס תמששמש חומרה של לבדיקות מחלקות תרשים: 17 איור
-155-
פשוט מחשב משחק פיתוח 9.1
בשנותמשחקזהפורסם.[Wick]Game of Lifeשנקראומוכרפשוטמחשבמשחקשלפיתוחלהלןיוצג
.[Gab] שהמציאמשחקיםמתמטיים,(John H. Conway)וןקונווי'ימתמטקאימפורסםבשםג"השבעיםע
ואת"חיות"המשתמשמגדירבתחילתהמשחקאתהמשבצותה.תדוממדיהמשחקמתנהלעללוחמשבצו
:משבצותבהתאםלחוקיםהבאים"מתות"או"נולדות"בכלתור.מספרהתורותשהמחשביריץאתהמשחק
.משבצתנולדתמחדשכאשרישלהבדיוקשלוששכנותחיות .1
.משבצתשורדתכאשרישלהשתייםאושלוששכנותחיות .7
.שכנותחיותשלושמותאםישלהפחותמשתישכנותחיותאויותרממשבצתת .3
.שנקבעוהחוקיםפיעלהמשחקלוחעלגאומטריותמפתיעותצורותמתקבלותזאתבדרך
נכניס,למשל.[Wick]המשחקשלהאספקטיםרובאתמחלקהלאותהנכניסהמשחקשלנאיביתוכנהבעיצוב
המשחקחוקילחישובהמשמשותהמתודותוגם(Panel)המשחקלוחלציורהמתודותאתמחלקהלאותה
.להלן52איורבלראותשניתןכפי(.מסויםתאשלהשכניםמספרחישוב,למשל)
Game of Life [Wick] למשחק נאיבי עיצוב שמציג מחלקות תרשים: 18 איור
-150-
לממשאפשרזהואת.המשחקחוקיאתשמפעילהקודלביןהמשחקלוחאתשמציגהקודביןדלהפרינרצה
Observerהתכןבדפוסחלקיבאופןרקלהשתמשבחרו[Wick]במאמר.Observerהתכןבדפוסשימושי"ע
מלאששבשימותהיתרונועלויתורישכךכדישתוך,כמובן.האפשרככלפשוטתוכנהעיצובלהציגמנתעל
התכןבדפוסחלקישימושמציגלהלן51איור.אותוהצגתיכאשרשהובאוכפיObserverהתכןבדפוס
Observerהתכןבדפוסמנשקים/מחלקותבארבעהשימושלעומתבלבדמחלקותבשתישימוששעושה
Observer.
Game of Life [Wick] - ל Observer התכן בדפוס חלקי שימוש שמציג קותמחל תרשים: 19 איור
-156-
יםנבחר עצמים מונחי( anti-patterns) נגד-דפוסי סקירת 11
עיצובמלהימנעאותנושמלמדיםתכןדפוסיהינם(object oriented anti patterns)"מונחיעצמיםנגד-דפוסי"
.שגוימונחהעצמים
תכנותשלנגד-דפוסילמשל,נגד-דפוסישלאחרותרבותטגוריותקשקיימותלצייןכדאי
(programming anti-patterns).הבאיםהידועיםהנושאיםאתהשארביןשכולל
מבניבאופןלתכנתמהצורךשמתעלמתלשמצהידועהההתכנותשיטת-ספגטי קוד
Gotoכמופקודותבעזרתודבקרבותבהסתעפויותלשימוששגורםדבר(structured programming)
<#line>אתלאבדמתחיליםהמערכתהתפתחותבהמשךכאשרגלובאלייםנתוניםבמבנישימושוכן
(.כתיבה/קריאה)לנתוניםומתיניגשמיעלוהתוכניתזרימתאופןעלההבנה
שניתן)בקודשמוטמעהסברבאףשימושללאהתוכנהקודלתוךמספריםהכנסת-קסם מספרי
(.Java-בfinalהגדרתי"עאוC-בconstהגדרתי"עלמשלהוסיפול
.עצמיםמונחינגד-דפוסישלבחרמרהבקצאציגהבאיםבעמודים
-152-
11.1 Call Supper
המתודהאת(overrides)ורסדהאבממחלקתשיורשתמחלקהשלהמתכנת,[7Mart]-בשמתוארכפי
למתודהלקרואכותבשהואהראשונהבפקודהנדרשאהו,האבמחלקתשלהתיעודי"עפ.האבבמחלקת
אוזאתלמתודהלקרואלשכוחעלולשהמתכנתמצביוצרזה(.ושאותההואדורס)האבבמחלקתשמומשה
המחלקותביןבמערכתאחידותחוסריצורישדברוזהלהלקרואבמקוםאחרתבדרךאותהלממשלהחליט
.להלןמובאתקודשלדוגמא.השונותהיורשות
public class EventHandler ... //Override this method by first calling this overrided method. public void handle (BankingEvent e) {
housekeeping(e); } public class TransferEventHandler extends EventHandler... public void handle(BankingEvent e) {
super.handle(e); //The developer calls the overrided method. initiateTransfer(e);
}
היורשתהמחלקהשללמתכנתשמאפשרTemplate Methodהתכןדפוסבשימושי"עזאתבעיהלפתורניתן.לותיקרא(התכןדפוסמתודת)האבמחלקתשלהמתודהכאשר,שלומתודההאתלממשרק
בשפתקודקטעלהלן.hook methodנקראתלממשיצטרךהיורשתהמחלקהשלשהמתכנתמתודהאותהJavaלמתודהרקיקראשלהלןהקודכלשללקוחה,לבסוף.זאתשמתארhandle.
public class EventHandler ... public void handle (BankingEvent e) {
housekeeping(e); doHandle(e); //The super-class calls the hook method.
} protected void doHandle(BankingEvent e) { } public class TransferEventHandler extends EventHandler ... //The sub-class developer implements the hook method. protected void doHandle(BankingEvent e) {
initiateTransfer(e); }
11.1 Sequential Coupling
.מסוייםבסדרלהתבצעחייבותהמחלקהשלהמתודות
.init, do, end:המתודותאתמכילההמחלקהלמשל
מהסדרתעלםלהולשכוחנוטיםהקודחיתשמפבגללבמחלקהשמשתמשתבתוכנהרבותלבעיותגורםזהדבר
.לעילשהבאתיCall Superהנגד-בדפוסשהזכרתידומהבעיהמזכירזה.הנדרש
-152-
.הבאהצימודאתהבאתיצימודיםשלסוגיםסקרתיכאשר
."אחרמודולפעולתעללהשפעהבקרהנתונישולחאחדמודול–(control coupling)בקרהצימוד"
י"עשמוכתבכזהאבלבקודבמפורששנמצאבקרהצימודלאנםאמ,בקרהצימודשלסוגמזההאניכאןגם
.הקודתיעוד
11.1 Base Bean
פונקציונאליותבלהשתמשרוציםכאשרבהאצלהלהשתמשבמקוםאחרתהממחלקבהורשהמוטעהשימוש
(.Javaבשפתנרחבשימושבהןשנעשה)כללילשימושמחלקותמתאר"Bean"השם.מחלקהמאותה
Compositionלהעדיףשיש,ספרותסקירתשלבפרקשהזכרתיתוכנהלעיצובהכללעליםעובראנובכך
.בהורשהשימושפניעלוהאצלה
11.1 God Object
הכללעלעובריםאנו,כאן(.ממוקדתלהיותצריכהמחלקה)אחתבמחלקהפונקציונאליותמידייותרהכללת
-בואילו.מחלקהשללשינויאחתסיבהרקלהיותיכהצרש,ספרותסקירתשלבפרקשהזכרתיתוכנהלעיצוב
God Object.המחלקהאתלשנותרבותלסיבותגדולפוטנציאליש
-151-
סיכום 11
שהרידפוסיהתכן,בתעשייהעובדעםדפוסיתכןגםאםזהלאבאמיוזמתומהנדסתוכנה,כפישראינו
.עבודהה-ובמסגרותJavaמשולביםבשפותהתוכנההמודרניותכמושפת
אלראינוכיצדהתפתחודפוסיהתכןבמהלךהשניםואתההתפתחותהטיבעיתמדפוסיתכןבתחומיםאחרים
.דפוסיתכןמונחיעצמיםבתעשייתהתכנה
תוכנהאיכותייותרולתאראתכתובקודדפוסיתכןמונחיעצמיםבאיםלעזורלמהנדסהתכנהלראינוכיצד
שימושבדפוסיתכןמבלילהביןאותםבשלבהזהצריךליהיותברורש.צרהבאופןברורובקלעמיתיוקודה
חשובלהביןלאיזהראינוש.מקודשלאמשתמשבדפוסיתכןאףעלוללגרוםלכתיבתקודשהואגרועיותר
חשובלהביןאתעקרונות.מההיתרונותוהחסרונותשהואמביאאיתולהביןהקשרמתאיםכלדפוסתכןו
.השדפוסיהתכןבאיםלעזורלנולממשבאופןמיטביהנדסתהתכנ
בכדילתת.מונחיעצמיםלשימושבדפוסיתכן,גםמתעשייתהתכנה,תתירקעהסבריםודוגמאותמעשיותנ
.נגד-נגעתיגםבנושאיםקרוביםכמודפוסיתכןשלארכיטקטורתתוכנהודפוסי,זויתראייהרחבהיותר
דתיעלטעותשמאודנפוצהבתעשייתהתוכנהבהצגתומימושדפוסהתכןתוךכדיכתיבתעבודהזאתלמ
“Factory Method”הצגתיאתהנושאוהרחבתיאתההסברעליוכאשרהצגתי.כפישהסברתיבגוףהעבודה,
.אתדפוסהתכןהזה
ליעבודהזאתתרמה.שעבודהזאתתתרוםלעודהרבהאנשיםשרוציםלפתחתוכנותאיכותיותאנימקוה
באופןאישילחדדאתההבנהשליבנושאדפוסיתכןמונחיעצמיםוזהכברמשפיעעלאופןפיתוחהתוכנה
.במקוםעבודתי
רדןאהרונישעזרלילתקןאתהתובנותשהגעתיאליהןבעבודהזאתוללטשאתהעבודהכך"תודהמיוחדתלד
.שתעמודבסטנדרטיםהאקדמאים
-115-
אנגלית-עברית מונחים רשימת –' נספח א 12
Design (vs. planning)ןכת/עיצוב
Design patternsעיצובתבניות/ןכתדפוסי
Anti patternsתבניותנגד/דפוסינגד
ר קש Context ה
תמיכהלמשל–בעתידלהתרחבתוכנהשליכולתזמניתבומשתמשיםביותר
Scalability
Compositionהרכבה
Object Oriented Design (OOD)עצמיםמונחהןכת/עיצוב
Inheritance הורשה
Delegationהאצלה
Polymorphismתצורתיותרב
Encapsulation כימוס
Class מחלקה
Super class / Base classאבמחלקת
Frameworkעבודה-מסגרת
Object / Class instanceמופעשלמחלקה/עצם
Couplingצימוד
Use Caseשימושמקרה
Actor(שימושמקרהב)שחקן
Sequence diagram(אותרשיםרצףהעבודה)רצףתרשים
Class diagramמחלקותתרשים
Interface(בשפהבטעותהשתרשהממשקהמילה)מנשק
State diagramמצביםתרשים
Deployment diagramפריסהתרשים
Component diagramרכיביםתרשים
Activity diagramפעילותתרשים
Use case diagramשימושמקריתרשים
רשימת מונחים ותרגומם: 1 טבלה
-111-
Spring Framework-ה בעזרת DI עיקרון פי על עבודה –' ב נספח 13
Spring“-הבעזרתDependency Injection-העיקרוןפיעלעבודהשמתארשלימאמרמובאלהלן
“Frameworkזאתמסכמתעבודהכתיבתכדיתוךאבל7552במאיעבודתיבמקוםשכתבתימאמרזהו.
ארבעהעודשלמשובבזמנועברשהמאמרלמרות)במאמרמדוייקיםלאדבריםומצאתייותרהתעמקתי
(.ומוכשריםמקצועייםעמיתים
התכןבדפוסלשימושדוגמאניתנתמאמרבFactory Methodבלשימושדוגמאזאתבעצםאבל-
Static Methodבתעשייהמאודנפוצהטעותזאת.כללתכןדפוסשאיננו[Fbs]שהרי.Factory
Methodשיורשיםלמפתחיםהמימושהחלטתאתלדחותבכדיהורשהשלהיררכיותבשתימשתמש
(.Product-האתשיוצר)Creator-וProductהמחלקהאת
כתבתישכפי,יותרישאבלתוכנהבמערכתצימודשלסוגיםשנישקיימיםבמאמרמספרמסופר
.זאתמסכמתבעבודה
.כלשונוהמאמרמובאועתה
CH Line Development:
Improve Code Modularity using Dependency Injection (DI) via Spring
Author: Eli Isaak, a developer in NDS Israel/CH Line
Reviewers: Four names that were omitted here for their privacy sake
Target Audience: OOP Developers (not only JAVA developers)
Date: 22 May, 2008
What is Spring?
Spring is a Java Framework Open Source library that was developed as a reaction to the difficulty and expense in deploying Java Enterprise Edition (JEE).
JEE is usually deployed using an Application Server which delivers common features needed in Java Enterprise applications (e.g., Persistence, Queues, Scheduler, Thread Pool, etc.). As a lightweight container, Spring enables using most of the JEE features without installing an application server or
-117-
dealing with JEE complexity. Each application remains a standalone application, and by using Spring it obtains the JEE features as needed.
For more information, see http://www.springframework.org/.
What Do We Gain By Using Spring?
One of the important advantages of using Spring is improved code modularity in order to reduce complexity of large systems. It allows for loose coupling of modules which keep dependencies to a minimum.
Coupling can appear either as data dependency (i.e., some code sections share the same data) or as flow dependency (i.e., one code section depends on another code section's execution). In this article, we will address flow dependency and how to reduce it.
Spring uses some OOP features more efficiently in order to reduce coupling. For this, Spring provides a simple feature called "Dependency Injection" (DI), which is an implementation of the "Inversion of Control" (IoC) design pattern (a note on DI vs. IoC will follow).
Read on to learn about DI (supported by Spring) and how it is used to improve our code.
Trying to Reduce Coupling
Before illustrating how we use Spring (and DI), let’s try to improve our code using the Factory pattern.
At first, we will use a simple code sample that doesn’t use the Factory pattern. Below is a sample application (using simple free style Java code) that creates and sends messages. It contains the following classes.
A MessageProvider class that creates a message.
A MessageSender class that sends a ready message provided to it.
A main class to run our application.
Class MessageProvider { public String getMessage() {
return "Hello"; } } Class MessageSender { public void sendMessage() {
//Do you see a problem here? See explanation below. MessageProvider messageProvider = new MessageProvider();
sendMessageUsingTcp( messageProvider.getMessage() ); } } Class Main() { public void main( ) {
//Do you see a problem here? See explanation below. MessageSender sender = new MessageSender();
sender.sendMessage(); } } Now, let’s improve this code using the Factory pattern. Class MessageSender { public void sendMessage() {
//Can you see a new problem with this fixed line? See explanation below. MessageProviderInterface messageProvider = MyFactory.getMessageProvider(); sendMessageUsingTcp( messageProvider.getMessage() );
}
-113-
} Class Main() {
public void main( ) { MessageSenderInterface sender = MyFactory.getSender(); sender.sendMessage();
} }
What Did We Improve?
The Factory methods (methods of the MyFactory class) decouple the implementation from our code (there is no need to initialize an object of a specific class). For example:
The Factory methods may read a configuration file (e.g., an XML file) that will guide them in creating mock objects instead of real objects.
Note on Mock objects
We use mock objects in order to test the application using a simulated environment (mock objects
simulate the real objects that our application depends on, e.g. they return the same dummy
response for any request ).
The objects may be initialized when these Factory methods are called or the objects may be brought from a pool of ready objects.
The objects implementation may be easily replaced – even at runtime.
However, we still need to further reduce coupling because the MessageSender class now depends on the
MyFactory Class. We want to reduce coupling to the minimum. It is preferable that the MessageSender
class doesn’t care about wiring the MessageProvider to itself.
Further Improving Our Code Using Spring
Let me now introduce a better, yet simpler (simplicity is great), MessageSender class:
Class MessageSender { MessageProviderInterface messageProvider = null; //We let another entity to inject this dependency for this class. public void setMessageProvider( MessageProviderInterface messageProvider ) { this.messageProvider = messageProvider; } public void sendMessage() { String message = this.messageProvider.getMessage(); //Using the injected object. sendMessageUsingTcp( message ); } }
Now we can integrate this simple MessageSender class into the Spring framework.
-115-
As a matter of fact, Spring supplies us with a Factory which has the following advantages:
You don’t have to write the Factory code yourself – Spring provides it for free.
As demonstrated in the above simple class, your application code (the business logic) doesn’t
depend on Spring API.
You don’t have to wire the dependencies into your class (in the sample code above, sender depends on messageProvider) – this is done in an XML file (as illustrated later on this article). This is called Dependency Injection (DI). DI is known a "Don’t call us, we will call you" approach, i.e., another entity injects to our class the dependencies that our class relies on.
Note on Dependency Injection (DI) vs. Inversion of Control (IoC)
In many articles and presentations, the difference between "Inversion of Control" (IoC) and "Dependency
Injection" (DI) is somehow obscured or doesn’t exist.
In short, IoC is a more generic design principle, while DI is implemented using IoC.
"Inversion of Control" (IoC) means that the application code is called by the framework instead of the
application calling the framework methods by itself.
On the other hand, "Dependency Injection" (DI) is a programming style where dependee classes are not
directly created by the dependent class but rather "injected" by a framework, thus executing IoC.
Compare the following sample code, which uses Spring, and the XML section below it to the previous
code samples:
main() { BeanFactory factory = new XmlBeanFactory ( new FileSystemResource("applicationContext.xml") ); MessageSenderInterface sender = (MessageSenderInterface) factory.getBean("msgSender"); // This "wiring" is now remarked out and moves into the bellow XML file: // sender.setMessageProvider(messageProvider); sender.sendMessage(); }
Below is a section from the applicationContext.xml file:
<bean id="msgSender" class="com.nds.MessageSender"> <property name="messageProvider" ref="messageProvider" />
</bean>
-110-
<bean id="messageProvider" class="com.nds.MessageProviderMock"/>
The object messageProvider is configured to be a mock object (its class is configured to be
MessageProviderMock). Note how this object is injected into the msgSender object and may be easily
changed by a simple update to this XML file. The msgSender object is not aware of how the
messageProvider was initialized and what its specific class is. These "wiring" decisions are left to the
integrator, after the development phase is completed.
How Do We Use Spring in Our Projects?
In the CH Line, we develop Spring-based Java projects. A good example of such a project is the successful S4 project which was entirely written in Java.
Each developer develops their part of the project and writes POJO (Plain Old Java Object) classes which
are unaware of the Spring framework (we write simple classes, much like the last MessageSender class
sample above). Each component is delivered to the development integrator as two Java Archive (JAR)
files – one JAR contains the implementation classes and the second JAR contains the interfaces to the
implementation classes.
Using Spring, the development integrator wires all the parts of the project to create a final product. This is
done by creating the above-mentioned applicationContext.xml file to "wire" the released classes.
At run-time, when the application is initialized, Spring injects the dependencies to each class by calling the
setter methods of the class (Spring does this by reading the XML file and using the Java programming
language feature called Reflection).
Summary
The advantages of using Spring in our development process are as follows:
Gain of efficiency in development time as we minimize the dependency between the different parts of the product\system during development.
Developers only get the interfaces to the other components of the project, and therefore changes to the implementation of one component won’t affect the other components.
We clearly separate the business logic (delivered in the JARs) from the technical (infrastructure) layer, added later by the integrator.
-116-
The integrator can add several common services (such as common system configuration and persistency) across the project by injecting them to each delivered JAR using DI.
Possibility to simply replace any implementation or infrastructure in the future without an overall recompilation.
Possibility to add more services to the application, such as changing the application to be a distributed application. This is transparent to the developers and to the business logic implementation.
Note that just like any other tool, Spring can be abused to add complexity to the application instead of
reducing it. Dependency injections can be easily abused and cause code to be hidden in large XML files
which will need to be debugged. Remember that you must maintain the code together with the XML files
in order to get the whole picture.
Bibliography
http://martinfowler.com/articles/injection.html
-112-
מקורות רשימת 14
[Abcm] Astrachan O., Berry G., Cox L., & Mitchener G. (1998), Design Patterns: An Essential Component of CS Curricula, Proceedings of the 29th SIGCSE technical symposium on Computer science education, 30:1, 153-160.
[Acd] Alphonce C., Caspersen M., & Decker A. (2007), Killer ‘Killer Examples’ for Design Patterns, Proceedings of the 38th SIGCSE technical symposium on Computer science education, 228-232.
[Ais] Alexander Christopher, S. Ishikawa and Murray Silverstein (1977). A Pattern Language:Towns, Buildings, Construction. Oxford University Press.
[Alex] Alexander Christopher (1979). A Timeless Way of Building, Oxford University Press.
[Alle] Allen H. (2011), Activity Diagram – Exception Handling. From: http://www.holub.com/goodies/uml. Retrievd: 9/2011.
[Baat] Baat L. (2007), Teaching the Linked List, Open University Seminar Work.
[Bean] NetBeans community, MVC Pattern. From: http://netbeans.org/kb/docs/javaee/ecommerce/design.html. Retrieved: 10/2011.
[Berg] Bergin, J. (2002), Fourteen Pedagogical patterns for teaching computer science. From: http://csis.pace.edu/~bergin/PedPat1.3.htm. Retrieved: 11/2011
[Bert] Bertrand M. (1998), Object Oriented Software Construction, Prentice Hall.
[Comm] Wikimedia commons. Composite & Chain of Responsibility patterns. Retrieved: 9/2011 http://commons.wikimedia.org:From
[Czbd] Cheng Z., Budgen D. (2012), What Do We Know about the Effectiveness of Software Design Patterns, IEEE Transactions on Software Engineering. 38:5, 1213-1231.[Dev] GPWiki, Observer Pattern. From: wiki.gamedev.net Retrieved: 7/2011.
[Devx1] Developer.com, Use Case Diagram Example. From: http://www.devx.com/architect/Article/45984/1954. Retrieved: 8/2011.
[Devx2] Developer.com. Spring Uses Singleton. From: http://www.devx.com/java/Article/21665/0/page/2 Retrieved: 11/2011.
[Dgd] Denzler C., Gruntz D. (2008), Design Patterns: Between Programming and Software Design, roceedings of the 30th international conference on Software engineering, 801-804.
[Dijk] Dijksterhuis M. (1/1/2009), C# Uses Strategy Pattern. From: http://www.dijksterhuis.org/sorting-generic-lists. Retrieved: 11/2011.
[Dof1] Data & Object Factory, Bridge Pattern. From: http://www.dofactory.com/Patterns/PatternBridge.aspx. Retrieved: 10/2011.
[Dof2] Data & Object Factory, Iterator Pattern. From: http://www.dofactory.com/Patterns/PatternIterator.aspx. Retrieved: 10/2011.
-112-
[Dof3] Data & Object Factory, Factory Method Pattern. From: http://www.dofactory.com/Patterns/PatternIterator.aspx. Retrieved: 10/2011.
[Dof4] Data & Object Factory, Adapter Pattern. From: http://www.dofactory.com/Patterns/PatternAdapter.aspx. Retrieved: 9/2011.
[Eli] Eli I. (2008). CH Line Development:Improve Code Modularity using Dependency Injection (DI) via Spring. From: NDS intranet. Retrieved: 11/2011.
[Fbs] Freeman E., Bates B., Sierra K. (2004), Head First Design Patterns, O' Reilly & Associates.
[Forg] Sourceforge.net, JUnit TestCase class. From: http://junit.sourceforge.net/doc/cookstour/cookstour.htm Retrieved: 11/2011.
[Gab] Gaby C. The Game of Life. From: http://www.snunit.k12.il/heb_journals/kimat2000/1308.html. Retrieved: 3/2012.
[Gina] Ginat D. (2003), The greedy trap and learning from mistakes, Proceedings of the 34th SIGCSE technical symposium on Computer science education, 11-15.
[Gof] Gof (Gang Of Four): Gamma E., Helm R., Johnson R., Vlissides J. (1994), Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley.
[Hagg] Haggar P. (1/5/2002), Singleton Pattern. From: http://www.ibm.com/developerworks/java/library/j-dcl/index.html. Retrieved: 10/2011.
[Huy] Huy T. (5/2011). Proxy Pattern. From: http://tndhuy.wordpress.com/page/2. Retrieved: 11/2011.
[Info] InformIT. Sequence Diagram. From: http://www.informit.com/articles. Retrieved: 8/2011.
[Jam] James S. (2010), Design Patterns Uncovered: The Factory Method Pattern. From: http://java.dzone.com/articles/design-patterns-factory. Retrieved: 3/2012.
[John] Johnson R. (2005), Spring Uses Factory Method Pattern. From: http://www.theserverside.com/news/1364527/Introduction-to-the-Spring- Framework.Retieved: 8/2011.
[Jose] Joseph S. (1999), Sams Teach Yourself UML, Sams Publishing.
[Knob] Knobel, E. (2004), Coupling. From:http://study.eitan.ac.il/sites/index.php?portlet_id=110513&page_id=27. Retrieved: 9/2011.
[Koch] Kochhar V. (2004), Singleton Pattern. From: http://www.oaklib.org/docs/oak/singleton.htmlRetrieved: 10/2011.
[Lisk] Barbara H. Liskov, Jeannette M. Wing (1999),"Behavioral Subtyping Using Invariants and Constraints". From: http://reports-archive.adm.cs.cmu.edu/anon/1999/CMU-CS-99-156.ps. Retrieved: 10/2011.
[Mak1] SourceMaking, Strategy Pattern. From: http://sourcemaking.com/design_patterns/strategy. Retrieved: 9/2011.
[Mak2] SourceMaking, Strategy Pattern. From: http://sourcemaking.com/design_patterns/singleton. Retrieved: 10/2011.
-111-
[Mak3] SourceMaking, Singleton pattern. http://sourcemaking.com/design_patterns/singleton. Retrieved: 11/2011.
[Mart1] Fowler M. (2004), Dependency Injection Pattern. From:http://martinfowler.com/articles/injection.html. Retrieved: 8/2011.
[Mart2] Fowler M. (2005), Call Super Anti Pattern. From: http://www.martinfowler.com/bliki/CallSuper.html Retrived: 11/2005.
[Mgj] Marco A.G., Guillermo J.D., Javier A. (2009), Teaching Design Patterns Using a Family of Games, ITiCSE ‘09, 41:3, 268-272.
[Mha] Muller, O., Haberman, B., Averbuch, H. (2004), (An almost) pedagogical pattern for pattern-based problem solving instruction, Proceedings of ITiCSE'04, 36:3, 102-106.
[Mill] Miller R. (2010), Deployment Diagram Example. From: http://edn.embarcadero.com/article/31863 Retrieved: 8/2011.
[Mull] Muller, O. (2005), Pattern oriented instruction and the enhancement of analogical reasoning , Proceedings of the first international workshop on Computing education research, 57-67.
[Njga] Neelam S., Jason O. H., Guoqiang S., Adem Delibas. (2008), Patterns: from system design to software testing, Innovations System Software Eng., 4:71–85
[Part] Partha K. (2004), Software Architecture Design Patterns in Java, CRC Press LLC.
[Pete] Peter L. (2007), Relations Between Classes (9/2011). From: http://www.peter-lo.com/Teaching/M8748/ Relationships Between Classes.pdf. Retrieved: 9/2011.
[Phd] Paul Deitel, Harvey Deitel (2002), Java How to Program – Introducing OOD With The UML and Design Patterns - Fourth Edition, Prentice Hall.
[Pilo] Pilone D. (2005), UML 2.0 in a Nutshell, O’REILLY
[Ppp] Pecinovsk R., Pavlkov J., Pavlek L. (2006), Let’s Modify the Objects-First Approach into Design-Patterns-First, ACM SIGCSE Bulletin. 38:3, 188-192.
[Prac1] Hirondelle Systems. Java Uses Iterator. From: http://www.javapractices.com/topic/TopicAction.do?Id=88. Retrieved: 11/2011.
[Prac2] Hirondelle Systems. Java Uses Iterator. From: http://www.javapractices.com/topic/TopicAction.do?Id=125. Retrieved: 11/2011.
[Puff] Tecademy. Use Case Diagram Example. From: http://www.puffinonline.com/Tecademy/umlqrg.pdf. Retrieved: 8/2011.
[Ravi] Ravish S. (2010), Strategy Pattern. From: http://ravish9507.blogspot.com/2010/05/design-pattern.html. Retrieved: 9/2011.
[Robe] Robert C. M. (2004) Strategy Pattern. From: http://today.java.net/pub/a/today/2004/10/29/patterns.html. Retrieved: 9/2011
[Sagg] Saggu J. (2011), Class Diagram Example. From: http://www.techpost.info/2011/01/uml-quick-reference-guide.html Retrieved: 8/2011.
[Sbhs] Shikha B., Harshpreet S. (2012), ANALYZING AND IMPROVING WEB APPLICATION QUALITY USING DESIGN PATTERNS, International Journal of Computers & Technology. 2:2, 112-116
-175-
[SID] Shlezinger G., Iris R. B., Dov D. (2010), Modeling design patterns for semi-automatic reuse in system design., Journal of Database Management 21.1: 29+.
[Sks] Sunil K.S. (2004), Observer Pattern (8/2011). From: http://codeproject.com. Retrieved: 10/2011.
[Spri] SpringSource. Spring Framework. From: http://www.springsource.org. Retrieved: 8/2011.
[Tome] Dr. Tomer A. (2011), Software Engineering. From: http://webcourse.cs.technion.ac.il/236321/Spring2011/ho/WCFiles/ SWE-2011-02-development-process.pdf. Retrieved: 11/2011.
[Tony] Tony S. (2001). Factory Method. From: http://www.javaworld.com/javaworld/javaqa/2001-05/02-qa-0511-factory.html. Retrieved: 3/2012.
[Vetr] Vetro S. (2006), Observer Pattern. From: http://bp.blogspot.com. Retrieved: 8/2011.
[Weis] Weiss S. (2005), Teaching Design Patterns By Stealth, Proceedings of the 36th SIGCSE technical symposium on Computer science education, 492-444.
[Wick] Wick M. R. (2005), Teaching Design Patterns in CS1: a Closed Laboratory Sequence based on the Game of Life, Proceedings of the 36th SIGCSE technical symposium on computer science education, 487-491.
[Zer] Zhu G.K., Edward S., Rogers Sr. (2012), Applying Software Design Patterns in Electromagnetic Field Simulators, Antennas and Propagation Magazine, IEEE. 54:2, 174-179
-171-
Abstract
A design pattern can be none-formally described as a general pattern which is used to solve a
frequent problem in software design. The same design pattern can be used to design different
software codes in many applications.
This work focuses on Object Oriented Design Patterns.
Object Oriented Design patterns are frequently used in the software industry. They are
embedded in software frameworks and in modern software languages such as Java.
This work reviews why and how design patterns became important in the software industry.
We will see how we should learn and correctly work with design patterns and how design
patterns help us using software engineering principles such as:
Single Responsibility Principle (SRP) , Open Close Principle (OCP), Inversion of Control
(IoC) ,Liskov Substitustion Principle (LSP), using composition and deligation instead of
inheritance, design to an interface and not to an implementation.
This work also shortly review close topics such as:
Object Oriented Anti Patterns which are patterns that teach us wrong ways to design our
Object Oriented code.
Architectural Software Design Patterns such as the Model-View-Controller (MVC) which
are used by software architects to design complex software systems.
-177-
The Open University of Israel
Department of Mathematics and Computer Science
Design Patterns in Software Engineering:
From Theory to Production
Final Paper submitted as partial fulfillment of the requirements
towards an M.Sc. degree in Computer Science
The Open University of Israel
Computer Science Division
By
Eli Isaak
ID: 029475175
Email: [email protected]
Prepared under the supervision of Dr. Dan Aharoni
Approved proposal prepared under the supervision of Dr. Tzipi Erlich
January 2013