0Pricing
Java Academy · درس

requires وexports

التحكم في التبعيات وإمكانية الوصول

requires وexports درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.

التحكم في رسم الوحدات

يشكّل توجيهان رسم الوحدات: يعلن requires عمّا تعتمد عليه، ويعلن exports عمّا تكشفه.

يستكشف هذا الدرس تنويعاتهما وقواعد قابلية القراءة وإمكانية الوصول التي ينشئانها.

‏requires البسيط

يعني requires X; البسيط أن «هذه الوحدة تقرأ الوحدة X». يمكن لشفرتك استخدام الأنواع العامة التي تصدّرها X، لكن مستهلكي وحدتك لا يعرفون شيئًا عن X.

module com.example.app {
    requires java.sql;
}

‏requires transitive

يعني requires transitive Y; أن أي وحدة تقرأ وحدتك تقرأ Y أيضًا. وهذا ما يُسمى قابلية القراءة الضمنية، ويكون مفيدًا عندما تكشف واجهة برمجتك عن أنواع Y.

module com.example.api {
    requires transitive java.sql;
}

متى تستخدم transitive

استخدم transitive عندما تُرجع إحدى طرق واجهة برمجتك المصدَّرة نوعًا من وحدة أخرى أو تقبله. وإلا فلن يتمكن المستدعون حتى من تسمية نوع القيمة المُعادة من دون كتابة requires خاص بهم.

وهذا يعفي المستهلكين من التصريح عن تبعيات زائدة.

‏requires static

يعلن requires static Z; عن تبعية مطلوبة وقت الترجمة فقط. تكون الوحدة مطلوبة للترجمة، لكنها اختيارية وقت التشغيل، ما يجعلها مناسبة لمعالجات التعليقات التوضيحية أو عمليات التكامل الاختيارية.

module com.example.app {
    requires static com.example.annotations;
}

‏exports البسيط

يجعل exports pkg; الأنواع العامة في pkg قابلة للقراءة من جانب جميع الوحدات التي تعتمد على وحدتك.

module com.example.lib {
    exports com.example.lib.api;
}

التصدير المقيّد

يكشف التصدير المقيّد عن حزمة لوحدات محددة مسماة فقط، باستخدام exports pkg to modA, modB;. وهذا مفيد للوحدات الصديقة داخل نظام أكبر.

module com.example.core {
    exports com.example.core.internal to com.example.web, com.example.batch;
}

الفتح للانعكاس

يمنح exports إمكانية الوصول إلى الأعضاء العامة وقت الترجمة ووقت التشغيل. أما الانعكاس العميق (كالحقول الخاصة) فيتطلب opens pkg; بدلًا من ذلك، وتستخدمه أُطر عمل مثل Jackson أو Hibernate.

module com.example.model {
    exports com.example.model;
    opens com.example.model.entities to com.fasterxml.jackson.databind;
}

الوحدات المفتوحة

إذا احتاجت وحدة بأكملها إلى الوصول عبر الانعكاس، وهو أمر شائع مع أُطر العمل القديمة، فصرّح عنها باستخدام open. عندها تُفتح كل حزمة للانعكاس، مع بقاء exports العادي متحكمًا في الوصول وقت الترجمة.

open module com.example.beans {
    requires java.logging;
}

قابلية القراءة مقابل إمكانية الوصول

يجب تحقق شرطين معًا لاستخدام نوع من وحدة أخرى:

  • قابلية القراءة: تستخدم وحدتك requires للوحدة الأخرى
  • إمكانية الوصول: تصدّر الوحدة الأخرى الحزمة، ويكون النوع عامًا

إذا لم يتحقق أي من الشرطين، يرفض المترجم شفرتك.

جمع العناصر معًا

وحدة سليمة تعيد كشف أنواع JDBC وتفتح الكيانات لمكتبة JSON:

module com.example.service {
    requires transitive java.sql;
    requires static com.example.annotations;

    exports com.example.service.api;
    exports com.example.service.spi to com.example.plugins;
    opens com.example.service.dto to com.fasterxml.jackson.databind;
}

تحقق سريع

اختر التوجيه المناسب لأنواع واجهة برمجة التطبيقات المعاد كشفها.

مراجعة

تعلّمت توجيهات التبعيات والرؤية:

  • requires وrequires transitive وrequires static
  • exports وexports ... to المقيّد
  • opens وopen module للانعكاس
  • يتطلب الاستخدام كلاً من قابلية القراءة وإمكانية الوصول

التالي: فصل المكونات باستخدام الخدمات عبر provides وuses.

الأسئلة الشائعة

هل درس «requires وexports» مجاني؟

نعم — نص درس «requires وexports» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.

ماذا ستتعلم في «requires وexports»؟

التحكم في التبعيات وإمكانية الوصول تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟

لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «requires وexports»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟

نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. module-info.java
  2. requires وexports
  3. الخدمات مع provides/uses
  4. الترحيل إلى الوحدات
← العودة إلى Java Academy