Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - Validated User

جزء من قسم Object Oriented Programming في رحلة Java على Coddy — الدرس 63 من 87.

challenge icon

التحدي

سهل

لنقم ببناء نظام تسجيل مستخدم كامل يقوم بالتحقق من صحة بيانات الإدخال ويستخدم استثناءات مخصصة (custom exceptions) للتواصل بدقة حول الخطأ الذي حدث! ستجمع كل ما تعلمته في هذا الفصل: الاستثناءات المخصصة من نوع checked و unchecked، والتسلسل الهرمي للاستثناءات، و try-with-resources مع مدقق (validator) قابل للإغلاق التلقائي (auto-closeable).

ستقوم بتنظيم الكود الخاص بك عبر خمسة ملفات:

  • ValidationException.java: قم بإنشاء استثناء من نوع checked يعمل كقاعدة لجميع أخطاء التحقق. يجب أن يرث هذا الاستثناء من Exception ويتضمن منشئًا (constructor) يقبل رسالة.
  • InvalidUsernameException.java: قم بإنشاء استثناء من نوع checked لفشل التحقق من اسم المستخدم. يجب أن يرث هذا من فئة ValidationException الخاصة بك، مما يؤدي إلى إنشاء تسلسل هرمي صغير للاستثناءات. قم بتضمين منشئ يقبل رسالة ويمررها إلى الفئة الأب.
  • InvalidAgeException.java: قم بإنشاء استثناء من نوع unchecked للأخطاء المتعلقة بالعمر (مثل الأعمار السالبة، والتي تمثل أخطاء برمجية). يجب أن يرث هذا من RuntimeException مع منشئ يقبل رسالة.
  • UserValidator.java: قم بإنشاء فئة تنفذ واجهة AutoCloseable لمحاكاة جلسة تحقق يجب إغلاقها بشكل صحيح. يجب على المدقق الخاص بك:

    طباعة Validator session started في المنشئ.

    امتلاك طريقة validateUsername(String username) تطرح InvalidUsernameException إذا كان اسم المستخدم null، أو فارغًا، أو أقل من 3 أحرف (مع الرسالة "Username must be at least 3 characters"). خلاف ذلك، اطبع Username '[username]' is valid.

    امتلاك طريقة validateAge(int age) تطرح InvalidAgeException إذا كان العمر سالبًا (مع الرسالة "Age cannot be negative: [age]"). إذا كان العمر أقل من 13، اطرح ValidationException مع الرسالة "Must be at least 13 years old". خلاف ذلك، اطبع Age [age] is valid.

    تنفيذ close() لطباعة Validator session closed.

  • Main.java: اجمع نظام التحقق الخاص بك معًا! ستتلقى مدخلين: اسم مستخدم (String) وعمر (integer).

    استخدم try-with-resources لإنشاء UserValidator. داخل كتلة try، قم أولاً بالتحقق من اسم المستخدم، ثم تحقق من العمر. إذا نجح كلاهما، اطبع User registration successful!

    قم بالتقاط InvalidUsernameException واطبع Username error: [message]. قم بالتقاط InvalidAgeException واطبع Age error: [message]. قم بالتقاط ValidationException (الأب) واطبع Validation error: [message].

    يجب أن يغلق المدقق تلقائيًا بغض النظر عما إذا كان التحقق قد نجح أم فشل!

ستتلقى مدخلين بالترتيب: اسم المستخدم (String) والعمر (integer).

يجمع هذا التحدي الفصل بأكمله: ستبني تسلسلاً هرميًا للاستثناءات مع ValidationException كأب، وتستخدم كلاً من استثناءات checked و unchecked بشكل مناسب، وتضمن تنظيف مورد المدقق دائمًا باستخدام try-with-resources. لاحظ كيف أن التقاط الأب ValidationException بعد ابنه InvalidUsernameException يتيح لك التعامل مع الحالات المحددة أولاً مع الاستمرار في التقاط أخطاء التحقق الأخرى!

جرّب بنفسك

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // قراءة المدخلات
        String username = scanner.nextLine();
        int age = scanner.nextInt();
        
        // TODO: استخدم try-with-resources لإنشاء UserValidator
        // داخل كتلة try:
        //   1. تحقق من صحة username
        //   2. تحقق من صحة age
        //   3. إذا نجح كلاهما، اطبع "User registration successful!"
        
        // TODO: قم بالتقاط InvalidUsernameException واطبع "Username error: [message]"
        
        // TODO: قم بالتقاط InvalidAgeException واطبع "Age error: [message]"
        
        // TODO: قم بالتقاط ValidationException (الأب) واطبع "Validation error: [message]"
        
        // Note: يجب أن يغلق الـ validator تلقائياً بغض النظر عن النجاح أو الفشل!
    }
}

جميع دروس Object Oriented Programming