כיצד להפוך את הקוד שלך לקריא יותר עם הפשטה

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

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

ראשית הדברים הראשונים: מהי הפשטה?

על פי יסודות המורה שלי לתכנות:

"הפשטה היא מפרט פשוט של ישות"

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

הפשטה היא גם מצבית: כל אחד מהם מתאים לצורך, כך שתוכלו לשייך הפשטה טובה לשימוש המסוים של אותה ישות.

בואו נסתכל על עץ החיפוש הבינארי (אם אינכם יודעים מה הם עיינו במאמר שלי עליהם). אנו יכולים להגדיר צומת כישות עם המאפיינים הבאים:

A Node has: Node * left Node * right int val

כאן היינו אומרים שלצומת יש שני מצביעים לצמתים אחרים וערך int. אבל עד כמה זה שימושי למישהו בהשוואה לפונקציה insert(node, value)וזה פשוט יכניס אותו נכון? בדרך זו, אתה פשוט צריך להתקשר לזה וזה נעשה. פָּשׁוּט.

כך שימושי הפשטה. כל הספריות בהן אתה משתמש בתוכניות שלך משתמשות בו כך שיהיה ממש פשוט לשימוש בספריה.

אוקי אבל כמה טובה הפשטת נתונים?

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

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

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

בואו לבחור דוגמא ונעבוד איתה: וקטורים

אנו נניח כי הווקטורים הם:

  • אובייקטים עם 2 ערכים, x ו- y
  • x ו- y הם שניהם מספרים שאינם שליליים

בדרך זו וקטורים הם משהו כמו (2, 5), (0, 19), וכן הלאה.

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

נתחיל בהגדרת המחלקה שלנו (אני לא אגדיר אימות סוג כדי לשמור על קוד נקי יותר, אך עליך לעשות זאת):

אז הגדרנו מספר שיטות ויש לנו הרבה דברים שאנחנו יכולים לעשות:

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

בואו נעשה מימוש שונה של וקטור המחלקה (שנה את מצבו הפנימי) למשהו באותן שיטות אך עם קוד שונה:

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

בואו נשתמש בדוגמא אחרת, הפעם עם 2 כיתות: עיר ואזרח.

ואנחנו מקבלים את הדברים הבאים:

### OUTPUT ###City population is 1000, random: Citizen is a female 20 years oldCity population is 1000, random: Citizen is a male 74 years old

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

כעת אם הקוד מופעל שוב אנו יודעים שהוא עובד, אם כי התוצאות שונות. כפי שאתה יכול לראות, שינינו שיעור שלם, אבל הכל עובד!

מסיימים

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

אם יש לך שאלות או משהו שאתה רוצה לדבר עליו או לדון עליו, השאיר תגובה למטה!

אל תשכח לעקוב אחרי באינסטגרם ובטוויטר!