CodeGym /בלוג Java /Random-HE /נתקע? החלקים הקשים ביותר בלימוד ג'אווה וכיצד להתגבר עליהם...
John Squirrels
רָמָה
San Francisco

נתקע? החלקים הקשים ביותר בלימוד ג'אווה וכיצד להתגבר עליהם

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

1. גנריות

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

טיפים והמלצות

הנה חוות דעת על Generics ב-Java מאת Ravi Reddy, מתכנת ופרופסור מנוסה באוניברסיטה: "Java Generics עושה דבר אחד שתבניות C++ לא עושות - ליישם בטיחות סוגים. היישום של תבניות C++ הוא טריק פשוט לפני מעבד ואינו מבטיח בטיחות סוג. כלליים ב-Java הם כמו תבניות C++ אבל עם בטיחות סוג נוספת. ו-IMHO, בטיחות סוג היא תכונה חיונית של כל סביבת פיתוח טובה. וכן! הם יכולים לבלבל בגלל השינויים המנטליים שלנו בין הפרמטרים והטיפוסים. אבל אני מאמין שלבזבז זמן כדי לשלוט בהם שווה את המאמץ. כי מצאתי את עצמי "חושב" הרבה יותר טוב בג'אווה לאחר שהבנתי ממשקים וגנריות."

2. ריבוי השחלות

ריבוי השרשורים ב-Java הוא תהליך של ביצוע שני שרשורים או יותר בו-זמנית כדי להשיג ניצול מקסימלי של ה-CPU על ידי האפליקציה. ריבוי פתילים פותר משימות חשובות מאוד ויכול להפוך את התוכניות שלנו למהיר יותר. הרבה פעמים מהר יותר. אבל זה נחשב לאחד הנושאים שבהם הרבה לומדי ג'אווה טריים נוטים להיתקע. הכל בגלל ש-multithreading יכול גם ליצור בעיות במקום לפתור אותן. ישנן שתי בעיות ספציפיות ש-multithreading יכול ליצור: מבוי סתום ותנאי מירוץ. מבוי סתום הוא מצב שבו שרשורים מרובים ממתינים למשאבים המוחזקים זה בזה, ואף אחד מהם לא יכול להמשיך לרוץ. תנאי מירוץ הוא שגיאת תכנון במערכת או אפליקציה מרובה הליכי, כאשר פעולת המערכת או האפליקציה תלויה בסדר ביצוע חלקים מהקוד.

טיפים והמלצות

הנה המלצה טובה כיצד להתמודד עם ריבוי הליכי שרשור מאת S.Lott, ארכיטקט תוכנה ומשתמש פעיל של StackExchange, אתר שאלות ותשובות פופולרי: "ריבוי הליכי שרשור הוא פשוט. קידוד אפליקציה לריבוי השחלות הוא מאוד מאוד קל. יש טריק פשוט, וזה להשתמש בתור הודעות מעוצב היטב (אל תגלגל משלך) כדי להעביר נתונים בין שרשורים. החלק הקשה הוא לנסות לגרום למספר שרשורים לעדכן אובייקט משותף בדרך כלשהי. זה הרגע שבו זה נוטה לשגיאות מכיוון שאנשים לא שמים לב לתנאי הגזע הקיימים. אנשים רבים לא משתמשים בתורי הודעות ומנסים לעדכן אובייקטים משותפים וליצור לעצמם בעיות. מה שהופך לקשה הוא עיצוב אלגוריתם שעובד היטב בעת העברת נתונים בין מספר תורים. זה קשה. אבל המכניקה של שרשורים קיימים (באמצעות תורים משותפים) היא קלה."

3. בעיות Classpath

שגיאות Classpath נחשבות גם לאחת הבעיות המתלוננות ביותר איתם מתמודדים מפתחי Java בעבודתם היומיומית. "בעיות בנתיב לימוד יכולות להיות גוזלות זמן לאיתור באגים והן נוטות להתרחש בזמנים ובמקומות הגרועים ביותר האפשריים: לפני שחרורים, ולעתים קרובות בסביבות שבהן יש מעט עד אין גישה על ידי צוות הפיתוח. הם יכולים לקרות גם ברמת ה-IDE ולהפוך למקור לפרודוקטיביות מופחתת", אומר Vasco Ferreira, מפתח Java/Javascript מנוסה ומחבר מדריכים הקשורים לתכנות.

