You are on page 1of 40

‫مترجم من اإلنجليزية إلى العربية ‪www.onlinedoctranslator.

com -‬‬

‫نظام تتبع السكك الحديدية‬

‫خالصة‪:‬‬

‫نظام إدارة مسارات السكك الحديدية هو مشروع برمجي يدعم خدمات نظ ام مس ارات الس كك الحديدي ة وفًق ا لج داول‬
‫القطارات‪ .‬تم تصميم المشروع بواجهة مستخدم رسومية جيدة تسمح بمراقب ة والتحكم في القط ارات المختلف ة على الش بكة‪ .‬لقد‬
‫حدث مرات عديدة أنك كنت تنتظر في محطة السكة الحدي د وص ول ش خص م ا وليس ل ديك أي معلوم ات دقيقة ح ول ت وقيت‬
‫القطار وأشياء أخ رى‪ .‬يعم ل نظ ام إدارة المس ار وفًق ا لج داول القط ارات ويض ع المس ارات المناس بة لتمري ر القط ارات وفًق ا‬
‫لمسارها المحدد‪ .‬تم تصميم برنامج إدارة القطارات لدعم وصيانة البيانات الخاصة بقطارات متعددة على شبكة السكك الحديدي ة‪.‬‬
‫يتم االحتفاظ بج داول القط ارات ومس اراتها في قاع دة بيان ات‪ .‬عن دما يم ر القط ار على مس ار م ا‪ ،‬تتم إدارة تقاطع ات المس ار‬
‫اإلضافي أو وصالته وفًقا لمسار القطار‪ .‬بمجرد مرور القطار‪ ،‬يتم تكوين المسار ليمر القطار المقرر التالي‪.‬‬

‫مقدمة‪:‬‬

‫لقد حدث مرات عديدة أنك كنت تنتظر في محطة السكة الحديد وصول شخص ما وليس لديك أي معلومات دقيقة حول‬
‫توقيت القطار وأشياء أخرى‪ .‬لذا نقدم لكم هنا مشروًعا حول تتبع السكك الحديدية والتنبؤ بوقت الوص ول‪ .‬باس تخدام ه ذا النظ ام‬
‫يمكن للمستخدم الحصول على معلومات حول توقيت القطار‪ ،‬وهل هو في الوقت المحدد أم ال‪ ،‬وغيرها من المعلومات‪ .‬في هذا‪،‬‬
‫سيقوم النظام بتتبع توقيت القطار في أي وقت غادر فيه القطار من محطة معينة وتمرير تفاصيل التوقيت هذه إلى نظام المحط ة‬
‫األخرى حيث سيعرض التوقيت وفًقا للقطار المغادر من المحطة السابقة‪ .‬إذا وجد النظام أي ت أخير في القط ار بس بب اإلش ارة‪،‬‬
‫فسيقوم تلقائًيا بتحديث توقيت القطار في المحطة التالية وسيتم عرضه للمشاهدين‪.‬‬

‫يوجد في هذا النظام وحدة إدارية تقوم بإدخال التفاصيل الخاصة بالقطارات وتوقيتها وسيتم تمرير هذه التفاص يل ع بر‬
‫خادم اإلنترنت ويتم جلبها بواسطة النظام في المحطات األخرى‪ ،‬كما يوجد نظام آخر يعرض معلومات القط ار للمش اهدين على‬
‫منصة‪ .‬سيحصل النظام الثاني على جميع المعلومات الخاص ة بجمي ع القط ارات ولكن ه س يحدد تلقائًي ا البيان ات ال تي تش ير إلى‬
‫محطة معينة ويعرض تلك المعلومات على الشاشة‪ .‬على سبيل المثال‪ ،‬إذا قام مسؤول في محطة مومباي بإدخال معلومات ح ول‬
‫محطة دلهي‪ ،‬فلن يتأثر نظام محطة تشيناي‪ ،‬لكن نظام محطة دلهي سيعرض المعلومات حول القطار‪ .‬يعم ل ه ذا النظ ام مث ل ‪-‬‬
‫عندما يغادر القطار متأخًرا من المحطة‪ ،‬سيقوم المسؤول بإدخال تفاصيل حول المغادرة ووقتها‪ ،‬ويتم إرسال هذه المعلومات في‬
‫الوقت الفعلي إلى خادم اإلنترنت ويتم استرجاعها على نظام آخر من خالل خادم اإلنترنت وتظهر التفاصيل على الشاشة‪ .‬يمتل ك‬
‫مدراء المحطات في كل محطة تسجيل دخول يمكنهم من خالله تحديث وقت وصول القطار إلى محطتهم عند وصوله‪ .‬يتم تثبيت‬
‫هذا النظام الثاني في مواقع مختلفة بالمحطة ليتمكن المشاهدون من عرض المعلومات‪ .‬سيضيف المسؤول معلومات مثل القط ار‬
‫المغادر من المحطة‪ ،‬والوصول المتوقع إلى الوجهة‪ ،‬والت أخير في ج دول القط ار‪ ،‬وم ا إلى ذل ك‪ .‬ينش ر ه ذا المش روع أح داث‬
‫جدول القطار في الوقت الفعلي لالشتراك في تطبيقات عمالء متعددة‪.‬‬
‫مزايا‬

‫يساعد هذا النظام الركاب على معرفة تأخيرات القطارات وتوقيتها‪.‬‬ ‫‪‬‬

‫سيوفر النظام تفاصيل دقيقة عن القطار‪.‬‬ ‫‪‬‬

‫سلبيات‬

‫إذا كانت تفاصيل القطار التي أدخلها المسؤول خاطئة‪ ،‬فسيعرض النظام في المحطة التالية معلومات خاطئة‬ ‫‪‬‬

‫إذا كان هناك أي فشل في الشبكة‪ ،‬فلن يعمل النظام بأكمله بشكل صحيح‪.‬‬ ‫‪‬‬

‫تحليل النظام‪:‬‬

‫النظام الموجود‪:‬‬

‫يعاني نظام حجز السكك الحديدية الحالي من العديد من أوجه القصور المرتبطة به‪ .‬في النظام الحالي‪ ،‬تستخدم السكك‬
‫الحديدية لتعيين مستويات حجز القطارات أعلى من سعة المقاعد للتعويض عن إلغاء الركاب وعدم الحضور‪ ،‬مما يؤدي إلى‬
‫الحجز الزائد في الوكيل بشكل متكرر للقيام بذلك وبالتالي إضاعة الوقت والمال للجميع‪ .‬في النظام الحالي‪ ،‬لم يتم تحقيق التكامل‬
‫بين خطوط السكك الحديدية المختلفة على منصات واحدة‪ .‬ومع ظهور نظام الحجز عبر اإلنترنت‪ ،‬يمكن التغلب على هذه‬
‫العيوب‪.‬‬
‫مساوئ النظام الحالي‪:‬‬
‫باهظة الثمن‬ ‫‪‬‬
‫الوقت المستغرق اإلجراءات واألساليب‬ ‫‪‬‬
‫ال قابلية‬ ‫‪‬‬
‫ال سهل االستخدام‬ ‫‪‬‬
‫النظام المقترح‪:‬‬
‫يحتفظ نظام الحجز اإللكتروني الجديد بقاعدة البيانات بشكل مركزي مما يوفر للعمالء المعلومات المطلوبة من أي‬
‫مكان في العالم كلما لزم األمر‪ .‬ويتطلب هذا النظام استخدام واجهة برمجة التطبيقات (‪ )API‬التي من خاللها تتفاعل البيانات‬
‫من قاعدة بيانات مركزية تراقب جميع عمليات تبادل البيانات التي تتم من جانب العميل إليها وتقوم بتحديثها تلقائًيا‪ .‬من خالل‬
‫نظام الحجز عبر اإلنترنت‪ ،‬يستطيع العميل حجز وشراء تذكرة وبالتالي توفير الوقت والمال للعميل والسكك الحديدية‪/‬الوكيل‪.‬‬
‫وبما أن المعلومات يتم تخزينها مركزًيا‪ ،‬فلن يفقد العميل تذكرته أبًدا كما هو الحال في النظام الحالي‪.‬‬
‫مزايا النظام المقترح‪:‬‬
‫انخفاض النفقات بشكل ملحوظ‪.‬‬ ‫‪‬‬
‫توفير الوقت من خالل عدم االضطرار إلى شحن الورق أو إعادة إدخال البيانات في جهاز الكمبيوتر‪.‬‬ ‫‪‬‬
‫بيانات أكثر ثراًء واكتمااًل وأكثر دقة‪.‬‬ ‫‪‬‬
‫النشر عن بعد للمسافرين؛ وفي كثير من الحاالت‬ ‫‪‬‬
‫القدرة على استخدام األجهزة التي تمتلكها بالفعل‬ ‫‪‬‬

‫مواصفات النظام‪:‬‬

‫متطلبات األجهزة‪:‬‬

‫بنتيوم الرابع ‪ 2.4‬جيجا هرتز‪.‬‬ ‫‪:‬‬ ‫نظام‬ ‫‪‬‬


‫‪ 40‬جيجابايت‪.‬‬ ‫‪:‬‬ ‫القرص الصلب‬ ‫‪‬‬
‫‪ 1.44‬ميجا بايت‪.‬‬ ‫‪:‬‬ ‫القرص المرن‬ ‫‪‬‬
‫‪ 15‬لون في جي ايه‪.‬‬ ‫‪:‬‬ ‫شاشة‬ ‫‪‬‬
‫لوجيتك‪.‬‬ ‫‪:‬‬ ‫الفأر‬ ‫‪‬‬
‫‪ 1‬جيجابايت‪.‬‬ ‫‪:‬‬ ‫كبش‬ ‫‪‬‬
‫‪ 2‬جيجابايت‬ ‫‪:‬‬ ‫وضع التوافق‬ ‫‪‬‬

‫متطلبات البرنامج‪:‬‬

‫شبابيكإكس بي‪.8 ،7 ،‬‬ ‫‪:‬‬ ‫نظام التشغيل‬ ‫‪‬‬


‫جافا ‪1.6‬‬ ‫‪:‬‬ ‫لغة الترميز‬ ‫‪‬‬
‫أندرويد ‪ 2.0‬أحدث إصدار‬ ‫‪:‬‬ ‫أدوات‬ ‫‪‬‬
‫بيئة تطوير أندرويد‬ ‫‪:‬‬ ‫بيئة تطوير متكاملة‬ ‫‪‬‬
‫أندرويد موبايل ‪ 2.2‬إلى ‪( 5.1‬أحدث إصدار)‬ ‫‪:‬‬ ‫جهاز التشغيل‬ ‫‪‬‬

‫الوحدات‪:‬‬
‫وحدة المسؤول‬ ‫‪‬‬
‫وحدة تسجيل دخول الركاب‬ ‫‪‬‬
‫وحدة تسجيل الركاب‬ ‫‪‬‬
‫وحدة البحث عن القطارات‬ ‫‪‬‬
‫وحدة حجز التذاكر‬ ‫‪‬‬
‫وحدة تتبع القطار‬ ‫‪‬‬
‫وصف الوحدة‪:‬‬
‫تسجيل دخول المسؤول‬
‫يتم التحكم في النظام بأكمله من قبل المسؤول‪ ،‬حيث يقوم المسؤول بتسجيل الدخول إلى النظام من خالل إعطاء‬
‫تفاصيل المصادقة الخاصة به مثل اسم المستخدم وكلمة المرور‪ .‬بعد الدخول إلى النظام يمكنه رؤية القطارات المتوفرة حاليا‬
‫للركاب‪ .‬تفاصيل القطار هي اسم القطار‪ ،‬المغادرة‪ ،‬الوجهة‪ ،‬توفر المقاعد‪ ،‬وأيام التشغيل‪ .‬ويمكن للمسؤول أيًضا إضافة قطار‬
‫جديد إلى قواعد البيانات‪.‬‬
‫تسجيل دخول الركاب‬
‫في هذه الوحدة‪ ،‬يمكن للمستخدم تسجيل الدخول إلى النظام من خالل تقديم بيانات االعتماد الخاصة به‪ ،‬إذا كان‬
‫المستخدم جديًدا على هذا التطبيق‪ ،‬وليس لديه تفاصيل بيانات االعتماد الخاصة به مثل اسم المستخدم وكلمة المرور؛ يمكنه‬
‫التسجيل كعضو جديد في هذا النظام عن طريق التسجيل‪.‬‬
‫تسجيل الركاب‬
‫إذا لم يكن لدى أي مستخدم اسم مستخدم وكلمة مرور لتسجيل الدخول إلى النظام‪ ،‬فيمكنه اختيار التسجيل كعضو جديد‬
‫عن طريق اختيار خيار التسجيل‪ .‬ويطلب منه تقديم معلوماته الشخصية ومعلومات االتصال مثل االسم والعنوان ورقم الهاتف‬
‫ومعرف البريد اإللكتروني‪ ،‬ويمكنه اختيار اسم المستخدم وكلمة المرور الخاصة به‪ .‬إذا نجح التسجيل‪ ،‬فيمكن للمستخدم تسجيل‬
‫الدخول إلى النظام‪ ،‬عن طريق اسم المستخدم وكلمة المرور التي يختارها‪.‬‬
‫بحث القطار‬
‫بعد تسجيل الدخول بنجاح إلى النظام‪ ،‬يمكن للركاب البحث عن القطارات المتاحة حسب متطلباتهم‪ .‬قد تكون متطلبات‬
‫المغادرة والوجهة وتاريخ الرحلة‪ .‬يتم عرض قائمة القطارات المتاحة للمستخدم‪ .‬ثم يمكن للمستخدم اختيار أي قطار وإجراء‬
‫حجز التذاكر‪ .‬إذا لم يكن هناك قطار متاح‪ ،‬فيمكن للمستخدم تغيير تاريخ الرحلة أو المغادرة أو الوجهة‪.‬‬
‫وحدة حجز التذاكر‬
‫إذا كان تاريخ الرحلة والوجهة والمغادرة متطابًقا مع قطار‪ ،‬فيمكن للراكب اختيار القطار المعين‪ ،‬وبعد تحديد القطار‬
‫المعين‪ ،‬سيحصل المستخدم على تفاصيل القطارات وتوافر المقاعد في كل درجة‪ ،‬وستكون الفئات هي مكيف الهواء‪ ،‬ومقعد‬
‫النوم‪ ،‬ومقاعد فصل‪ .‬يمكن للمستخدم اختيار أي فئة‪ ،‬وإدخال عدد المقاعد المراد حجزها‪ ،‬إذا اختار المستخدم مقاعد غير متاحة‪،‬‬
‫فسيطالبه بإعطاء مقعد محدد أقل من أو يساوي المقاعد المتاحة‪ .‬بعد اختيار ال‪ .‬بالنسبة للمقاعد‪ ،‬يمكن للمستخدم الدفع‪ ،‬وعندما‬
‫يكون مستعًدا للدفع‪ ،‬سيتم عرض تفاصيل الحجز للمستخدم مثل الدرجة وعدد المقاعد والمبلغ اإلجمالي‪ .‬وبعد ذلك يجوز‬
‫للمستخدم تأكيد الدفع أو إلغائه‪ .‬إذا أكد الدفع‪ ،‬فسيتم حجز التذكرة فقط لذلك الراكب‪ ،‬وإال ستكون مفتوحة للجميع‪.‬‬
‫تتبع القطار‬
‫لدى الراكب خيارات لتتبع القطارات في الوقت الحقيقي‪ .‬سيظهر الموقع الفعلي للقطارات في الخريطة مع المكان الذي‬
‫يسافر فيه القطار حالًيا‪ .‬يمكن للركاب اختيار قطار معين‪ ،‬ثم يتم عرض تفاصيل القطار مثل المحطة السابقة والثابتة التالية‬
‫وتاريخ بدء القطار والوقت المتوقع للوصول إلى المحطة التالية للمستخدم‪ .‬يظهر المسار الذي يغطيه القطار كخط أصفر‪،‬‬
‫وسيظهر المسار الذي سيتم تغطيته كخط أصفر منقط‪ .‬سيتم عرض القطارات التي تعمل حالًيا في موعدها باللون األزرق‪،‬‬
‫وسيتم عرض القطارات المتأخرة حالًيا باللون األحمر‪.‬‬

‫تصميم النظام‪:‬‬

‫بنية النظام‪:‬‬

‫نحن نؤمن إيماًنا راسًخ ا ب أن الم زيج الص حيح من أح دث تقني ات المعلوم ات واالتص االت يمكن أن ي وفر حًال فع اًال‬
‫وممكًنا لمتطلبات نظام تتبع القطارات الموثوق به والدقيق لتحسين كفاءة وإنتاجية السكك الحديدية الهندية‪.‬‬
‫يشمل الحل الذي نقترحه مجموعة قوية من الحوسبة المتنقلة والنظ ام الع المي لالتص االت المتنقل ة (‪)WIRELESS‬‬
‫والنظام العالمي لتحديد المواقع (‪ )GPS‬وتقنيات وبرامج نظام المعلومات الجغرافية (‪ )GIS‬لتوف ير نظ ام ذكي لتتب ع القط ارات‬
‫وإدارتها لتحسين النظام الحالي‪ .‬خدمة النقل بالسكك الحديدية‪ .‬يتم دمج كل هذه التقنيات بسالسة لبناء بنية قوية وقابلة للتطوير‪.‬‬
‫مخططات ‪:UML‬‬

