Transcript PPT
محاضرة :7,6مفهوم مصفوفـة من الكائنات
َ َ َ ُ ُ َّ
ال رسو َل اللهَ صلى هللا عليه وسلم
ق َ
ََ
َ
َّ
ُ
« مث َل الجليس الصالح َو الجليس
ْ
َّ ْ َ َ َ
َ
َ
ْ
السوءَ كمثلَ صاحَبَ اْلسكَ ،وك َير
ْ
َ
َ
َ
َّ
َ
ْ
َ
َ
ْ
ُ
ن صاحبَ
كَ م َ
الحدادَ ،ل يعدم َ
يحهُ،
ْاْل ْسكَ إ َّما َت ْش َت َريه ،أ َْو َتج ُ َد َر َ
َ ُ ْ َ َّ ُ ْ ُ َ َ َ َ َ ْ َ
كَ
َ
ْ
ك أ َو َثوب َ
ق بد ن َ
َوك َير الحدادَ يح َر َ
َ َ
ْ َ
ْ
ُ
ُ
خِبيثًَ »
أ َو تج َد من َه ريحاَ َ
رواه الِبخاريَ
وقال مالك بن دينار -رحمه هللا :-إنك إن
تنقل األحجار مع األبرار ،خير
لك من أن تأكل الخِبيص مع
الفجار
وأنشد:
وصاحب خيار الناس تنج مسلمــا
وصاحب شرار الناس يوما فتندما
ما هو static variable؟
ْ لاذا الربط بين اْلصفوفات و األصناف؟
بنــاء برنامج سجـل اْلوظفين
بناء دليل التلفونات (مشـروع الفصل)
ما هو static variable؟
عند تعريف متغير ما في الصنف ( )Classبـ staticفهذا يعني أن جميع الكائنات
( )objectsالتي سيتم اشتقاقها من هذا الصنف ستتعامل مع القيمً اْلحدثـً من هذا
اْلتغير.
فكل كائن جديد يغير على قيمً هذا اْلتغير ,يتم نشر هذا التغيير على كافً الكائنات.
و هذا على عكس ما يحدث في الوضع الطِبيعي حيث يحصل كل كائن على نسخً افتراضيً
ى.
دون أن تتأثر بالكائنات اآلخر َ
;private static int count = 0
؟static variable ما هو: تدريب
public class StaticVariable {
static int noOfInstances;
public StaticVariable () {
noOfInstances++;
}}
مستفيدا من هذا اْلثال اجعل أكبر عدد من الكائنات
... فقط5 يمكن انشاءه من هذا الصنف هي
public static void main(String[] args){
StaticVariable sv1 = new StaticVariable();
System.out.println("No. of instances for sv1 : " + sv1.noOfInstances);
StaticVariable sv2 = new StaticVariable();
System.out.println("No. of instances for sv1 : " + sv1.noOfInstances);
System.out.println("No. of instances for st2 : " + sv2.noOfInstances);
StaticVariable sv3 = new StaticVariable();
System.out.println("No. of instances for sv1 : " + sv1.noOfInstances);
System.out.println("No. of instances for sv2 : " + sv2.noOfInstances);
System.out.println("No. of instances for sv3 : " + sv3.noOfInstances);
}
1 تدريب ذاتي
// 1
//2
//2
//3
//3
//3
ْلاذا الربط بين اْلصفوفات و األصناف؟
َّ
عندما كنـا نقوم باشتقاق مجموعً من الكائنات من صنف ما فإننا ل يمكننا إجراء
عمليات الِبحث أو الترتيب أو الطِباعً الجماعيً لهم ,لنهم غير محصورين في مكان محدد.
اْلصفوفات تعطينا الفرصً للدوران على عناصرها و بالتالي يمكننا إجراء عمليات الِبحث و
الترتيب و غير ذلك.
من هنا جاء الغرص من الربط بين اْلصفوفات و األصناف.
e1
; Employee [] x
e2
Employee class
e3
;int sal
;int id
;String name
…
e4
e5
e6
e7
e8
ما هوstatic variable ؟
تدريب : 1بناء برنامج يحاكي كشف أجهزة الحاسوب باْلختبر
مستخدمـا مفاهيم البرمجً الشيئيً ,قم ببناء برنامج يحاكي كشف بأجهزة الحاسوب
باْلختبر ,مع إمكانيً طِباعً بيانات كافً األجهزة ,علما بأن الكشف الواحد.يست َوعب
معلومات 50جهاز فقط.
تدريب : 1بناء برنامج يحاكي كشف أجهزة الحاسوب باْلختبر
فكر معي قليال ...
جهاز الحاسوب يعتبر ش يء أليس كذلك ؟!
بلى ...بالتالي يمكننا تمثيله من خالل صنف يحتوي على كافً بياناته.
و الكشف هو مكان يتم فيه تخزين بيانات حول أشياء محددة.
عندما يحتوي الكشف على بيانات ألشياء من صنف واحد فهذا يعني أنه يحاكي مصفوفً.
و بما أن الصنف يعتبر نوع ,بالتالي يمكنني تعريف مصفوفً من هذا الصنف
بناء برنامج يحاكي كشف أجهزة الحاسوب باْلختبر: 1 تدريب
public class PC {
private static int PCcounter;
private static String code;
أوال نقوم بإنشاء
private static String YOM;
private static int cost;
صنف الحاسوب
public PC() {
PCcounter++;
code = "no code";
YOM = "1990"; }
public PC(String code, String YOM, int cost) {
PCcounter++;
this.code =code;
this.YOM = YOM;
this.cost = cost; }
public void info(){
System.out.println("---------------------------");
System.out.println("Code: "+code+"\nYOM: "+YOM+"\ncost: "+cost); } }
بناء برنامج يحاكي كشف أجهزة الحاسوب باْلختبر: 1 تدريب
public class Record {
PC [] rec = new PC[50];
private int count;
public Record() {
count =0; }
public void insert(String code, String YOM, int cost){
if(count<50){
PC p = new PC(code, YOM,cost);
rec[count] = p;
count++;}
else System.out.println("Sorry, The record is complete"); }
public void insert(){
if(count<50){
PC p = new PC();
rec[count] = p;
count++;}
else System.out.println("Sorry, The record is complete"); }
public void PrintAll(){
System.out.println("Count of PC: "+count);
for(int i =0; i<count; i++)
rec[i].info(); } }
ثانيـًا نقوم بإنشاء
صنف السجل
بناء برنامج يحاكي كشف أجهزة الحاسوب باْلختبر: 1 تدريب
public class RecordPC {
public static void main(String[] args) { ثالثـًا نقوم بإنشاء كائن
Record rec1 = new Record();
rec1.insert("pc123","2010",450);
rec1.insert("pc124","2010",455);
rec1.insert("pc125","2010",460);
rec1.PrintAll();
}
}
من السجل ثم نضيف إليه
أجهزة الحاسوب
تدريب : 1بناء برنامج يحاكي كشف أجهزة الحاسوب باْلختبر
ناتج عملية الطباعة لكافة
محتويات الكشف
تدريب : 2بناء سجل معلومات اْلوظفين
مستخدمـا مفاهيم البرمجً الشيئيً ,قم ببناء برنامج يحاكي سجل اْلوظفين مع إمكانيـً
طِباعً كافً بيانات اْلوظفين و الِبحث عن موظف بإسمه مع زيادة مرتِبه بنسِبً .%10
تخطيط التعامل بين وحدات اْلشروع
Main
Class
صنف إدارة
اْلوظفين
.2يقوم بإنشاء كائنات من
صنف اْلوظفين
هذا الـ Classيقوم بتمثيل
الطالب بمعلوماته كاملً
َو ه َو مجرد كائن برمجي َل حياة
فيه َو إنما مجرد تخطيط َو تمثيل
هذه الكائنات ( )Objectsالتي تم إنشاءها من الـ
َ Classو هي كائنات حقيقً تحتويَ على بيانات
آخر
لتصف طالب معين َو يتم إنشاءها داخل َ Class
غير الذي تم اشتقاقها منه
َ
Obj3
Obj4
Obj1
Obj2
بناء: التنفيذEmployee Class
emp_manage Classالتنفيذ :بناء
ليتم STATICنقوم بتعريف متغير من نوع
التعامل معه كعداد لعدد الكائنات التي تم
EMPLOYEEاشتقاقها من الصنف
طالما نتحدث عن سجل لبيانات الموظفين,
فإننا بحاجة الستخدام مصفوفة يتم في خالياها
تخزين موظفين و بالتالي فإننا نقوم بتعريف
EMPLOYEEالمصفوفة من نوع
نقوم بإعطاء قيمة Constructorفي الـ
افتراضية لعدد الخاليا (عدد الموظفين) الذين
سيتم تخزين بياناتهم في السجل
أو نقوم نحن بإرسال قيمة كما تشاهد
{ public class emp_manage
;static int i = 0
;employee [] emp_file
{ )(public emp_manage
;]emp_file = new employee[100
}
{ )public emp_manage(int j
;]emp_file = new employee[j
}
.
.
.
}
emp_manage Classالتنفيذ :بناء
الدالة التي تنتمي للسجل و يتم من خاللها
إضافة الموظفين الجدد و تخزينهم في
المصفوفة
قبل إضافة الموظف الجديد البد من التأكد أن
السجل (المصفوفة) الزالت تحتوي أماكن
ifفارغة و بالتالي نستخدم جملة
لإلضافة نقوم بإنشاء كائن جديد من الصنف
ثم ببساطة نضع هذا الكائن EMPLOYEE
في أول خلية فارغة في المصفوفة و نزيد
العداد بواحد
)public void addemp(int x, String y
{
)if (i<100
{
;)employee e1 = new employee(x,y
;emp_file[i]= e1
;i++
}
else
JOptionPane.showMessageDialog(null, "Sorry
;)"the file of employees is full
}
.
.
}
emp_manage Classالتنفيذ :بناء
الدالة التي تنتمي للسجل و يتم من خاللها
طباعة بيانات كافة الموظفين الموجودين
بالسجل (المصفوفة)
ليتم فيه Stringنقوم بتعريف متغير من نوع
جمع كافة بيانات الموظفين كنص
نتعامل في هذه الحالة كأننا نقوم بطباعة
بيانات مصفوفة عادية ,فنقوم بالدوران على
)(infoخانات المصفوفة و باستخدام الدالة
نستعيد بيانات كل موظف و نجمعها لما قبله
ليتم طباعتهم بجملة واحدة
)(public void print
{
;""= String output
)for (int z =0; z<i; z++
{
;"output = output + emp_file[z].info() + "\n
}
JOptionPane.showMessageDialog(null,
;)"The info is: \n"+ output
}
التنفيذ :إشتقاق سجل و التعامل مع بياناته
) من الصنف Objectنشتق سجل جديد (
و من خالله سنقوم emp_manage
باإلضافة و التعامل معها
نقوم بإضافة addempمن خالل الدالة
البيانات الخاصة بالموظفين الواحد تلو اآلخر
; )(emp_manage file1 = new emp_manage
;)"file1.addemp(4,"ahmad
;)"file1.addemp(5,"Mahmoud
نطلب من السجل أن يقوم بطباعة بيانات كافة
الموظفين الموجودين في السجل األول
;)"file1.addemp(6,"ali
;)(file1.print
أمثلً أخرى على تطِبيقات Array of objects
سجل يحتوي على بيانات أجهزة الحاسوب التي باْلختبر.
سجل يحتوي على معلومات و مواصفات السيارات اْلوجودة بالكراج.
سجل للطلِبً اْلوجودين بالكليً.
دفتر تلفونات
مشــروع اْلس ــاق 1
مستفيدا من مفهوم Array of Objectsقم ببرمجً دفتر لتسجيل جهات التصال على
الهيئً َو الشاكلً التي يتم بها تسجيل جهات التصال في دفتر التلفونات.
قم بالتحليل َو الستنتاج لستخراج
.1
.2
.3
كافً األصناف التي لبد أن يحتويها اْلشروع
السلوك التابع لكل صنف
التفاعل بين األصناف َو الكائنات
مشــروع اْلس ــاق 1
دفتر تلفونات
إدارة جهات االتصال
بحث باالسم ...بالرقم ...
بالعنوان ...بالعمر
إضافة
جهة اتصال
Contact
جهة اتصال
Contact
جهة اتصال
Contact
تعديل
.
.
.
طباعة بيانات
جهة اتصال
Contact
ما هي static methods؟
يوجد نوعان من الدوال:
.1
:Instance methodsو هذه الدوال هي التي ترتبط بالكائنات و تستخدم متغيرات
الكائن ,أي أنها ال تستخدم و ال يتم تفعيلها إال عند اشتقاق كائن من الصنف و بداخلها ال
تتعامل إال مع المتغيرات التي تم تعريفها داخل الصنف و التي تعرف باسم ( instance
)variablesو هذا النوع هو النوع االفتراضي من الدوال و هو الذي تم التعامل معه
طيلة الفترة السابقة.
.2
:Static methodsهي دوال ال تتعامل مع الـ ( )instance variablesو ال تعتمد
على إستقاق كائن جديد من الصنف ,بل يتم استخدامها من خالل الصنف مباشرة و
بإعطاءها قيم مباشرة خارجية .أو أن تتعامل مع قيم .static variablesهذا النوع من
الدوال مناسب عند بناء أصناف في علم الرياضيات مثل صنف Mathو لذلك يسمى هذا
النوع أيضا class methods
كيف يتم استدعاء static method؟
عندما نريد استدعاء دالة من دوال الكائنات ( )an instance methodنقوم
مثال باشتقاق كائن ( )Objمن الصنف ثم بعد ذلك نقوم باستدعاء الدالة funهكذا
;)Obj.fun(3,5
لكن استدعاء الدالة من نوع static methodال يحتاج منـَّا إلى اشتقاق كائن
بل يتم مباشرة من خالل اسم الصنف ثم الدالة ,فعلى سبيل المثال:
;)Math.max(4,7
؟static method كمثال علىMath الـ