بحثك لم يطابق أي نتائج.
نقترح أن تجرِّب ما يلي للمساعدة في العثور على ما تبحث عنه:
ما المقصود بها وطريقة استخدامها؟
من بول ديتيل
بول ديتيل
في هذه المقالة، أقدم نظام الوحدة النمطية لمنصة Java 9 (JPMS)، وهي أهم تقنية هندسة برامج جديدة في Java منذ إنشائها. وحدة نمطية—نتيجة مشروع Jigsaw—تساعد المطورين على جميع المستويات على أن يكونوا أكثر إنتاجية خلال إنشاء أنظمة البرامج وصيانتها وتطويرها، وخاصة الأنظمة الكبيرة.
تضيف الوحدة النمطية مستوى أعلى من التجميع فوق الحزم. يمثل عنصر اللغة الجديد الرئيس الوحدة النمطية - وهو مجموعة ذات أسماء فريدة وقابلة لإعادة الاستخدام من الحزم ذات الصلة، بالإضافة إلى الموارد (مثل الصور وملفات XML) وواصف وحدة نمطية يحدد
منصة Java SE موجودة منذ عام 1995. يوجد الآن ما يقرب من 10 ملايين مطور يستخدمونها لبناء كل شيء بدءًا من التطبيقات الصغيرة للأجهزة المقيدة بالموارد—مثل تلك الموجودة في إنترنت الأشياء (IoT) والأجهزة المضمنة الأخرى—إلى الأنظمة الحيوية للأعمال والمهام الحرجة على نطاق واسع. توجد كميات هائلة من التعليمات البرمجية القديمة، ولكن حتى الآن، كانت منصة Java في المقام الأول حلًا واحدًا يناسب الجميع. على مر السنين، كانت توجد العديد من الجهود الموجهة لوضع نماذج لـ Java، ولكن لم يتم استخدام أي منها على نطاق واسع—ولا يمكن استخدام أي منها لوضع نماذج منصة Java.
لقد كان إنشاء نماذج لنظام Java SE صعبًا في التنفيذ، وقد استغرق الجهد سنوات عديدة. JSR 277: تم اقتراح نظام وحدة Java النمطية في الأصل في عام 2005 لـ Java 7. تم استبدال JSR هذا لاحقًا بواسطة JSR 376: Java Platform Module System واستهدف Java 8. أصبحت منصة Java SE الآن نمطية في Java 9، ولكن بعد تأخير Java 9 حتى سبتمبر 2017 فحسب.
يجب أن تحدد كل وحدة تبعياتها بشكل صريح.
وفقًا إلى JSR 376، فإن الأهداف الرئيسة لتكوين منصة Java SE هي
JEP 200: برنامج JDK للوحدة المعيارية
JEP 201: رمز مصدر الوحدة المعيارية
JEP 220: صور وقت تشغيل الوحدة المعيارية
JEP 260: عزل معظم واجهات برمجة التطبيقات الداخلية
JEP 261: نظام الوحدة
JEP 275: تعبئة تطبيق JAVA للوحدة المعيارية
JEP 282: JLINK: رابط JAVA
JSR 376: نظام وحدة منصة JAVA
JSR 379: JAVA SE 9
الجدول 1 وحدات JEP وJSR الخاصة بـ Java النمطية
أحد الجوانب المهمة في Java 9 هو تقسيم JDK إلى وحدات نمطية لدعم التكوينات المختلفة. (استشارات "JEP 200: برنامج JDK للوحدة النمطية." يتم عرض كل وحدات JEP وJSR الخاصة بـ Java في الجدول 1.) باستخدام أمر java من مجلد حاوية JDK مع خيار --list-modules
، كما في:
java --list-modules
تعرض مجموعة الوحدات النمطية الخاصة بـ JDK، والتي تتضمن الوحدات النمطية القياسية التي تنفذ مواصفات Java Language SE (أسماء تبدأ بـ java
) ووحدات نمطية JavaFX (أسماء تبدأ بـ javafx
) ووحدات نمطية خاصة بـ JDK (أسماء تبدأ بـ jdk
) ووحدات نمطية خاصة بـ Oracle (أسماء تبدأ بـ oracle
). يتبع كل اسم وحدة نمطية سلسلة الإصدار—@9
يشير إلى أن الوحدة النمطية تنتمي إلى Java 9.
كما ذكرنا، يجب أن توفر الوحدة النمطية بيانات تعريف—واصف الوحدة النمطية تحدد تبعيات الوحدة النمطية، والحزم التي تتيحها الوحدة النمطية للوحدات الأخرى، وأكثر من ذلك. واصف الوحدة هو الإصدار المجمع لتعريف الوحدة النمطية المحدد في ملف باسم module-info.java
. يبدأ كل إعلان عن وحدة بالكلمة الأساس الوحدة
، متبوعًا باسم وحدة نمطية فريد ونص وحدة محاطة بأقواس، كما في:
الدافع الرئيس لنظام الوحدة هو التضمين القوي.
الوحدة النمطية modulename {
}
يمكن أن يكون نص تعريف الوحدة النمطية فارغًا أو قد يحتوي على العديد من إرشادات الوحدة النمطية، بما في ذلك تتطلب
وتصدر
وتوفر…بـ
وتستخدم
وتفتح
(نناقش كل منها). كما سترى لاحقًا، يؤدي تجميع تعريف الوحدة النمطية إلى إنشاء واصف الوحدة النمطية، والذي يتم تخزينه في ملف باسم module-info.class
في المجلد الجذر للوحدة النمطية. نقدم هنا بإيجاز كل توجيه للوحدة النمطية. بعد ذلك، سنقدم تعريفات وحدة نمطية فعلية.
والكلمات الأساس تصدر
، ووحدة
، وفتح
، وتفتح
، وتوفر
، وتتطلب
، وتستخدم
، وبـ
، وإلى
، وانتقالية
، التي نقدمها فيما بعد، هي كلمات أساس مقيدة. تعد كلمات أساس فحسب في الإعلانات عن الوحدة ويمكن استخدامها كمعرفات في أي مكان آخر في التعليمات البرمجية.
requires. يشير توجيه الوحدة النمطية requires
إلى أن هذه الوحدة النمطية تعتمد على وحدة نمطية أخرى—وتسمى هذه العلاقة تبعية الوحدة النمطية. يجب أن تحدد كل وحدة تبعياتها بشكل صريح. عندما الوحدة أ تتطلب
، يُقال للوحدة أ القراءة، والوحدة ب هي القراءة بواسطة الوحدة أ. لتحديد تبعية على وحدة نمطية أخرى، استخدم requires
، كما يلي:
تتطلب modulename;
يوجد أيضًا توجيه يتطلب الثبات
للإشارة إلى أن الوحدة النمطية مطلوبة في وقت التجميع، ولكنها اختيارية في وقت التشغيل. يُعرف ذلك باسم تبعية اختيارية ولن تتم مناقشتها في هذه المقدمة.
يتطلب قابلية قراءة الضمنية. لتحديد تبعية على وحدة نمطية أخرى وللتأكد من أن الوحدات الأخرى التي تقوم بقراءة الوحدة الخاصة بك تقرأ أيضًا التبعية—المعروفة باسم القراءة الضمنية- استخدم يتطلب انتقالي
، كما في:
يتطلب modulename انتقالية؛
ضع في الاعتبار التوجيه التالي من إعلان الوحدة النمطية java.desktop
:
يتطلب java.xml
انتقالية؛
في هذه الحالة، أي وحدة نمطية تقرأ java.desktop
تقرأ أيضًا ضمنيًا java.xml
. على سبيل المثال، إذا أرجع أسلوب من الوحدة النمطية java.desktop
نوعًا من الوحدة النمطية java.xml
، فستعتمد التعليمات البرمجية الموجودة في الوحدات النمطية التي تقرأ java.desktop
على java.xml
. بدون توجيه تتطلب تلقائي
في تعريف الوحدة النمطية الخاصة بـ java.desktop
، لن يتم تجميع هذه الوحدات التابعة ما لم تتم قراءة بشكل صريح java.xml
.
وفقًا إلى JSR 379، يجب أن تمنح الوحدات القياسية لـ Java SE قابلية قراءة ضمنية في جميع الحالات مثل تلك الموضحة هنا. أيضًا، على الرغم من أن وحدة Java SE القياسية قد تعتمد على وحدات نمطية غير قياسية، إلا أنها يجب ألا تمنح قابلية القراءة الضمنية لها. يضمن هذا أن التعليمات البرمجية اعتمادًا على وحدات Java SE القياسية قابلة للنقل عبر عمليات تنفيذ Java SE.
تصدر وتصدر...إلى. يحدد توجيه الوحدة النمطية تصدر
إحدى حزم الوحدة النمطية التي يجب أن تكون أنواع العامة
الخاصة بها (والأنواع العامة
ومحمية
المتداخلة الخاصة بها) قابلة للوصول إلى التعليمات البرمجية في جميع الوحدات الأخرى. يتيح توجيه تصدر…إلى
إمكانية التحديد في قائمة مفصولة بفاصلة والتي يمكن للتعليمات البرمجية للوحدة أو الوحدات النمطية الوصول إلى الحزمة المصدرة - ويُعرف هذا بالتصدير المؤهل.
تستخدم. يحدد توجيه الوحدة النمطية تستخدم
خدمة يتم استخدامها بواسطة هذه الوحدة النمطية، مما يجعل الوحدة مستهلكًا للخدمة. الخدمة هي كائن لفئة تقوم بتنفيذ الواجهة أو توسيع فئة الملخص
المحددة في توجيه تستخدم
.
يوفر...باستخدام. يحدد توجيه الوحدة النمطية توفر…بـ
أن الوحدة النمطية توفر تنفيذ خدمة—مما يجعل الوحدة النمطية مزود خدمة. يحدد جزء توفر
من التوجيه واجهة أو فئة الملخص
مدرجة في توجيه تستخدم
الخاص بالوحدة النمطية ويحدد جزء مع
من التوجيه اسم فئة موفر الخدمة التي تنفذ
الواجهة أو توسع
فئة الملخص
.
فتح، فتح، وفتح...إلى. قبل Java 9، يمكن استخدام الانعكاس لمعرفة جميع الأنواع في حزمة وجميع الأعضاء من النوع—حتى أعضاء خاص
—سواء كنت تريد السماح بهذه الإمكانية أم لا. وهكذا، لم يكن أي شيء موجودًا فعلًا.
الدافع الرئيس لنظام الوحدة هو التضمين القوي. بشكل افتراضي، لا يمكن الوصول إلى نوع في وحدة نمطية بوحدات نمطية أخرى ما لم يكن نوعًا عامًا و تصدر الحزمة الخاصة بها. ستعرض الحزم التي تريد الكشف عنها فحسب. باستخدام Java 9، ينطبق هذا أيضًا على الانعكاس.
السماح بالوصول لحزمة في وقت التشغيل فحسب. توجيه وحدة نمطية تفتح إلى النموذج
فتح الحزمة
يشير إلى أن أنواع عامة
الخاصة بـ حزمة محددة (والأنواع العامة
والمحمية
المتداخلة الخاصة بها) يمكن الوصول إليها من خلال تعليمات برمجية في وحدات أخرى في وقت التشغيل فقط. أيضًا، يمكن الوصول إلى جميع الأنواع الموجودة في الحزمة المحددة (وكل أعضاء الأنواع) عن طريق الانعكاس.
السماح بالوصول إلى حزمة في وقت التشغيل فحسب بواسطة وحدات محددة. توجيه وحدة نمطية تفتح…إلى
للنموذج
فتح حزمة إلى قائمة الوحدات المفصولة بفاصلة
يشير إلى أن أنواع العامة
الخاصة بـ الحزمة (والأنواع العامة
والمحمية
المتداخلة الخاصة بها) يمكن الوصول إليها من خلال التعليمات البرمجية الموجودة في الوحدات المدرجة في وقت التشغيل فحسب. يمكن الوصول إلى جميع الأنواع الموجودة في الحزمة المحددة (وكل أعضاء الأنواع) عبر الانعكاس إلى التعليمات البرمجية في الوحدات المحددة.
السماح بالوصول إلى وقت التشغيل فحسب لكل الحزم في وحدة نمطية. إذا كان يجب الوصول إلى جميع الحزم الموجودة في وحدة محددة في وقت التشغيل ومن خلال التفكير في جميع الوحدات الأخرى، يمكنك فتح
الوحدة بأكملها، كما في:
فتح الوحدة النمطية modulename {
// توجيهات الوحدة النمطية
}
وفقًا إلى الإعدادات الافتراضية، يمكن لوحدة نمطية ذات وصول عاكس لوقت التشغيل إلى حزمة أن ترى أنواع عامة
الخاصة بالحزمة (والأنواع العامة
والمحمية
المتداخلة الخاصة بها). ومع ذلك، يمكن للتعليمة البرمجية في الوحدات الأخرى الوصول إلى كل الأنواع في الحزمة المعروضة وكل الأعضاء داخل تلك الأنواع، بما في ذلك أعضاء خاصة
عبر setAccessible
، كما هو الحال في إصدارات Java السابقة.
لمزيد من المعلومات حول setAccessible
والانعكاس، يرجى الاطلاع على وثائق Oracle.
بول ديتيل، الرئيس التنفيذي والمدير الفني لـ Deitel & Associates، هو خريج في معهد ماساتشوستس للتكنولوجيا (MIT) بـ 35 عامًا من الخبرة في مجال الحوسبة. هو بطل في Java ويجري البرمجة في Java منذ أكثر من 22 عامًا. هو والمؤلف المشارك، دكتور هارفي م. ديتيل، هي الكتاب الأكثر مبيعًا للغة البرمجة في العالم. قدم بول دورات برمجة Java وAndroid وiOS وC# وC+ وC والإنترنت إلى عملاء الصناعة والحكومة والأكاديميين على المستوى الدولي.
ملاحظة: هذه المقالة مقتبسة من Java Magazine سبتمبر/أكتوبر 2017.