
.cs ואפשר לשים מחלקה בכל קובץ. ב-Java הסיומת היא .java, ומחלקה ראשית (Top Level Class) חייבת לשבת בקובץ בשם המחלקה, למשל Cat.java.package וכל אותיותיו קטנות.byte, sbyte, short, ushort, int, uint, long, ulong, float, double, decimal, bool, char, string, object. ב-Java הטיפוסים הפרימיטיביים הם byte, short, int, long, float, double, boolean, char. ל-String ול-Object ב-Java יש תמיד אות גדולה והם לא פרימיטיביים.==. ב-Java (בגרסה של אנדרואיד באותו זמן) משתמשים ב-str1.equals(str2).foreach (int item in collection), וב-Java for (int item : collection).using, וב-Java package ו-import, למשל import zoo.wild.animals.*. ב-Java אפשר גם לייבא מחלקה אחת, למשל import zoo.wild.animals.Lion. ב-C# אי אפשר.private זהה בשתיהן. protected ב-Java מאפשר גם גישה מכל מחלקה באותו package. public זהה. internal ו-protected internal קיימים רק ב-C#.readonly (ניתן לשינוי בקונסטרקטור) ו-const למשתנה. ב-Java המילה final בשני המקרים, ולא ניתן לשנות אחרי שהוכנס ערך, גם לא בקונסטרקטור.extends להורשה ו-implements לממשק. ב-C# שם ממשק מתחיל ב-I, וב-Java לא נהוג. הורשה יחד עם ממשקים ב-Java: extends, שם המחלקה, implements ורשימת ממשקים.virtual ו-override. ב-Java כל הפונקציות וירטואליות אוטומטית, ואין שתי המילים האלה.: base(...) ו-base.Method(). ב-Java super(...), שחייבת להיות השורה הראשונה בקונסטרקטור, ו-super.Method() שאינה חייבת להיות ראשונה.is ו-as. ב-Java instanceof ו-casting רגיל, ואין as.enum (בגרסה של אנדרואיד באותו זמן), delegates, events ו-struct.הטקסט המלא של הדקות הראשונות בהרצאה «השוואה בין #C לבין JAVA» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
בסרטון הקודם ציינתי שפיתוח אפליקציות לאנדרואיד מתבצע בעזרת שפת התכנות Java. אבל בנוסף ציינתי גם שמתכנתי C-Sharp או C++ גם יכולים להבין לגמרי את כל הסרטונים בקורס הזה, ויכולים בקלות להתמצא ב-Java ולפתח אפליקציות לאנדרואיד.
גם אם אתם מתכנתי Object Oriented בכל שפה אחרת, הקורס הזה יכול להיות בשבילכם, ואתם יכולים בקלות להתמצא בכל הסרטונים ולפתח אפליקציות לאנדרואיד גם אם זה בשפת ג'אווה.
אז בסרטון הזה אנחנו הולכים לראות הבדלים מרכזיים בין ג'אווה לבין C-Sharp, כי C-Sharp זאת שפת אובייקט אוריינטד הכי קרובה מבחינת תחביר לג'אווה, אבל גם אם אתם מתכנתים בכל שפה אחרת יהיה לכם מאוד קל להבין את הניואנסים הקטנים של שפת ג'אווה ולכן להתמצא בקלות בכל הסרטונים של הקורס הזה. אז בואו נתחיל
לבצע השוואה בכדי לראות את ההבדלים המרכזיים שיש בין C-Sharp לבין Java. דבר ראשון ה-Source Files ב-C-Sharp קובץ מקור Source Code חייב להיות בעל קובץ שמסתיים בנקודת CS.
ב-Java קובץ כזה חייב להסתיים בנקודת Java. עכשיו ב-C-Sharp אם אנחנו בונים מחלקה היא יכולה בעצם לשבת בכל קובץ CS שנרצה בעל איזה שם שנרצה.
כמובן הגיוני שהשם של הקובץ יהיה בשם של הקלאס, זה הדבר הנכון לביצוע מבחינת היגיון. בג'אווה מחייבים את זה. אם אנחנו כותבים מה שנקרא Top-Level Class, כלומר מחלקה ראשית שנמצאת בתוך קובץ מקור, בתוך Source Code, השם של הקובץ חייב להיות כמו השם של המחלקה.
אם לדוגמה בג'אווה אני כותב מחלקה שנקראת cat, אז היא חייבת לשבת בקובץ שנקרא cat.java. כאשר אנחנו כותבים איזשהו בלוק ב-C-Sharp, אז הרבה פעמים מקובל שאנחנו יורדים שורה ואז פותחים סוגריים מסולסלים.
בג'אווה פתיחת הסוגריים המסולסלים מתבצעת בהמשך לשורת הבלוק, הכותרת של הבלוק. לדוגמה if a גדול מ-b ובהמשך פותחים מסולסלות.
שם של משתנה ב-C-Sharp יכול להתחיל בעוד גדולה, ב-Java הוא יתחיל בעוד קטנה. שם של פונקציה ב-C-Sharp יתחיל בעוד גדולה, ב-Java יתחיל בעוד קטנה.
שם של ניימספייס ב-C-Sharp כל מילה תתחיל בעוד גדולה, ב-Java זה נקרא Package וכל האותיות אותיות קטנות. אלו טיפוסים שבאים כחלק משפת התכנות קיימים ב-C-Sharp ואלו קיימים ב-Java.
יש לנו את byte, sbyte, short, u-short, int, u-int, long ו-u-long עבור משתנים שלמים. יש לנו את float, double ו-decimal עבור מספרים עשרוניים שיכולים להכיל נקודה עשרונית.
יש לנו בול עבור ערכים בוליאנים כמו true או false. יש לנו char עבור תווים בודדים. יש לנו סטרינג עבור מכרוזות ואובג'קט כ-reference שיכול לקבל כל אובייקט.
בג'אווה הטיפוסים שהם build-in כחלק משפת התכנות הם אך ורק בייט, שורט, אינט ולונג עבור מספרים שלמים, פלואוט ודאבל עבור מספרים עשרוניים, בוליאן עבור ערכים בוליאנים כמו true או false וצ'אר עבור תווים בודדים.
שימו לב שסטרינג ואובג'קט קיימים בג'אווה אבל לא נחשבים כטיפוסים פרימיטיביים שבאים כחלק משפת התכנות. סטרינגס מכרוזות ב-C-Sharp סטרינג s שווה הלו, בג'אווה סטרינג זה עם s גדולה.
גם ב-C-Sharp אנחנו יכולים להגדיר סטרינג עם s גדולה, ולמעשה ב-C-Sharp סטרינג עם s קטנה זה כינוי או שם מקוצר יותר או נוח יותר לשימוש שמחליף את הסטרינג עם האס הגדולה.
אבל ב-Java סטרינג היא רק עם אס גדולה. כאשר אנחנו מבצעים השוואה עם הכרזות ב-C-Sharp יש לנו את האופרטור שווה שווה שמאוד נוח לשימוש.
ב-Java שווה שווה לא נתמך, לפחות לא בגרסת Java שמשתמשים איתה בתוך אנדרואיד, שזאת גרסה 7. אז ב-Java מה שאנחנו צריכים לעשות זה פשוט להשתמש עם האופרטור או ליתר דיוק עם הפונקציה equals str1.equals str2 בכדי לבצע השוואות עם מכרוזות.
Object ב־C-Sharp יש לנו אפשרות להשתמש עם השם Object עם O קטנה. ב־C-Sharp גם אפשר להשתמש עם Object עם O גדולה. אבל שוב Object עם O קטנה יותר נוח וזה בעצם מעין כינוי ל־Object עם O גדולה.
בג'אווה אובג'קט מגיע אך ורק אם הוא גדולה. forEach Loop לולאת forEach בפי שארפ forEach int item in ושם האוסף בג'אווה forInt item.2 שם האוסף ניימספייס בפי שארפ אנחנו מגדירים ניימספייס לדוגמה zoo wild animals ובתוכו בתוך בלוק מגדירים את המחלקות השונות.
ב-Java אנחנו רושמים את המילה Package, רושמים את השם של ה-Namespace, לדוגמה zoo.wild.animals ואז מתחת מתחילים לכתוב את המחלקות השונות. נהוג בשני המקרים שאנחנו נכתוב רק מחלקה אחת בקובץ אחד.
אם אנחנו נמצאים במרחב שמות מסוים ואנחנו רוצים לייבא מרחב שמות אחר, ב-C-Sharp אנחנו רושמים פשוט Using ואת שם המרחב שמות zoo.wild.animals. בג'אווה אנחנו רושמים import zoo wild animal נקודה וכוכבית.
נקודה כוכבית מציין שאנחנו רוצים לייבא את כל המחלקות שנמצאות בתוך מרחב השמות הזה, zoo wild animals. עכשיו, בג'אווה אנחנו יכולים לעשות משהו מעניין שב-c-sharp אנחנו לא יכולים לעשות אותו.
בג'אווה אנחנו יכולים to import zoo wild animals נקודה ושם קלאס, לדוגמה ליון, כדי להשתמש אך ורק עם הקלאס הזאת בתוך הקובץ.
ב-C-Sharp אין לנו אפשרות לעשות דבר כזה, אנחנו יכולים רק להגדיר את כל מרחב השמות. הרשאות גישה אם ב-C-Sharp אנחנו בונים איזושהי מחלקה, ולא מגדירים שום הרשאת גישה לאיזשהו משתנה או לפונקציה, מי שיכול להשתמש במשתנה או בפונקציה זה אך ורק המחלקה המקומית.
בג'אווה הסיפור קצת שונה. אם אנחנו מגדירים משתנה ללא הרשאת גישה דיפולט, אז מי שיכול להשתמש איתו זה אך ורק המחלקה וגם כל מקום באותו ה-package.
שימו לב, גם מחלקות אחרות שנמצאות תחת אותו ה-package יכולות להשתמש עם המשתנה הזה. יש משמעות קצת אחרת ל-package מאשר name space ב-Java מול פישר.
פאקג' זה משהו שהוא קצת יותר קרוב לקלאס ויותר חזק מהבחינה הזאת. עכשיו, אם אנחנו מגדירים את המילה private לפני שם של משתנה ב-C-Sharp כמובן זה ה-Default ורק המחלקה יכולה להשתמש איתו.
כאן גם Java רק המחלקה ב-Java יכולה להשתמש עם המשתנה הזה. במקרה הזה זה בדיוק אותו הדבר כמו ב-C-Sharp. אם אנחנו מגדירים Protected בתור שם של Access Modifier כהרשעת גישה ב-C-Sharp רק המחלקה ומחלקות יורשות יכולות להשתמש עם המשתנה הזה.
ג'אווה, גם המחלקה, גם מחלקות ירשות וגם בכל מקום באותו הפאקג' ניתן לגשת ולהשתמש עם המשתנה. פאבליק, כל מקום נגיש למשתנה הזה או המשתנה נגיש מכל מקום.
גם בג'אווה זה אותו הדבר. הגדרת משתנה כפאבליק מציינת שמכל מקום אנחנו יכולים לגשת אליו. ב-C-Sharp קיים לנו אינטרנל. מי שיכול לגשת לאינטרנל זה רק הפרויקט הנוכחי.
בג'אווה אין דבר כזה, זה לא נתמך. ב-C-Sharp יש הרשאת גישה מאוד נדירה שנקראת ProtectedInternal מי שיכול לגשת ל-ProtectedInternal זה גם הפרויקט הנוכחי וכל מי שיורש את המחלקה גם מפרויקטים אחרים.
בג'אווה לא נתמך, אין דבר כזה.