Download presentation
Presentation is loading. Please wait.
1
محاضرة 7,6: مفهوم مصفوفـة من الكائنات
2
قَالَ رَسُولُ اللَّهِ صلى الله عليه وسلم « مَثَلُ الجليس الصَّالِح و الجَليس السَّوْءِ كَمَثَلِ صَاحِبِ الْمِسْكِ، وَكِيرِ الْحَدَّادِ، لاَ يَعْدَمُكَ مِنْ صَاحِبِ الْمِسْكِ إِمَّا تَشْتَرِيهِ، أَوْ تَجِدُ رِيحَهُ، وَكِيرُ الْحَدَّادِ يُحْرِقُ بَدَنَكَ أَوْ ثَوْبَكَ أَوْ تَجِدُ مِنْهُ رِيحاً خَبِيثَةً » رواه البخاري وقال مالك بن دينار- رحمه الله -: إنك إن تنقل الأحجار مع الأبرار، خير لك من أن تأكل الخبيص مع الفجار وأنشد: وصاحب خيار الناس تنج مسلمــا وصاحب شرار الناس يوما فتندما
3
ما هو static variable ؟ لماذا الربط بين المصفوفات و الأصناف؟ بنــاء برنامج سجـل الموظفين بناء دليل التلفونات (مشـروع الفصل)
4
ما هو static variable ؟ عند تعريف متغير ما في الصنف (Class) بـ static فهذا يعني أن جميع الكائنات (objects) التي سيتم اشتقاقها من هذا الصنف ستتعامل مع القيمة المحدثـة من هذا المتغير. فكل كائن جديد يغير على قيمة هذا المتغير, يتم نشر هذا التغيير على كافة الكائنات. و هذا على عكس ما يحدث في الوضع الطبيعي حيث يحصل كل كائن على نسخة افتراضية دون أن تتأثر بالكائنات الآخرى. private static int count = 0;
5
تدريب : ما هو static variable ؟
public class StaticVariable { static int noOfInstances; public StaticVariable () { noOfInstances++; }} مستفيداً من هذا المثال اجعل أكبر عدد من الكائنات يمكن انشاءه من هذا الصنف هي 5 فقط ... تدريب ذاتي 1 public static void main(String[] args){ StaticVariable sv1 = new StaticVariable(); System.out.println("No. of instances for sv1 : " + sv1.noOfInstances); // 1 StaticVariable sv2 = new StaticVariable(); System.out.println("No. of instances for sv1 : " + sv1.noOfInstances); //2 System.out.println("No. of instances for st2 : " + sv2.noOfInstances); //2 StaticVariable sv3 = new StaticVariable(); System.out.println("No. of instances for sv1 : " + sv1.noOfInstances); //3 System.out.println("No. of instances for sv2 : " + sv2.noOfInstances); //3 System.out.println("No. of instances for sv3 : " + sv3.noOfInstances); //3 }
6
لماذا الربط بين المصفوفات و الأصناف؟
عندما كنـَّا نقوم باشتقاق مجموعة من الكائنات من صنف ما فإننا لا يمكننا إجراء عمليات البحث أو الترتيب أو الطباعة الجماعية لهم , لانهم غير محصورين في مكان محدد. المصفوفات تعطينا الفرصة للدوران على عناصرها و بالتالي يمكننا إجراء عمليات البحث و الترتيب و غير ذلك. من هنا جاء الغرص من الربط بين المصفوفات و الأصناف. e1 e2 e3 e4 e5 e6 e7 e8 Employee class int sal; int id; String name; … Employee [] x ;
7
ما هو static variable ؟
8
تدريب 1 :بناء برنامج يحاكي كشف أجهزة الحاسوب بالمختبر
مستخدمـًا مفاهيم البرمجة الشيئية , قم ببناء برنامج يحاكي كشف بأجهزة الحاسوب بالمختبر, مع إمكانية طباعة بيانات كافة الأجهزة, علما بأن الكشف الواحد.يستوعب معلومات 50 جهاز فقط. التفكير التخطيط التنفيذ هي هذه المرحلة يتم ترجمة ما وصلنا له في مرحلة التخطيط لكود مستخدم مع عملية اختباره في هذه المرحلة يتم التفكير في الخصائص و ما هي أنواعها و مدى رؤيتها (Access modifiers) و كذلك في الطرق التي يمكننا من خلالها من التعامل مع الطالب و ما هو المدخل و المخرج لها هذه المرحلة من خلالها سيتم البحث و التفكير في الطالب بشكل عام و ما هي موصفاته
9
تدريب 1 :بناء برنامج يحاكي كشف أجهزة الحاسوب بالمختبر
فكر معي قليلا ... جهاز الحاسوب يعتبر شيء أليس كذلك ؟! بلى... بالتالي يمكننا تمثيله من خلال صنف يحتوي على كافة بياناته. و الكشف هو مكان يتم فيه تخزين بيانات حول أشياء محددة. عندما يحتوي الكشف على بيانات لأشياء من صنف واحد فهذا يعني أنه يحاكي مصفوفة. و بما أن الصنف يعتبر نوع, بالتالي يمكنني تعريف مصفوفة من هذا الصنف
10
تدريب 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) { this.code =code; this.YOM = YOM; this.cost = cost; } public void info(){ System.out.println(" "); System.out.println("Code: "+code+"\nYOM: "+YOM+"\ncost: "+cost); } } أولا نقوم بإنشاء صنف الحاسوب
11
تدريب 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(){ PC p = new PC(); public void PrintAll(){ System.out.println("Count of PC: "+count); for(int i =0; i<count; i++) rec[i].info(); } } ثانيـًا نقوم بإنشاء صنف السجل
12
ثالثـًا نقوم بإنشاء كائن
تدريب 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(); } ثالثـًا نقوم بإنشاء كائن من السجل ثم نضيف إليه أجهزة الحاسوب
13
ناتج عملية الطباعة لكافة
تدريب 1 :بناء برنامج يحاكي كشف أجهزة الحاسوب بالمختبر ناتج عملية الطباعة لكافة محتويات الكشف
14
تدريب 2 :بناء سجل معلومات الموظفين
تدريب 2 :بناء سجل معلومات الموظفين مستخدمـًا مفاهيم البرمجة الشيئية , قم ببناء برنامج يحاكي سجل الموظفين مع إمكانيـة طباعة كافة بيانات الموظفين و البحث عن موظف بإسمه مع زيادة مرتبه بنسبة 10%. التفكير التخطيط التنفيذ هي هذه المرحلة يتم ترجمة ما وصلنا له في مرحلة التخطيط لكود مستخدم مع عملية اختباره في هذه المرحلة يتم التفكير في الخصائص و ما هي أنواعها و مدى رؤيتها (Access modifiers) و كذلك في الطرق التي يمكننا من خلالها من التعامل مع الطالب و ما هو المدخل و المخرج لها هذه المرحلة من خلالها سيتم البحث و التفكير في الطالب بشكل عام و ما هي موصفاته
15
Main Class صنف إدارة الموظفين صنف الموظفين
تخطيط التعامل بين وحدات المشروع صنف إدارة الموظفين Main Class صنف الموظفين 1. يقوم بإنشاء كائنات من 2.يقوم بإنشاء كائنات من هذا الـ Class يقوم بتمثيل الطالب بمعلوماته كاملة و هو مجرد كائن برمجي لا حياة فيه و إنما مجرد تخطيط و تمثيل 3. كائنات 4. يقوم بإدارة Obj1 Obj2 Obj3 Obj4 هذه الكائنات (Objects) التي تم إنشاءها من الـ Class و هي كائنات حقيقة تحتوي على بيانات لتصف طالب معين و يتم إنشاءها داخلClass آخر غير الذي تم اشتقاقها منه
16
التنفيذ : بناء Employee Class
17
أو نقوم نحن بإرسال قيمة كما تشاهد
التنفيذ : بناء emp_manage Class 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]; . نقوم بتعريف متغير من نوع STATIC ليتم التعامل معه كعداد لعدد الكائنات التي تم اشتقاقها من الصنف EMPLOYEE طالما نتحدث عن سجل لبيانات الموظفين, فإننا بحاجة لاستخدام مصفوفة يتم في خلاياها تخزين موظفين و بالتالي فإننا نقوم بتعريف المصفوفة من نوع EMPLOYEE في الـConstructor نقوم بإعطاء قيمة افتراضية لعدد الخلايا (عدد الموظفين) الذين سيتم تخزين بياناتهم في السجل أو نقوم نحن بإرسال قيمة كما تشاهد
18
التنفيذ : بناء emp_manage Class
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"); . الدالة التي تنتمي للسجل و يتم من خلالها إضافة الموظفين الجدد و تخزينهم في المصفوفة قبل إضافة الموظف الجديد لابد من التأكد أن السجل (المصفوفة) لازالت تحتوي أماكن فارغة و بالتالي نستخدم جملة if للإضافة نقوم بإنشاء كائن جديد من الصنف EMPLOYEE ثم ببساطة نضع هذا الكائن في أول خلية فارغة في المصفوفة و نزيد العداد بواحد
19
التنفيذ : بناء emp_manage Class
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); الدالة التي تنتمي للسجل و يتم من خلالها طباعة بيانات كافة الموظفين الموجودين بالسجل (المصفوفة) نقوم بتعريف متغير من نوع String ليتم فيه جمع كافة بيانات الموظفين كنص نتعامل في هذه الحالة كأننا نقوم بطباعة بيانات مصفوفة عادية, فنقوم بالدوران على خانات المصفوفة و باستخدام الدالة info() نستعيد بيانات كل موظف و نجمعها لما قبله ليتم طباعتهم بجملة واحدة
20
التنفيذ : إشتقاق سجل و التعامل مع بياناته
emp_manage file1 = new emp_manage() ; file1.addemp(4,"ahmad"); file1.addemp(5,"Mahmoud"); file1.addemp(6,"ali"); file1.print(); نشتق سجل جديد (Object) من الصنف emp_manage و من خلاله سنقوم بالإضافة و التعامل معها من خلال الدالة addemp نقوم بإضافة البيانات الخاصة بالموظفين الواحد تلو الآخر نطلب من السجل أن يقوم بطباعة بيانات كافة الموظفين الموجودين في السجل الأول
21
أمثلة أخرى على تطبيقات Array of objects
سجل يحتوي على بيانات أجهزة الحاسوب التي بالمختبر. سجل يحتوي على معلومات و مواصفات السيارات الموجودة بالكراج. سجل للطلبة الموجودين بالكلية. دفتر تلفونات
22
مشــروع المســـاق 1 مستفيدًا من مفهوم Array of Objects قم ببرمجة دفتر لتسجيل جهات الاتصال على الهيئة و الشاكلة التي يتم بها تسجيل جهات الاتصال في دفتر التلفونات. قم بالتحليل و الاستنتاج لاستخراج كافة الأصناف التي لابد أن يحتويها المشروع السلوك التابع لكل صنف التفاعل بين الأصناف و الكائنات
23
بحث بالاسم ... بالرقم ... بالعنوان ... بالعمر
مشــروع المســـاق 1 دفتر تلفونات إدارة جهات الاتصال جهة اتصال Contact بحث بالاسم ... بالرقم ... بالعنوان ... بالعمر جهة اتصال Contact إضافة جهة اتصال Contact تعديل . طباعة بيانات جهة اتصال Contact
24
ما هي static methods؟ يوجد نوعان من الدوال:
Instance methods: و هذه الدوال هي التي ترتبط بالكائنات و تستخدم متغيرات الكائن, أي أنها لا تستخدم و لا يتم تفعيلها إلا عند اشتقاق كائن من الصنف و بداخلها لا تتعامل إلا مع المتغيرات التي تم تعريفها داخل الصنف و التي تعرف باسم (instance variables ) و هذا النوع هو النوع الافتراضي من الدوال و هو الذي تم التعامل معه طيلة الفترة السابقة. Static methods: هي دوال لا تتعامل مع الـ (instance variables ) و لا تعتمد على إستقاق كائن جديد من الصنف, بل يتم استخدامها من خلال الصنف مباشرة و بإعطاءها قيم مباشرة خارجية. أو أن تتعامل مع قيم static variables. هذا النوع من الدوال مناسب عند بناء أصناف في علم الرياضيات مثل صنف Math و لذلك يسمى هذا النوع أيضا class methods
25
كيف يتم استدعاء static method ؟
عندما نريد استدعاء دالة من دوال الكائنات (an instance method ) نقوم مثلا باشتقاق كائن (Obj) من الصنف ثم بعد ذلك نقوم باستدعاء الدالة funهكذا Obj.fun(3,5); لكن استدعاء الدالة من نوع static method لا يحتاج منـَّا إلى اشتقاق كائن بل يتم مباشرة من خلال اسم الصنف ثم الدالة , فعلى سبيل المثال: Math.max(4,7);
26
الـ Math كمثال على static method ؟
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.