‫‪ UML‬لتقف على لغة النمذجة الموحدة‪ UML .‬هي لغة نمذجة موحدة لألغراض العامة في مجال هندسة البرمجيات الموجهة‬
‫للكائنات‪ .‬تتم إدارة المعيار وتم إنشاؤه بواسطة مجموعة إدارة الكائنات‪.‬‬
‫الهدف هو أن تصبح ‪ UML‬لغة مشتركة إلنشاء نماذج لبرامج الكمبيوتر الموجهة للكائن ات‪ .‬في ش كله الح الي يتك ون‬
‫‪ UML‬من عنصرين رئيس يين‪ :‬النم وذج التع ريفي والت دوين‪ .‬في المس تقبل‪ ،‬يمكن أيًض ا إض افة ش كل من أش كال الطريقة أو‬
‫العملية؛ أو المرتبطة بـ ‪.UML‬‬
‫لغة النمذجة الموحدة هي لغة قياسية لتحديد وتصور وبناء وتوثيق عناصر النظام البرمجي‪ ،‬وك ذلك لنمذج ة األعم ال واألنظم ة‬
‫األخرى غير البرمجية‪.‬‬
‫يمثل ‪ UML‬مجموعة من أفضل الممارسات الهندسية التي أثبتت نجاحها في نمذجة األنظمة الكبيرة والمعقدة‪.‬‬
‫يعد ‪ UML‬جزًء ا مهًم ا جًدا من تطوير البرامج الموجهة للكائنات وعملية تطوير البرامج‪ .‬يس تخدم ‪ UML‬في الغ الب‬
‫تدوينات رسومية للتعبير عن تصميم مشاريع البرمجيات‪.‬‬

‫األهداف‪:‬‬
‫األهداف األساسية في تصميم ‪ UML‬هي كما يلي‪:‬‬
‫تزويد المستخدمين بلغة نمذجة مرئية معبرة وجاهزة لالستخدام حتى يتمكنوا من تطوير وتبادل نماذج ذات معنى‪.‬‬ ‫‪.1‬‬
‫توفير آليات التوسع والتخصص لتوسيع المفاهيم األساسية‪.‬‬ ‫‪.2‬‬
‫كن مستقًال عن لغات البرمجة المحددة وعملية التطوير‪.‬‬ ‫‪.3‬‬
‫توفير أساس رسمي لفهم لغة النمذجة‪.‬‬ ‫‪.4‬‬
‫تشجيع نمو سوق أدوات ‪.OO‬‬ ‫‪.5‬‬
‫دعم مفاهيم التطوير ذات المستوى األعلى مثل التعاون واألطر واألنماط والمكونات‪.‬‬ ‫‪.6‬‬
‫دمج أفضل الممارسات‪.‬‬ ‫‪.7‬‬

‫استخدم الرسم البياني‪:‬‬

‫مخطط حالة االس تخدام ه و رس م بي اني للجه ات الفاعل ة‪ ،‬ومجموع ة من ح االت االس تخدام محاط ة بح دود النظ ام‪،‬‬
‫وارتباطات االتصال (المشاركة) بين الجهات الفاعلة والمستخدمين والتعميم بين حاالت االستخدام‪ .‬يحدد نموذج حالة االس تخدام‬
‫المظهر الخارجي (الجهات الفاعلة) والداخل (حالة االستخدام) لسلوك النظام‪.‬‬

‫الرسم البياني التالي يصور مخطط حالة االستخدام للنظام المقترح‪ .‬تمثل حالة االستخدام "التحقق من أنماط التصنيف"‬
‫أنه يمكن للمستخدم الحصول على قواعد أو أنماط تصنيف من مجموعة البيانات األصلية‪ .‬تعمل حالة االستخدام هذه على توسيع‬
‫نطاق حساب كسب المعلومات‪ ،‬ألننا نقوم بالتقسيم بين ‪ Tupelos‬بناًء على كس ب المعلوم ات المحس وب لك ل س مة‪ .‬يتم تحدي د‬
‫السمة التي تتمتع بأقصى قدر من الحصول على المعلومات كمعيار للتقسيم‪.‬‬

‫تمثل حالة االستخدام "التحقق من الحفاظ على الخصوصية" أنه يمكن للمس تخدم التحقق من مس توى الخصوص ية في‬
‫مجموعة البيانات‪ .‬تعمل حالة االستخدام هذه على توسيع نطاق تعميم البيانات حيث يرتبط مستوى الخصوصية ارتباًط ا مباش ًرا‬
‫بمستوى التعميم‪.‬‬

‫حالة االستخدام‪:‬‬

‫تسلسل‪:‬‬
‫الطوارئ‪:‬‬

‫نشاط‪:‬‬
‫دفد‪:‬‬
‫تصميم المدخالت‪:‬‬

‫تصميم المدخالت هو حلقة الوص ل بين نظ ام المعلوم ات والمس تخدم‪ .‬وهي تش تمل على المواص فات واإلج راءات المتط ورة‬
‫إلعداد البيانات وهذه الخطوات ضرورية لوضع بيانات المعامالت في نموذج قابل لالس تخدام للمعالج ة ويمكن تحقي ق ذل ك عن‬
‫طريق فحص الكمبيوتر لقراءة البيانات من مستند مكتوب أو مطبوع أو يمكن أن يحدث ذلك عن طريق قيام األشخاص بالمفت اح‬
‫البيانات مباشرة إلى النظام‪ .‬يركز تصميم الم دخالت على التحكم في كمي ة الم دخالت المطلوب ة‪ ،‬والتحكم في األخط اء‪ ،‬وتجنب‬
‫التأخير‪ ،‬وتجنب الخطوات اإلضافية‪ ،‬والحفاظ على بساطة العملية‪ .‬تم تصميم اإلدخال بطريقة ت وفر األم ان وس هولة االس تخدام‬
‫مع الحفاظ على الخصوصية‪ .‬يأخذ تصميم اإلدخال في االعتبار األمور التالية‪:‬‬

‫ما هي البيانات التي ينبغي تقديمها كمدخالت؟‬ ‫‪‬‬


‫كيف ينبغي ترتيب البيانات أو ترميزها؟‬ ‫‪‬‬
‫مربع الحوار لتوجيه موظفي التشغيل في تقديم المدخالت‪.‬‬ ‫‪‬‬
‫طرق إعداد عمليات التحقق من صحة اإلدخال والخطوات التي يجب اتباعها عند حدوث خطأ‪.‬‬ ‫‪‬‬

‫أهداف‪:‬‬

‫‪ .1‬تصميم اإلدخال هو عملية تحويل الوصف الموجه للمستخدم للمدخالت إلى نظام قائم على الكمبيوتر‪ .‬يع د ه ذا التص ميم مهًم ا‬
‫لتجنب األخطاء في عملي ة إدخ ال البيان ات وإظه ار االتج اه الص حيح لإلدارة للحص ول على المعلوم ات الص حيحة من النظ ام‬
‫المحوسب‪.‬‬
‫‪ .2‬ويتم تحقيق ذلك من خالل إنشاء شاشات سهلة االستخدام إلدخ ال البيان ات للتعام ل م ع حجم كب ير من البيان ات‪ .‬اله دف من‬
‫تصميم المدخالت هو تسهيل عملية إدخال البيان ات و خلوه ا من األخط اء‪ .‬تم تص ميم شاش ة إدخ ال البيان ات بحيث يمكن تنفي ذ‬
‫جميع عمليات معالجة البيانات‪ .‬كما يوفر مرافق عرض السجالت‪.‬‬

‫‪ .3‬عند إدخال البيانات سيتم التأكد من صحتها‪ .‬يمكن إدخال البيانات بمساعدة الشاشات‪ .‬يتم توفير الرسائل المناس بة عن د الحاج ة‬
‫لذلك حتى ال يكون المستخدم في حالة من الذعر الفوري‪ .‬وبالتالي فإن الهدف من تصميم اإلدخال هو إنشاء تخطيط إدخال يسهل‬
‫متابعته‬

‫تصميم المخرجات‪:‬‬

‫المخرجات عالية الجودة هي التي تلبي متطلبات المستخدم النه ائي وتقدم المعلوم ات بوض وح‪ .‬في أي نظ ام‪ ،‬يتم إرس ال نت ائج‬
‫المعالجة إلى المستخدمين وإلى النظ ام اآلخ ر من خالل المخرج ات‪ .‬في تص ميم المخرج ات‪ ،‬يتم تحدي د كيفي ة نقل المعلوم ات‬
‫للحاج ة الفوري ة وك ذلك مخرج ات النس خة المطبوع ة‪ .‬وهي أهم المعلوم ات المص درية والمباش رة للمس تخدم‪ .‬يعم ل تص ميم‬
‫المخرجات الفعال والذكي على تحسين عالقة النظام لمساعدة المستخدم على اتخاذ القرار‪.‬‬

‫‪.1‬يجب أن يتم تصميم مخرجات الكمبيوتر بطريقة منظمة ومدروس ة جي ًدا؛ يجب تط وير المخرج ات الص حيحة م ع التأك د من‬
‫تصميم كل عنصر مخرجات بحيث يجد األشخاص أن النظام يمكن استخدامه بسهولة وفعالية‪ .‬عند تحلي ل مخرج ات الكم بيوتر‪،‬‬
‫يجب عليهم تحديد المخرجات المحددة المطلوبة لتلبية المتطلبات‪.‬‬

‫‪.2‬حدد طرق تقديم المعلومات‪.‬‬

‫‪.3‬قم بإنشاء مستند أو تقرير أو تنسيقات أخرى تحتوي على معلومات ينتجها النظام‪.‬‬

‫يجب أن يحقق نموذج اإلخراج لنظام المعلومات واحًدا أو أكثر من األهداف التالية‪.‬‬

‫نقل معلومات حول األنشطة السابقة أو الوضع الحالي أو توقعات الشركة‬ ‫‪‬‬
‫مستقبل‪.‬‬ ‫‪‬‬
‫قم باإلشارة إلى األحداث أو الفرص أو المشكالت أو التحذيرات المهمة‪.‬‬ ‫‪‬‬
‫قم بتشغيل اإلجراء‪.‬‬ ‫‪‬‬
‫تأكيد اإلجراء‪.‬‬ ‫‪‬‬
‫بيئات النظام‬

‫ذكري المظهر‪:‬‬

‫يوفر ‪ Android‬إطار عمل تطبيقًيا غنًيا يسمح لك بإنشاء تطبيقات وألعاب مبتكرة لألجهزة المحمولة في بيئة لغة‬
‫‪ .Java‬توفر المستندات المدرجة في شريط التنقل األيمن تفاصيل حول كيفية إنشاء التطبيقات باستخدام واجهات برمجة‬
‫التطبيقات المتنوعة لنظام ‪ .Android‬إذا كنت جديًدا في مجال تطوير ‪ ،Android‬فمن المهم أن تفهم المفاهيم األساسية التالية‬
‫حول إطار عمل تطبيقات ‪:Android‬توفر التطبيقات نقاط دخول متعددة‪ .‬يتم إنشاء تطبيقات ‪ Android‬كمجموعة من‬
‫المكونات المتميزة التي يمكن استدعاؤها بشكل فردي‪ .‬على سبيل المثال‪ ،‬يوفر النشاط الفردي شاشة واحدة لواجهة المستخدم‪،‬‬
‫وتؤدي الخدمة العمل بشكل مستقل في الخلفية‪ .‬من أحد المكونات يمكنك بدء مكون آخر باستخدام النية‪ .‬يمكنك أيًضا بدء مكون‬
‫في تطبيق مختلف‪ ،‬مثل نشاط في تطبيق خرائط إلظهار عنوان‪ .‬يوفر هذا النموذج نقاط دخول متعددة لتطبيق واحد ويسمح ألي‬
‫تطبيق بالتصرف كتطبيق "افتراضي" للمستخدم إلجراء قد تستدعيه التطبيقات األخرى‪.‬‬

‫تتكيف التطبيقات مع األجهزة المختلفة‬

‫يوفر ‪ Android‬إطار عمل تطبيًقا قابًال للتكيف يسمح لك بتوفير موارد فريدة لتكوينات األجهزة المختلفة‪ .‬على سبيل‬
‫المثال‪ ،‬يمكنك إنشاء ملفات تخطيط ‪ XML‬مختلفة ألحجام شاشات مختلفة ويحدد النظام التخطيط الذي سيتم تطبيقه بناًء على‬
‫حجم شاشة الجهاز الحالي‪ .‬يمكنك االستعالم عن مدى توفر ميزات الجهاز في وقت التشغيل إذا كانت أي ميزات تطبيق تتطلب‬
‫أجهزة معينة مثل الكاميرا‪ .‬إذا لزم األمر‪ ،‬يمكنك أيًض ا اإلعالن عن الميزات التي يتطلبها تطبيقك حتى ال تسمح أسواق‬
‫التطبيقات مثل متجر ‪ Google Play‬بالتثبيت على األجهزة التي ال تدعم هذه الميزة‪.‬‬

‫أساسيات التطبيق‬

‫تتم كتابة تطبيقات ‪ Android‬بلغة برمجة ‪ .Java‬تقوم أدوات ‪ Android SDK‬بتجميع التعليمات البرمجية الخاصة بك ‪ -‬جنًبا‬
‫إلى جنب مع أي ملفات بيانات وموارد ‪ -‬في ملف ‪ :APK‬حزمة ‪ ،Android‬وهي عبارة عن ملف أرشيف به ملف‪apk.‬‬
‫الحقة‪ .‬يحتوي ملف ‪ APK‬واحد على جميع محتويات تطبيق ‪ Android‬وهو الملف الذي تستخدمه األجهزة التي تعمل بنظام‬
‫‪ Android‬لتثبيت التطبيق‪ .‬بمجرد تثبيته على الجهاز‪ ،‬يعيش كل تطبيق ‪ Android‬في وضع حماية األمان الخاص به‪ :‬نظام‬
‫التشغيل ‪ Android‬هو نظام ‪ Linux‬متعدد المستخدمين حيث يكون كل تطبيق مستخدًم ا مختلًفا‪ .‬افتراضًيا‪ ،‬يقوم النظام بتعيين‬
‫معرف مستخدم ‪ Linux‬فريد لكل تطبيق (يتم استخدام المعرف فقط بواسطة النظام وهو غير معروف للتطبيق)‪ .‬يقوم النظام‬
‫بتعيين األذونات لجميع الملفات الموجودة في التطبيق بحيث ال يتمكن سوى معرف المستخدم المعين لهذا التطبيق من الوصول‬
‫إليها‪ .‬تحتوي كل عملية على جهاز ظاهري خاص بها (‪ ،)VM‬لذلك يتم تشغيل التعليمات البرمجية للتطبيق بمعزل عن‬
‫التطبيقات األخرى‪ .‬افتراضًيا‪ ،‬يعمل كل تطبيق بعملية ‪ Linux‬الخاصة به‪ .‬يبدأ ‪ Android‬العملية عندما يلزم تنفيذ أي من‬
‫مكونات التطبيق‪ ،‬ثم يقوم بإيقاف العملية عندما ال تكون هناك حاجة إليها أو عندما يتعين على النظام استعادة الذاكرة لتطبيقات‬
‫أخرى‪.‬‬

‫مكونات التطبيق‬

‫مكونات التطبيق هي اللبنات األساسية لتطبيق ‪ .Android‬يمثل كل مكون نقطة مختلفة يمكن للنظام من خاللها الدخول إلى‬
‫تطبيقك‪ .‬ال تمثل جميع المكونات نقاط دخول فعلية للمستخدم ويعتمد بعضها على بعضها البعض‪ ،‬ولكن كل منها موجود ككيان‬
‫خاص به ويلعب دوًرا محدًدا — كل عنصر عبارة عن كتلة بناء فريدة تساعد في تحديد السلوك العام لتطبيقك‪ .‬هناك أربعة‬
‫أنواع مختلفة من مكونات التطبيق‪ .‬يخدم كل نوع غرًضا مميًز ا وله دورة حياة مميزة تحدد كيفية إنشاء المكون وتدميره‪ .‬فيما‬
‫يلي األنواع األربعة لمكونات التطبيق‪:‬‬

‫أنشطة‬

