Menu
Coddy logo textTech

מבוא לתבניות עיצוב

חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 51 מתוך 70.

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

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

דפוסי תכנון מתחלקים לשלוש קטגוריות עיקריות:

קטגוריהמטרהדוגמאות
יצירהכיצד יוצרים אובייקטיםSingleton, Factory
מבנהכיצד מרכיבים אובייקטיםAdapter, Decorator
התנהגותכיצד אובייקטים מתקשריםObserver, Strategy

הדפוסים שנחקור מתבססים ישירות על מושגי OOP שכבר למדת — ממשקים, ירושה, פולימורפיזם והרכבה. כל דפוס רותם את היסודות האלה בדרכים מסוימות כדי להשיג גמישות, תחזוקתיות או שימוש חוזר.

בשיעורים הבאים תממשו כמה דפוסים חיוניים, החל ב-Singleton, Factory, Observer ו-Strategy. הבנת הדפוסים האלה תעזור לכם לזהות פתרונות נפוצים בבסיסי קוד קיימים ולקבל החלטות ארכיטקטוניות טובות יותר בפרויקטים שלכם.

challenge icon

אתגר

קל

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

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

  • Pattern.cs: הגדירו מחלקה בשם Pattern במרחב השמות Patterns, שמייצגת דפוס תכנון יחיד. לכל דפוס צריכים להיות Name, Category (Creational, Structural או Behavioral) ו-Description. כללו מתודה בשם GetSummary() שמחזירה מחרוזת בפורמט הבא: [{Category}] {Name}: {Description}
  • PatternCatalog.cs: צרו מחלקה בשם PatternCatalog במרחב השמות Patterns, שמנהלת אוסף של דפוסים. הקטלוג שלכם צריך לאפשר הוספת דפוסים, ולכלול מתודה בשם GetPatternsByCategory(string category) שמחזירה רשימה של כל הדפוסים שמתאימים לאותה קטגוריה. כללו גם מתודה בשם GetAllSummaries() שמחזירה רשימה של מחרוזות סיכום עבור כל הדפוסים בקטלוג.
  • Program.cs: חברו את כל החלקים באמצעות יצירת קטלוג ומילויו בדפוסים על סמך הקלט. לאחר מכן הציגו את הדפוסים שסוננו לפי קטגוריה.

תקבלו את הקלטים הבאים:

  • מספר הדפוסים להוספה
  • עבור כל דפוס: שלוש שורות שמכילות את השם, הקטגוריה והתיאור
  • קטגוריה לסינון לפיה

לאחר הוספת כל הדפוסים לקטלוג, הדפיסו את הסיכומים של הדפוסים שמתאימים לקטגוריית הסינון, אחד בכל שורה. אם אין דפוסים תואמים, הדפיסו No patterns found.

לדוגמה, אם הקלט הוא:

3
Singleton
Creational
Ensures only one instance exists
Observer
Behavioral
Notifies dependents of state changes
Factory
Creational
Creates objects without specifying exact class
Creational

הפלט צריך להיות:

[Creational] Singleton: Ensures only one instance exists
[Creational] Factory: Creates objects without specifying exact class

האתגר הזה מדגים כיצד ארגון מחלקות קשורות בקבצים נפרדים שומר על בסיס הקוד נקי וקל לתחזוקה — עיקרון שהופך לחשוב עוד יותר כשתממשו דפוסי תכנון אמיתיים בשיעורים הבאים!

נסו בעצמכם

using System;
using System.Collections.Generic;
using Patterns;

class Program
{
    public static void Main(string[] args)
    {
        // קרא את מספר התבניות
        int n = Convert.ToInt32(Console.ReadLine());
        
        // צור PatternCatalog חדש
        PatternCatalog catalog = new PatternCatalog();
        
        // TODO: קרא את הפרטים של כל תבנית (שם, קטגוריה, תיאור)
        // והוסף אותן לקטלוג
        for (int i = 0; i < n; i++)
        {
            string name = Console.ReadLine();
            string category = Console.ReadLine();
            string description = Console.ReadLine();
            
            // TODO: צור Pattern והוסף אותו לקטלוג
        }
        
        // קרא את הקטגוריה שלפיה יש לסנן
        string filterCategory = Console.ReadLine();
        
        // TODO: אחזר תבניות לפי קטגוריית הסינון
        // והדפס את הסיכומים שלהן
        // אם אין תבניות תואמות, הדפס "No patterns found"
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר C# אונליין