שאלה על import ב java

שאלה על import ב java

האם יש חסרון בלעשות import לספרייה שלמה - כלומר:
import somelibrary.*​
לעומת לעשות import רק לחלק מספריות המשנה, כלומר:
import somelibrary.sublib1; import somelibrary.sublib2;​
מה ההבדל? האם זה פחות יעיל? פחות נכון?
 

voguemaster

New member
תשובה

אין חיסרון משמעותי. כשאתה מייבא ספריה שלמה בעזרת כוכבית, אתה מייבא בעצם את כל המחלקות הציבוריות (PUBLIC) שיש בתוכה, ובמיוחד, רק את המחלקות שהקוד מתייחס אליהן. אם ייבאת ספריה שלמה והשתמשת רק במחלקה אחת מתוכה, למעשה יש ייבוא בפועל רק של מחלקה אחת. זה שונה מאשר ב-C או CPP ששם כל קובץ HEADER שאתה מייבא מייצג (לרוב) ספריה שמקושרת ליישום שלך. בתכלס, ייבוא כל המחלקות מספריה מסוימת לא מגדיל את היישום שלך, לא מאט ולא עושה כמעט שום בעיות. הבעיה היחידה שאני מכיר עם ייבוא ספריות שלמות היא התנגשות שמות. לדוגמא מחלקת List היא חלק מחבילת ה-AWT ובמקרה יש גם מחלקה בשם הזה בספריה util (נדמה לי..), לכן זה עלול קצת להיות בעייתי לייבא את שתיהן במקביל ולהשתמש ב-List. מצד שני, אם אתה מייבא ספציפית את המחלקה שלך, לא תהיה בעיה (או אם אתה עובד ב-Swing ואז באמת אין בעיה של התנגשות שמות כזו
)
 

ihovav

New member
אם הבנתי נכון את הכוונה שלך

אז לדעתי יש לך טעות ב C ו CPP הספריה לא נכללת בקוד הסופי - רק הפונקציות הרלוונטיות ה LINKER "מיבא" את הפונקציות ו "שותל" אותן בתכנית - כך שאם עשית INCLUDE ל STDIO.H - לא תמצא את כל הספריה הזו בקוד הסופי שלך וכמו שיהושע שגיא אומר : "תקן אותי אם אני טועה"
 

voguemaster

New member
אני לא סגור על זה אבל..

לדעתי מה שקורה עם ספריות ב-C זה שהלינקר מקשר לך את התוכנית לספריה כולה. אם זו ספריה דינמית (DLL באופן כללי, ללא קשר ל-DLL של חלונות), היא נטענת בזמן ריצה או יותר נכון ממש לפני תחילת הריצה, ע"י ה-LOADER של מערכת ההפעלה, בחלזונות זה בשלב שבו עושים resolve ל-import table למי שמכיר (חומר על פורמט PE של מיקרוסופט אפשר למצוא בכל מיני מקומות, גם לי יש כמה מאמרים נחמדים עליו). ברגע שאתה רוצה פונקציה מספריה מסוימת, אתה טוען את כל הספריה. בספריות מקושרות סטטית, הקוד של הספריה מקושר לתוכנית שלך בזמן הקישור עצמו, והקוד של הספריה הופך לחלק מהתוכנית שלך, גם על הדיסק. התוצאה היא בד"כ EXE (או קובץ ELF באופן רגיל תחת לינוקס) גדול יותר. נסה לקמפל עם קישור סטטי לספריות ותראה מה אתה מקבל
 
למעלה