טיפים והמלצות

"בעיות של נתיב כיתה אינן ברמה נמוכה או בלתי ניתנות לגישה כפי שהן עשויות להיראות בהתחלה. הכל עוסק בכך שקובצי zip (jars) נוכחים / אינם נוכחים בספריות מסוימות, כיצד למצוא את הספריות הללו וכיצד לנפות באגים ב-classpath בסביבות עם גישה מוגבלת. על ידי הכרת סט מצומצם של מושגים כמו מעמיסי Class, שרשרת המעמיסים בכיתה ומצבי הורה ראשון/הורה אחרון, ניתן להתמודד עם בעיות אלו ביעילות", מסביר המומחה.

4. פולימורפיזם ושימוש נכון בו

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

טיפים והמלצות

אין דרך אחרת להתמודד עם פולימורפיזם מלבד ללמוד אותו. כך מסביר טורבן מוגנסן, המלמד תכנות באוניברסיטת קופנהגן, את המושג הזה: "עומס יתר פשוט: + יכול להתכוון גם לחיבור של מספרים שלמים, חיבור נקודה צפה וגם (בשפות מסוימות) שרשור מחרוזות. תת-סוג פולימורפיזם: אם B הוא תת-סוג של (יורש מ) A, ניתן להשתמש בכל ערך מסוג B בהקשר המצפה לערך מסוג A. הקשרים שונים יכולים לספק ארגומנטים מסוגים שונים, כך שאתה מיישם את הסוג בעל הפרמטרים לסוגים קונקרטיים שונים. זה נקרא גם "תבניות" או "גנריות" והוא מצויין בשפות OO בדרך כלל באמצעות סוגריים של זווית (כגון T<A>). פולימורפיזם ממשק. זהו בעצם מנגנון שבו אתה מגביל את הפולימורפיזם של תת-סוגים לתת-סוגים שמיישמים ממשק מסוים או פולימורפיזם פרמטרי לפרמטרים מסוגים שמיישמים ממשק מסוים."

5. השתקפות

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

טיפים והמלצות

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

6. זרמי קלט/פלט

זרמים מאפשרים לך לעבוד עם כל מקור נתונים: האינטרנט, מערכת הקבצים של המחשב שלך או משהו אחר. זרמים הם כלי אוניברסלי. הם מאפשרים לתוכנית לקבל נתונים מכל מקום (זרמים קלט) ולשלוח אותם לכל מקום (זרמים פלט). המשימה שלהם זהה: לקחת נתונים ממקום אחד ולשלוח אותם למקום אחר. ישנם שני סוגים של זרמים: זרמי קלט (המשמשים לקבלת נתונים) וזרמי פלט (לשליחת נתונים). מה שמקשה על אנשים רבים להבין את השימוש בזרמים היא העובדה שלג'אווה יש מספר מחלקות זרם I/O.

טיפים והמלצות

"ל-Java יש כל כך הרבה מחלקות זרימת I/O בעיקר בגלל שני גורמים תורמים. ראשית, מורשת. חלק מהשיעורים עדיין נמצאים שם מסיבות היסטוריות והם אינם מוחלשים מכיוון שהם אינם נחשבים מזיקים. שנית, גמישות. ליישומים שונים יש דרישות שונות ולכן יש לך מספר אפשרויות בהתאם לדרישות שלך. הפשטות שימושיות מביאות בהירות כשאתה קורא אותה ועם כמה שורות קוד אתה יכול לעשות הרבה", אומר ג'ונאס מלין, מומחה ג'אווה משבדיה. באילו היבטים של Java היה לך הכי קשה להבין או שהיית תקוע במשך זמן מה? שתף את החוויות שלך בתגובות.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION