پکیجها و API (Java Packages / API)
پکیجها و API: سازماندهی کتابخانهای 📂📦
پکیج (Package) در جاوا مشابه "پوشه" در کامپیوتر است. ما از پکیجها برای گروهبندی کلاسهای مرتبط استفاده میکنیم تا از تداخل نامها جلوگیری کرده و مدیریت پروژه را آسان کنیم.
۱. دستهبندی پکیجها
- پکیجهای داخلی (Built-in): کتابخانههایی که همراهِ جاوا میآیند (مثل
java.util). - پکیجهای کاربر (User-defined): پکیجهایی که خودمان در پروژه میسازیم.
۲. دستور import 📥
برای استفاده از کلاسی که در پکیج دیگری قرار دارد، باید از دستور import در بالای کد استفاده کنیم:
String و Math است و به صورت خودکار توسط جاوا وارد میشود (نیاز به import ندارد).
۳. ساخت پکیج خودمان
برای قرار دادن یک کلاس در پکیج، اولین خطِ کد باید با دستور package شروع شود:
توصیه نامگذاری:
شرکتها معمولاً از دامنه معکوس سایت خود برای نام پکیج استفاده میکنند تا منحصربهفرد باشد، مثلاً: com.google.search
بخش تخصصی: معماری سیستمهای شیءگرا 🏗️💎
در این بخش، به مفاهیمی میپردازیم که تفاوت بین یک برنامهنویس معمولی و یک معمار نرمافزار را رقم میزند.
۱. کد تمیز و اصل ابزارمندی (Abstraction)
در پروژههای بزرگ صنعتی، ما سعی میکنیم تا حد امکان وابستگیها (Dependencies) را کاهش دهیم. استفاده درست از Interface و Abstract Class باعث میشود کدهای ما انعطافپذیر باشند. به قولی: "برنامهنویسی برای اینترفیس، نه برای پیادهسازی".
۲. مدیریت پکیجها و جلوگیری از تداخل
پکیجبندی حرفهای فقط برای نظم نیست؛ بلکه برای کنترلِ Visibility است. با استفاده درست از سطوح دسترسی (مثل protected و default) در سطح پکیج، میتوانید از دسترسیهای غیرمجاز به متدهای داخلی کلاسها جلوگیری کنید.
۳. ترکیب به جای وراثت (Composition over Inheritance)
وراثت (Inheritance) ابزار قدرتمندی است، اما استفاده بیش از حد از آن باعث ایجاد "زنجیرههای سفتوسخت" (Tight Coupling) میشود. در بسیاری از موارد، استفاده از ترکیب (داشتنِ یک شیء داخل شیء دیگر) راهحل منعطفتری برای گسترشِ کدهای شماست.
نکته تکمیلی: تضادِ نامها در پکیجها 🌪️
یکی از بزرگترین چالشها در پروژههای بزرگ صنعتی، تضاد نامها (Naming Collisions) است. تصور کنید دو پکیج مختلف هر دو کلاسی به نام Date داشته باشند. در این صورت جاوا به شما اجازه نمیدهد هر دو را به صورت معمولی import کنید. در چنین شرایطی، باید از نام کامل کلاس (Fully Qualified Name) استفاده کنید، مثلاً: java.util.Date و java.sql.Date. این کار باعث شفافیت کامل در کد میشود.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
پکیج java.util.Random را وارد (import) کنید. سپس در متد main یک شیء از کلاس Random بسازید و آن را چاپ نکنید (فقط ساخت شیء کافیست).
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random rand = new Random();
System.out.println("Success");
}
}
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.