لینوکس، عشق، برنامه نویسی

لینوکس، عشق، برنامه نویسی

در این وبلاگ مطالبی درباره سیستم عامل لینوکس و همچنین درمورد برنامه نویسی و کامپیوتر مینویسم.

شنبه, ۳۰ بهمن ۱۴۰۰، ۱۲:۳۲ ق.ظ

 

فصل سوم

 

مفهوم پکیج در جاوا

 

 

پکیج در جاوا چیست؟

در فصل سوم، ضروری هست که به مفهوم دقیق پکیج در جاوا بپردازیم و ببینیم پکیج دقیقا چی هست.

 

طبق تعریفی که در سایت خود اوراکل اومده:

"A package is a namespace that organizes a set of related classes and interfaces"

 

یعنی پکیج، یک فصای نام (namespace) است که یک گروهی از کلاس ها و اینترفیس ها را سازماندهی می کند. به زبان خودمانی اگر بخوام بگم، در داخل یک پکیج، مجوعه ای از کلاس ها و اینترفیس های مرتبط قرار می گیرد.

 

خب نحوه ی نام گذاری پکیج ها رو هم همه می دونید که با نقطه از هم جدا می شن. مثلا به این شکل   com.blog.linuxgeek  

 

اما نکته ی مهمی که باید بدونید این هست که پکیج های جاوا در واقع همان پوشه ی (folder) معمولی هستند!

 

برای مثال، وقتی میگیم که داخل پوشه ی src یک پکیج به نام com.second.packege می سازیم، معنیش این هست که

۱- داخل پوشه ی src ابتدا یک پوشه می سازیم به نام com

۲- سپس داخل پوشه ی com یک پوشه ی دیگر می سازیم به نام second

۳- و سپس داخل پوشه ی second یک پوشه ی دیگه می سازیم به نام packege

در واقع، اکلیپس و سایر ideها هم همینکار رو می کنند، اگر در اکلیپس، پکیج بالایی را درست کنید و سپس، از طریق فایل منیجر سیستم عامل، برید به پوشه ی src، می بینید که یک پوشه درست شده به نام com، سپس در داخل آن یک پوشه درست شده به نام second، و سپس در داخل اون یک پوشه درست شده به نام package

 

نکته ی دیگری که باید بدونید این هست که، در فرهنگ برنامه نویسی جاوا مرسوم هست که تمام پکیج ها در داخل پوشه ی src قرار می گیرند، اما چنین چیزی به هیچ وجه اجباری نیست. یعنی شما می توانید یک پکیج را در دایرکتوری هوم قرار دهید و پکیج دیگر را در دسکتاپ ( به همین ترتیب در ویندوز می توانید یک پکیج را در درایو D قرار دهید و پکیج دیگر را در درایو F )

بنابراین، قرارگیری پکیج های یک پروژه در داخل پوشه ی src اجباری نیست ( اما همانطور که گفتم مرسوم است).

 

اما اینکه اگر پکیج های یک پروژه در مکان های مختلف قرار بگیرند در آن صورت پروژه چگونه کامپایل و اجرا خواهد شد؟ این نکته ای هست که در فصل های بعد به آن خواهیم پرداخت.

 

 

package root directory   چیست؟

ممکن است در برخی سایت ها اصطلاح بالا را دیده باشید. منظور از پکیج روت دایرکتوری، پوشه ای است که پکیج ها داخل آن قرار می گیرند. برای مثال، اگر تمام پکیج های پروژه ی ما در داخل پوشه ی src قرار بگیرند، ادرس پوشه ی src می شود پکیج روت دایرکتوری.

 

مثلا فرض کنید که ما یک پروژه داریم به نام myproject و ادرس آن چنین است:

home/manjaro-user/myproject/src/

و پکیج com.blog.linuxgeek در  داخل پوشه ی src قرار دارد. 

 

حالا اگر برید به ادرس home/manjaro-user/myproject/src/ می بینید که در داخل پوشه ی src :

