PracticU

הדגמה של Singleton - חלק 7

בלי כתוביותעם כתוביות
PracticU › קורס Design Patterns › הדגמה של Singleton - חלק 7
מילון מושגים:
Singleton - דפוס עיצוב שמבטיח שממחלקה מסוימת יהיה מופע אחד בלבד, עם נקודת גישה גלובלית אליו.
תבנית - מבנה בסיסי מוכן שממנו יוצרים פריטים דומים, כמו תבנית עמוד או תבנית מסמך.
רכיב - יחידת בניין עצמאית וניתנת לשימוש חוזר בתוך מערכת או ממשק משתמש, שאחראית על חלק מוגדר מהתפקוד.
מערך - מבנה נתונים שמאחסן אוסף ערכים מאותו סוג ברצף, שאפשר לגשת אליהם לפי מספר מיקום (אינדקס).
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
אינדקס - מבנה במסד נתונים שמאיץ חיפוש ושליפה. גם מספר המציין מיקום של איבר במערך.
בנאי - מתודה מיוחדת שמופעלת אוטומטית בעת יצירת אובייקט ממחלקה, ומאתחלת את ערכיו ההתחלתיים.

הדגמה של Singleton - חלק 7
השיעור פותר את התרגיל האחרון של התבנית: כמה מכשירי הקלטה פיזיים, שכל אחד מהם מיוצג על ידי רכיב הקלטה נפרד, ושכולם משתמשים בערוץ תקשורת אחד משותף. כאן הכמות של הרכיבים לא ידועה מראש, ולכן משתמשים במערך.
בחירת מכשיר
1. רשימה נפתחת: בחלון מוסיפים רשימה נפתחת לבחירת מכשיר אודיו, ובשנייה לבחירת מכשיר וידאו. הערכים הם 0, 1, 2 ואילך.
2. קריאת הבחירה: מוצאים את הפריט שנבחר, מבצעים עליו הסבה למחרוזת, ואחר כך int.Parse כדי לקבל את מספר המכשיר.
3. הבדל מטרד הבחירה: הרשימה נקבעת על ידי מספר המכשירים המחוברים, ולכן אינה ידועה בזמן הפיתוח.
מערך של רכיבים
4. המערך: מערך של רכיבי הקלטה. בזמן ההקצאה כל תא מצביע עליו, אבל הרכיב עצמו לא נוצר.
5. פונקציה במקום אינדקס: פונקציה מקבלת את מספר המכשיר, בודקת אם התא כבר הוקצה, ואם לא יוצרת רכיב חדש ושומרת אותו בתא.
6. יצירה בפעם הראשונה: הבנאי של הרכיב מקבל את מספר המכשיר ושומר אותו, כדי שיוכל לזהות את עצמו בהודעות.
ערוץ משותף
7. כל המכשירים: כל רכיבי האודיו משתמשים בערוץ התקשורת האחד והיחיד של האודיו. הערוץ נוצר פעם אחת.
8. בדיקה: לחיצה על Start באותו מכשיר פעמיים לא יוצרת רכיב נוסף. מכשיר חדש יוצר רכיב חדש, אבל לא ערוץ חדש.
הדוגמה מראה שאפשר לשלב מספר רכיבים דינמיים עם ערוץ Singleton אחד שמשותף לכולם.
השיעור הבא בקורס: הדגמה של Singleton - חלק 8

פרקי ההרצאה: הדגמה של Singleton - חלק 7

  1. 00:00

    מטרה: הקלטה ממספר חומרות קול ותמונה

  2. 00:50

    הוספת רשימת בחירה לחומרות האודיו

  3. 01:55

    חילוץ מזהה החומרה הנבחרת

  4. 04:01

    הפנייה לרכיב לפי מזהה החומרה

  5. 05:23

    מערך של אודיו רקורדרים ומצביעים

  6. 07:26

    הנחות לגבי מספר החומרות בזמן ריצה

  7. 08:50

    מעבר מאינדקסר לפונקציה עם פרמטר

תמלול ההרצאה: הדגמה של Singleton - חלק 7

הטקסט המלא של הדקות הראשונות בהרצאה «הדגמה של Singleton - חלק 7» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:08

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

  2. 00:36

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

  3. 00:50

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

  4. 01:11

    אוקיי, קוראים לזה combo box. בואו ניקח combo box ונשים אותו כאן ככה, זה רק למספרים, F4, אז ה-collection שלנו יהיה פשוט 0, Enter 1, Enter 2, זהו, אוקיי. וזה בעצם חומרות האודיו, אז זה האודיו devices, אודיו Devices, יפה.

  5. 01:47

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

  6. 02:08

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

  7. 02:50

    לאינט דיווייס נקרא device ID בדרך כלל קוראים לזה ואז נעשה אינט נקודה פארס וניתן לו את זה. זה מחלץ לי את ה-Device ID, 0, 1, 2 וכולי.

  8. 03:10

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

  9. 03:36

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

  10. 04:09

    לו או Device ID. אוקיי, אז זה מה שאנחנו רוצים. אז כמובן שכבר אנחנו רואים שיש שגיאה. מה שאנחנו רוצים זה, אנחנו רוצים שאינסטאנס במקום ה-Device ID, ש-Device ID זה מספר 012, מספר רץ מ-0, שמזהה את המיקרופון במקרה שלנו.

  11. 04:39

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

  12. 05:03

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

  13. 05:17

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

  14. 05:50

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

  15. 06:24

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

  16. 06:36

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

  17. 06:55

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

  18. 07:11

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

  19. 07:19

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

  20. 07:54

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

  21. 08:09

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

  22. 08:37

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

  23. 08:56

    זה כאילו קריאה, לא כאילו, זאת תהיה קריאה לפונקציה. אינסטנסס, תכף נשנה את השם לאינסטנסס, במקום ה-DeviceID מחזיר לי אודיו רקורדר מסוים.

  24. 09:07

    אז זו בעצם הולכת להיות עכשיו פונקציה, והפונקציה הזו מקבלת int DeviceID, והיא מחזירה בלי get היא פונקציה, קונטרול kd אז היא בודקת אם אינסטנס במקום

לקורס המלא: קורס Design Patterns אונליין

ההרצאה הקודמת: הדגמה של Singleton - חלק 6

ההרצאה הבאה: הדגמה של Singleton - חלק 8

הרצאות קשורות מקורסים אחרים

  • הדגמה של הרובוט
  • הדגמה של Decorators
  • הדגמה של DRS
  • הדגמה של RESTCONF

קורסים נוספים במסלול

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • פרויקט מעשי ב-#C - תוכנת צייר
  • קורס ADO.NET - חיבור אתר למסד נתונים
  • קורס תכנות מתקדם - #Advanced .NET C