لقد حاولنا تحديد الفئات. يؤدي تحديد الفصل إلى إنشاء نوع جديد. مع وجود الفئة في مكانها، نقوم بعد ذلك ببناء كائنات من النوع المقابل. علاوة على ذلك، يجب أن يكون لكل نوع أيضًا واجهة واضحة ليستخدمها المستخدمون.
يمكننا استخدام كائنات أخرى في تعريف فئة جديدة. هذا هو التكوين. يعد الجمع إحدى الوسائل الأساسية لتحقيق إمكانية إعادة استخدام البرنامج في Java.
مزيج مع "has-a"
كائن واحد هو عضو بيانات في كائن آخر. على سبيل المثال، دعونا نلقي نظرة على مثال المصباح القابل لإعادة الشحن المذكور سابقًا:
البطارية، ضوء LED، الزر... في مصباح يدوي قابل لإعادة الشحن يمكن أن تكون جميعها أشياء. يمكننا تحديد فئة البطارية لتحديد وإنشاء كائنات البطارية. في تعريف فئة المصباح اليدوي القابل لإعادة الشحن، يمكن استخدام كائن البطارية كعضو بيانات خاص به لتمثيل حالة جزء البطارية.
نحدد فئة البطارية أدناه ونستخدم الطاقة لتمثيل قوتها. يمكن شحن البطارية (شحن البطارية) واستخدامها (استخدام البطارية). نستخدم كائنات نوع البطارية كأعضاء بيانات في تعريف فئة Torch اللاحق:
انسخ رمز الكود كما يلي:
classBattery
{
شحن البطارية العامة (ع مزدوج)
{
إذا (هذه.القوة <1.) {
this.power = this.power + p;
}
}
الاستخدام المنطقي العام للبطارية (ع مزدوج)
{
إذا (this.power >= p) {
this.power = this.power - p;
عودة صحيحة؛
}
آخر {
this.power = 0.0;
عودة كاذبة.
}
}
القوة المزدوجة الخاصة = 0.0؛
}
com.classTorch
{
/**
* 10% طاقة لكل ساعة استخدام
* تحذير عند انقطاع التيار الكهربائي
*/
تشغيل الفراغ العام (عدد الساعات)
{
منطقية صالحة للاستعمال؛
useable = this.theBattery.useBattery(hours*0.1);
إذا (صالحة للاستخدام! = صحيح) {
System.out.println("لم تعد قابلة للاستخدام، يجب شحنها!");
}
}
/**
* 20% طاقة لكل ساعة شحن
*/
رسوم الفراغ العام (عدد الساعات)
{
this.theBattery.chargeBattery(hours*0.2);
}
/**
* تعبير
*/
بطارية خاصة theBattery = بطارية جديدة () ؛
}
الجديد أعلاه يخصص ذاكرة لكائن البطارية وهو أمر لا غنى عنه.
نحدد فئة البطارية. تستخدم فئة Torch كائنًا من نوع البطارية (theBattery) كعضو بيانات. في طريقة Torch، نقوم بتنفيذ الوظيفة (الوظيفة) التي توفرها فئة البطارية من خلال معالجة واجهة كائن البطارية.
نقول أن كائن الشعلة لديه (يحتوي على) كائن بطارية. ويمكن التعبير عن العلاقة المذكورة أعلاه على النحو التالي:
has-a: يحتوي المصباح اليدوي على بطارية (لاحظ الوصلة ذات الشكل الماسي أعلاه)
من خلال الجمع، يمكننا إعادة استخدام التعليمات البرمجية المتعلقة بالبطارية. إذا كانت لدينا فئات أخرى تستخدم البطارية، مثل الهواتف المحمولة والآلات الحاسبة، فيمكننا دمج كائنات البطارية فيها. وهذا يلغي الحاجة إلى كتابة وظائف منفصلة ذات صلة لكل فئة.
يمكننا إضافة فئة اختبار لرؤية التأثير الفعلي:
انسخ رمز الكود كما يلي:
اختبار الطبقة العامة
{
الفراغ العام الثابت الرئيسي (String[] args)
{
الشعلة aTorch = الشعلة الجديدة ()؛
System.out.println("الشحن: ساعتين");
aTorch.charge(2);
System.out.println("التشغيل الأول: 3 ساعات");
aTorch.turnOn(3);
System.out.println("التشغيل الثاني: 3 ساعات");
aTorch.turnOn(3);
}
}
نتيجة تشغيل البرنامج أعلاه:
الشحن: 2 ساعة
التشغيل الأول: 3 ساعات
التشغيل الثاني: 3 ساعات
لا مزيد من الاستخدام، يجب شحنه!
نستخدم الوظائف التي يوفرها كائن البطارية من خلال الجمع، مثل اكتشاف ما إذا كانت البطارية قد استنفدت (استنادًا إلى قيمة الإرجاع الخاصة بـ useBattery()).
النوع الأساسي
من HelloWorld إلى الكائنات الموجهة، نسمي الأنواع الأساسية int وfloat وdouble وboolean وما إلى ذلك (الأنواع البدائية)، وهي فئات خاصة. يمكننا أن نفهم عددًا صحيحًا ككائن من النوع int. يمكن أن يحتوي النوع int على واجهات تشغيل مثل التعيين والجمع والطرح. يمكن اعتبار الأنواع العادية امتدادًا للأنواع الأساسية. لقد رأينا الأنواع البدائية كأعضاء البيانات، ومعلمات الطريقة، وقيم إرجاع الطريقة، والمتغيرات التلقائية داخل الأساليب. يمكن أيضًا استخدام الكائنات الطبيعية والشائعة، مثل كائنات فئة البطارية والشعلة، في هذه الأماكن.
في لغة C، تكون أنواع البيانات المتاحة (أساسًا) محددة مسبقًا، مثل int وfloat. في Java، بالإضافة إلى استخدام أنواع البيانات المحددة مسبقًا، يمكننا أيضًا تخصيص أنواع البيانات التي نريدها من خلال الفئات ثم استخدامها من خلال المجموعات. ولكن هناك اختلافات بين الأنواع الأساسية والأنواع العادية. غالبًا ما يتم استخدام الأنواع الأساسية وتشغل مساحة صغيرة من الذاكرة، لذلك، في Java، من أجل الكفاءة، تتمتع هذه الأنواع الأساسية بطرق مختلفة لإدارة الذاكرة عن الأنواع العادية (أي الفئات المخصصة). على سبيل المثال، سيتم تخصيص مساحة ذاكرة للأنواع الأساسية بمجرد الإعلان عنها، بينما تحتاج الأنواع العادية إلى استخدام الكلمة الأساسية الجديدة لتخصيص مساحة الذاكرة.
توفر Java أنواعًا شائعة مقابلة لكل نوع أساسي. على سبيل المثال، النوع الأساسي int يتوافق مع النوع الصحيح. إذا تم تحويل كائن من النوع الأساسي إلى متغير النوع الشائع المقابل، فإن ما يسمى بالنوع الأساسي يصبح نوعًا بالمعنى العام (لم يعد هناك اختلاف في إدارة الذاكرة).
بهذه الطريقة، لدينا فهم أعمق لمفهوم Java "كل شيء هو كائن".
تلخيص
الجمع، وقد أ
النوع الأساسي