‫يمثل النشاط شاشة واحدة بها واجهة مستخدم‪ .‬على سبيل المثال‪ ،‬قد يشتمل تطبيق البريد اإللكتروني على نشاط واحد يعرض‬
‫قائمة برسائل البريد اإللكتروني الجديدة‪ ،‬ونشاًطا آخر إلنشاء بريد إلكتروني‪ ،‬ونشاًطا آخر لقراءة رسائل البريد اإللكتروني‪.‬‬
‫على الرغم من أن األنشطة تعمل مًعا لتكوين تجربة مستخدم متماسكة في تطبيق البريد اإللكتروني‪ ،‬إال أن كل نشاط منها مستقل‬
‫عن اآلخر‪ .‬على هذا النحو‪ ،‬يمكن لتطبيق مختلف بدء أي من هذه األنشطة (إذا كان تطبيق البريد اإللكتروني يسمح بذلك)‪ .‬على‬
‫سبيل المثال‪ ،‬يمكن لتطبيق الكاميرا بدء النشاط في تطبيق البريد اإللكتروني الذي يقوم بإنشاء بريد جديد‪ ،‬حتى يتمكن المستخدم‬
‫من مشاركة صورة‪ .‬يتم تنفيذ النشاط كفئة فرعية مننشاطويمكنك معرفة المزيد عنها في دليل مطور األنشطة‪.‬‬

‫خدمات‬

‫الخدمة عبارة عن مكون يتم تشغيله في الخلفية لتنفيذ عمليات طويلة األمد أو ألداء عمل للعمليات البعيدة‪ .‬ال توفر الخدمة واجهة‬
‫مستخدم‪ .‬على سبيل المثال‪ ،‬قد تقوم إحدى الخدمات بتشغيل الموسيقى في الخلفية أثناء وجود المستخدم في تطبيق مختلف‪ ،‬أو قد‬
‫تجلب البيانات عبر الشبكة دون حظر تفاعل المستخدم مع أحد األنشطة‪ .‬يمكن لمكون آخر‪ ،‬مثل النشاط‪ ،‬بدء تشغيل الخدمة‬
‫والسماح لها بتشغيلها أو االرتباط بها من أجل التفاعل معها‪ .‬يتم تنفيذ الخدمة كفئة فرعية من الخدمة ويمكنك معرفة المزيد عنها‬
‫في دليل مطور الخدمات‪.‬‬

‫موفري المحتوى‬

‫يدير موفر المحتوى مجموعة مشتركة من بيانات التطبيق‪ .‬يمكنك تخزين البيانات في نظام الملفات‪ ،‬أو قاعدة بيانات ‪،SQLite‬‬
‫أو على الويب‪ ،‬أو أي موقع تخزين ثابت آخر يمكن لتطبيقك الوصول إليه‪ .‬ومن خالل موفر المحتوى‪ ،‬يمكن للتطبيقات األخرى‬
‫االستعالم عن البيانات أو حتى تعديلها (إذا سمح موفر المحتوى بذلك)‪ .‬على سبيل المثال‪ ،‬يوفر نظام ‪ Android‬مزود محتوى‬
‫يدير معلومات االتصال الخاصة بالمستخدم‪ .‬على هذا النحو‪ ،‬يمكن ألي تطبيق لديه األذونات المناسبة االستعالم عن جزء من‬
‫موفر المحتوى (مثل‪ )ContactsContract.Data‬لقراءة وكتابة معلومات حول شخص معين‪ .‬يعد موفرو المحتوى مفيًدا أيًضا‬
‫في قراءة وكتابة البيانات الخاصة بتطبيقك وغير المشتركة‪ .‬على سبيل المثال‪ ،‬يستخدم نموذج تطبيق ‪ Note Pad‬موفر‬
‫المحتوى لحفظ المالحظات‪ .‬يتم تطبيق موفر المحتوى كفئة فرعية لموفر المحتوى ويجب تنفيذ مجموعة قياسية من واجهات‬
‫برمجة التطبيقات التي تمكن التطبيقات األخرى من إجراء المعامالت‪ .‬لمزيد من المعلومات‪ ،‬راجع دليل مطور موفري‬
‫المحتوى‪.‬‬

‫أجهزة استقبال البث‬

‫جهاز استقبال البث هو مكون يستجيب إلعالنات البث على مستوى النظام‪ .‬تنشأ العديد من عمليات البث من النظام — على‬
‫سبيل المثال‪ ،‬إعالن يعلن عن إيقاف تشغيل الشاشة أو انخفاض طاقة البطارية أو التقاط صورة‪ .‬يمكن للتطبيقات أيًضا بدء‬
‫عمليات البث‪ ،‬على سبيل المثال‪ ،‬للسماح للتطبيقات األخرى بمعرفة أن بعض البيانات قد تم تنزيلها على الجهاز وهي متاحة‬
‫لالستخدام‪ .‬على الرغم من أن أجهزة استقبال البث ال تعرض واجهة مستخدم‪ ،‬إال أنها قد تقوم بإنشاء إعالم شريط الحالة لتنبيه‬
‫المستخدم عند حدوث حدث بث‪ .‬ومع ذلك‪ ،‬فإن األمر األكثر شيوًعا هو أن جهاز استقبال البث هو مجرد "بوابة" للمكونات‬
‫األخرى ويهدف إلى القيام بقدر ضئيل جًدا من العمل‪ .‬على سبيل المثال‪ ،‬قد يبدأ خدمة لتنفيذ بعض األعمال بناًء على الحدث‪ .‬يتم‬
‫تنفيذ مستقبل البث كفئة فرعية لمستقبل البث ويتم تسليم كل بث ككائن غرض‪ .‬لمزيد من المعلومات‪ ،‬راجع فئة مستقبل البث‪.‬‬

‫جافا‬

‫لدى ‪ Oracle‬منتجان يقومان بتطبيق ‪Java Platform Standard Edition (Java SE) 7: Java SE Development‬‬
‫‪ Kit (JDK) 7‬و‪.Java SE Runtime Environment (JRE) 7‬‬

‫‪ JDK 7‬عبارة عن مجموعة شاملة من ‪ ،JRE 7‬وتحتوي على كل ما هو موجود في ‪ ،JRE 7‬باإلضافة إلى أدوات مثل‬
‫المترجمين ومصححي األخطاء الالزمة لتطوير التطبيقات الصغيرة والتطبيقات‪ .‬يوفر ‪ JRE 7‬المكتبات وجهاز ‪Java‬‬
‫الظاهري (‪ )JVM‬والمكونات األخرى لتشغيل التطبيقات الصغيرة والتطبيقات المكتوبة بلغة برمجة ‪ .Java‬الحظ أن ‪JRE‬‬
‫يتضمن مكونات غير مطلوبة بواسطة مواصفات ‪ ،Java SE‬بما في ذلك مكونات ‪ Java‬القياسية وغير القياسية‪.‬‬

‫وصف مخطط جافا المفاهيمي‬


‫ملخص‬

‫تعد القدرة على تخزين واسترجاع كائنات ‪ Java TM‬أمًرا ضرورًيا لبناء جميع التطبيقات باستثناء التطبيقات األكثر عابرة‪ .‬إن‬
‫مفتاح تخزين واسترجاع الكائنات في نموذج متسلسل هو تمثيل حالة الكائنات الكافية إلعادة بناء الكائن (الكائنات)‪ .‬قد تدعم‬
‫الكائنات التي سيتم حفظها في الدفق الواجهة القابلة للتسلسل أو الواجهة القابلة للتحويل‪ .‬بالنسبة لكائنات ‪ ،Java TM‬يجب أن‬
‫يكون النموذج المتسلسل قادًرا على التعرف والتحقق من فئة ‪ Java TM‬التي تم حفظ محتويات الكائن منها واستعادة المحتويات‬
‫إلى مثيل جديد‪ .‬بالنسبة للكائنات القابلة للتسلسل‪ ،‬يتضمن الدفق معلومات كافية الستعادة الحقول الموجودة في الدفق إلى إصدار‬
‫متوافق من الفئة‪ .‬بالنسبة للكائنات القابلة للتحويل إلى الخارج‪ ،‬يكون الفصل هو المسؤول الوحيد عن التنسيق الخارجي‬
‫لمحتوياته‪.‬‬

‫تشير الكائنات التي سيتم تخزينها واسترجاعها بشكل متكرر إلى كائنات أخرى‪ .‬ويجب تخزين تلك الكائنات األخرى‬
‫واسترجاعها في نفس الوقت للحفاظ على العالقات بين الكائنات‪ .‬عندما يتم تخزين كائن ما‪ ،‬يتم أيًض ا تخزين كافة الكائنات التي‬
‫يمكن الوصول إليها من هذا الكائن‪.‬‬

‫أهداف تسلسل كائنات ‪ Java TM‬هي‪:‬‬

‫لديك آلية بسيطة ولكنها قابلة للتوسيع‪.‬‬


‫حافظ على نوع كائن ‪ Java TM‬وخصائص األمان في النموذج المتسلسل‪.‬‬

‫تكون قابلة للتوسيع لدعم التنظيم وإلغاء التنظيم حسب الحاجة للكائنات البعيدة‪.‬‬

‫تكون قابلة للتوسيع لدعم الثبات البسيط لكائنات ‪.Java TM‬‬

‫تتطلب التنفيذ لكل فئة فقط للتخصيص‪.‬‬

‫السماح للكائن بتحديد تنسيقه الخارجي‪.‬‬

‫الكتابة إلى دفق كائن‬

‫تعد كتابة الكائنات واألوليات إلى الدفق عملية مباشرة‪ .‬على سبيل المثال‪:‬‬

‫أوًال‪ ،‬يلزم وجود ‪ ،OutputStream‬في هذه الحالة ‪ ،FileOutputStream‬لتلقي البايتات‪ .‬ثم يتم إنشاء‬
‫‪ ObjectOutputStream‬الذي يكتب إلى ‪ .FileOutputStream‬بعد ذلك‪ ،‬تتم كتابة السلسلة "‪ "Today‬وكائن التاريخ إلى‬
‫الدفق‪ .‬وبشكل أكثر عمومية‪ ،‬تتم كتابة الكائنات باستخدام طريقة ‪ writeObject‬ويتم كتابة العناصر األولية إلى المجرى‬
‫باستخدام طرق ‪.DataOutput‬‬

‫تقوم طريقة كتابة الكائن (راجع القسم ‪" ،2.3‬طريقة كتابة الكائن") بتسلسل الكائن المحدد واجتياز مراجعه إلى كائنات أخرى‬
‫في الرسم البياني للكائن بشكل متكرر إلنشاء تمثيل متسلسل كامل للرسم البياني‪ .‬ضمن الدفق‪ ،‬يؤدي المرجع األول ألي كائن‬
‫إلى إجراء تسلسل للكائن أو إضفاء الطابع الخارجي عليه وتعيين مقبض لهذا الكائن‪ .‬يتم ترميز المراجع الالحقة لهذا الكائن‬
‫كمقبض‪ .‬يؤدي استخدام مقابض الكائنات إلى الحفاظ على المراجع المشتركة والدائرية التي تحدث بشكل طبيعي في الرسوم‬
‫البيانية للكائنات‪ .‬تستخدم المراجع الالحقة لكائن ما المقبض فقط مما يسمح بتمثيل مضغوط للغاية‪.‬‬

‫مطلوب معالجة خاصة للمصفوفات وثوابت التعداد والكائنات من النوع ‪ Class‬و‪ ObjectStreamClass‬و‪ .String‬يجب أن‬
‫تقوم الكائنات األخرى بتنفيذ الواجهة القابلة للتسلسل أو الواجهة القابلة للتحويل ليتم حفظها أو استعادتها من الدفق‪.‬‬

‫تتم كتابة أنواع البيانات األولية إلى الدفق باستخدام األساليب الموجودة في واجهة ‪ ،DataOutput‬مثل ‪ writeInt‬أو‬
‫‪ writeFloat‬أو ‪ .writeUTF‬تتم كتابة البايتات الفردية ومصفوفات البايتات باستخدام طرق ‪ .OutputStream‬باستثناء‬
‫الحقول القابلة للتسلسل‪ ،‬تتم كتابة البيانات األولية إلى الدفق في سجالت بيانات الكتلة‪ ،‬مع بداية كل سجل بعالمة وإشارة إلى‬
‫عدد البايتات في السجل‪.‬‬

‫يمكن توسيع ‪ ObjectOutputStream‬لتخصيص المعلومات حول الفئات في الدفق أو الستبدال الكائنات التي سيتم تسلسلها‪.‬‬
‫ارجع إلى وصف طريقة ‪ annotateClass‬و‪ replaceObject‬للحصول على التفاصيل‪.‬‬
‫القراءة من دفق كائن‬

‫أوًال‪ ،‬هناك حاجة إلى ‪ ،InputStream‬في هذه الحالة ‪ ،FileInputStream‬باعتباره الدفق المصدر‪ .‬ثم يتم إنشاء‬
‫‪ ObjectInputStream‬الذي يقرأ من ‪ .InputStream‬بعد ذلك‪ ،‬تتم قراءة السلسلة "‪ "Today‬وكائن التاريخ من الدفق‪.‬‬
‫بشكل عام‪ ،‬تتم قراءة الكائنات باستخدام طريقة ‪ readObject‬وتتم قراءة العناصر األولية من المجرى باستخدام طرق‬
‫‪.DataInput‬‬

‫تقوم طريقة قراءة الكائن بإلغاء تسلسل الكائن التالي في الدفق واجتياز مراجعه إلى كائنات أخرى بشكل متكرر إلنشاء رسم‬
‫بياني كامل للكائنات المتسلسلة‪.‬‬

‫تتم قراءة أنواع البيانات األولية من الدفق باستخدام الطرق الموجودة في واجهة ‪ ،DataInput‬مثل ‪ readInt‬أو ‪ readFloat‬أو‬
‫‪ .readUTF‬تتم قراءة البايتات الفردية ومصفوفات البايتات باستخدام أساليب ‪ .InputStream‬باستثناء الحقول القابلة للتسلسل‪،‬‬
‫تتم قراءة البيانات األولية من سجالت البيانات المجمعة‪.‬‬

‫يمكن توسيع ‪ ObjectInputStream‬الستخدام المعلومات المخصصة في الدفق حول الفئات أو الستبدال الكائنات التي تم إلغاء‬
‫تسلسلها‪ .‬راجع أوصاف أسلوب ‪ ResolveClass‬و‪ resolveObject‬للحصول على التفاصيل‪.‬‬

‫تدفقات الكائنات كحاويات‬

‫ينتج عن تسلسل الكائنات ويستهلك دفًقا من البايتات التي تحتوي على واحد أو أكثر من العناصر األولية والكائنات‪ .‬الكائنات‬
‫المكتوبة في الدفق‪ ،‬بدورها‪ ،‬تشير إلى كائنات أخرى‪ ،‬والتي يتم تمثيلها أيًض ا في الدفق‪ .‬ينتج عن تسلسل الكائنات تنسيق دفق‬
‫واحد فقط يقوم بتشفير الكائنات المضمنة وتخزينها‪.‬‬

‫يقوم كل كائن يعمل كحاوية بتنفيذ واجهة تسمح بتخزين العناصر األولية والكائنات فيها أو استرجاعها منها‪ .‬هذه الواجهات هي‬
‫واجهات ‪ ObjectOutput‬و‪ ObjectInput‬التي‪:‬‬

‫توفير دفق للكتابة والقراءة منه‬

‫التعامل مع طلبات كتابة األنواع والكائنات البدائية إلى الدفق‬

‫التعامل مع طلبات قراءة األنواع والكائنات البدائية من الدفق‬

‫يجب أن يسمح كل كائن سيتم تخزينه في الدفق بتخزين نفسه بشكل صريح ويجب أن ينفذ البروتوكوالت الالزمة لحفظ حالته‬
‫واستعادتها‪ .‬يحدد تسلسل الكائنات اثنين من هذه البروتوكوالت‪ .‬تسمح البروتوكوالت للحاوية بأن تطلب من الكائن كتابة حالته‬
‫وقراءتها‪.‬‬
‫ليتم تخزينه في تدفق الكائنات‪ ،‬يجب أن يقوم كل كائن بتنفيذ الواجهة القابلة للتسلسل أو الواجهة القابلة للتحويل‪:‬‬

‫بالنسبة للفئة القابلة للتسلسل‪ ،‬يمكن لتسلسل الكائنات حفظ واستعادة حقول كل فئة من الكائنات تلقائًيا والتعامل تلقائًيا مع الفئات‬
‫التي تتطور عن طريق إضافة حقول أو أنواع فائقة‪ .‬يمكن للفئة القابلة للتسلسل أن تعلن عن أي من حقولها تم حفظها أو‬
‫استعادتها‪ ،‬وكتابة وقراءة القيم والكائنات االختيارية‪.‬‬

‫بالنسبة للفئة القابلة للتخصيص‪ ،‬تقوم عملية تسلسل الكائنات بتفويض الفصل للتحكم الكامل في تنسيقها الخارجي وكيفية حفظ‬
‫حالة النوع (األنواع) الفائقة واستعادتها‪.‬‬

