قبل أن نفهم فئات جافا وكائناتها، دعونا نقدم بإيجاز البرمجة الموجهة للكائنات. البرمجة هي تصميم البرامج من خلال الكائنات، حيث يمثل الكائن كيانًا ويمكن تحديد الكيان بوضوح.
جافا كلغة موجهة للكائنات. يتم دعم المفاهيم الأساسية التالية:
تعدد الأشكال
يرث
التغليف
خلاصة
عطوف
هدف
مثال
طريقة
تحليل الرسالة
نركز في هذا القسم على مفاهيم الأشياء والفئات.
الكائن : الكائن هو مثيل لفئة وله حالة وسلوك. على سبيل المثال، الكلب شيء. وتشمل حالته: اللون، والاسم، والسلالة؛ وتشمل سلوكياته: هز ذيله، والنباح، والأكل، وما إلى ذلك.
الفئة : الفئة عبارة عن قالب يصف سلوك فئة الكائنات وحالتها.
الآن دعونا نلقي نظرة فاحصة على ماهية الكائن. إذا نظرت إلى العالم الحقيقي من حولك، ستجد أن هناك العديد من الأشياء حولك، مثل السيارات والكلاب والأشخاص وما إلى ذلك. كل هذه الكائنات لها حالتها وسلوكها.
خذ الكلب كمثال، وحالته تشمل: الاسم، والسلالة، واللون، ومن سلوكياته: النباح، وهز ذيله، والجري.
بمقارنة الأشياء الحقيقية والأشياء البرمجية، فهي متشابهة جدًا.
الكائنات البرمجية لها أيضًا حالة وسلوك. حالة كائن البرنامج هي سمته، وينعكس سلوكه من خلال الأساليب.
في تطوير البرمجيات، تعمل الأساليب على التغيرات في الحالة الداخلية للكائنات، كما يتم تنفيذ الاستدعاءات المتبادلة بين الكائنات من خلال الأساليب.
يمكن اعتبار الفئات بمثابة قوالب لإنشاء كائنات Java.
دعونا نفهم تعريف الفئات في Java من خلال الفئة البسيطة التالية:
كلب الطبقة العامة {
سلالة السلسلة
العمر الصحيح؛
لون السلسلة؛
نباح الفراغ (){
}
باطلة جائعة(){
}
النوم الفارغ (){
}
}
يمكن أن يحتوي الفصل على متغيرات من الأنواع التالية:
المتغيرات المحلية : تسمى المتغيرات المحددة في الأساليب أو المنشئات أو كتل البيانات بالمتغيرات المحلية. يتم الإعلان عن المتغير وتهيئته في الطرق، وبعد انتهاء الطريقة، سيتم تدمير المتغيرات تلقائيًا.
متغيرات الأعضاء : متغيرات الأعضاء هي متغيرات محددة في الفصل وخارج نص الطريقة. يتم إنشاء مثيل لهذه المتغيرات عند إنشاء الكائن. يمكن الوصول إلى متغيرات الأعضاء عن طريق أساليب الفئة والمنشئات وكتل البيانات الخاصة بفئة معينة.
متغيرات الفئة : يتم أيضًا الإعلان عن متغيرات الفئة في الفصل، خارج نص الطريقة، ولكن يجب الإعلان عنها كنوع ثابت.
يمكن أن يكون للفئة توابع متعددة في المثال أعلاه: barking()
و hungry()
و sleeping()
كلها توابع للفئة Dog.
كل فئة لديها أساليب البناء. إذا لم يتم تعريف أي مُنشئ بشكل صريح لفئة ما، فسيوفر مترجم Java مُنشئًا افتراضيًا للفئة.
عند إنشاء كائن، يجب استدعاء أسلوب منشئ واحد على الأقل. يجب أن يكون اسم المُنشئ مطابقًا للفئة، ويمكن أن تحتوي الفئة على مُنشئين متعددين.
هنا مثال منشئ:
جرو الطبقة العامة {
publicPuppy(){
}
الجرو العام (اسم السلسلة) {
// يحتوي هذا المُنشئ على معلمة واحدة فقط: الاسم
}
}
يتم إنشاء الكائنات على أساس الفئات. في Java، استخدم الكلمة الأساسية new
لإنشاء كائن جديد. يتطلب إنشاء كائن الخطوات الثلاث التالية:
الإعلان : قم بتعريف كائن، بما في ذلك اسم الكائن ونوعه.
إنشاء مثيل : استخدم الكلمة الأساسية new
لإنشاء كائن.
التهيئة : عند استخدام new
لإنشاء كائن، يتم استدعاء أسلوب المنشئ لتهيئة الكائن.
فيما يلي مثال لإنشاء كائن:
جرو الطبقة العامة {
الجرو العام (اسم السلسلة) {
// يحتوي هذا المنشئ على معلمة واحدة فقط: name
System.out.println("اسم الجرو هو :" + name );
}
الفراغ الثابت العام الرئيسي (String []args) {
// ستؤدي العبارة التالية إلى إنشاء كائن جرو Puppy myPuppy = new Puppy( "tommy" );
}
}
قم بتجميع البرنامج أعلاه وتشغيله، وستتم طباعة النتائج التالية:
اسم الجرو هو: تومي
الوصول إلى متغيرات الأعضاء وأساليب الأعضاء من خلال الكائن الذي تم إنشاؤه كما يلي:
/* إنشاء كائن */
ObjectReference = new Constructor();
/* الوصول إلى المتغيرات */
ObjectReference.variableName;
/* طرق الوصول في الفصل */
ObjectReference.MethodName();
يوضح المثال التالي كيفية الوصول إلى متغيرات الحالة واستدعاء أساليب الأعضاء:
جرو الطبقة العامة {
إنت جروAge؛
الجرو العام (اسم السلسلة) {
// يحتوي هذا المُنشئ على معلمة واحدة فقط: الاسم
System.out.println("الاسم الذي تم تمريره هو :" + name );
}
مجموعة الفراغ العام (int age) {
جروAge = العمر؛
}
كثافة العمليات العامة getAge () {
System.out.println("عمر الجرو هو:" + PuppyAge );
العودة جروالعمر؛
}
الفراغ الثابت العام الرئيسي (String []args) {
/* إنشاء كائن */
الجرو myPuppy = new Puppy( "tommy" );
/* تحديد العمر من خلال الطرق */
myPuppy.setAge(2);
/* استدعاء طريقة أخرى لتحديد العمر */
myPuppy.getAge() ;
/*يمكنك أيضًا الوصول إلى متغيرات الأعضاء كما يلي*/
System.out.println("القيمة المتغيرة:" + myPuppy.puppyAge );
}
}
تجميع وتشغيل البرنامج أعلاه ينتج النتائج التالية:
الاسم الذي تم تمريره هو : تومي
عمر الجرو هو :2
القيمة المتغيرة:2
في الجزء الأخير من هذا القسم، سنتعرف على قواعد الإعلان عن الملفات المصدر. انتبه بشكل خاص لهذه القواعد عند تعريف فئات متعددة في ملف مصدر وعندما تكون هناك بيانات import
وبيانات package
.
يمكن أن يكون هناك فئة public
واحدة فقط في الملف المصدر
يمكن أن يحتوي الملف المصدر على عدة فئات غير public
يجب أن يكون اسم الملف المصدر متوافقًا مع اسم الفئة public
. على سبيل المثال: اسم الفئة public
في الملف المصدر هو Employee
، ثم يجب تسمية الملف المصدر Employee.java
.
إذا تم تعريف فئة في حزمة، يجب أن يكون بيان package
في السطر الأول من الملف المصدر.
إذا كان الملف المصدر يحتوي على بيان import
، فيجب وضعه بين بيان package
وتعريف الفئة. إذا لم يكن هناك بيان package
، فيجب أن يكون بيان import
أولاً في الملف المصدر.
بيان import
وبيان package
صالحان لجميع الفئات المحددة في الملف المصدر. في نفس الملف المصدر، لا يمكن إعطاء إعلانات حزم مختلفة لفئات مختلفة.
تحتوي الفئات على عدة مستويات وصول، وتنقسم الفئات أيضًا إلى أنواع مختلفة: الفئات المجردة، والفئات final
، وما إلى ذلك. وسيتم عرض هذه في الفصل التحكم في الوصول.
بالإضافة إلى الأنواع المذكورة أعلاه، تحتوي Java أيضًا على بعض الفئات الخاصة، مثل الفئات الداخلية والفئات المجهولة.
تُستخدم الحزم بشكل أساسي لتصنيف الفئات والواجهات. عند تطوير برامج Java، قد تكتب مئات أو آلاف الفئات، لذلك من الضروري تصنيف الفئات والواجهات.
في Java، إذا تم تقديم اسم مؤهل كامل، بما في ذلك اسم الحزمة واسم الفئة، فيمكن لمترجم Java تحديد موقع الكود المصدري أو الفئة بسهولة. يتم استخدام عبارة Import
لتوفير مسار معقول حتى يتمكن المترجم من العثور على فئة معينة.
على سبيل المثال، سيوجه سطر الأوامر التالي المترجم لتحميل جميع الفئات في مسار java_installation/java/io
استيراد java.io.*;
في هذا المثال، قمنا بإنشاء فئتين: الموظف وEmployeeTest.
قم أولاً بفتح محرر النصوص ولصق الكود التالي فيه. لاحظ أنه يتم حفظ الملف باسم "Employee.java".
تحتوي فئة الموظف على أربعة متغيرات للأعضاء: الاسم والعمر والمنصب والراتب. تعلن الفئة بشكل صريح عن طريقة إنشاء بمعلمة واحدة فقط.
استيراد java.io.*;
موظف من الدرجة العامة{
اسم السلسلة؛
العمر الصحيح؛
تعيين السلسلة؛
راتب مزدوج
// منشئ فئة الموظف public Employment(String name){
this.name = name;
}
// قم بتعيين قيمة العمر public void empAge(int empAge){
العمر = empAge;
}
/*ضبط قيمة التعيين*/
public void empDesignation(String empDesig){
التعيين = empDesig;
}
/*تحديد قيمة الراتب*/
empSalary باطلة عامة (empSalary مزدوج) {
الراتب = empSalary;
}
/* طباعة المعلومات */
طباعة الفراغ العام الموظف () {
System.out.println("الاسم:"+ الاسم );
System.out.println("العمر:" + العمر );
System.out.println("التعيين:" + التعيين );
System.out.println("الراتب:" + الراتب);
}
}
يبدأ تنفيذ البرنامج من الطريقة main
. من أجل تشغيل هذا البرنامج، يجب تضمين الطريقة main
وإنشاء كائن مثيل.
يتم إعطاء فئة "EmployeeTest" أدناه، والتي تقوم بإنشاء مثيلين لفئة الموظف واستدعاء الأساليب لتعيين قيم المتغيرات.
احفظ التعليمة البرمجية التالية في ملف EmployTest.java.
استيراد java.io.*;
اختبار موظف الطبقة العامة {
الفراغ الثابت العام الرئيسي(String args[]){
/* إنشاء كائنين باستخدام المنشئ */
الموظف empOne = موظف جديد("جيمس سميث");
الموظف empTwo = موظف جديد("ماري آن");
// استدعاء أساليب الأعضاء لهذين الكائنين empOne.empAge(26);
empOne.empDesignation("مهندس برمجيات أول");
empOne.empSalary(1000);
empOne.printEmployee();
empTwo.empAge(21);
empTwo.empDesignation("مهندس البرمجيات");
empTwo.empSalary(500);
empTwo.printEmployee();
}
}
قم بتجميع هذين الملفين وتشغيل فئة "EmployeeTest" ويمكنك رؤية النتائج التالية:
ج:>javacEmployee.java
ج:> السادس EmployTest.java
ج:>javacEmployeeTest.java
ج:>javaEmployeeTest
الاسم: جيمس سميث
العمر: 26
المسمى الوظيفي: مهندس برمجيات أول
الراتب: 1000.0
الاسم: ماري آن
العمر: 21
المسمى الوظيفي: مهندس برمجيات
الراتب:500.0