CS602: Java Programming
Fall2016
Dr. Mabroka A.M.
.8الحزم packages ُ الحزمة عبارة عن مجلد directoryتنظم فيها ال classesاملرتبطة مع بعضها البعض بحيث كل مجموعة من هذه ال classesلها وظائف معينة و مشتركة .و تمتاز لغة جافا باحتوائها على عدد هائل من ال classesاملرتبة في حزم .packagesو من اهمها: *java.util. *javax.swing. *java.awt. *java.io. و غيرها من الحزم العديدة التي تصاحب بيئة javaأو تتواجد من قبل املبرمجين .و تسمح هذه الحزم بإعادة االستخدام ل classesاملوجودة فيها ضمن العديد من التطبيقات حسب الحاجة. و قبل استخدام أي classمرة أخرى في أي برنامج ،يجب وضعها في حزمة وفق الخطوات املبينة في الفقرة التالية. .1 .2
.3
تكوين الحزمة package creation التصريح ب classعلى أنها public اختيار اسم وحيد ل ،packageثم إضافة هذا التصريح الى امللف املصدر الذي يحتوي على ،public classبحيث أن لكل ملف مصدر هناك تصريح باسم packageواحد و واحد فقط .و يجب ان يسبق التصريح بالكلمة املحجوزة packageكل جملة في البرنامج (امللف املصدر). ترجمة التصنيف compile the class حتى يمكن تضمين هذه الحزمة في البرنامج املناسب. ;2 package com.CS602
Public class Book { ………. ……… } .4تضمين الحزمة في البرنامج املراد استخدام ال classفيه ،كما هو موضح في املثال التالي: ;import com.CS602 1
31
CS602: Java Programming
Fall2016
Dr. Mabroka A.M.
.9الوراثة inheritance ً هي عملية إنشاء classجديدة تأخذ خصائص classموجودة مسبقا (وراثة) و تضيف خصائص أخرى لها حسب الحاجة. ً ُ تسمى classاملوجودة مسبقا (القديمة) ب ،superclassأما ال classالجديدة فتسمى ب.subclass كل classجديدة ( )subclassترث من ال classالقديمة ( )superclassكل خصائصها (بياناتها) و سلوكها (دوالها). في لغة جافا ،كل subclassجديدة ترث من superclassقديمة واحدة فقط .و ليس كما في لغة C++التي تتميز بالوراثة املتعددة. ً في الغالب subclass ،يكون اكبر حجما من ،superclassلكن ل superclassكائنات أكثر. تتمثل أهمية الوراثة في لغة جافا بالتالي: .1عدم تكرار إعادة كتابة الكود. .2سهولة تعديل البرنامج. .3امكانية انشاء classأخرى من classقديمة سبق انشائها من قبل مبرمجين آخرين. خطوات تكوين subclassمن :superclass ً أوال :استخدام الكلمة املحجوزة extendsكما في الشكل التالي: اسم التصنيف اسم التصنف كلمة محجوزة subclassكلمة محجوزة معدل الوصول (اختياري )optional superclass
Access modifier class class-name extends class-name { ………………….. } ً ثانيا :استخدام الكلمة املحجوزة معدل الوصول protectedمع املتغيرات و الثوابت املوجودة في superclassلكي تسمح لكل subclassمنها بالوصول اليها. ً ثالثا :استخدام الكلمة املحجوزة ( ) superالستدعاء دالة بناء موجودة في ال superclassمن قبل ُ دالة بناء موجودة في subclassو امكانية تمرير قيم (بيانات) إليها ،كما يمكن أن تستخدم ال superللتميز بين متغيرات superclassو subclassاملتشابهة.
32
CS602: Java Programming
Fall2016
Dr. Mabroka A.M.
مالحظات: .1كل objectمن subclassهو objectمن .superclass .2يمكن أن يكون ل superclassأكثر من ،subclassو لكن ليس العكس. .3يمكن تمثيل العالقة بين ال superclassو subclassب.is relationship .4كل classيمكن أن ترث من ال classالتي تسبقها (التسلسل الهرمي). .5تعتبر ال object classهي ال classاالم الرئيسية املوجودة في مكتبة جافا ()superclass ألي classفي البرنامج في حالة عدم تحديد .superclassو أي classفي برنامج جافا ترث ً ضمنيا من object classالرئيسية . .6تحتوي object classالرئيسية على مجموعة من الدوال التي يمكن استخدامها في أي ُ برنامج لتنفيذ غرض معين .و من اهمها )( toStringالتي تستخدم لعرض مجموعة من البيانات لكائن ما ،و هي تشبه الشكل العام لدالة العرض ،printfو الشكل العام لها هو: )(public String toString { ;) اسماء املتغيرات “,وصف صيغة العرض“(return String.format } ً و يتم استدعاء الدالة )( toStringظاهريا باستخدم الشكل التالي: دالة العرض نقطة اسم الكائن ;)(Object-name.toString
33
CS602: Java Programming
Fall2016
Dr. Mabroka A.M.
الدوال الزائدة overriding methods يمكن لدالة ما أن تتواجد في superclassو subclassبنفس االسم و بنفس البارامترات على أن تستدعي الدالة املوجودة في subclassنفسها (املوجودة في ) superclassو ذلك من أجل أداء مهمة عامة (الي كائن كان) ثم تكمل الدالة املوجودة في subclassمهمة خاصة (تتعلق بالكائن املكون ُ من هذه .) subclassهذه الدوال تسمى ب.overriding methods ُ تستخدم superالستدعاء الدالة املوجودة في superclassبشرط ان يتم االستدعاء من دالة في subclassبنفس االسم. ُ ُ تسمى العملية السابقة ب ،overridingبينما تسمى هذه الدوال ب.overriding methods الستدعاء دالة ،overridingنتبع الشكل التالي: اسم الدالة نقطة كلمة محجوزة معامالت(اختيارية) ; ) Super.method-name ( parameters **سؤال املحاضرة: شركة بها نوعان من املوظفين ،موظف عمولة حيث يتقاض ى مبلغ من املال (عمولة) مقابل تسويق منتج الشركة ،و موظف مرتب و عمولة حيث يتقاض ى مرتب من الشركة مع مبلغ من ً ً املال (عمولة) مقابل تسويق منتج الشركة أيضا .اكتب برنامج بلغة جافا مستخدما ( )inheritance & overriding methodيقوم بالتالي: .1عرض بيانات كل موظف. .2حساب و عرض اجمالي ما يتقاضاه كل موظف اذا علمت ان نسبة العمولة هي .0.1 تحليل سؤال البرمجة: ً أوال :تحديد input & output بما أن املطلوب االول في السؤال هو عرض بيانات كل موظف ،أذن البد من تحديد هذه البيانات و ادخالها بالطريقة املناسبة لعرضها على الشاشة. Input output البيانات االساسية لكل موظف البيانات االساسية لكل موظف Firstname firstname Lastname lastname Socialno socialno sale sale Totals ? 34
CS602: Java Programming
Fall2016
Dr. Mabroka A.M.
ً وفقا للمطلوب االول ،فإن البيانات االساسية هي :االسم االول ،االسم االخير ،رقم الضمان االجتماعي ،مقدار املبيعات ،اجمالي ما يتقاضاه. ً ً ثانيا :تحديد املعالجة ،بمعنى معرفة ما إذا كان هناك outputيكون نتيجة عملية ما (مثال عملية حسابية) .بالنظر الى السؤال الحالي ،نجد ان اجمالي ما يتقاضاه هو املطلوب الثاني في السؤال .إذن ،البد من عملية ما (سلوك ُيترجم الى دالة )methodاليجاد اجمالي ما يتقاضاه كل موظف ثم عرضه على الشاشة. العملية هي: .1اجمالي ما يتقاضاه موظف العمولة = مقدار املبيعات (*)saleالنسبة ()rate .2اجمالي ما يتقاضاه موظف املرتب و العمولة= مقدار املبيعات (*)saleالنسبة ( + )rateاملرتب (.)salary ً ثالثا :تحديد طريقة البرمجة :بما ان لغة البرمجة هي جافا ،إذن ،نوع البرمجة هي OOP ً بناءا على ذلك ،يتم اتباع خطوات محددة لكتابة برنامج OOPكما يلي: .1تحديد الكائنات :لدينا نوعان من املوظفين .إذن ،نحتاج لكائنين :كائن موظف عمولة ،و كائن آخر موظف مرتب و عمولة. .2لكل كائن نموذج خاص به ()class .3الحظ ان الكائنين يتفقان في البيانات االساسية ويختلفان في اجمالى ما يتقاضاه كل منهما. .4املطلوب في البرنامج استخدام الوراثة (لتجنب تكرار البيانات االساسية) ً .5مطلوب أيضا استخدام الدوال الزائدة (لتجنب تكرار العمليات الحسابية). **كتابة classes **كتابة البرنامج الرئيس ي
35
CS602: Java Programming
Fall2016
Dr. Mabroka A.M.
.01تعدد االشكال polymorphism ً ُ يمكن لدالة ما أن تؤدي اكثر من وظيفة وفقا السم الكائن الذي يستدعيها .هذه العملية تسمى بتعدد االشكال .polymorphism بما ان كل كائن من subclassهو كائن من ،superclassأذن :يمكن أن يكون هناك عدد كبير من الكائنات objectsاملتنوعة (كل كائن من subclassمختلفة) تنتمي الى نفس .superclass يمكن ان تشير متغيرة objectمن نوع superclassالى كائن من نوع .subclass بما ان كل objectمن subclassيمكن التعامل معه على انه objectمن ،superclassإذن: يمكن وضع هذه الكائنات املختلفة مع بعضها البعض (مصفوفة من نوع )superclassبحيث يدل كل عنصر فيها على كائن ما داخل املصفوفة من subclassesالتي ترث من هذه .superclass إذن ،يمكن ملتغير من نوع ( superclassاسم املصفوفة) أن يحتوي (او يشير الى ) أكثر من نوع من كائنات من subclassesمختلفة ،هذا املتغير حيئذ ُيسمى بمتغير متعدد االشكال. كما يمكن لدالة ما ان تقوم بعدة مهام مختلفة حسب نوع الكائن الذي يستدعيها ،و تسمى هذه الدالة حيئذ بدالة متعددة االشكال. مالحظات: .1تتم عملية تخصيص الكائن ملتغير كائن آخر من نوع superclassاثناء زمن التنفيذ ،و ليس عند عملية الترجمة (.)compilation .2باستخدام الدوال ،overridingيمكن التعامل مع املتغيرات الخاصة املصرح بها داخل ال.superclass .3نوع الكائن هو الذي يحدد الدالة املراد استدعائها. **سؤال املحاضرة أكتب برنامج بلغة الجافا يحاكي حركة حيوانات (اسد بري ،حمامة طائر ،سمك السردين) ليحسب املسافة التي يقطعها كل حيوان في زمن قدره ن ،ثم يعرض بيانات كل حيوان و املسافة ً املقطوعة ،مع خصم حجم الحيوان من أجمالي املسافة (مستخدما تعدد االشكال .)polymorphism
36