‫تحديد الحقول القابلة للتسلسل لفئة ما‬

‫يمكن تعريف الحقول القابلة للتسلسل لفئة ما بطريقتين مختلفتين‪ .‬يتم تعريف الحقول االفتراضية القابلة للتسلسل للفئة على أنها‬
‫الحقول غير العابرة وغير الثابتة‪ .‬يمكن تجاوز هذا الحساب االفتراضي عن طريق اإلعالن عن حقل خاص في الفئة القابلة‬
‫للتسلسل‪ .serialPersistentFields ،‬يجب تهيئة هذا الحقل بمصفوفة من كائنات ‪ ObjectStreamField‬التي تسرد أسماء‬
‫وأنواع الحقول القابلة للتسلسل‪ .‬يجب أن تكون معّد الت الحقل خاصة وثابتة ونهائية‪ .‬إذا كانت قيمة الحقل فارغة أو لم تكن مثياًل‬
‫لـ ‪ ،][ObjectStreamField‬أو إذا لم يكن الحقل يحتوي على المعدالت المطلوبة‪ ،‬فسيكون السلوك كما لو لم يتم اإلعالن عن‬
‫الحقل على اإلطالق‪.‬‬

‫على سبيل المثال‪ ،‬يكرر التصريح التالي السلوك االفتراضي‪.‬‬

‫باستخدام ‪ serialPersistentFields‬لتحديد الحقول القابلة للتسلسل لفئة ما‪ ،‬لم يعد هناك قيود على أن الحقل القابل للتسلسل‬
‫يجب أن يكون حقًال ضمن التعريف الحالي للفئة القابلة للتسلسل‪ .‬يمكن لطريقتي ‪ writeObject‬و‪ readObject‬للفئة القابلة‬
‫للتسلسل تعيين التنفيذ الحالي للفئة إلى الحقول القابلة للتسلسل للفئة باستخدام الواجهة الموضحة في القسم ‪" ،1.7‬الوصول إلى‬
‫الحقول القابلة للتسلسل للفئة‪ ".‬لذلك‪ ،‬يمكن أن تتغير حقول الفئة القابلة للتسلسل في إصدار الحق‪ ،‬طالما أنها تحافظ على التعيين‬
‫مرة أخرى إلى الحقول القابلة للتسلسل والتي يجب أن تظل متوافقة عبر حدود اإلصدار‪.‬‬

‫ملحوظة ‪-‬ومع ذلك‪ ،‬هناك قيود على استخدام هذه اآللية لتحديد الحقول القابلة للتسلسل للفئات الداخلية‪ .‬يمكن أن تحتوي الفئات‬
‫الداخلية فقط على الحقول الثابتة النهائية التي تمت تهيئتها لثوابت أو تعبيرات مبنية على ثوابت‪ .‬وبالتالي‪ ،‬ليس من الممكن تعيين‬
‫‪ serialPersistentFields‬لفئة داخلية (على الرغم من أنه من الممكن تعيينها لفئات األعضاء الثابتة)‪ .‬للتعرف على القيود‬
‫األخرى المتعلقة بتسلسل مثيالت الفئة الداخلية‪ ،‬راجع القسم ‪" ،1.10‬الواجهة القابلة للتسلسل"‪.‬‬

‫توثيق الحقول والبيانات القابلة للتسلسل لفئة ما‬


‫من المهم توثيق الحالة القابلة للتسلسل للفئة لتمكين قابلية التشغيل البيني مع التطبيقات البديلة لفئة قابلة للتسلسل ولتوثيق تطور‬
‫الفئة‪ .‬يمنح توثيق الحقل القابل للتسلسل فرصة أخيرة لمراجعة ما إذا كان يجب أن يكون الحقل قابًال للتسلسل أم ال‪ .‬توفر‬
‫عالمات ‪ javadoc‬التسلسلية‪ ،serial@ ،‬و@‪ ،serialField‬و@‪ ،serialData‬طريقة لتوثيق النموذج المتسلسل لفئة قابلة‬
‫للتسلسل داخل الكود المصدري‪.‬‬

‫يجب وضع العالمة @‪ serial‬في تعليق ‪ javadoc‬للحقل االفتراضي القابل للتسلسل‪ .‬بناء الجملة كما يلي‪serial field-@ :‬‬
‫‪ description‬يصف وصف الحقل االختياري معنى الحقل وقيمه المقبولة‪ .‬يمكن أن يمتد وصف الحقل على عدة أسطر‪ .‬عند‬
‫إضافة حقل بعد اإلصدار األولي‪ ،‬تشير العالمة @‪ since‬إلى اإلصدار الذي تمت إضافة الحقل إليه‪ .‬يوفر وصف الحقل لـ @‬
‫‪ serial‬وثائق خاصة بالتسلسل ويتم إلحاقه بتعليق ‪ javadoc‬للحقل ضمن وثائق النموذج التسلسلي‪.‬‬

‫يتم استخدام العالمة @‪ serialField‬لتوثيق مكون ‪ ObjectStreamField‬من صفيف ‪ .serialPersistentFields‬يجب‬


‫استخدام إحدى هذه العالمات لكل مكون ‪ .ObjectStreamField‬بناء الجملة كما يلي‪ serialField@ :‬اسم الحقل وصف‬
‫الحقل من نوع الحقل‬

‫تصف عالمة @‪ serialData‬تسلسالت وأنواع البيانات المكتوبة أو المقروءة‪ .‬تصف العالمة تسلسل ونوع البيانات االختيارية‬
‫المكتوبة بواسطة ‪ writeObject‬أو جميع البيانات المكتوبة بواسطة الطريقة ‪ .Externalizable.writeExternal‬بناء الجملة‬
‫كما يلي‪serialData data-description@ :‬‬

‫يتعرف تطبيق ‪ javadoc‬على عالمات ‪ javadoc‬التسلسلية ويقوم بإنشاء مواصفات لكل فئة قابلة للتسلسل وقابلة للتحويل‪.‬‬
‫راجع القسم ج‪" ،1.‬مثال للتنفيذ البديل لملف ‪ "java.io.File‬للحصول على مثال يستخدم هذه العالمات‪.‬‬

‫عندما يتم اإلعالن عن فئة قابلة للتسلسل‪ ،‬يتم تحديد الحالة القابلة للتسلسل للكائن من خالل الحقول القابلة للتسلسل (حسب االسم‬
‫والنوع) باإلضافة إلى البيانات االختيارية‪ .‬ال يمكن كتابة البيانات االختيارية بشكل صريح إال من خالل طريقة ‪writeObject‬‬
‫لفئة قابلة للتسلسل‪ .‬يمكن قراءة البيانات االختيارية من خالل طريقة ‪ readObject‬الخاصة بالفئة القابلة للتسلسل وإال فإن‬
‫التسلسل سيتخطى البيانات االختيارية غير المقروءة‪.‬‬

‫عندما يتم اإلعالن عن فئة قابلة للتحويل إلى الخارج‪ ،‬فإن البيانات التي يتم كتابتها إلى الدفق بواسطة الفئة نفسها تحدد الحالة‬
‫التسلسلية‪ .‬يجب أن يحدد الفصل الترتيب واألنواع والمعنى لكل مرجع مرجعي مكتوب في الدفق‪ .‬يجب أن يتعامل الفصل مع‬
‫تطوره الخاص‪ ،‬حتى يتمكن من االستمرار في قراءة البيانات المكتوبة وكتابة البيانات التي يمكن قراءتها بواسطة اإلصدارات‬
‫السابقة‪ .‬يجب أن ينسق الفصل مع الفئة الفائقة عند حفظ البيانات واستعادتها‪ .‬يجب تحديد موقع بيانات الفئات الفائقة في الدفق‪.‬‬

‫يجب أن يتأكد مصمم الفئة القابلة للتسلسل من أن المعلومات المحفوظة للفئة مناسبة لالستمرارية وتتبع القواعد المحددة للتسلسل‬
‫لقابلية التشغيل البيني والتطور‪ .‬تم شرح تطور الفئة بمزيد من التفصيل في الفصل الخامس‪" ،‬إصدار الكائنات القابلة للتسلسل‪".‬‬
‫الوصول إلى الحقول القابلة للتسلسل للفئة‬

‫يوفر التسلسل آليتين للوصول إلى الحقول القابلة للتسلسل في الدفق‪:‬‬

‫اآللية االفتراضية ال تتطلب أي تخصيص‬

‫تسمح واجهة برمجة التطبيقات للحقول القابلة للتسلسل للفئة بالوصول بشكل صريح‪/‬تعيين الحقول القابلة للتسلسل حسب االسم‬
‫والنوع‬

‫يتم استخدام اآللية االفتراضية تلقائًيا عند قراءة أو كتابة الكائنات التي تنفذ الواجهة القابلة للتسلسل وال تقوم بأي تخصيص‬
‫إضافي‪ .‬يتم تعيين الحقول القابلة للتسلسل إلى الحقول المقابلة للفئة ويتم كتابة القيم إما إلى الدفق من تلك الحقول أو تتم قراءتها‬
‫وتعيينها على التوالي‪ .‬إذا كانت الفئة توفر أساليب ‪ writeObject‬و‪ ،readObject‬فيمكن استدعاء اآللية االفتراضية عن‬
‫طريق استدعاء ‪ defaultWriteObject‬و‪ .defaultReadObject‬عند تنفيذ طريقتي ‪ writeObject‬و‪ ،readObject‬يكون‬
‫لدى الفصل فرصة لتعديل قيم الحقول القابلة للتسلسل قبل كتابتها أو بعد قراءتها‪.‬‬

‫عندما ال يمكن استخدام اآللية االفتراضية‪ ،‬يمكن للفئة القابلة للتسلسل استخدام طريقة ‪ putFields‬الخاصة بـ‬
‫‪ ObjectOutputStream‬لوضع قيم الحقول القابلة للتسلسل في الدفق‪ .‬تضع طريقة ‪ writeFields‬الخاصة بـ‬
‫‪ ObjectOutputStream‬القيم بالترتيب الصحيح‪ ،‬ثم تكتبها في الدفق باستخدام البروتوكول الموجود للتسلسل‪ .‬في المقابل‪،‬‬
‫يقرأ أسلوب ‪ readFields‬الخاص بـ ‪ ObjectInputStream‬القيم من الدفق ويجعلها متاحة للفئة حسب االسم بأي ترتيب‪.‬‬
‫راجع القسم ‪" ،2.2‬فئة ‪ "ObjectOutputStream.PutField‬والقسم ‪" ،3.2‬فئة ‪".Object InputStream.GetField‬‬
‫للحصول على وصف تفصيلي لواجهة برمجة تطبيقات الحقول القابلة للتسلسل‪.‬‬

‫واجهة إخراج الكائن‬

‫توفر واجهة ‪ ObjectOutput‬واجهة مجردة قائمة على التدفق لتخزين الكائنات‪ .‬فهو يعمل على توسيع واجهة ‪DataOutput‬‬
‫بحيث يمكن استخدام هذه األساليب لكتابة أنواع البيانات البدائية‪ .‬يمكن استخدام الكائنات التي تنفذ هذه الواجهة لتخزين العناصر‬
‫األولية والكائنات‪.‬‬

‫يتم استخدام طريقة ‪ writeObject‬لكتابة كائن‪ .‬تعكس االستثناءات التي تم طرحها األخطاء أثناء الوصول إلى الكائن أو‬
‫حقوله‪ ،‬أو االستثناءات التي تحدث أثناء الكتابة إلى وحدة التخزين‪ .‬إذا تم طرح أي استثناء‪ ،‬فقد يكون التخزين األساسي تالًفا‪ .‬في‬
‫حالة حدوث ذلك‪ ،‬راجع الكائن الذي يقوم بتطبيق هذه الواجهة للحصول على مزيد من المعلومات‪.‬‬

‫واجهة إدخال الكائنات‬


‫توفر واجهة ‪ ObjectInput‬واجهة قائمة على التدفق المجردة السترجاع الكائنات‪ .‬فهو يعمل على توسيع واجهة ‪DataInput‬‬
‫بحيث يمكن الوصول إلى تلك الطرق لقراءة أنواع البيانات البدائية‬

‫يتم استخدام طريقة ‪ readObject‬لقراءة كائن وإعادته‪ .‬تعكس االستثناءات التي تم طرحها األخطاء أثناء الوصول إلى الكائنات‬
‫أو حقولها أو االستثناءات التي تحدث أثناء القراءة من وحدة التخزين‪ .‬إذا تم طرح أي استثناء‪ ،‬فقد يكون التخزين األساسي تالًفا‪.‬‬
‫في حالة حدوث ذلك‪ ،‬راجع الكائن الذي يقوم بتنفيذ هذه الواجهة للحصول على معلومات إضافية‪.‬‬

‫الواجهة القابلة للتسلسل‬

‫ينتج عن تسلسل الكائنات دفًقا يحتوي على معلومات حول فئات ‪ JavaTM‬للكائنات التي يتم حفظها‪ .‬بالنسبة للكائنات القابلة‬
‫للتسلسل‪ ،‬يتم االحتفاظ بمعلومات كافية الستعادة تلك الكائنات حتى في حالة وجود إصدار مختلف (لكن متوافق) من تطبيق‬
‫الفئة‪ .‬يتم تعريف الواجهة القابلة للتسلسل لتحديد الفئات التي تنفذ البروتوكول القابل للتسلسل‪:‬‬

‫يجب أن تقوم الفئة القابلة للتسلسل بما يلي‪:‬‬

‫تنفيذ واجهة ‪java.io.Serializable‬‬ ‫‪‬‬


‫تحديد الحقول التي ينبغي أن تكون قابلة للتسلسل‬ ‫‪‬‬

‫(استخدم العضو ‪ serialPersistentFields‬لإلعالن بشكل صريح عن أنها قابلة للتسلسل أو استخدم الكلمة األساسية العابرة‬
‫لإلشارة إلى الحقول غير القابلة للتسلسل‪).‬‬

‫تمتع بإمكانية الوصول إلى ُم نشئ ‪ no-arg‬ألول فئة فائقة غير قابلة للتسلسل‬ ‫‪‬‬

‫يمكن للفئة تحديد الطرق التالية اختيارًيا‪:‬‬

‫طريقة ‪ writeObject‬للتحكم في المعلومات التي يتم حفظها أو إللحاق معلومات إضافية بالتدفق‬ ‫‪‬‬
‫طريقة ‪ readObject‬إما لقراءة المعلومات المكتوبة بواسطة طريقة ‪ writeObject‬المقابلة أو لتحديث حالة الكائن‬ ‫‪‬‬
‫بعد استعادته‬
‫طريقة ‪ writeReplace‬تسمح للفئة بترشيح كائن بديل ليتم كتابته في الدفق‬ ‫‪‬‬
‫طريقة ‪ readResolve‬تسمح للفئة بتعيين كائن بديل للكائن الذي تمت قراءته للتو من الدفق‬ ‫‪‬‬

‫يسمح ‪ ObjectOutputStream‬و‪ ObjectInputStream‬للفئات القابلة للتسلسل التي تعمل عليها بالتطور (السماح بإجراء‬
‫تغييرات على الفئات المتوافقة مع اإلصدارات السابقة من الفئات)‪ .‬راجع القسم ‪" ،5.5‬تطور نوع ‪ JavaTM‬المتوافق"‬
‫للحصول على معلومات حول اآللية المستخدمة للسماح بإجراء تغييرات متوافقة‪.‬‬
‫ملحوظة ‪-‬ال ُينصح بشدة بإجراء تسلسل للفئات الداخلية (أي الفئات المتداخلة التي ليست فئات أعضاء ثابتة)‪ ،‬بما في ذلك الفئات‬
‫المحلية والمجهولة‪ ،‬وذلك لعدة أسباب‪ .‬نظًر ا ألن الفئات الداخلية المعلنة في سياقات غير ثابتة تحتوي على مراجع ضمنية غير‬
‫عابرة لمثيالت الفئة المتضمنة‪ ،‬فإن إجراء تسلسل لمثيل الفئة الداخلية سيؤدي إلى تسلسل مثيل الطبقة الخارجية المرتبطة به‬
‫أيًضا‪ .‬الحقول االصطناعية التي تم إنشاؤها بواسطة ‪( javac‬أو برامج التحويل البرمجي ‪ JavaTM‬األخرى) لتنفيذ الفئات‬
‫الداخلية تعتمد على التنفيذ وقد تختلف بين المترجمين؛ يمكن أن تؤدي االختالفات في مثل هذه الحقول إلى تعطيل التوافق وكذلك‬
‫تؤدي إلى تعارض قيم ‪ serialVersionUID‬االفتراضية‪ .‬األسماء المخصصة للفئات الداخلية المحلية والمجهولة تعتمد أيًضا‬
‫على التنفيذ وقد تختلف بين المترجمين‪ .‬نظًر ا ألن الفئات الداخلية ال يمكنها اإلعالن عن أعضاء ثابتين بخالف الحقول الثابتة في‬
‫وقت الترجمة‪ ،‬فال يمكنها استخدام آلية ‪ serialPersistentFields‬لتعيين الحقول القابلة للتسلسل‪ .‬أخيًرا‪ ،‬نظًرا ألن الفئات‬
‫الداخلية المرتبطة بالمثيالت الخارجية ال تحتوي على ُم نشئات ذات وسيطات صفرية (يقبل ُم نشئو هذه الفئات الداخلية ضمنًيا‬
‫المثيل المتضمن كمعلمة ُم لحقة مسبًقا)‪ ،‬فال يمكنهم تنفيذ ‪ .Externalizable‬ومع ذلك‪ ،‬ال تنطبق أي من المشكالت المذكورة‬
‫أعاله على فئات األعضاء الثابتة‪.‬‬

‫الواجهة القابلة للخارج‬

‫بالنسبة للكائنات القابلة للتخصيص‪ ،‬يتم حفظ هوية فئة الكائن فقط بواسطة الحاوية؛ يجب على الفصل حفظ واستعادة المحتويات‪.‬‬
‫يتم تعريف واجهة ‪ Externalizable‬على النحو التالي‪:‬‬

‫يجب أن تقوم فئة الكائن القابل للتحويل بما يلي‪:‬‬ ‫‪‬‬


‫تنفيذ واجهة ‪java.io.Externalizable‬‬ ‫‪‬‬
‫قم بتطبيق طريقة ‪ writeExternal‬لحفظ حالة الكائن‬ ‫‪‬‬
‫(يجب أن تنسق بشكل صريح مع نوعها الفائق لحفظ حالتها‪).‬‬ ‫‪‬‬
‫تنفيذ طريقة ‪ readExternal‬لقراءة البيانات المكتوبة بواسطة طريقة ‪ writeExternal‬من الدفق واستعادة حالة‬ ‫‪‬‬
‫الكائن‬
‫(يجب أن ينسق بشكل صريح مع النوع الفائق لحفظ حالته‪).‬‬ ‫‪‬‬

‫يكون التابعان ‪ writeExternal‬و‪ readExternal‬هما المسؤوالن الوحيدان عن التنسيق‪ ،‬في حالة كتابة تنسيق محدد خارجًيا‬

‫ملحوظة ‪-‬تعتبر أساليب ‪ writeExternal‬و‪ readExternal‬عامة وتزيد من خطر قدرة العميل على كتابة أو قراءة المعلومات‬
‫في الكائن بخالف استخدام األساليب والحقول الخاصة به‪ .‬يجب استخدام هذه األساليب فقط عندما تكون المعلومات التي يحتفظ‬
‫بها الكائن غير حساسة أو عندما ال يشكل الكشف عنها خطًرا أمنًيا‪.‬‬

‫لديك ُم نشئ عام بدون وسيطة‬


‫ملحوظة ‪-‬ال يمكن أن تحتوي الفئات الداخلية المرتبطة بالمثيالت المتضمنة على ُم نشئات بدون وسيطات‪ ،‬نظًرا ألن ُم نشئي هذه‬
‫الفئات يقبلون ضمنًيا المثيل المتضمن كمعلمة ُم سبقة‪ .‬وبالتالي‪ ،‬ال يمكن استخدام آلية الواجهة القابلة للتحويل للفئات الداخلية‬
‫ويجب عليها تنفيذ الواجهة القابلة للتسلسل‪ ،‬إذا كان يجب إجراء تسلسل لها‪ .‬توجد العديد من القيود على الفئات الداخلية القابلة‬
‫للتسلسل أيًضا؛ راجع القسم ‪" ،1.10‬الواجهة القابلة للتسلسل"‪ ،‬للحصول على تعداد كامل‪.‬‬

‫يمكن لفئة ‪ Externalizable‬تحديد الطرق التالية بشكل اختياري‪:‬‬

‫طريقة ‪ writeReplace‬تسمح للفئة بترشيح كائن بديل ليتم كتابته في الدفق‬ ‫‪‬‬
‫طريقة ‪ readResolve‬تسمح للفئة بتعيين كائن بديل للكائن الذي تمت قراءته للتو من الدفق‬ ‫‪‬‬

‫تسلسل ثوابت التعداد‬

‫يتم إجراء تسلسل لثوابت التعداد بشكل مختلف عن الكائنات العادية القابلة للتسلسل أو الخارجية‪ .‬يتكون الشكل المتسلسل لثابت‬
‫التعداد من اسمه فقط؛ قيم حقل الثابت غير موجودة في النموذج‪ .‬إلجراء تسلسل لثابت التعداد‪ ،‬يكتب ‪ObjectOutputStream‬‬
‫القيمة التي يتم إرجاعها بواسطة طريقة اسم ثابت التعداد‪ .‬إللغاء تسلسل ثابت التعداد‪ ،‬يقرأ ‪ ObjectInputStream‬اسم الثابت‬
‫من الدفق؛ يتم بعد ذلك الحصول على الثابت الذي تم إلغاء تسلسله عن طريق استدعاء األسلوب‬
‫‪ ،java.lang.Enum.valueOf‬وتمرير نوع تعداد الثابت مع اسم الثابت المستلم كوسيطات‪ .‬مثل الكائنات األخرى القابلة‬
‫للتسلسل أو الخارجية‪ ،‬يمكن أن تعمل ثوابت التعداد كأهداف للمراجع الخلفية التي تظهر الحًقا في مجرى التسلسل‪.‬‬

‫ال يمكن تخصيص العملية التي يتم من خاللها إجراء تسلسل لثوابت التعداد‪ :‬يتم تجاهل أي أساليب ‪ writeObject‬و‬
‫‪ readObject‬و‪ readObjectNoData‬و‪ writeReplace‬و‪ readResolve‬المحددة بواسطة أنواع التعداد أثناء التسلسل‬
‫وإلغاء التسلسل‪ .‬وبالمثل‪ ،‬يتم أيًض ا تجاهل أي إعالنات حقل ‪ serialPersistentFields‬أو ‪ - serialVersionUID‬جميع‬
‫أنواع التعداد لها معرف ‪ serialVersionUID‬ثابت يبلغ ‪ .0L‬يعد توثيق الحقول والبيانات القابلة للتسلسل ألنواع التعداد غير‬
‫ضروري‪ ،‬حيث ال يوجد اختالف في نوع البيانات المرسلة‪.‬‬

‫حماية المعلومات الحساسة‬

‫عند تطوير فئة توفر وصوًال متحكًم ا إلى الموارد‪ ،‬يجب توخي الحذر لحماية المعلومات والوظائف الحساسة‪ .‬أثناء إلغاء‬
‫التسلسل‪ ،‬تتم استعادة الحالة الخاصة للكائن‪ .‬على سبيل المثال‪ ،‬يحتوي واصف الملف على مؤشر يوفر الوصول إلى مورد نظام‬
‫التشغيل‪ .‬إن القدرة على تزوير واصف الملف من شأنها أن تسمح ببعض أشكال الوصول غير القانوني‪ ،‬حيث أن استعادة الحالة‬
‫تتم من الدفق‪ .‬لذلك‪ ،‬يجب أن يتبع وقت تشغيل التسلسل النهج المحافظ وال يثق في أن الدفق يحتوي فقط على تمثيالت صالحة‬
‫للكائنات‪ .‬لتجنب المساس بفئة ما‪ ،‬يجب عدم استعادة الحالة الحساسة للكائن من الدفق‪ ،‬أو يجب إعادة التحقق منها بواسطة الفئة‪.‬‬
‫تتوفر العديد من التقنيات لحماية البيانات الحساسة في الفصول الدراسية‪.‬‬
‫أسهل أسلوب هو وضع عالمة على الحقول التي تحتوي على بيانات حساسة كعابرة خاصة‪ .‬الحقول العابرة ليست ثابتة ولن يتم‬
‫حفظها بواسطة أي آلية استمرارية‪ .‬سيؤدي وضع عالمة على الحقل إلى منع ظهور الحالة في الدفق ومن استعادتها أثناء إلغاء‬
‫التسلسل‪ .‬نظًر ا ألنه ال يمكن استبدال الكتابة والقراءة (للحقول الخاصة) خارج الفصل‪ ،‬فإن الحقول المؤقتة للفصل تكون آمنة‪.‬‬

‫ال ينبغي إجراء تسلسل للفئات الحساسة بشكل خاص على اإلطالق‪ .‬ولتحقيق ذلك‪ ،‬يجب أال يقوم الكائن بتنفيذ الواجهة القابلة‬
‫للتسلسل أو الواجهة القابلة للتحويل‪.‬‬

‫قد تجد بعض الفئات أنه من المفيد السماح بالكتابة والقراءة ولكن على وجه التحديد التعامل مع الحالة وإعادة التحقق من صحتها‬
‫عند إلغاء تسلسلها‪ .‬يجب على الفصل تطبيق أساليب ‪ writeObject‬و‪ readObject‬لحفظ الحالة المناسبة واستعادتها فقط‪ .‬إذا‬
‫تم رفض الوصول‪ ،‬فسيؤدي طرح ‪ NotSerializableException‬إلى منع المزيد من الوصول‪.‬‬

‫‪:SQL‬‬

‫مقدمة إلى أوراكل ‪SQL‬‬

‫لغة االستعالم الهيكلية (‪ ) SQL‬هي مجموعة من البيانات التي يمكن من خاللها لجميع البرامج والمستخدمين الوصول إلى‬
‫البيانات في قاعدة بيانات أوراكل‪ .‬غالًبا ما تسمح برامج التطبيقات وأدوات أوراكل للمستخدمين بالوصول إلى قاعدة البيانات‬
‫دون استخدام ‪ SQL‬مباشرة‪ ،‬ولكن هذه التطبيقات بدورها يجب أن تستخدم ‪ SQL‬عند تنفيذ طلب المستخدم‪ .‬يقدم هذا الفصل‬
‫معلومات أساسية عن ‪ SQL‬كما تستخدمها معظم أنظمة قواعد البيانات‪.‬‬

‫تاريخ ‪SQL‬‬

‫نشر الدكتور إي إف كود ورقة بحثية بعنوان "نموذج عالئقي للبيانات لبنوك البيانات المشتركة الكبيرة" في يونيو ‪ 1970‬في‬
‫مجلة رابطة آالت الكمبيوتر (‪ ،)ACM‬اتصاالت ‪ .ACM‬يتم اآلن قبول نموذج ‪ Codd‬باعتباره النموذج النهائي ألنظمة إدارة‬
‫قواعد البيانات العالئقية (‪ .)RDBMS‬تم تطوير اللغة‪ ،‬لغة االستعالم اإلنجليزية المنظمة (‪ ،)SEQUEL‬بواسطة شركة‬
‫‪ ،.IBM Corporation, Inc‬الستخدام نموذج ‪ .Codd‬أصبح ‪ SEQUEL‬فيما بعد ‪( SQL‬ال يزال ُينطق "تكملة")‪ .‬في عام‬
‫‪ ،1979‬قدمت شركة ‪( .Relational Software, Inc‬المعروفة اآلن باسم ‪ )Oracle‬أول تطبيق متاح تجارًيا لـ ‪ .SQL‬اليوم‪،‬‬
‫يتم قبول ‪ SQL‬كلغة ‪ RDBMS‬القياسية‪.‬‬

‫معايير ‪SQL‬‬

‫تسعى ‪ Oracle‬جاهدة لالمتثال للمعايير المقبولة في الصناعة وتشارك بنشاط في لجان معايير ‪ .SQL‬اللجان المقبولة من قبل‬
‫الصناعة هي المعهد الوطني األمريكي للمعايير (‪ )ANSI‬والمنظمة الدولية للمعايير (‪ ،)ISO‬التابعة للجنة الكهروتقنية الدولية‬
‫(‪ .)IEC‬لقد قبل كل من ‪ ANSI‬و‪ ISO/IEC‬لغة ‪ SQL‬باعتبارها اللغة القياسية لقواعد البيانات العالئقية‪ .‬عندما يتم نشر‬
‫معيار ‪ SQL‬جديد في نفس الوقت بواسطة هذه المؤسسات‪ ،‬تتوافق أسماء المعايير مع االصطالحات المستخدمة من قبل‬
‫المؤسسة‪ ،‬ولكن المعايير متطابقة من الناحية الفنية‪.‬‬

‫تم اعتماد أحدث معيار ‪ SQL‬في يوليو ‪ 2003‬ويسمى غالًبا ‪ .SQL:2003‬األسماء الرسمية لهذا المعيار هي‪:‬‬

‫‪" ،ANSI/ISO/IEC 9075:2003‬لغة قاعدة البيانات ‪ ،"SQL‬األجزاء ‪2 ،)"SQL/Framework"( 1‬‬


‫‪("SQL/Foundation")، 3 ("SQL/CLI")، 4 ("SQL/PSM" )، 9 ("SQL/MED")، 10 ("SQL/OLB")، 11‬‬
‫)"‪ ("SQL/Schemata")، 13 ("SQL/JRT‬و ‪)"SQL/XML"( 14‬‬

‫‪" ،ISO/IEC 9075:2003‬لغة قاعدة البيانات ‪ ،"SQL‬األجزاء ‪2 ،)"SQL/Framework"( 1‬‬


‫)"‪ ("SQL/Foundation")، 3 ("SQL/CLI")، 4 ("SQL/PSM")، 9 ("SQL/MED‬و‪ )"SQL/OLB"( 10‬و‪11‬‬
‫("‪ )"SQL/Schemata‬و‪ )"SQL/JRT"( 13‬و‪)"SQL/XML"( 14‬‬

‫كيف يعمل ‪SQL‬‬

‫توفر نقاط قوة ‪ SQL‬فوائد لجميع أنواع المستخدمين‪ ،‬بما في ذلك مبرمجي التطبيقات ومسؤولي قواعد البيانات‬
‫والمديرين والمستخدمين النهائيين‪ .‬من الناحية الفنية‪ SQL ،‬هي لغة فرعية للبيانات‪ .‬الغرض من ‪ SQL‬هو توفير واجهة لقاعدة‬
‫بيانات عالئقية مثل ‪ ،Oracle Database‬وجميع عبارات ‪ SQL‬هي تعليمات لقاعدة البيانات‪ .‬في هذا ‪ SQL‬يختلف عن لغات‬
‫البرمجة ذات األغراض العامة مثل ‪ C‬و ‪ .BASIC‬ومن بين ميزات ‪ SQL‬ما يلي‪:‬‬

‫يعالج مجموعات البيانات كمجموعات وليس كوحدات فردية‪.‬‬ ‫‪‬‬


‫ويوفر التنقل التلقائي للبيانات‪.‬‬ ‫‪‬‬

‫فهو يستخدم عبارات معقدة وقوية بشكل فردي‪ ،‬وبالتالي فهي قائمة بذاتها‪ .‬لم تكن عبارات التحكم في التدفق جزًء ا من ‪ SQL‬في‬
‫األصل‪ ،‬ولكن تم العثور عليها في الجزء االختياري الذي تم قبوله مؤخًرا من ‪ .SQL، ISO/IEC 9075-5: 1996‬وتعرف‬
‫عبارات التحكم في التدفق بشكل شائع باسم "الوحدات المخزنة المستمرة" (‪ ،)PSM‬وامتداد ‪ PL/SQL‬إلى ‪Oracle SQL‬‬
‫يشبه ‪.PSM‬‬

‫يتيح لك ‪ SQL‬العمل مع البيانات على المستوى المنطقي‪ .‬يجب أن تهتم بتفاصيل التنفيذ فقط عندما تريد معالجة البيانات‪ .‬على‬
‫سبيل المثال‪ ،‬السترداد مجموعة من الصفوف من جدول‪ ،‬يمكنك تحديد شرط يستخدم لتصفية الصفوف‪ .‬يتم استرداد جميع‬
‫الصفوف التي تستوفي الشرط في خطوة واحدة ويمكن تمريرها كوحدة إلى المستخدم أو إلى عبارة ‪ SQL‬أخرى أو إلى تطبيق‪.‬‬
‫ال تحتاج إلى التعامل مع الصفوف واحًدا تلو اآلخر‪ ،‬وال داعي للقلق بشأن كيفية تخزينها أو استرجاعها فعلًيا‪ .‬تستخدم جميع‬
‫عبارات ‪ SQL‬الُم حِّسن‪ ،‬وهو جزء من ‪ Oracle Database‬الذي يحدد الوسائل األكثر فعالية للوصول إلى البيانات المحددة‪.‬‬
‫توفر ‪ Oracle‬أيًضا تقنيات يمكنك استخدامها لجعل الُم حِّسن يؤدي مهمته بشكل أفضل‪.‬‬
‫توفر لغة ‪ SQL‬بيانات لمجموعة متنوعة من المهام‪ ،‬بما في ذلك‪:‬‬ ‫‪‬‬
‫االستعالم عن البيانات‬ ‫‪‬‬
‫إدراج وتحديث وحذف الصفوف في الجدول‬ ‫‪‬‬
‫إنشاء الكائنات واستبدالها وتعديلها وإسقاطها‬ ‫‪‬‬
‫التحكم في الوصول إلى قاعدة البيانات وكائناتها‬ ‫‪‬‬
‫ضمان اتساق قاعدة البيانات وسالمتها‬ ‫‪‬‬
‫يقوم ‪ SQL‬بتوحيد كافة المهام السابقة في لغة واحدة متسقة‪.‬‬ ‫‪‬‬

‫لغة مشتركة لجميع قواعد البيانات العالئقية‬

‫تدعم جميع أنظمة إدارة قواعد البيانات العالئقية الرئيسية لغة ‪ ،SQL‬لذا يمكنك نقل جميع المهارات التي اكتسبتها باستخدام لغة‬
‫‪ SQL‬من قاعدة بيانات إلى أخرى‪ .‬باإلضافة إلى ذلك‪ ،‬فإن كافة البرامج المكتوبة بلغة ‪ SQL‬قابلة للنقل‪ .‬يمكن غالًبا نقلها من‬
‫قاعدة بيانات إلى أخرى مع القليل من التعديل‪.‬‬

‫التحسينات األخيرة‬

‫يعد محرك ‪ Oracle Database SQL‬هو األساس لجميع تطبيقات ‪ .Oracle Database‬تتطور ‪ Oracle SQL‬باستمرار‬
‫لتلبية المتطلبات المتزايدة لتطبيقات قواعد البيانات ولدعم بنيات الحوسبة الناشئة وواجهات برمجة التطبيقات وبروتوكوالت‬
‫الشبكة‪.‬‬

‫باإلضافة إلى البيانات المنظمة التقليدية‪ ،‬فإن ‪ SQL‬قادرة على تخزين واسترجاع ومعالجة البيانات األكثر تعقيًدا‪:‬‬

‫توفر أنواع الكائنات وأنواع المجموعات وأنواع ‪ REF‬الدعم للبيانات المنظمة المعقدة‪ .‬يتم اآلن دعم عدد من عوامل تشغيل‬
‫المجموعات المتعددة المتوافقة مع المعايير لنوع مجموعة الجدول المتداخل‪.‬‬

‫توفر الكائنات الكبيرة (‪ )LOBs‬الدعم لكل من البيانات الشخصية والبيانات الثنائية غير المنظمة‪ .‬يمكن أن يصل حجم ‪LOB‬‬
‫واحد إلى ‪ 8‬إلى ‪ 128‬تيرابايت‪ ،‬اعتماًدا على حجم كتلة قاعدة البيانات‪.‬‬

‫ال‪ XMLType‬يوفر نوع البيانات الدعم لبيانات ‪ XML‬شبه المنظمة‪.‬‬

‫يتضمن الدعم األصلي لإلمكانيات المستندة إلى المعايير الميزات التالية‪:‬‬

‫يتيح لك دعم التعبير العادي األصلي إجراء عمليات بحث عن األنماط والتعامل مع النص الحر المنسق بشكل فضفاض داخل‬
‫قاعدة البيانات‪.‬‬
‫تعمل أنواع البيانات ذات الفاصلة العائمة األصلية المستندة إلى معيار ‪ IEEE754‬على تحسين معالجة الفاصلة العائمة الشائعة‬
‫في معايير ‪ XML‬و‪ Java‬وتقليل مساحة التخزين المطلوبة للبيانات الرقمية‪.‬‬

‫تعمل وظائف ‪ SQL‬التجميعية والتحليلية المضمنة على تسهيل الوصول إلى البيانات ومعالجتها في مستودعات البيانات‬
‫وأسواق البيانات‪.‬‬

‫ستستمر التحسينات المستمرة في ‪ Oracle SQL‬في توفير الدعم الشامل لتطوير تطبيقات قواعد البيانات متعددة االستخدامات‬
‫وقابلة للتطوير وعالية األداء‪.‬‬

‫االتفاقيات المعجمية‬

‫تنطبق االصطالحات المعجمية التالية إلصدار عبارات ‪ SQL‬بشكل خاص على تطبيق ‪ Oracle Database‬لـ ‪ ،SQL‬ولكنها‬
‫مقبولة بشكل عام في تطبيقات ‪ SQL‬األخرى‪.‬‬

‫عندما تقوم بإصدار عبارة ‪ ،SQL‬يمكنك تضمين عالمة تبويب أو أكثر أو مسافات أو تعليقات في أي مكان تظهر فيه مسافة‬
‫ضمن تعريف العبارة‪ .‬وبالتالي‪ ،‬تقوم ‪ Oracle Database‬بتقييم العبارتين التاليتين بنفس الطريقة‪:‬‬

‫حالة األحرف غير مهمة في الكلمات المحجوزة والكلمات الرئيسية والمعرفات والمعلمات‪ .‬ومع ذلك‪ ،‬فإن حالة األحرف مهمة‬
‫في النصوص الحرفية واألسماء المقتبسة‪ ،‬ودعم األدوات‬

‫توفر ‪ Oracle‬عدًدا من األدوات المساعدة لتسهيل عملية تطوير ‪ SQL‬الخاصة بك‪:‬‬

‫‪ SQL*Plus‬عبارة عن أداة استعالم تفاعلية ومجّم عة يتم تثبيتها مع كل تثبيت لخادم قاعدة بيانات ‪ Oracle‬أو عميل‪ .‬يحتوي‬
‫على واجهة مستخدم سطر األوامر وواجهة مستخدم على شبكة اإلنترنت تسمى ‪.iSQL*Plus‬‬

‫‪ Oracle JDeveloper‬عبارة عن بيئة تطوير متكاملة متعددة المنصات تدعم دورة الحياة الكاملة لتطوير ‪ Java‬وخدمات‬
‫الويب و‪ .SQL‬وهو يوفر واجهة رسومية لتنفيذ وضبط عبارات ‪ SQL‬ومخطط مخطط مرئي (مصمم نماذج قاعدة البيانات)‪.‬‬
‫كما أنه يدعم تحرير وتجميع وتصحيح تطبيقات ‪.PL/SQL‬‬

‫‪ Oracle HTML DB‬هي بيئة مستضافة لتطوير ونشر تطبيقات الويب المتعلقة بقواعد البيانات‪ .‬يعد ‪SQL Workshop‬‬
‫أحد مكونات ‪ Oracle HTML DB‬الذي يتيح لك عرض كائنات قاعدة البيانات وإدارتها من مستعرض الويب‪ .‬توفر ‪SQL‬‬
‫‪ Workshop‬وصوًال سريًعا إلى معالج أوامر ‪ SQL‬ومستودع البرامج النصية ‪.SQL‬‬

‫تتيح لك ‪ Oracle Call Interface‬و‪ Oracle Precompilers‬إمكانية تضمين عبارات ‪ SQL‬القياسية في لغة برمجة‬
‫اإلجراءات‪.‬‬
‫تتيح لك واجهة )‪ Oracle Call (OCI‬تضمين عبارات ‪ SQL‬في برامج ‪.C‬‬

‫تقوم مترجمات ‪ Oracle‬المسبقة‪ ++Pro*C/C ،‬و‪ ،Pro*COBOL‬بتفسير عبارات ‪ SQL‬المضمنة وترجمتها إلى عبارات‬
‫يمكن فهمها بواسطة مترجمي ‪ ++C/C‬و‪ ،COBOL‬على التوالي‪.‬‬

‫تدعم معظم أدوات ‪( Oracle‬وليس كلها) أيًضا جميع ميزات ‪ .Oracle SQL‬يصف هذا المرجع الوظيفة الكاملة لـ ‪ .SQL‬إذا‬
‫كانت أداة ‪ Oracle‬التي تستخدمها ال تدعم هذه الوظيفة الكاملة‪ ،‬فيمكنك العثور على مناقشة للقيود في الدليل الذي يصف األداة‪،‬‬
‫مثل‪ SQL*Plus‬دليل المستخدم والمرجع‪.‬‬

‫العناصر األساسية ألوراكل ‪SQL‬‬

‫يحتوي هذا الفصل على معلومات مرجعية حول العناصر األساسية لـ ‪ .Oracle SQL‬هذه العناصر هي أبسط اللبنات األساسية‬
‫لعبارات ‪ .SQL‬ولذلك‪ ،‬قبل استخدام العبارات الموضحة في التعرف على المفاهيم التي يغطيها هذا الفصل‪.‬‬

‫أنواع البيانات‬

‫تحتوي كل قيمة يتم التعامل معها بواسطة ‪ Oracle Database‬على نوع بيانات‪ .‬يقوم نوع بيانات القيمة بربط مجموعة ثابتة‬
‫من الخصائص بالقيمة‪ .‬تؤدي هذه الخصائص إلى قيام ‪ Oracle‬بمعاملة قيم نوع بيانات واحد بشكل مختلف عن قيم نوع آخر‪.‬‬
‫على سبيل المثال‪ ،‬يمكنك إضافة قيمرقمنوع البيانات‪ ،‬ولكن ليس قيمخامنوع البيانات‪.‬‬

‫عند إنشاء جدول أو مجموعة‪ ،‬يجب عليك تحديد نوع بيانات لكل عمود من أعمدته‪ .‬عندما تقوم بإنشاء إجراء أو وظيفة مخزنة‪،‬‬
‫يجب عليك تحديد نوع بيانات لكل من الوسائط الخاصة به‪ .‬تحدد أنواع البيانات هذه مجال القيم التي يمكن أن يحتوي عليها كل‬
‫عمود أو يمكن أن تحتوي عليها كل وسيطة‪ .‬على سبيل المثال‪،‬تاريخال يمكن لألعمدة قبول القيمة ‪ 29‬فبراير (باستثناء السنة‬
‫الكبيسة) أو القيم ‪ 2‬أو "الحذاء"‪ .‬كل قيمة يتم وضعها الحًقا في عمود تفترض نوع بيانات العمود‪ .‬على سبيل المثال‪ ،‬إذا قمت‬
‫بإدراج'‪-01‬يناير‪'98-‬الىتاريخعمود‪ ،‬ثم يعامل أوراكل'‪-01‬يناير‪'98-‬سلسلة األحرف كتاريخالقيمة‬
‫بعد التحقق من ترجمتها إلى تاريخ صالح‪.‬‬

‫توفر قاعدة بيانات ‪ Oracle‬عدًدا من أنواع البيانات المضمنة باإلضافة إلى عدة فئات لألنواع المعرفة من قبل المستخدم والتي‬
‫يمكن استخدامها كأنواع بيانات‪ .‬يظهر بناء جملة أنواع بيانات ‪ Oracle‬في المخططات التالية‪ .‬وينقسم نص هذا القسم إلى‬
‫األقسام التالية‪:‬‬

‫نوع البيانات إما عددي أو غير عددي‪ .‬يحتوي النوع العددي على قيمة ذرية‪ ،‬بينما يحتوي النوع غير العددي (يسمى أحياًنا‬
‫"المجموعة") على مجموعة من القيم‪ .‬الكائن الكبير (‪ )LOB‬هو شكل خاص من أنواع البيانات العددية التي تمثل قيمة عددية‬
‫كبيرة للبيانات الثنائية أو الشخصية‪ .‬تخضع ‪ LOBs‬لبعض القيود التي ال تؤثر على األنواع العددية األخرى بسبب حجمها‪ .‬يتم‬
‫توثيق هذه القيود في سياق بناء جملة ‪ SQL‬ذي الصلة‪.‬‬

‫أنواع البيانات المدمجة في أوراكل‬

‫يلخص الجدول التالي أنواع البيانات المضمنة في ‪ .Oracle‬يرجى الرجوع إلى بناء الجملة في األقسام السابقة للعناصر‬
‫النحوية‪ .‬يتم استخدام الرموز المدرجة ألنواع البيانات داخلًيا بواسطة ‪ .Oracle Database‬يتم إرجاع رمز نوع البيانات‬
‫الخاص بعمود أو سمة كائن بواسطة الدالة ‪.DUMP‬‬

‫نوع البيانات ‪CHAR‬‬

‫الشاريحدد نوع البيانات سلسلة أحرف ذات طول ثابت‪ .‬تضمن ‪ Oracle‬أن جميع القيم المخزنة في ملفشارالعمود له الطول‬
‫المحدد حسب الحجم‪ .‬إذا قمت بإدراج قيمة أقصر من طول العمود‪ ،‬فستقوم ‪ Oracle‬بتوزيع القيمة على طول العمود‪ .‬إذا‬
‫حاولت إدراج قيمة طويلة جًدا بالنسبة للعمود‪ ،‬فسترجع ‪ Oracle‬خطًأ‪.‬‬

‫الطول االفتراضي لشارالعمود هو ‪ 1‬بايت والحد األقصى المسموح به هو ‪ 2000‬بايت‪ .‬يمكن إدراج سلسلة ذات بايت واحد‬
‫في ملفشار(‪)10‬العمود‪ ،‬ولكن السلسلة فارغة إلى ‪ 10‬بايت قبل تخزينها‪.‬‬

‫عندما تقوم بإنشاء جدول معشارعمود‪ ،‬بشكل افتراضي تقوم بتوفير طول العمود بالبايت‪ .‬البايتالمؤهل هو نفس‬
‫االفتراضي‪ .‬إذا كنت تستخدمشار التصفيات‪ ،‬على سبيل المثالشار(‪ 10‬شار)‪ ،‬ثم تقوم بتوفير طول العمود باألحرف‪.‬‬
‫الحرف هو من الناحية الفنية نقطة رمز لمجموعة أحرف قاعدة البيانات‪ .‬يمكن أن يتراوح حجمه من ‪ 1‬بايت إلى ‪ 4‬بايت‪،‬‬
‫اعتماًدا على مجموعة أحرف قاعدة البيانات‪ .‬البايتوشارتتجاوز المؤهالت الدالالت المحددة بواسطة‬
‫‪ NLS_LENGTH_SEMANTICS‬المعلمة‪ ،‬التي تحتوي على دالالت البايت االفتراضية‪ .‬ألسباب تتعلق باألداء‪ ،‬توصي‬
‫‪ Oracle‬باستخدام‪NLS_LENGTH_SEMANTICS‬المعلمة لتعيين دالالت الطول والتي‬
‫تستخدمهابايتوشارالمؤهالت فقط عند الضرورة لتجاوز المعلمة‪.‬‬

‫نوع بيانات ‪NCHAR‬‬

‫النشارنوع البيانات هو نوع بيانات ‪ Unicode‬فقط‪ .‬عندما تقوم بإنشاء جدول معنشارالعمود‪ ،‬يمكنك تحديد طول العمود‬
‫باألحرف‪ .‬يمكنك تحديد مجموعة األحرف الوطنية عند إنشاء قاعدة البيانات الخاصة بك‪.‬‬

‫يتم تحديد الحد األقصى لطول العمود من خالل تعريف مجموعة األحرف الوطنية‪ .‬مواصفات العرض لنوع بيانات‬
‫الحرفنشار الرجوع إلى عدد األحرف‪ .‬الحد األقصى لحجم العمود المسموح به هو ‪ 2000‬بايت‪.‬‬
‫إذا قمت بإدراج قيمة أقصر من طول العمود‪ ،‬فستقوم ‪ Oracle‬بتوزيع القيمة على طول العمود‪ .‬ال يمكنك إدراج أشارقيمة‬
‫فينشارعمود‪ ،‬وال يمكنك إدراجنشارالقيمة في أشارعمود‪.‬‬

‫المثال التالي يقارن بين‪Translate_description‬عمود من‪pm.product_descriptions‬جدول بسلسلة مجموعة‬


‫أحرف وطنية‪:‬‬

‫نوع البيانات ‪NVARCHAR2‬‬

‫النفارتشار‪2‬نوع البيانات هو نوع بيانات ‪ Unicode‬فقط‪ .‬عندما تقوم بإنشاء جدول معنفارتشار‪2‬العمود‪ ،‬يمكنك‬
‫توفير الحد األقصى لعدد األحرف التي يمكنه االحتفاظ بها‪ .‬تقوم ‪ Oracle‬بعد ذلك بتخزين كل قيمة في العمود تماًم ا كما‬
‫تحددها‪ ،‬بشرط أال تتجاوز القيمة الحد األقصى لطول العمود‪.‬‬

‫يتم تحديد الحد األقصى لطول العمود من خالل تعريف مجموعة األحرف الوطنية‪ .‬مواصفات العرض لنوع بيانات‬
‫الحرفنفارتشار‪2‬الرجوع إلى عدد األحرف‪ .‬الحد األقصى لحجم العمود المسموح به هو ‪ 4000‬بايت‪ .‬يرجى الرجوع‬
‫إلىدليل دعم عولمة قاعدة بيانات أوراكلللحصول على معلومات حول دعم نوع بيانات ‪.Unicode‬‬

‫نوع البيانات ‪VARCHAR2‬‬

‫الفارتشار‪2‬يحدد نوع البيانات سلسلة أحرف ذات طول متغير‪ .‬عندما تقوم بإنشاءفارتشار‪2‬العمود‪ ،‬يمكنك توفير الحد‬
‫األقصى لعدد البايتات أو أحرف البيانات التي يمكنه االحتفاظ بها‪ .‬تقوم ‪ Oracle‬بعد ذلك بتخزين كل قيمة في العمود تماًم ا كما‬
‫تحددها‪ ،‬بشرط أال تتجاوز القيمة الحد األقصى لطول العمود‪ .‬إذا حاولت إدراج قيمة تتجاوز الطول المحدد‪ ،‬فسترجع ‪Oracle‬‬
‫خطًأ‪.‬‬

‫يجب عليك تحديد الحد األقصى لطول ‪a‬فارتشار‪2‬عمود‪ .‬يجب أن يكون هذا الحد األقصى بايت واحد على األقل‪ ،‬على‬
‫الرغم من أنه ُيسمح للسلسلة الفعلية المخزنة بأن تكون سلسلة ذات طول صفري ('')‪ .‬يمكنك استخدام الشارالتصفيات‪ ،‬على‬
‫سبيل المثالفارتشار‪10(2‬شار)‪ ،‬إلعطاء الحد األقصى لطول األحرف بدًال من البايتات‪ .‬الحرف هو من الناحية الفنية‬
‫نقطة رمز لمجموعة أحرف قاعدة البيانات‪.‬شاروبايتتتجاوز المؤهالت إعداد‬
‫‪NLS_LENGTH_SEMANTICS‬المعلمة‪ ،‬التي تحتوي على بايت افتراضي‪ .‬ألسباب تتعلق باألداء‪ ،‬توصي ‪Oracle‬‬
‫باستخدام‪NLS_LENGTH_SEMANTICS‬المعلمة لتعيين دالالت الطول والتي تستخدمهابايتوشارالمؤهالت فقط‬
‫عند الضرورة لتجاوز المعلمة‪ .‬الحد األقصى لطولفارتشار‪2‬البيانات ‪ 4000‬بايت‪ .‬يقارن أوراكلفارتشار‪2‬القيم‬
‫باستخدام دالالت المقارنة غير المبطنة‪.‬‬
‫لضمان تحويل البيانات بشكل صحيح بين قواعد البيانات ذات مجموعات أحرف مختلفة‪ ،‬يجب عليك التأكد من ذلكفارتشار‬
‫‪2‬تتكون البيانات من سالسل جيدة التكوين‪ .‬يرىدليل دعم عولمة قاعدة بيانات أوراكللمزيد من المعلومات حول دعم مجموعة‬
‫األحرف‪.‬‬

‫نوع بيانات ‪VARCHAR‬‬

‫ال تستخدمفارتشارنوع البيانات‪ .‬استخدم الفارتشار‪2‬نوع البيانات بدال من ذلك‪ .‬على الرغم من أنفارتشارنوع‬
‫البيانات مرادف حالًيا لـفارتشار‪ ،2‬الفارتشارتمت جدولة إعادة تعريف نوع البيانات كنوع بيانات منفصل يستخدم‬
‫لسالسل األحرف ذات الطول المتغير مقارنة بدالالت المقارنة المختلفة‪.‬‬

‫أنواع البيانات الرقمية‬

‫تقوم أنواع البيانات الرقمية في ‪ Oracle Database‬بتخزين أرقام الفاصلة العائمة والثابتة الموجبة والسالبة‪ ،‬والصفر‪،‬‬
‫والالنهاية‪ ،‬والقيم التي تمثل النتيجة غير المحددة لعملية ما (أي "ليست رقًم ا" أونان)‪ .‬للحصول على معلومات حول تحديد‬
‫أنواع البيانات الرقمية كنوع بيانات رقم حرفي‬

‫الرقميقوم نوع البيانات بتخزين الصفر باإلضافة إلى األرقام الثابتة الموجبة والسالبة ذات القيم المطلقة من ‪130-10 × 1.0‬‬
‫إلى (ولكن ليس بما في ذلك) ‪ .10126 × 1.0‬إذا قمت بتحديد تعبير حسابي تكون قيمته مطلقة أكبر من أو تساوي ‪× 1.0‬‬
‫‪ ، 10126‬ثم تقوم ‪ Oracle‬بإرجاع خطأ‪ .‬كلرقمتتطلب القيمة من ‪ 1‬إلى ‪ 22‬بايت‪.‬‬

‫حدد رقم النقطة الثابتة باستخدام النموذج التالي‪:‬‬

‫أين‪:‬‬

‫ص هي الدقة‪ ،‬أو العدد اإلجمالي لألرقام العشرية المهمة‪ ،‬حيث يكون الرقم األكثر أهمية هو الرقم غير الصفر الموجود في‬
‫أقصى اليسار‪ ،‬والرقم األقل أهمية هو الرقم األكثر شهرة على اليمين‪ .‬تضمن ‪ Oracle‬إمكانية نقل األرقام بدقة تصل إلى ‪20‬‬
‫رقًم ا أساسًيا من ‪ 100‬رقم‪ ،‬وهو ما يعادل ‪ 39‬أو ‪ 40‬رقًم ا عشرًيا اعتماًدا على موضع العالمة العشرية‪.‬‬

‫سهو المقياس‪ ،‬أو عدد األرقام من العالمة العشرية إلى الرقم األقل أهمية‪ .‬يمكن أن يتراوح المقياس من ‪ 84-‬إلى ‪.127‬‬

‫المقياس اإليجابي هو عدد األرقام المهمة الموجودة على يمين العالمة العشرية بما في ذلك الرقم األقل أهمية‪.‬‬
‫المقياس السلبي هو عدد األرقام المهمة الموجودة على يسار العالمة العشرية‪ ،‬ولكن ال يشمل الرقم األقل أهمية‪ .‬بالنسبة للمقياس‬
‫السالب‪ ،‬يكون الرقم األقل أهمية على الجانب األيسر من العالمة العشرية‪ ،‬ألنه يتم تقريب البيانات الفعلية إلى العدد المحدد من‬
‫المنازل على يسار العالمة العشرية‪ .‬على سبيل المثال‪ ،‬مواصفات (‪ )2-،10‬تعني التقريب إلى مئات‪.‬‬

‫يمكن أن يكون المقياس أكبر من الدقة‪ ،‬في أغلب األحيان عندماهيتم استخدام التدوين‪ .‬عندما يكون المقياس أكبر من الدقة‪ ،‬تحدد‬
‫الدقة الحد األقصى لعدد األرقام المهمة على يمين العالمة العشرية‪ .‬على سبيل المثال‪ ،‬عمود تم تعريفه كـرقم(‪)4,5‬يتطلب‬
‫صفًر ا للرقم األول بعد العالمة العشرية ويقوم بتقريب كافة القيم بعد الرقم الخامس بعد العالمة العشرية‪.‬‬

‫من الممارسات الجيدة تحديد مقياس ودقة عمود رقم النقطة الثابتة لمزيد من التحقق من سالمة اإلدخال‪ .‬ال يؤدي تحديد المقياس‬
‫والدقة إلى فرض طول ثابت لجميع القيم‪ .‬إذا تجاوزت القيمة الدقة‪ ،‬فسترجع ‪ Oracle‬خطًأ‪ .‬إذا تجاوزت القيمة المقياس‪ ،‬تقوم‬
‫‪ Oracle‬بتقريبها‪.‬‬

‫يمثل هذا رقًم ا ثابًتا بدقة ‪ p‬ومقياس ‪ 0‬ويعادلرقم(ع‪ .)0،‬يحدد غياب محددات الدقة والمقياس الحد األقصى للنطاق والدقة‬
‫لرقم ‪.Oracle‬‬

‫أرقام النقطة العائمة‬

‫يمكن أن تحتوي أرقام الفاصلة العائمة على نقطة عشرية في أي مكان من الرقم األول إلى الرقم األخير أو ال يمكن أن تحتوي‬
‫على نقطة عشرية على اإلطالق‪ .‬يمكن استخدام األس بشكل اختياري بعد الرقم لزيادة النطاق (على سبيل المثال‪e- 1.777 ،‬‬
‫‪ .)20‬ال تنطبق قيمة المقياس على أرقام الفاصلة العائمة‪ ،‬ألن عدد األرقام التي يمكن أن تظهر بعد العالمة العشرية غير مقيد‪.‬‬

‫تختلف أرقام الفاصلة العائمة الثنائية عنرقمبالطريقة التي يتم بها تخزين القيم داخلًيا بواسطة ‪ .Oracle Database‬يتم تخزين‬
‫القيم باستخدام الدقة العشرية لرقم‪ .‬جميع القيم الحرفية التي تقع ضمن النطاق والدقة التي يدعمهارقميتم تخزينها بالضبط‬
‫كمارقم‪ .‬يتم تخزين القيم الحرفية تماًم ا ألنه يتم التعبير عن القيم الحرفية باستخدام الدقة العشرية (األرقام من ‪ 0‬إلى ‪ .)9‬يتم‬
‫تخزين أرقام الفاصلة العائمة الثنائية باستخدام الدقة الثنائية (األرقام ‪ 0‬و‪ .)1‬ال يمكن لنظام التخزين هذا تمثيل كافة القيم‬
‫باستخدام الدقة العشرية تماًم ا‪ .‬في كثير من األحيان‪ ،‬يتم التراجع عن الخطأ الذي يحدث عند تحويل قيمة من الدقة العشرية إلى‬
‫الدقة الثنائية عندما يتم تحويل القيمة مرة أخرى من الدقة الثنائية إلى الدقة العشرية‪ .‬الحرفي ‪ 0.1‬هو مثال على ذلك‪.‬‬

‫توفر ‪ Oracle Database‬نوعين من البيانات الرقمية حصرًيا ألرقام الفاصلة العائمة‪:‬‬

‫‪BINARY_FLOAT‬‬

‫‪BINARY_FLOAT‬هو نوع بيانات رقم الفاصلة العائمة ذو ‪ 32‬بت ودقة واحدة‪ .‬كل‪BINARY_FLOAT‬تتطلب‬
‫القيمة ‪ 5‬بايت‪ ،‬بما في ذلك بايت الطول‪.‬‬
‫ثنائي_مزدوج‬

‫ثنائي_مزدوجهو نوع بيانات رقم الفاصلة العائمة مزدوج الدقة ‪ 64‬بت‪ .‬كلثنائي_مزدوجتتطلب القيمة ‪ 9‬بايت‪،‬‬
‫بما في ذلك بايت الطول‪.‬‬

‫فيرقمالعمود‪ ،‬أرقام الفاصلة العائمة لها دقة عشرية‪ .‬في‪BINARY_FLOAT‬أوثنائي_مزدوجالعمود‪ ،‬وأرقام‬


‫الفاصلة العائمة لها دقة ثنائية‪ .‬تدعم أرقام الفاصلة العائمة الثنائية القيم الخاصة الالنهاية ونان(ليس رقما)‪.‬‬

‫دراسة النظام‬

‫دراسة الجدوى‪:‬‬

‫يتم تحليل جدوى المشروع في هذه المرحلة ويتم طرح مقترح األعمال مع خطة عامة جًدا للمشروع وبعض تقديرات التكلفة‪.‬‬
‫أثناء تحليل النظام‪ ،‬سيتم إجراء دراسة جدوى النظام المقترح‪ .‬وذلك للتأكد من أن النظام المقترح ال يشكل عبئا على الشركة‪.‬‬
‫لتحليل الجدوى‪ ،‬من الضروري فهم بعض المتطلبات الرئيسية للنظام‪.‬‬

‫ثالثة اعتبارات رئيسية تشارك في تحليل الجدوى هي‬

‫الجدوى االقتصادية‬ ‫‪‬‬


‫الجدوى الفنية‬ ‫‪‬‬
‫الجدوى االجتماعية‬ ‫‪‬‬

‫الجدوى االقتصادية‪:‬‬

‫تم إجراء هذه الدراسة للتحقق من األث ر االقتص ادي ال ذي س يحدثه النظ ام على المنظم ة‪ .‬إن حجم األم وال ال تي يمكن للش ركة‬
‫ضخها في البحث وتطوير النظام محدود‪ .‬ويجب أن تكون النفقات مبررة‪ .‬وهكذا تم تطوير النظام كذلك ضمن الميزانية وهذا م ا‬
‫تحقق ألن معظم التقنيات المستخدمة متاحة بشكل مجاني‪ .‬وكان ال بد من شراء المنتجات المخصصة فقط‪.‬‬

‫الجدوى الفنية‪:‬‬

‫يتم إجراء هذه الدراسة للتحقق من الجدوى الفنية‪ ،‬أي المتطلبات الفنية للنظام‪ .‬يجب أال يك ون ألي نظ ام يتم تط ويره طلب كب ير‬
‫على الموارد التقنية المتاحة‪ .‬سيؤدي ذلك إلى ارتفاع الطلب على الموارد التقنية المتاحة‪ .‬سيؤدي هذا إلى فرض متطلب ات عالي ة‬
‫على العميل‪ .‬يجب أن يكون للنظام المطور متطلب ات متواض عة‪ ،‬حيث ال يل زم س وى الح د األدنى من التغي يرات أو التغي يرات‬
‫الفارغة لتنفيذ هذا النظام‪.‬‬
‫الجدوى االجتماعية‪:‬‬

‫جانب الدراسة هو التحقق من مستوى قبول النظام من قب ل المس تخدم‪ .‬ويتض من ذل ك عملي ة ت دريب المس تخدم على اس تخدام‬
‫النظام بكف اءة‪ .‬يجب أال يش عر المس تخدم بالتهدي د من النظ ام‪ ،‬ب ل يجب علي ه قبول ه كض رورة‪ .‬يعتم د مس توى القب ول من قب ل‬
‫المستخدمين فقط على األساليب المستخدمة لتثقيف المستخدم حول النظام وجعله على دراية ب ه‪ .‬ويجب رف ع مس توى ثقت ه ح تى‬
‫يتمكن أيضًا من تقديم بعض االنتقادات البناءة‪ ،‬وهو أمر مرحب به باعتباره المستخدم األخير للنظام‪.‬‬

‫اختبار النظام‬

‫خطة االختبار‪:‬‬

‫يعد اختبار البرمجيات عنصًرا حاسًم ا في ضمان جودة البرمجيات ويمثل المراجعة النهائية للمواصفات والتصميم والترميز‪ .‬في‬
‫الواقع‪ ،‬االختبار هو الخطوة الوحيدة في عملية هندسة البرمجيات التي يمكن اعتبارها مدمرة وليست بناءة‪.‬‬

‫تدمج استراتيجية اختبار البرامج أساليب تصميم حالة اختبار البرامج في سلسلة من الخطوات المخطط ة جي ًدا وال تي ت ؤدي إلى‬
‫إنشاء البرنامج بنجاح‪ .‬االختبار هو مجموعة األنشطة التي يمكن التخطيط لها مسبًقا وإجراؤه ا بش كل منهجي‪ .‬ال دافع األساس ي‬
‫الختبار البرنامج هو تأكيد جودة البرنامج بأس اليب يمكن تطبيقه ا اقتص ادًيا وفع اًال على ك ل من األنظم ة االس تراتيجية الكب يرة‬
‫والصغيرة الحجم‪.‬‬

‫النهج االستراتيجي الختبار البرمجيات‬

‫يمكن النظر إلى عملية هندسة البرمجيات على أنها دوامة‪ .‬في البداي ة تح دد هندس ة النظ ام دور البرن امج وت ؤدي إلى‬
‫تحليل متطلب ات البرن امج حيث يتم إنش اء مج ال المعلوم ات والوظ ائف والس لوك واألداء والقي ود ومع ايير التحقق من ص حة‬
‫البرنامج‪ .‬وبالتحرك نحو الداخل على طول الحلزون‪ ،‬نصل إلى التصميم وأخيًر ا إلى البرمجة‪ .‬لتطوير برامج الكمبيوتر‪ ،‬نتحرك‬
‫على طول خطوط انسيابية تقلل من مستوى التجريد في كل دورة‪.‬‬

‫ويمكن أيًض ا النظر إلى استراتيجية اختبار البرمجيات في سياق اللولب‪ .‬يبدأ اختبار الوحدة عند قم ة الحل زون ويرك ز‬
‫على كل وحدة من وحدات البرنامج كم ا تم تنفي ذها في الك ود المص دري‪ .‬اختب ار التقدم من خالل التح رك للخ ارج على ط ول‬
‫الدوامة الختبار التكامل‪ ،‬حيث يتم التركيز على تصميم وبناء بنية البرمجيات‪ .‬عند الحديث عن منعطف آخر للخارج على ش كل‬
‫حلزوني‪ ،‬نواجه اختبار التحقق من الصحة حيث يتم التحقق من صحة المتطلبات المح ددة كج زء من تحلي ل متطلب ات البرن امج‬
‫مقابل البرنامج الذي تم إنشاؤه‪ .‬أخيًر ا نصل إلى اختبار النظام‪ ،‬حيث يتم اختبار البرنامج وعناصر النظام األخرى ككل‪.‬‬

‫أنواع االختبار‪:‬‬

‫شاختبار الصئبان‬ ‫‪.1‬‬

‫يركز اختب ار الوح دة جه ود التحقق على أص غر وح دة في تص ميم البرن امج‪ ،‬وهي الوح دة‪ .‬اختب ار الوح دة ل دينا موج ه نح و‬
‫الصندوق األبيض ويتم إجراء بعض الوحدات بالتوازي‪.‬‬

‫اختبار الصندوق األبيض‬ ‫‪.2‬‬

‫وهذا النوع من االختبارات يضمن ذلك‬

‫تم ممارسة جميع المسارات المستقلة مرة واحدة على األقل‬ ‫‪‬‬

‫لقد تم ممارسة جميع القرارات المنطقية بجوانبها الحقيقية والكاذبة‬ ‫‪‬‬

‫يتم تنفيذ كافة الحلقات ضمن حدودها وضمن حدودها التشغيلية‬ ‫‪‬‬

‫وقد تم ممارسة جميع هياكل البيانات الداخلية للتأكد من صحتها‪.‬‬ ‫‪‬‬

‫االختبار المشروط‬ ‫‪.3‬‬

‫في هذا الجزء من االختبار تم اختبار كل ش رط من ج وانب الص واب والخط أ‪ .‬وتم اختب ار جمي ع المس ارات الناتج ة‪.‬‬
‫بحيث يتم تتبع كل مسار قد يتم إنشاؤه في حالة معينة للكشف عن أي أخطاء محتملة‪.‬‬

‫اختبار الهجين‬ ‫‪.4‬‬

‫يفحص االختبار المختلط تشغيل الفصل بدقة خوارزمية ولكنه يفحص فقط األس اليب والمتغ يرات العام ة‪ .‬من الناحي ة‬
‫القياسية للتطبيق‪ ،‬يعتبر االختبار المختلط بمثابة اختب ار الص ندوق األبيض نظ ًرا ألن الفئ ات ال تي يتم اختباره ا ق د ال تتع رض‬
‫للتطبيق‪ .‬من مستوى الفصل الدراسي‪ ،‬يعتبر االختبار المختلط بمثابة اختبار الصندوق األسود نظًرا لع دم الكش ف عن األس اليب‬
‫والمتغيرات الخاصة وعدم التشكيك أبًدا في كيفية إنتاج النتائج‪.‬‬
‫تقرير االختبار والتحليل‬

‫اختبار التجميع‪:‬‬

‫لقد كانت فكرة جيدة أن نقوم باختبار التحمل الخاص بنا في وقت مبكر‪ ،‬ألن ه يمنحن ا ال وقت إلص الح بعض‬
‫حاالت الجمود غير المتوقعة ومشاكل االستقرار التي حدثت فقط عندما تعرضت المكونات ألحجام معامالت كبيرة جًدا‪.‬‬

‫اختبار التنفيذ‪:‬‬

‫تم تحميل هذا البرنامج وتنفيذه بنجاح‪ .‬بسبب البرمجة الجيدة لم تكن هناك أخطاء في التنفيذ‬

‫اختبار اإلخراج‪:‬‬

‫يتم وضع شاشات اإلخراج الناجح في قسم شاشة اإلخراج‪.‬‬

‫تصميم حالة االختبار‪:‬‬

‫يمكن اختبار أي منتج هندسي بإحدى الطريقتين التاليتين‪:‬‬

‫‪ .1‬اختبار الصندوق األبيض‪:‬ويسمى ه ذا االختب ار أيًض ا باختب ار الص ندوق الزج اجي‪ .‬في ه ذا االختب ار‪ ،‬من خالل‬
‫معرفة الوظيفة المحددة التي تم تصميم المنتج ألداءها‪ ،‬يمكن إجراء اختبار يوضح أن ك ل وظيف ة تعم ل بكام ل طاقته ا في نفس‬
‫ال وقت للبحث عن األخط اء في ك ل وظيف ة‪ .‬إنه ا طريقة تص ميم حال ة اختب ار تس تخدم بني ة التحكم في التص ميم اإلج رائي‬
‫الستخالص حاالت االختبار‪ .‬اختبار المسار األساسي هو اختبار الصندوق األبيض‪.‬‬

‫اختبار المسار األساسي‪:‬‬

‫تدوين الرسم البياني التدفق‬ ‫‪‬‬


‫التعقيد السيكلوماتيكي‬ ‫‪‬‬
‫اشتقاق حاالت االختبار‬ ‫‪‬‬
‫مصفوفات الرسم البياني‬ ‫‪‬‬

‫اختبار هيكل التحكم‪:‬‬

‫اختبار الحالة‬ ‫‪‬‬


‫اختبار تدفق البيانات‬ ‫‪‬‬
‫اختبار الحلقة‬ ‫‪‬‬

‫‪ .2‬اختبار الصندوق األسود‪:‬في هذا االختبار‪ ،‬من خالل معرف ة التش غيل ال داخلي للمنتج‪ ،‬يمكن إج راء اختب ارات للتأك د من أن‬
‫"جميع ال تروس متش ابكة"‪ ،‬أي أن التش غيل ال داخلي يتم وفًق ا للمواص فات وأن جمي ع المكون ات الداخلي ة ق د تم ت دريبها بش كل‬
‫مناسب‪ .‬وهو يركز بشكل أساسي على المتطلبات الوظيفية للبرنامج‪.‬‬

‫الخطوات المتبعة في تصميم حالة اختبار الصندوق األسود هي‪:‬‬

‫طرق االختبار القائمة على الرسم البياني‬ ‫‪‬‬


‫تقسيم متكافىء‬ ‫‪‬‬
‫تحليل قيمة الحدود‬ ‫‪‬‬
‫اختبار المقارنة‬ ‫‪‬‬

‫استراتيجيات اختبار البرمجيات‪:‬‬

‫توفر استراتيجية اختبار البرامج خريطة طريق لمطور البرامج‪ .‬االختبار عبارة عن مجموعة من األنشطة ال تي يمكن‬
‫التخطيط لها مسبًقا وإجراؤها بشكل منهجي‪ .‬لهذا السبب‪ ،‬يجب تحديد قالب الختب ار البرمجي ات‪ ،‬وه و عب ارة عن مجموع ة من‬
‫الخط وات ال تي يمكنن ا من خالله ا وض ع ط رق تص ميم حال ة اختب ار معين ة‪ ،‬لعملي ة هندس ة البرمجي ات‪ .‬يجب أن تتمت ع أي‬
‫استراتيجية الختبار البرمجيات بالخصائص التالية‪:‬‬

‫يبدأ االختبار على مستوى الوحدة ويعمل "خارجًيا" نحو تكامل النظام القائم على الكمبيوتر بالكامل‪.‬‬ ‫‪‬‬
‫تقنيات االختبار المختلفة مناسبة في أوقات مختلفة‪.‬‬ ‫‪‬‬
‫يقوم مطور البرنامج ومجموعة اختبار مستقلة بإجراء االختبار‪.‬‬ ‫‪‬‬
‫يع د االختب ار وتص حيح األخط اء من األنش طة المختلف ة ولكن يجب اس تيعاب تص حيح األخط اء في أي اس تراتيجية‬ ‫‪‬‬
‫اختبار‪.‬‬

‫وحدة التجارب‪:‬يركز اختبار الوحدة على جهود التحقق في أصغر وحدة من تصميم البرامج (الوحدة النمطية)‪.‬‬
‫اعتبارات اختبار الوحدة‬

‫إجراءات اختبار الوحدة‪:‬‬

‫اختبار التكامل‪ :‬اختبار التكامل هو أسلوب منهجي لبناء هيكل البرنامج أثناء إج راء االختب ارات للكش ف عن األخط اء‬ ‫‪‬‬
‫المرتبطة بالتفاعل‪ .‬هناك نوعان من اختبارات التكامل‪:‬‬
‫التكامل من أعلى إلى أسفل‪ :‬التكامل من أعلى إلى أسفل هو نهج تدريجي لبناء هياكل البرن امج‪ .‬يتم دمج الوح دات عن‬ ‫‪‬‬
‫طريق التحرك لألسفل من خالل التسلسل الهرمي للتحكم بدًء ا من وحدة التحكم الرئيسية‪.‬‬
‫التكامل من أسفل إلى أعلى‪ :‬التكامل من أسفل إلى أعلى‪ ،‬كما يوحي اس مه‪ ،‬يب دأ البن اء واالختب ار باس تخدام الوح دات‬ ‫‪‬‬
‫التلقائية‪.‬‬
‫اختبار االنحدار‪ :‬في هذه المسابقة الستراتيجية اختبار التكامل‪ ،‬اختبار االنحدار ه و إع ادة تنفي ذ مجموع ة فرعي ة من‬ ‫‪‬‬
‫االختبارات التي تم إجراؤها بالفعل لضمان عدم نشر التغييرات آلثار جانبية غير مقصودة‪.‬‬

‫اختبار التحقق‪:‬‬

‫في ذروة اختبار التكامل‪ ،‬يتم تجميع البرامج بالكامل كحزمة واحدة؛ تم الكشف عن أخطاء الواجهة وتصحيحها‪ ،‬وقد تبدأ سلسلة‬
‫نهائية من اختبارات البرامج ‪ -‬اختب ار التحقق من الص حة‪ .‬يمكن ف رض غرام ات على التحقق من الص حة بع دة ط رق‪ ،‬ولكن‬
‫التعريف البسيط هو أن التحقق ينجح عندما يعمل البرنامج بطريقة يمكن أن يتوقعها العميل بشكل معقول‪.‬‬

‫يتم تحديد التوقعات المعقولة في مواصفات متطلبات البرن امج ‪ -‬وهي وثيقة تص ف جمي ع س مات البرن امج المرئي ة للمس تخدم‪.‬‬
‫تحتوي المواصفات على قسم بعنوان "معايير التحقق من الصحة"‪ .‬تشكل المعلومات الواردة في هذا القسم األس اس لنهج اختب ار‬
‫التحقق من الصحة‪.‬‬

‫معايير اختبار التحقق‪:‬‬

‫يتم التحقق من صحة البرامج من خالل سلسلة من اختبارات الصندوق األسود التي تثبت توافقها مع المتطلب ات‪ .‬تح دد‬
‫خطة االختبار فئات االختبارات التي سيتم إجراؤها‪ ،‬ويحدد إجراء االختبار حاالت اختب ار مح ددة س يتم اس تخدامها في محاول ة‬
‫للكشف عن األخطاء بما يتوافق مع المتطلبات‪ .‬تم تصميم كل من الخطة واإلجراءات لضمان تلبي ة جمي ع المتطلب ات الوظيفي ة؛‬
‫يتم تحقيق جميع متطلبات األداء؛ التوثيق صحيح ومصمم بواسطة اإلنسان؛ ويتم استيفاء المتطلبات األخرى‪.‬‬

‫بعد إجراء كل حالة اختبار للتحقق من الص حة‪ ،‬يوج د أح د الش رطين المحتملين‪ )1( :‬تتواف ق الوظيف ة أو خص ائص األداء م ع‬
‫المواصفات ويتم قبولها‪ ،‬أو (‪ )2‬يتم الكشف عن االنحراف عن المواصفات ويتم إنش اء قائم ة العي وب‪ .‬ن ادًرا م ا يمكن تص حيح‬
‫االنحراف أو الخطأ الذي تم اكتشافه في هذه المرحلة في المشروع قبل االنتهاء المقرر‪ .‬غالًبا ما يكون من الض روري التف اوض‬
‫مع العميل لتحديد طريقة لحل أوجه القصور‪.‬‬
‫مراجعة التكوين‪:‬‬

‫أحد العناصر المهمة في عملية التحقق من الصحة هو مراجعة التكوين‪ .‬الهدف من المراجع ة ه و التأك د من أن جمي ع‬
‫عناصر تكوين البرنامج قد تم تطويرها بشكل صحيح‪ ،‬وفهرستها‪ ،‬والحصول على التفاصيل الالزم ة ل دعم مرحل ة الص يانة في‬
‫دورة حياة البرنامج‪ .‬تسمى مراجعة التكوين أحياًنا بالتدقيق‪.‬‬

‫اختبار ألفا وبيتا‪:‬‬

‫يكاد يكون من المستحيل لمطور البرامج أن يتنبأ بالكيفية التي سيستخدم بها العميل البرنامج حًق ا‪ .‬ق د يتم إس اءة تفس ير‬
‫تعليمات االستخدام؛ قد يتم استخدام مجموعة غريبة من البيانات بانتظ ام؛ واإلخ راج ال ذي ب دا واض ًحا للمخت بر ق د يك ون غ ير‬
‫مفهوم للمستخدم في الميدان‪.‬‬

‫عندما يتم إنشاء برنامج مخصص لعميل واحد‪ ،‬يتم إجراء سلسلة من اختب ارات القب ول لتمكين العمي ل من التحقق من‬
‫صحة جميع المتطلبات‪ .‬يمكن أن يتراوح اختبار القب ول‪ ،‬ال ذي يجري ه المس تخدم النه ائي ب دًال من مط ور النظ ام‪ ،‬من "اختب ار‬
‫قيادة" غير رسمي إلى سلسلة من االختبارات مخططة ومنفذة بشكل منهجي‪ .‬في الواقع‪ ،‬يمكن إج راء اختب ار القب ول على م دى‬
‫أسابيع أو أشهر‪ ،‬وبالتالي الكشف عن األخطاء التراكمية التي قد تؤدي إلى تدهور النظام بمرور الوقت‪.‬‬

‫إذا تم تط وير البرن امج كمنتج ليتم اس تخدامه من قب ل العدي د من العمالء‪ ،‬فمن غ ير العملي إج راء اختب ارات القب ول‬
‫الرسمية مع كل واحد منهم‪ .‬يستخدم معظم منشئي منتجات البرامج عملية تسمى اختبار ألفا وبيتا للكشف عن األخطاء ال تي يب دو‬
‫أن المستخدم النهائي هو الوحيد القادر على اكتشافها‪.‬‬

‫يجري العميل اختبار ألفا في موقع المطور‪ .‬يتم استخدام البرن امج في بيئ ة طبيعي ة حيث يقوم المط ور "ب النظر ف وق‬
‫كتف" المستخدم وتسجيل األخطاء ومشاكل االستخدام‪ .‬يتم إجراء اختبارات ألفا في بيئة خاضعة للرقابة‪.‬‬

‫يتم إجراء االختبار التجري بي في واح د أو أك ثر من مواق ع العمالء بواس طة المس تخدم النه ائي للبرن امج‪ .‬على عكس‬
‫اختبار ألفا‪ ،‬المطور غير موجود بشكل ع ام‪ .‬ول ذلك‪ ،‬ف إن االختب ار التجري بي ه و تط بيق "مباش ر" للبرن امج في بيئ ة ال يمكن‬
‫للمطور التحكم فيها‪ .‬يسجل العميل جميع المشكالت التي تمت مواجهتها أثناء االختبار التجريبي ويبلغ المط ور به ا على ف ترات‬
‫زمنية منتظمة‪ .‬نتيجة للمشاكل ال تي تم اإلبالغ عنه ا أثن اء اختب ار الرهان ات‪ ،‬يقوم مط ور البرن امج ب إجراء التع ديل ثم يس تعد‬
‫إلصدار منتج البرنامج إلى قاعدة العمالء بأكملها‪.‬‬

‫خاتمة‬

‫بعد رؤية العديد من التطورات والتغييرات في تكنولوجيا تتبع الموقع‪ ،‬أصبح لدى السكك الحديدية الهندي ة اآلن القدرة‬
‫على تحديد الموقع والسمات األخرى للقطار التشغيلي بطريقة اقتص ادية دقيقة‪ .‬ومن ثم فمن الواض ح أن ه لمواكب ة الطلب الي وم‬
‫على المعلومات واالمتثال للحكم الذي يركز على المواطن‪ ،‬يعد التقدم التكنولوجي ض رورًيا لدول ة من دول الع الم الث الث‪ ،‬حيث‬
‫أن العوامل الحاسمة لنجاح أي دولة ستكون في نهاية المطاف على م دى تعاونه ا وتعاونه ا‪ .‬مض اعفة إط ار الحوكم ة من حيث‬
‫التدفق السلس للمعلومات الدقيقة وفي الوقت المناسب بين النظام البيئي للحوكمة‪.‬‬

You might also like