فكرة! في كتابة الجافا OOP ـ set, get أسهل عند إعادة إستخدام الكود.

مرحباً. منذ زمن لم أكتب شيئاً تقنياً.

والآن جاء الوقت لكي أعطيكم جرعة قاتله من المواضيع التقنية ^^. سأبدأ بهذه الفكرة التي إكتشفتها اليوم. ربما تبدو غريبة لمبرمجي الجافا لكنها عملية جداً وتفيد لصنع كود قابل لإعادة الإستخدام وكي نطبق مبدأ (عدم إختراع العجلة!). بعد المقدمة، أبدأ بالزبدة.

الفكرة وما فيها هي وضع طريقة أفضل وأكثر عملية للبرمجة الكائنية وخصوصاً الـSetter والـGetter للفئات.
(تحتاج لفهم هذا دراسة أساسيات لغة الجافا أو أي لغة برمجة تدعم oop وكذلك دراسة البرمجة الكائنية OOP بها، إن لم تكن كذلك فلا تقرأ المقال!).

ربما كما درست فإن مبرمجي الجافا يفضلون وضع Setter وGetter لكل خاصية(Properties) في الصنف بدلاً من ترك الخاصية public للسيطرة عليها في حال طرأ تغيير عليها. وهي طريقة جداً جملية حيث بها تضمن قلة الأخطاء إلى أدنى حد ممكن. خصوصاً إذا كنت مطور مكتبات (Programming Libraries) أو مطور SDK ولو كانت صغيرة. سترى أن هذا الأمر مهم جداً للسيطرة على الكود وإدراته وإستخدام ميزات oop بأفضل وجه (تابع قراءة المقال).

لكن الطريقة العادية في وضع الـSetter, Getter طريقة سيئة برأيي. وندرسها نحن في مقرر الـJava-oop كطلاب علم الحاسوب.

مثلاً someDot هو كائن من الصنف Dot3D لديه ثلاث خواص هم x, y, z يمثلون موقع النقطة في مستوى الأحداثيات.
لو أردنا التحكم بالخواص من خلال وضع Setter, Getter لكل واحدة سنقوم بوضع الـMethods كما نعرف وكالمعتاد سنعرف الصنف وسينتج كائن someDot قابلاً للإستخدام كالتالي:

// Set values
someDot.setX(10);
someDot.setY(13);
someDot.setZ(48);

// Print them
System.out.println("X: " + someDot.getX()
+ ", Y: " + someDot.getY() + ", Z: " + someDot.getZ() );

ألا ترى ان هذه العملية مزعجة؟ أن تقوم بإسناد القيم لكل خاصية بواسطة Setter مستقل؟ ماذا لو كان هناك Setter يعمل بصورة متفاعلة بحيث تعطيه الخاصية وقيمتها أو الخواص وقيمهم، وبدون ترتيب إجباري؟ أو عدد معين من الخواص؟؟ هل تريد طريقة تختصر عليك الكتابة بأفضل وجه؟ وبكود مفهوم؟ هذا ما فعلته!

أنظر هذا الكود، وتعلم كيف ستستطيع وبكل سهولة الحصول على واحد مثله بيدك!، لاحظ الشرح بعد الكود:

someDot.x(10);
someDot.y(20);

هنا وضعنا قيمة لكل من x, y. بواسطة Setter سهل التذكر! وكذلك إملائياً سهل أن تفهم ماهو!

someDot.x(20).y(120);

هل رأيت هذا الكود! أليس أجمل؟ إسندنا القيم لكليهما في نفس الأمر!

someDot.z(10).x(24).y(10).x(20);

وهذا! بعد! هل رأيت تغيير أربع قيم! من ضمنها القيمة س مرتين، لا يوجد ترتيب إجباري ولا عدد معين من المرات للتغيير.

ربما تفكر الآن وكيف نأخذ القيم بواسطة Getter وبنفس السهولة؟؟ شاهد الأكواد التالية وأنظر الشرح بعد كل واحد:

int a = someDot.x();

الفرق بينهما أن عند إسناد قيمة يجب أن تمررها داخل الطريق (ميثود)ـ
أما عند طلب الحصول على القيمة ببساطة! لا تمرر وسيط (parameter) وتحصل على القيمة الحالية لها!

int num = someDot.x(20).y(50).z();

نستطيع المزج في الأمر الواحد بين عدة مسندات (setter) وفي النهاية محصل واحد (getter)
في هذه الحالة نحن نسند قيمة لكل من x، y وبعدها نأخذ قيمة z ونضعها في المتغير (num)

هذه الفكرة لوجه الله أضعها لكم كي تستفيدوا منها :) . وملاحظة، هذه الطريقة متبعة في بعض المكتبات مثل jQuery، مع أنها ليست في لغة جافا لكن لا بأس أن نتعلم منهم.

هل رأيت؟ ما رأيك بالفكرة؟؟ لدي لك مفاجأة .. الكود الكامل لكيفية عمل ذلك!
أنظر الصفحة التالية من هنا.

روابط مفيدة:

صفحات: 1 2

وسوم: , , , ,

التعليقات 6 على “فكرة! في كتابة الجافا OOP ـ set, get أسهل عند إعادة إستخدام الكود.”

  1. فردوس علق:

    سبق و أن درست الـOOP في ++c

    سبحان الله كانت أول مادة برمجية كرهتها !!

    كوني دائماً استمتع بلغات البرمجة .

  2. عمر الدليمي علق:

    تعقيب على [فردوس]:

    سبق و أن درست الـOOP في ++c

    أنا درست الoop أول مرة بالسي++ .. وسأدرسها بالجامعة بلغة جافا..
    إنصحكِ بإعادة دراستها من مصادر أخرى فهي مادة ضرورية لطالب علم الحاسوب :) .

    كوني دائماً استمتع بلغات البرمجة .

    هذا أمر مبشر :) … لكِ مستقبل إن شاء الله!

  3. hassan علق:

    atlobo minkom an tisa3idouni fi ta3lim kol mayata3ala9o bilhasoub wa lakom mini jazila achokr

  4. ابن فلسطين علق:

    يسلمو ع الشرح … مشكور اخوي وبارك الله فيك

  5. عصام الشحات علق:

    انا دخلت الموقع تايه وطالع منه وكلى اراده انى اتعلم حاجه لكن انا متأكد انى بكره هنسى واحاول ادور على اى حاجه اعملها غير انى اقرأ حاجه قرأتها قبل كده اسف العيب عندى انا

  6. عمر الدليمي علق:

    @عصام الشحات:

    انا دخلت الموقع تايه وطالع منه وكلى اراده انى اتعلم حاجه لكن انا متأكد انى بكره هنسى واحاول ادور على اى حاجه اعملها غير انى اقرأ حاجه قرأتها قبل كده اسف العيب عندى انا

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

أضف تعليقاً

لتعرف كيفية وضع الإبتسامات داخل التعليق إضغط هنا