یک پوشه هست به نام com

و در داخل پوشه ی com یک پوشه هست به نام blog

و در داخل پوشه ی blog یک پوشه هست به نام linuxgeek

و در داخل پوشه ی linuxgeek کلاس های ما قرار دارند.

 

حالا، پکیج روت دایرکتوری ما میشه پوشه ی src و ادرس اون میشه home/manjaro-user/myproject/src/

 

چرا پکیج روت دایرکتوری ما میشه پوشه ی src ؟  برای اینکه پکیج های پروژه داخل اون هستند.

 

حالا اگر ما پکیج های پروژه رو هرکدام رو در جایی قرار بدیم چی؟  در ان صورت ما چندین پکیج روت دایرکتوری داریم و موقع کامپایل باید ادرس همه ی پکیج روت دایرکتوری ها رو بدیم به کامپایلر! (در فصل بعد میگم)

 

کاربرد package root directory چیست و چرا لازم است؟

در واقع، وقتی پکیج روت دایرکتوری را به کامپایلر می دهیم،  کامپایلر از اون ادرس شروع میکنه به گشتن و پیداکردن پکیج ها و کلاس ها! (در فصل های بعدی اینو بازم بیشتر توضیج میدم)

 

 

و نکته ی پایانی مهمی که باید بدانید این هست که در جاوا، هیچ کلاسی وجود ندارد که خارج از پکیج قرار بگیرد. در واقع هیچ کلاسی نمی توان ساخت که داخل یک پکیج نباشد. اگر یک کلاس را داخل پکیج نگذاریم، موقع کامپایل، خود کامپایلر یک پکیج می سازد به نام  default package، و کلاس را داخل آن قرار می دهد.

 

این مساله را می توانید در eclipse هم مشاهده کنید. زمانی که در اکلیپس کلاس می سازید، اگر برای کلاس، پکیج تعریف نکنید، خود اکلیپس برای شما default package می سازد و کلاس را داخل آن قرار می دهد. (برای دیفالت پکیج، هیچ پوشه ای در سیستم فایل کامپیوتر ایجاد نمی شود)

 

و همچنین سعی کنید هیچوقت کلاسی را داخل دیفالت پکیج قرار ندید. چرا؟ برای اینکه کلاسی که در داخل دیفالت پکیج قرار دارد، از داخل کلاس هایی که درون سایرپکیج ها قرار دارند قابل import شدن نیست.

 

همانطور که در عکس های زیر می بینید، ما یک کلاس Main ساختیم و داخل هیچ پکیجی قرار ندادیم و اکلیپس اتوماتیک ان را داخل default package قرار داد.

 

 

 

 

 

 

و سوالی که پیش میاد این است که وقتی کلاسی در داخل دیفالت پکیج قرار بگیرد، در کجای سیستم عامل و در کدام پوشه جا می گیرد؟

جواب: اگر منظورتون در اکلیپس هست، اکلیپس اون رو در داخل پوشه ی src می سازه، و اکلیپس (از طریق تنظیماتش)، موقع کامپایل کردن پروژه، ادرس پوشه ی src رو به عنوان "پکیج روت دایرکتوری" میده به کامپایلر.  اما اگر شما خودتون پروژه رو بصورت دستی ایجاد کنید، عملا می توانید این کلاس را در هر کجای سیستم قرار بدید. فقط موقع کامپایل، باید ادرسش رو بدید به کامپایلر تا آن را کامپایل کند، ولی عملا این کلاس به درد شما نخواهد خورد!! چرا؟ چون همانطور که در بالا هم گفتم، از داخل کلاس هایی که درون یک پکیج قرار دارند، نمی توانید این کلاس را import کنید، پس عملا یعنی نمی توانید از این کلاس و متد هایش بهره ای ببرید!smiley

 

خب، فکر میکنم هرآنچه را که لازم بود، درباره پکیج ها در جاوا دونستیم . بریم فصل بعدیsmiley

 

 

بازگشت به فهرست اصلی

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی