🧪 التدريب العملي الوحدة 5: البرمجة الشيئية · الدرس 13 من 17
تدريب عملي

التدريب العملي 53: تغليف كلاس المستخدم

تطبيق الخطوات أعلاه على مشروع lab53.

class User - passwordمخفية + get()+ set() الوصول عبر دوال عامة بشروط

من الدرس 13. دالة البناء والتغليف · كل التدريبات

١نص المسألة

طبّق التغليف على كلاس User: اجعل username و password من نوع private، واكتب لهما دوال get و set. دالة setUsername ترفض أي اسم يحتوي على =، ودالة setPassword تقبل فقط كلمة مرور طولها من 6 إلى أقل من 30 حرفًا.

٢الخوارزمية المقترحة

أ) تصميم الكلاسات

  1. الكلاس User:
  2. خاصيتان مخفيتان private: اسم المستخدم، وكلمة المرور
  3. دوال get تعيد القيم
  4. دالة تعيين الاسم: إذا احتوى الاسم على = اطبع رسالة خطأ، وإلا احفظه
  5. دالة تعيين كلمة المرور: إذا كان طولها من 6 إلى أقل من 30 احفظها، وإلا اطبع رسالة خطأ

ب) خطوات البرنامج الرئيسي

  1. ابدأ
  2. أنشئ المستخدم الأول بقيم غير صالحة
  3. تظهر رسالتا خطأ، ولا تُحفظ القيم
  4. اطبع قيمه بدوال get
  5. أنشئ المستخدم الثاني بقيم صالحة
  6. اطبع قيمه بدوال get
  7. توقف

٣خطوات التطبيق

في NetBeans

  1. أنشئ مشروع lab53 وكلاس User بخاصيتين public.
  2. Insert Code‏ ← ‏Getter and Setter‏ ← ‏حدّد الكل‏ ← ‏فعّل Encapsulate Fields‏ ← ‏Generate.
  3. عدّل setUsername و setPassword بإضافة الشروط.
  4. اكتب Main ونفّذ.

في OneCompiler

  1. افتح OneCompiler من زر «▶ شغّل المشروع» أسفل الحل، أو من موقع onecompiler.com/java.
  2. في OneCompiler تُكتب كل الكلاسات في ملف واحد Main.java؛ زر التشغيل يجمعها لك تلقائيًّا.
  3. إذا كان البرنامج يقرأ من لوحة المفاتيح، فاكتب المدخلات في خانة STDIN التي تظهر تحت الكود في محرّر OneCompiler، ثم اضغط Run.

٤المخرجات المطلوبة

نفّذ برنامجك، ويجب أن تظهر المخرجات التالية:

Output – (run)×
run:
Error: username cannot contain an equals sign (=)
Error: password must be 6-30 characters long
username: null
password: null
username: med88
password: tu88tu
BUILD SUCCESSFUL (total time: 0 seconds)

٥الحل المقترح

حاول بنفسك أولًا، ثم قارن حلّك بالحل المقترح (كود التدريب من مذكرة العملي):

👁 اعرض الحل المقترح
package lab53;public class User {    private String username;    private String password;     public String getUsername() {        return username;    }     public void setUsername(String username) {        if (username.contains("=")) {            System.out.println("Error: username cannot "                    + "contain an equals sign (=)");        } else {            this.username = username;        }    }     public String getPassword() {        return password;    }     public void setPassword(String password) {        if (password.length() >= 6 && password.length() < 30) {            this.password = password;        } else {            System.out.println("Error: password must be "                    + "6-30 characters long");        }    }}
package lab53;public class Main {    public static void main(String[] args) {        User user1 = new User();        user1.setUsername("abc=856");        user1.setPassword("a123b");        System.out.println("username: " + user1.getUsername());        System.out.println("password: " + user1.getPassword());         User user2 = new User();        user2.setUsername("med88");        user2.setPassword("tu88tu");         System.out.println("username: " + user2.getUsername());        System.out.println("password: " + user2.getPassword());    }}
مخطط المشروع مستخرج من الكود. انقر على أي كلاس لفتح كوده.
UserMain
User- username : String- password : String+ getUsername() : String+ setUsername(username : String) : void+ getPassword() : String+ setPassword(password : String) : voidMain+ main(args : String[]) : void

ملفات المشروع في تبويبات كما في NetBeans. زر التشغيل يجمعها في ملف واحد ليعمل على OneCompiler.

Output – lab53 (run)×
run:
Error: username cannot contain an equals sign (=)
Error: password must be 6-30 characters long
username: null
password: null
username: med88
password: tu88tu
BUILD SUCCESSFUL (total time: 0 seconds)

أسئلة المناقشة

أسئلة مناقشة على التدريب 10. إجاباتك تُحفظ تلقائيًّا على هذا الجهاز؛ أجب ثم اضغط «صحّح ورقتي».

1السؤال الأول: اختر الإجابة الصحيحة

1) في الكود السابق، لماذا عرّفنا المتغيرات username و password بأنها private؟
2) ما وظيفة دوال setUsername و setPassword في الكلاس User؟
3) إذا حاولنا وضع "=" داخل username، ماذا سيحدث؟
4) ما هو الشرط لقبول كلمة المرور (password)؟ التي في هذا التدريب
5) عند استدعاء getUsername()، ماذا يحدث؟
أجب عن الأسئلة ثم اضغط «صحّح ورقتي».