Cs924 advanced java programming spring2017 part i

Page 1

Sebha University Faculty of Sciences Computer Department

‫جامعة سبها‬ ‫كلية العلوم‬ ‫قسم الحاسوب‬

CS924: ‫برمجة جافا متقدمة‬ Advanced Java Programming Part I: Introduction ‫اعداد‬ ‫ مبروكه علي معيوف‬.‫د‬

7102 ‫ربيع‬


‫‪Fall2016‬‬

‫‪CS602: Java Programming‬‬

‫محتويات املقرر (الجزء االول)‬ ‫‪ .1‬تمهيد‬ ‫‪ ‬مفهوم البرمجة الشيئية‬ ‫‪ ‬مفهوم البرمجة االجرائية‬ ‫‪ ‬الفرق بين البرمجة االجرائية و البرمجة الشيئية‬ ‫‪ ‬الفرق بين البرمجة الشيئية في لغة الجافا و ‪C++‬‬ ‫‪ ‬خصائص البرمجة الشيئية‬ ‫‪ ‬نبذة مختصرة عن لغة الجافا‬ ‫‪ ‬مزايا البرمجة بلغة الجافا‬ ‫‪ ‬مكتبات الجافا ‪java class libraries‬‬ ‫‪ .2‬بيئة تطوير برنامج جافا‬ ‫‪ .a‬املراحل التي يمر بها برنامج جافا‬ ‫‪ .b‬بيئة ‪ JDK‬و االدوات املصاحبة لها ‪JDK Environment & Tools‬‬ ‫‪ .c‬خصائص برنامج جافا‬ ‫‪ .3‬برمجة تطبيق جافا‬ ‫‪ ‬الفرق بين تطبيق جافا ‪ java application‬و جافا ابلت ‪java applet‬‬ ‫‪ ‬اساسيات برنامج جافا‬ ‫‪ ‬الهيكلية العامة لبرنامج جافا‬ ‫‪ .4‬القواعد االساسية لبرمجة جافا‬ ‫‪ ‬جمل االخراج ‪output statements‬‬ ‫‪System.out.println o‬‬ ‫‪System.out.print o‬‬ ‫‪System.out.printf o‬‬ ‫‪ ‬جملة التضمين ‪import statement‬‬ ‫‪ ‬جمل االدخال ‪input statement‬‬ ‫‪ o‬االدخال بواسطة ‪Scanner class‬‬ ‫‪2‬‬

‫‪Dr. Mabroka A.M.‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ ‬انواع الثوابت و املتغيرات في لغة جافا‬ ‫‪ ‬العمليات في لغة الجافا‬ ‫‪ o‬العمليات املنطقية‬ ‫‪ o‬العمليات الحسابية‬ ‫‪ o‬العمليات العالئقية‬ ‫‪ ‬جمل التكرار‬ ‫‪for statement o‬‬ ‫‪while statement o‬‬ ‫‪ ‬جمل التحكم‬ ‫‪If statement o‬‬ ‫‪switch statement o‬‬ ‫‪If else statement o‬‬ ‫‪ ‬املصفوفات في لغة جافا‬ ‫‪ o‬تعريف املصفوفة‬ ‫‪ o‬استخدام املصفوفة‬ ‫‪ .5‬التصنيفات و الكائنات ‪classes & objects‬‬ ‫‪ ‬مفهوم برمجة الكائنات ‪object-oriented programming concept‬‬ ‫‪ ‬مزايا البرمجة باستخدام )‪OOP (Object-Oriented Programming‬‬ ‫‪ 0.1‬التصنيفات ‪classes‬‬ ‫‪ o‬مفهومها‪ ،‬مكوناتها (الخصائص و السلوك ‪)attributes and behavior‬ـ الشكل العام‬ ‫لها‪.‬‬ ‫‪ o‬متغير العضو‪member class‬‬ ‫‪ o‬متغير التصنيف )‪class variable (static variable‬‬ ‫‪ o‬دالة البناء ‪constructor‬‬ ‫‪ o‬دالة التصنيف ‪class method‬‬ ‫‪ o‬الدوال العادية‬ ‫‪ ‬الشكل العام لها‪ ،‬استدعائهاـ دالة التصنيف)‪class method (static method‬‬ ‫‪ o‬الدوال املهيمنة ‪overriding methods‬‬ ‫‪3‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪ o‬الدوال الزائدة ‪overloading methods‬‬ ‫‪ 7.1‬الكائنات ‪objects‬‬ ‫‪ o‬مفهومها‪ ،‬الشكل العام لها‪.‬‬ ‫‪ o‬تفسير جملة تكوين الكائن ‪explaining of object creation‬‬ ‫‪ 5.1‬املؤثر ‪( this‬مفهومه‪ ،‬استخداماته)‬ ‫‪ .6‬معدالت الوصول ‪access modifiers‬‬ ‫‪ ‬الجزء االول ‪part 1‬‬ ‫‪ o‬املعدل الساكن ‪static modifier‬‬ ‫‪ o‬املعدل النهائي‪final modifier‬‬ ‫‪ o‬املعدل املجرد ‪abstract modifier‬‬ ‫‪ ‬الجزء الثاني ‪part 2‬‬ ‫‪ o‬املعدل العام ‪public modifier‬‬ ‫‪ o‬املعدل الخاص‪private modifier‬‬ ‫‪ o‬املعدل املحمي ‪protected modifier‬‬ ‫‪ o‬املعدل االفتراض ي ‪default modifier‬‬ ‫‪ .7‬استخدامات معدالت الوصول‬ ‫‪ .8‬الحزم ‪packages‬‬ ‫‪ .a‬تكوين الحزمة ‪package creation‬‬ ‫‪ .b‬استخدامات الحزمة‬ ‫‪ .9‬الوراثة ‪inheritance‬‬ ‫‪ ‬مفهومها‪ ،‬الشكل العام لها‪ ،‬اهميتها‪ .‬تطبيقاتها‪.‬‬ ‫‪ .11‬تعدد االشكال ‪polymorphism‬‬ ‫‪ ‬مفهومه‪ ،‬اهميته‪ .‬تطبيقاته‪.‬‬ ‫‪4‬‬

‫‪Dr. Mabroka A.M.‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ .11‬التصنيف املركب ‪composite class‬‬ ‫‪ ‬مفهومه‪ ،‬اهميته‪ .‬تطبيقاته‪.‬‬ ‫‪ .12‬التصنيفات املتداخلة ‪inner classes‬‬ ‫‪ ‬مفهومها‪ ،‬اهميتها‪ .‬تطبيقاتها‪.‬‬ ‫‪ .13‬لغة الجافا و الواجهات الرسومية )‪java language and graphical user interfaces(GUI‬‬ ‫‪ ‬مفهوم ‪ ،GUI‬االدخال و االخراج باستخدام ‪GUI classes‬‬ ‫‪ ‬امثلة تطبيقية على ‪GUI‬‬ ‫‪ .14‬الواجهات (الوصالت) ‪interfaces‬‬ ‫‪ ‬مفهومها‪ ،‬اهميته‪ .‬تطبيقاته‪.‬‬ ‫‪ .15‬معالجة الحدث ‪event handling‬‬ ‫‪ .16‬معالجة االستثناء ‪exception handling‬‬ ‫‪ .17‬امللفات‬ ‫‪ ‬طرق االدخال و االخراج و استخدام امللفات‬

‫‪5‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫الجزء الثاني‬ ‫‪ .1‬بيئة جافا الرسومية (تصميم الواجهات الرسومية باستخدام )‪)OO Design‬‬ ‫‪ .2‬برمجة جافا للوسائط املتعددة (‪)Video & Audio Programming‬‬ ‫‪ .3‬برمجة جافا و شبكات االنترنت (‪)Internet Java Programming‬‬ ‫‪ .4‬برمجة جافا‪ :‬تطبيقات الهاتف النقال (‪)Android Studio‬‬ ‫‪ .5‬برمجة جافا و ‪.multithreading‬‬

‫‪6‬‬


Dr. Mabroka A.M.

Fall2016

CS602: Java Programming

‫جدول اعمال السنة واالمتحان النهائي‬ ‫االسبوع املستحق‬

‫التقييم‬

% ‫النسبة‬

2117/15/16

‫امتحان نصفى‬

20

‫قبل االمتحان النهائي‬

‫ورقة عمل‬

10

‫حسب جدول االمتحانات‬

‫االمتحان ههائى‬

71

‫املراجع العربية‬ ‫ الطريق الى احتراف لغة‬.‫ قدري طلعت حسين‬،‫ مصطفى ماجد‬،‫] عزب محمد عزب‬0[ .7117 ،‫ دار الكتب العلمية للنشر و التوزيع‬.Java ‫املراجع االنجليزية‬ [1] Deitel, P. J. & Deitel, H. M. ,JAVA HOW TO PROGRAM. Pearson Educational International, 2007. [2] Myatt, A., Pro NetBeans IDE 5.5 Enterprise Edtition. Apress, 2007. [3] Schildt, H., Java 2 the complete reference. McGraw-Hill. 2002. [4] Kendal, S., Object Oriented Programming using Java. 2012. Websites: https://www.java.com https://netbeans.org http://www.bookboon.com Download free books at Bookboon.com.

7


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ .1‬تمهيد‬ ‫اللغة ‪ language‬هي مجموعة من الكلمات و القوانين التي ترتب هذه الكلمات في جملة لها‬ ‫معنى‪ .‬و يحتاج االنسان للغة ‪ language‬ليتواصل مع االخرين‪ ،‬و بنفس الطريقة التي يتواصل‬ ‫ً‬ ‫فيها الناس باستخدام اللغة‪ ،‬يتواصل االنسان مع الحاسب االلي باستخدام اللغة أيضا (لغات‬ ‫البرمجة ‪ )programming language‬حيث تتكون لغة البرمجة من مجموعة من التعليمات‬ ‫املتتالية ‪ sequence of instructions‬تسمى برنامج ‪ .program‬و توجد انواع عديدة من‬ ‫لغات البرمجة من اهمها‪ :‬البرمجة االجرائية ‪ procedural programming‬و البرمجة الشيئية‬ ‫أو البرمجة املوجهة نحو الكائنات)‪.Object Oriented Programming (OOP‬‬ ‫‪ ‬مفهوم البرمجة الشيئية‬ ‫يتكون العالم من حولنا من مجموعة من الكائنات ‪ Objects‬التي لها صفات (خصائص)‬ ‫ً‬ ‫‪ attributes‬و سلوك ‪ .behavior‬و بناءا على هذا املفهوم‪ ،‬جاءت فكرة البرمجة الشيئية او‬ ‫املوجهة نحو الكائنات‪ .‬حيث تكمن فكرة ‪ OOP‬في دمج البيانات )‪ (attributes‬مع الوظائف او‬ ‫الدوال )‪ (behavior‬التي تعمل على هذه البيانات في وحدة مستقلة ‪ a single unit‬تسمى‬ ‫كائن ‪ .Object‬لذا‪ُ ،‬يقسم البرنامج في ‪ OOP‬الى كائنات تتفاعل مع بعضها البعض خالل فترة‬ ‫تنفيذ البرنامج‪.‬‬ ‫‪ ‬مفهوم البرمجة االجرائية‬ ‫كانت بداية البرمجة اجرائية‪ ،‬حيث يتكون البرنامج من مجموعة من التعليمات ‪instructions‬‬ ‫‪ or statements‬املتتالية التي يتم تنفيذها واحدة تلو االخرى‪ .‬و مع ازدياد حجم البرنامج‪ ،‬تم‬ ‫ً‬ ‫تقسيمه الى وحدات صغيرة تسمى إجراء ‪( procedure‬و يطلق عليها أيضا وظيفة ‪ function‬أو‬ ‫دالة ‪ٌ )method‬‬ ‫كل منها تؤدي مهمة محددة‪ .‬و مع استمرار ازدياد حجم البرنامج اكثر فأكثر‪،‬‬ ‫ظهرت البرمجة الهيكلية ‪ structured programming‬التي يتم فيها وضع مجموعة من الدوال‬ ‫في وحدة اكبر تسمى ‪( module‬في الغالب تكون ملف ‪ .) file‬و مع ازدياد حجم البرنامج اكثر‬ ‫ً‬ ‫فأكثر‪ ،‬اصبحت اكثر تعقيدا مما ادى الى اخفاق معظمها و تبين فيما بعد انه ثمة قصور و‬ ‫ضعف في البرمجة االجرائية بأنواعها‪.‬‬ ‫‪ ‬الفرق بين البرمجة االجرائية و البرمجة الشيئية‬ ‫تعاني البرمجة االجرائية من عدة مشاكل من بينها الوصول الالمحدود للبيانات في البرنامج‪ ،‬و‬ ‫عدم وجود عالقة بين البيانات و الدوال املوجودة فيها في كثير من االحيان مما ادى الى كثرة‬ ‫الدوال و تشعبها و االرتباط املتعدد بينها و بالتالي ضعف هيكلية البرنامج و صعوبة تعديله‪ .‬و‬ ‫مع ظهور البرمجة الشيئية‪ ،‬و نمذجة العالم الحقيقي‪ ،‬و التعامل مع الكائنات البرمجية‪ ،‬تم‬

‫‪8‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫ً‬ ‫القضاء على معظم املشاكل السابقة التي واجهت البرمجة االجرائية خصوصا في املشاريع التي‬ ‫تتطلب برامج ضخمة و معقدة‪.‬‬ ‫‪ ‬الفرق بين البرمجة الشيئية في لغة الجافا و ‪C++‬‬ ‫ً‬ ‫مفهوم البرمجة الشيئية يكاد يكون واحدا في اغلب اللغات‪ ،‬حيث يرتكز على تكوين البرنامج‬ ‫من مجموعة من الكائنات‪ .‬االختالف االساس ي يكمن في اختالف تعليمات اللغة و هيكلية‬ ‫ً‬ ‫دوالها‪ .‬اال ان هناك تشابه كبير بين لغة ‪ java‬و لغة ‪ C++‬نظرا الشتقاق لغة ‪ Java‬من لغة‬ ‫‪.C++‬‬ ‫‪ ‬خصائص البرمجة الشيئية‬ ‫تتميز البرمجة الشيئية بخاصية حماية البيانات و تغليفها في وحدة منفردة‪ .‬كما تتميز بخاصية‬ ‫الوراثة و امكانية اعادة االستخدام لوحدات البرنامج دون الحاجة ملعرفة تفاصيلها و كيفية‬ ‫عملها بدقة‪.‬‬ ‫‪ ‬نبذة مختصرة عن لغة الجافا‬ ‫ً‬ ‫في العام ‪ 0995‬اصبحت ال‪ world wide web‬اكثر انتشارا و شعبية مما حدا بشركة ‪Sun‬‬ ‫‪ Microsoft‬بالتعريف بلغة جديدة هي لغة جافا ‪ Java programming language‬و املشتقة‬ ‫من لغة ‪ C++‬و ذلك الضافة ‪ dynamic content‬مثل ‪ interactivity & animations‬الى‬ ‫‪ .web pages‬و في العام ‪ ،0991‬تم عرض هذه اللغة في مؤتمر يتعلق بالصناعات حيث لفتت‬ ‫انظار املستتمرين و التجار‪.‬‬ ‫‪ ‬مزايا البرمجة بلغة الجافا‬ ‫‪ o‬تستخدم في تطوير ‪large scale enterprise applications‬‬ ‫‪ o‬تستخدم لتعزيز الوظائف الخاصة ب‪ web servers‬مثل التطبيقات الخاصة ألجهزة‬ ‫املستهلك كا ‪cell phones, pagers, personal digital assistance‬‬ ‫‪ ‬مكتبات الجافا ‪java class libraries‬‬ ‫يتكون البرنامج في لغة الجافا من قطع تسمى ‪( classes‬التصانيف‪ ،‬الفصائل‪ ،‬الفئات)‪ .‬هذه‬ ‫ال ‪ Classes‬تحتوي على الخصائص ‪ attributes‬والدوال‪ methods‬حيث تقوم ‪methods‬‬ ‫باداء مهام تتعلق ب ‪ Classes‬وترجع معلومات عن هذه الوظائف عندما تنتهي منها‪ .‬هناك‬ ‫ً‬ ‫مجموعة هائلة من ‪ java class libraries‬و التي يطلق عليها ايضا‬ ‫‪Java APIs Interfaces‬‬ ‫‪Application programming interfaces‬‬ ‫ً‬ ‫تزود ‪ class libraries‬مبدئيا من قبل ‪ ،compiler‬ولكن الكثير منها يزود من قبل‬ ‫‪.Independent software vendors‬‬ ‫‪9‬‬


Dr. Mabroka A.M.

Fall2016

CS602: Java Programming

Typical java development environment ‫ بيئة تطوير برنامج جافا نموذجية‬.2 ‫ املراحل التي يمر بها برنامج جافا‬ :‫ وهذه املراحل هي‬،‫يمر برنامج بلغة الجافا بخمس مراحل حتى يصل الى مرحلة التنفيذ‬

1. edit

Editor

2. Compile

Java Program is created in an editor and stored on the disk in a file ending with .java ‫ و يُخزن على‬،‫يكون برنامج جافا في أي محرر النصوص‬ java ‫القرص في ملف ينتهي بنقطة و امتداد‬

Disk

Compiler C

Compiler creates bytecodes and stored them in the disk in a file ending with .class ‫المترجم يكون شفرات بايت و يخزنها على القرص في‬ class ‫ملف ينهي بنقطة و امتداد‬

Disk

memory

3. Load

Class loader

4. Verify

Bytecode verifier

5. Execute

JVM

Class loader reads .class files from the disk and put them in the memory. ‫ من القرص و‬classes‫محمل التصنيف يقرأ ملفات ال‬ .‫يضعها في الذاكرة‬

. . .

Bytecodes verifier confirms that all bytecodes are valid. ‫محقق شفرة البايت يتحقق و يتأكد من أن كل شفرات‬ .‫البايت صحيحة و ال قيود عليها‬

JVM (Java virtual machine) reads bytecodes and JIT (just-intime) compiles them into a computer language. ‫ تترجمها الى لغة الحاسوب‬JIT ‫الة جافا االفتراضية تقرأ شفرات البايت و‬ .‫الموجود عليه البرنامج‬

JDK Environment & Tools ‫ و االدوات املصاحبة لها‬JDK ‫ بيئة‬  

JVM is a part of JDK (java development kit) and the foundation of java platform. JVM is a java a software application that simulates a computer and hides the underlying operating system and hardware from the programs that interact with VM.

‫ خصائص برنامج جافا‬ ‫ يمكن تنفيد برنامج بلغة جافا على أي جهاز حاسوب مهما كان نوع نظام التشغيل‬.a JVM ‫بشرط ان يحتوي هذا الجهاز على‬ Java bytecode are portable .b .‫ ثم استخدامها من قبل البرنامج‬class ‫ يحمل أي‬Class loader .c 01


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ .3‬برمجة تطبيق جافا‬ ‫‪ ‬الفرق بين تطبيق جافا ‪ java application‬و جافا ابلت ‪java applet‬‬ ‫التطبيق هو برنامج او مجموعة من البرامج املرتبطة مع بعضها البعض‪ .‬و ُيعد تطبيق جافا‬ ‫‪ java application‬مشابه لتطبيقات البرامج االخرى مثل تطبيق لغة ‪ C‬او ‪ C++‬املكتبية الغير‬ ‫ً‬ ‫ُ‬ ‫مخصصة للتنفيذ على شبكة االنترنت بعكس برامج ‪ java applet‬التي تصمم خصيصا‬ ‫لإلنترنت‪ ،‬و التي يتم استدعائها من خالل ملف ال‪.HTML‬‬ ‫‪ ‬اساسيات برنامج جافا‬ ‫عند كتابة برنامج بلغة الجافا‪ ،‬يجب مراعاة النقاط التالية ‪:‬‬ ‫‪ .0‬يجب ان يحتوي البرنامج على ‪ class‬من نوع ‪ public‬تتضمن الدالة االساسية ‪main‬‬ ‫التي من خاللها يتم تنفيد البرنامج ‪public static void main‬‬ ‫‪ .7‬يجب ان يكون اسم البرنامج هو نفس اسم ‪ class‬متبوع بامتداد ‪ .java‬و ان يبدا اسم‬ ‫‪ class‬بحرف كبير‪.‬‬ ‫‪ .5‬يجب تضمين اسم ‪ package‬في بداية البرنامج عند الحاجة الستخدامها‪.‬‬ ‫‪ .4‬يجب مراعاة الفارق بين الحروف الكبيرة والصغيرة في اسماء املتغيرات‪ ،‬مثال ‪A‬‬ ‫تختلف عن ‪.a‬‬ ‫‪ .1‬يجب ان يبدا كل تصريح ب‪ class‬بقوس بداية { وينتهي بقوس نهاية }‪.‬‬ ‫‪ .6‬يجب ان تنتهي كل جملة ‪ statement‬في البرنامج بالفاصلة املنقوطة‪.‬‬ ‫‪ .2‬يجب ان ال يحتوى اسم املتغيرة او الثابت في البرنامج على فراغ وان ال تبدا برقم و ان‬ ‫ال تكون كلمة محجوزة‪.‬‬ ‫‪ .8‬مراعاة ادراج التعليقات لتوضيح عمل البرنامج ‪.‬‬ ‫‪ ‬الهيكلية العامة لبرنامج جافا‬ ‫‪/* my first program */‬‬ ‫;)‪package (package name‬‬ ‫;‪import …………….‬‬ ‫‪public class‬‬ ‫{‬ ‫}…………{ )‪Public static void main (String [] args‬‬ ‫}‬

‫‪00‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ .4‬القواعد االساسية لبرمجة جافا‬ ‫لكتابة اي برنامج بلغة الجافا‪ ،‬البد من اتباع القواعد االساسية املتمثلة في الشكل العام و‬ ‫صيغة كتابة االوامر و التعليمات و اولوية ترتيبها في البرنامج‪.‬‬ ‫‪ ‬جمل االخراج ‪output statement‬‬ ‫ُيعتبر ‪ System.out‬كائن املخرجات القياس ي ‪ ،standard output Object‬حيث يسمح‬ ‫للبرنامج بعرض فئة من الرموز على الشاشة‪ .‬و ُيستخدم مع الدوال التالية‪:‬‬ ‫ُ‬ ‫‪ :System.out.println o‬تستخدم لطباعة سلسلة من الرموز و القيم في سطر‬ ‫واحد‪ ،‬ثم تجعل املؤشر يقفز الى السطر التالي‪ .‬و الشكل العام لها هو‪:‬‬ ‫معامل ‪ "+‬سلسلة من الرموز"(‪System.out.println‬‬ ‫;)‬ ‫‪,‬‬ ‫ُ‬ ‫‪ :System.out.print o‬تستخدم لطباعة سلسلة من الرموز و القيم في سطر واحد‪،‬‬ ‫مع بقاء املؤشر في نفس السطر‪ .‬و لها نفس الشكل العام للدالة السابقة كما يلي‪:‬‬ ‫معامل ‪ "+‬سلسلة من الرموز"(‪System.out.print‬‬ ‫;)‬ ‫‪,‬‬ ‫ُ‬ ‫‪ :System.out.printf o‬تستخدم لطباعة صيغة مخرجات ‪formatted output‬‬ ‫ُ‬ ‫محددة و منسقة‪ ،‬حيث تخصص لكل نوع من البيانات رمز الصيغة الخاص به‬ ‫على ان يسبق هذا الرمز عالمة النسبة املئوية ‪ .%‬و الشكل العام لها هو‪:‬‬ ‫معامل ‪ ",‬سلسلة من الرموز مع رمز صيغة "(‪System.out.printf‬‬ ‫;)‬ ‫‪,‬‬ ‫و الجدول التالي يوضح رمز الصيغة و استخدامه‪.‬‬ ‫الوصف‬ ‫‪Description‬‬ ‫لطباعة عدد صحيح ‪integer‬‬ ‫لطباعة عدد حقيقي ‪float or double‬‬ ‫لطباعة حرف واحد‪character‬‬ ‫لطباعة سلسلة ‪string‬‬

‫‪02‬‬

‫رمز الصيغة‬ ‫‪formatted symbol‬‬ ‫‪d‬‬ ‫‪f‬‬ ‫‪c‬‬ ‫‪s‬‬


‫‪CS602: Java Programming‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪Fall2016‬‬

‫اما الجدول التالي‪ ،‬فيوضح مهمة بعض الرموز املستخدمة في برنامج جافا‪:‬‬ ‫الرمز‬ ‫‪symbol‬‬ ‫‪\n‬‬ ‫‪\r‬‬ ‫‪\t‬‬ ‫\\‬ ‫"\‬

‫الوصف‬ ‫‪Description‬‬ ‫يجعل املؤشر يقفز للسطر التالي‬ ‫نقل املؤشر لبداية السطر‬ ‫يجعل املؤشر يقفز مسافة ‪Tab‬‬ ‫لطباعة العالمة \‬ ‫لطباعة العالمة "‬

‫‪ ‬جملة التضمين ‪import statement‬‬ ‫ُ‬ ‫تستخدم جملة التضمين ملساعدة املترجم ‪ Compiler‬في معرفة مكان ال‪ class‬املراد‬ ‫ُ‬ ‫استخدامها في البرنامج‪ ،‬حيث توجد هذه ال‪ class‬في الغالب داخل حزمة‪ .‬و لتضمين اي‬ ‫حزمة في البرنامج‪ُ ،‬يستخدم الشكل التالي‪:‬‬ ‫; ‪import package_name . class name‬‬ ‫اسم التصنيف‬

‫نقطة‬

‫اسم الحزمة‬

‫كلمة محجوزة‬

‫***امثلة عملي على بيئة ‪Java netbeans 8.1‬‬ ‫ً‬ ‫‪ ‬اوال‪ :‬نصب بيئة البرمجة ‪ netbeans8.1‬او اي اصدار تابع لها عن طريق تنصيب ‪JDK‬‬ ‫ثم ‪ netbeans‬نفسها (الصندوق االزرق)‪.‬‬ ‫ً‬ ‫‪ ‬ثانيا‪ :‬اضبط متغير البيئة ‪ set environment‬من النظام املوجود في لوحة التحكم‪.‬‬ ‫مالحظة‪ :‬قد يقوم برنامج ال‪ netbeans‬بضبط متغير البيئة بصفة تلقائية‪.‬‬ ‫‪ ‬سؤال املحاضرة‪:‬‬ ‫‪ .1‬اكتب برنامج بلغة جافا يطبع التالي‪:‬‬ ‫‪ o‬جملة ترحيب ببرمجة لغة الجافا‪.‬‬ ‫ً‬ ‫‪ o‬بيانات عامة مستخدما جمل االخراج املختلفة‪.‬‬ ‫‪ o‬تضمين ‪ class‬في البرنامج‪.‬‬

‫‪03‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ ‬جمل االدخال ‪input statement‬‬ ‫‪ o‬االدخال بواسطة ‪Scanner Class‬‬ ‫الدخال بيانات للبرنامج (قراءة بيانات من لوحة املفاتيح) باستخدام ‪Scanner‬‬ ‫‪ ،class‬البد من اتباع الخطوات التالية‪:‬‬ ‫‪ .0‬تضمين الحزمة ‪ java.util‬التي تحتوي على ال‪ Scanner class‬الستخدامها في‬ ‫البرنامج كما يلي‪:‬‬ ‫;‪import java.util.Scanner‬‬ ‫‪ .7‬تكوين كائن من نوع ‪ Scanner‬داخل البرانامج (و ذلك من اجل القراءة من‬ ‫لوحة املفاتيح)‪ ،‬كما يلي‪:‬‬ ‫;)‪=new Scanner(System.in‬اسم كائن ‪Scanner‬‬ ‫و هي جملة يتم من خاللها تحديد اسم الكائن من نوع ‪ Scanner‬ليتم‬ ‫استخدامه في البرنامج الستدعاء دوال االدخال املختلفة حسب نوع القيمة‬ ‫املدخلة‪.‬‬ ‫‪ .5‬تحديد اسم متغيرة الستقبال و تخزين البيانات املدخلة فيها‪ ،‬كما يلي‪:‬‬ ‫‪Int number; /*for integer number*/‬‬ ‫;)(‪.nextInt‬اسم الكائن =‪number‬‬ ‫‪ ‬مالحظات‪:‬‬ ‫‪ .0‬الدخال بيانات من نوع ‪ double‬نستخدم الدالة )(‪nextDouble‬‬ ‫‪ .7‬الدخال بيانات من نوع ‪ String‬نستخدم الدالة )(‪nextLine‬‬ ‫‪ .5‬هناك طرق اخرى الدخال بيانات من لوحة املفاتيح او ملف مثل‪:‬‬ ‫‪BufferedReader & BufferedWriter‬‬ ‫‪ ‬سؤال العملي‪:‬‬ ‫باستخدام ‪ ،Scanner Class‬اكتب برنامج جافا يقرأ بيانات تذكرة سفر ثم يطبعها‪.‬‬

‫‪04‬‬


‫‪CS602: Java Programming‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪Fall2016‬‬

‫‪ ‬انواع الثوابت و املتغيرات في لغة جافا‬ ‫ً‬ ‫أوال‪ :‬الثوابت ‪ :Constants‬هي اسماء تعطى ملواقع في الذاكرة ذات قيم ثابتة و ال يمكن أن‬ ‫ُ‬ ‫تتغير خالل فترة تنفيذ البرنامج‪ .‬و تستخدم في حال التصريح بالقيم الثابتة املتعارف عليها‬ ‫مثل ‪ ،pi=3.14‬و قيم االوزان و تحويل العمالت‪.‬‬ ‫الشكل العام للتصريح بالقيم الثابتة‪:‬‬ ‫;‪(access-modifier) type constant-name=value‬‬ ‫القيمة اسم الثابت النوع معدل الوصول‬ ‫)اختياري ‪(optional‬‬ ‫ً‬ ‫ثانيا‪ :‬املتغيرات ‪ :variables‬هي اسماء تعطى ملواقع في الذاكرة ذات قيمة غير معروفة‪ ،‬و‬ ‫قابلة للتغيير خالل فترة تنفيذ البرنامج‪ .‬و للتصريح بمتغيرة داخل البرانامج نستخدم‬ ‫الشكل التالي‪:‬‬ ‫;‪(access-modifier) type variable-name‬‬ ‫اسم املتغيرة النوع معدل الوصول‬ ‫)اختياري ‪(optional‬‬ ‫‪ ‬االنواع ‪ :types‬و تعني نوع البيانات املستخدمة في البرنامج (‪ )data type‬سواءا كانت‬ ‫ُ‬ ‫ثابتة ‪ constant‬أو متغيرة ‪ .variable‬و توجد انواع عديدة تستخدم في معظم لغات‬ ‫البرمجة‪ .‬و من اهم االنواع ما يلي‪:‬‬ ‫‪Types‬‬ ‫‪references data type‬‬ ‫‪pointer array struct class‬‬

‫‪Primitives data type‬‬ ‫‪real logical symbols‬‬ ‫‪float‬‬ ‫‪true‬‬ ‫‪char‬‬ ‫‪double false String‬‬

‫‪Integer‬‬ ‫‪short‬‬ ‫‪int‬‬ ‫‪long‬‬ ‫‪byte‬‬

‫‪*make different examples of data types.‬‬

‫‪05‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ ‬العمليات في لغة الجافا‬ ‫‪ o‬العمليات املنطقية ‪logical operations‬‬ ‫العمليات املنطقية في لغة جافا تتضمن العالمات املنطقية التالية‪:‬‬ ‫ُ‬ ‫‪ AND‬و تمثل ب&&‬ ‫ُ‬ ‫‪ OR‬و تمثل ب||‬ ‫ُ‬ ‫‪ NOT‬و تمثل ب!‬ ‫و يمكن مزج أكثر من عالمة منطقية مثل‪a && b || c :‬‬ ‫و يكون ناتج العملية املنطقية إما ‪ true‬أو ‪.false‬‬ ‫‪ o‬العمليات الحسابية ‪arithmetic operations‬‬ ‫ُ‬ ‫تمثل العمليات الحسابية ‪ ،/ ،* ،- ،+‬كما في اللغات االخرى‪ .‬و ترتب هذه‬ ‫ً‬ ‫العمليات حسب االسبقية‪ .‬فالضرب و القسمة أوال ثم الجمع و الطرح إال اذا‬ ‫كانت هذه العمليات تحتوي على االقواس‪ ،‬في هذه الحالة‪ ،‬يتم فك االقواس قبل‬ ‫ُ‬ ‫كل ش ي‪ ،‬ثم تجرى العمليات حسب االسبقية‪.‬‬ ‫‪ o‬العمليات العالئقية‬ ‫تتضمن العمليات العالئقية العالمات التالية‪:‬‬ ‫< ‪>= ، <= ، != ، == ، > ،‬‬ ‫و هي تدخل في تكوين الشرط ‪.condition‬‬ ‫‪ ‬جمل التكرار‬ ‫ُ‬ ‫تستخدم جمل التكرار لتنفيذ مجموعة من التعليمات لعدد من املرات‪ .‬و من أهم هذه‬ ‫الجمل ما يلي‪:‬‬ ‫‪for statement o‬‬ ‫ً‬ ‫تستخدم لتنفيذ تعليمة أو مجموعة من التعليمات لعدد من املرات وفقا لشرط‬ ‫معين‪ ،‬و الشكل العام لها كالتالي‪:‬‬ ‫مقدار الزيادة شرط القيمة االبتدائية متغيرة التحكم نوع املتغيرة كلمة محجوزة‬ ‫)‪for (int control-variable=initial-value ; condition ; increment‬‬ ‫{‬ ‫‪.‬‬ ‫تعليمة او أكثر ‪block . statements‬‬ ‫‪.‬‬ ‫}‬

‫مالحظة‪ :‬يمكن ان تكون القيمة االبتدائية و الشرط و مقدار الزيادة في صورة تعبير رياض ي‪.‬‬ ‫‪06‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪while statement o‬‬ ‫تستخدم لتنفيذ تعليمة أو مجموعة من التعليمات لعدد من املرات في حالة‬ ‫تحقق الشرط‪ ،‬حيث يتم اختبار الشرط في كل مرة للتحقق من صحته‪ .‬في حالة‬ ‫عدم تحقق الشرط‪ ،‬يتم الخروج من الحلقة‪ .‬و الشكل العام لها كالتالي‪:‬‬ ‫القيمة االبتدائية ‪Initial-value‬‬ ‫شرط كلمة محجوزة‬ ‫)‪while (condition‬‬ ‫{‬ ‫‪.‬‬ ‫‪block‬‬ ‫تعليمة او أكثر ‪. statements‬‬ ‫تغير الشرط ‪. condition changing‬‬ ‫}‬

‫مالحظات‬ ‫‪ ‬جملة ‪ do….while‬لها نفس مميزات جملة ‪ while‬لكنها تختلف عنها في تنفيذ الحلقة و الدخول‬ ‫فيها مرة واحدة على االقل دون اختبار للشرط‪ ،‬بعكس جملة ‪ while‬التي يتم فيها التحقق من‬ ‫ً‬ ‫الشرط اوال قبل الدخول في الحلقة‪.‬‬ ‫ُ‬ ‫ُ‬ ‫‪ ‬تستخدم تعليمة ‪ break‬إلنهاء الحلقة و الخروج منها‪ ،‬بينما تستخدم ‪ continue‬لالنتقال‬ ‫بالتحكم الى حلقة التكرار من جديد دونما تنفيذ للتعليمات التي تلي تعليمة ‪.continue‬‬ ‫**تطبيق امثلة على ما سبق‪.‬‬

‫‪07‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ ‬جمل التحكم‬ ‫ُ‬ ‫تستخدم لتنفيذ تعليمة او اكثر في حالة تحقق الشرط‪ .‬و من اهمها ما يلي‪:‬‬ ‫‪If statement o‬‬ ‫ُ‬ ‫تستخدم لتنفيذ تعليمة او اكثر في حالة تحقق الشرط‪ ،‬و الشكل العام لها‪:‬‬ ‫شرط كلمة محجوزة‬ ‫)‪if (condition‬‬ ‫{‬ ‫‪.‬‬ ‫‪block‬‬ ‫تعليمة او أكثر ‪. statements‬‬ ‫‪.‬‬ ‫}‬

‫‪If else statement o‬‬ ‫ُ‬ ‫تستخدم لتنفيذ تعليمة او مجموعة من التعليمات في حالة تحقق الشرطـ‪ ،‬و في‬ ‫حالة عدم تحقق الشرط‪ ،‬يتم تنفيذ التعليمات التي تلي جملة ‪else‬‬ ‫شرط كلمة محجوزة‬ ‫)‪if (condition‬‬ ‫{‬ ‫‪.‬‬ ‫تعليمة او أكثر ‪block . statements‬‬ ‫تغير الشرط ‪. condition changing‬‬ ‫}‬ ‫كلمة محجوزة ‪else‬‬ ‫{‬ ‫‪.‬‬ ‫تعليمة او أكثر ‪block . statements‬‬ ‫تغير الشرط ‪. condition changing‬‬

‫و إال‬

‫}‬

‫‪08‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪switch statement o‬‬ ‫ُ‬ ‫تستخدم لتنفيذ تعليمة او اكثر في حالة ان التعبير الرياض ي يساوي القيمة‬ ‫املناسبة‪ ،‬و إال‪ ،‬فإنه ينفذ التعليمة املصاحبة لالفتراض ي ‪ ،default‬و الشكل العام‬ ‫لها ‪:‬‬ ‫تعبير رياض ي كلمة محجوزة‬ ‫)‪switch (expression‬‬ ‫{‬ ‫‪case value1:‬‬ ‫تعليمة او أكثر ;‪statement‬‬ ‫;‪break‬‬ ‫‪case value2:‬‬ ‫تعليمة او أكثر ;‪statement‬‬ ‫;‪break‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪case value n:‬‬ ‫تعليمة او أكثر ;‪statement‬‬ ‫;‪break‬‬ ‫تعليمة او أكثر‬

‫‪default:‬‬ ‫;‪statement‬‬ ‫;‪break‬‬ ‫}‬

‫سؤال املحاضرة‪:‬‬ ‫**باستخدام لغة جافا‪ ،‬اكتب برنامج يطبع عملية حسابية (*‪ )- ،+ ،/ ،‬و ناتجها‪.‬‬

‫‪09‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ ‬املصفوفات في لغة الجافا ‪Array in Java Language‬‬ ‫املصفوفة هي نوع من انواع البيانات تتكون من مجموعة من العناصر من نفس النوع‪ ،‬او‬ ‫عناصر تنتمي لفئة محددة‪ .‬و تتميز املصفوفات بانها مرتبة اما في هيئة صفوف من‬ ‫البيانات او اعمدة (ذات بعد واحد)‪ ،‬او في هيئة صفوف و اعمدة (ذات بعدين أو اكثر)‪.‬‬ ‫الستخدام املصفوفات في لغة الجافا‪ ،‬البد من اتباع الخطوات التالية‪:‬‬ ‫‪ .0‬التصريح باملصفوفة في البرنامج بإعطائها اسم متغيرة ‪declare the array variable‬‬ ‫اسم املصفوفة‬ ‫كما في الشكل التالي‪:‬‬ ‫;] [‪type array-name‬‬ ‫نوع املصفوفة‬ ‫‪ .7‬تكوين املصفوفة ‪create the array‬‬ ‫نوع املصفوفة كلمة محجوزة‬ ‫كما في الشكل التالي‪:‬‬ ‫; ]‪Array-name = new type [array-size‬‬ ‫اسم املصفوفة‬ ‫حجم املصفوفة‬ ‫‪ .5‬يمكن اختصار الخطوة ‪ 0‬و ‪ 7‬في خطوة واحدة كما يلي‪:‬‬ ‫نوع املصفوفة‬ ‫نوع املصفوفة كلمة محجوزة‬ ‫; ]‪type Array-name[ ] = new type [array-size‬‬ ‫اسم املصفوفة‬ ‫حجم املصفوفة‬ ‫مالحظات‪:‬‬ ‫‪ ‬يمكن تكوين مصفوفة ذات عناصر محددة و ثابتة ‪ constant array‬عن طريق سرد‬ ‫قائمة عناصر معرفة و تكون املصفوفة في هذه الحالة ذات عناصر ابتدائية و تسمى‬ ‫ب‪ ،array initialization‬و للتصريح بمصفوفة ثابتة‪ ،‬نستخدم الشكل التالي‪:‬‬ ‫عنصر مصفوفة حجم املصفوفة اسم املصفوفة‬ ‫; } ‪Array-name[array-size] = {array-element‬‬ ‫‪,‬‬ ‫‪ ‬الحظ عدم استخدام الكلمة املحجوزة ‪ new‬عند التصريح بمصفوفة عناصر ثابتة‪.‬‬ ‫‪ ‬يمكن التصريح بمصفوفة ذات بعدين كما في الشكل التالي‪:‬‬ ‫نوع املصفوفة‬ ‫نوع املصفوفة كلمة محجوزة‬ ‫; ]‪type Array-name[ ] [ ]= new type [array-row number] [array-column number‬‬ ‫اسم املصفوفة‬ ‫عدد اعمدة املصفوفة عدد صفوف املصفوفة‬ ‫‪21‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ ‬يمكن التصريح بأكثر من مصفوفة في نفس السطر على ان يتم الفصل بينها بالفاصلة‬ ‫العادية‪ .‬كما يمكن كتابة االقواس مع نوع البيانات ] [‪ type‬او مع اسم املصفوفة كما يلي‪:‬‬ ‫;‪Type[ ] array-name1, array-name2, …,array-namen‬‬ ‫‪Same as:‬‬ ‫;] [‪Type array-name1[ ],array-name2[ ],….,array-namen‬‬ ‫‪ ‬يمكن معرفة حجم املصفوفة عن طريق املتغيرة ‪ length‬كما في الشكل التالي‪:‬‬ ‫‪Array-name.length‬‬ ‫***تتميز لغة الجافا عن غيرها من اللغات في قدرتها على إدارة الذاكرة ‪ memory-managed‬بحيث‬ ‫أن املبرمج ال يهتم بإلغاء التخصيص لكومة من البيانات في الذاكرة‪ .‬لغة جافا قادرة على ذلك‬ ‫ً‬ ‫تلقائيا و كذلك بيئة التطوير ‪ Android‬التي هي بدورها بيئة برمجة ‪ .memory-managed‬و قد‬ ‫اعتمدت كل من ‪ Microsoft‬و ‪ Apple‬هذا النموذج في ‪.mobile development platforms‬‬ ‫***سؤال املحاضرة‪:‬‬ ‫اعد كتابة السؤال السابق باستخدام املصفوفات على ان يتم قراءة و طباعة عملية‬ ‫حسابية واحدة او اكثر و ناتجها‪.‬‬ ‫مثال‪3+5-1/2*6=result :‬‬

‫‪20‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ ‬التصانيف و الكائنات ‪Classes & Objects‬‬ ‫‪ ‬مفهوم برمجة الكائنات ‪Object-Oriented Programming Concept‬‬ ‫العالم من حولنا في حقيقة االمر يتكون من مجموعة من الكائنات ‪ .objects‬كل كائن له‬ ‫ً‬ ‫خصائص ‪ attributes‬يتميز بها‪ ،‬و سلوك ‪ behavior‬يسلكه‪ .‬فمثال االنسان هو ذلك الكائن‬ ‫البشري الذي يتميز بصفات (الوصف)‪ :‬له عينان‪ ،‬يدان‪ ،..،‬و له سلوك يسلكه مثل‪ :‬العقل‪،‬‬ ‫االكل‪ ،‬الشرب ‪ ،‬املش ي‪....‬‬ ‫ً‬ ‫بناءا على هذا املفهوم‪ ،‬جاءت فكرة البرمجة املوجهة نحو الكائنات أو البرمجة الشيئية‪ ،‬حيث‬ ‫تعتبر لغة ‪ Java‬من اللغات الكائنية و فيها يتكون البر نامج من مجموعة من ‪ objects‬التي‬ ‫ً‬ ‫تتفاعل مع بعضها البعض‪ .‬هذه الكائنات تم تكوينها وفقا ملعايير و نماذج محددة و معرفة‬ ‫ً‬ ‫مسبقا في البرنامج تسمى ‪( classes‬التصانيف او الفصائل أو الفئات)‪.‬‬ ‫ً‬ ‫اذن‪ ،‬لكي نكون كائن‪ ،‬البد أوال و قبل كل ش ي ان نكون تصنيف ‪ ،class‬و من هذا التصنيف‬ ‫‪ class‬نكون أي عدد من الكائنات حسب حاجة البرنامج‪.‬‬ ‫مثال‪ :‬لبناء منزل نحتاج الى‪ :‬لبنات ‪ ،blocks‬نوافذ ‪ ،windows‬ابواب ‪....doors‬‬ ‫و لكن البد من معايير و مقاييس لصنع هذه االشياء‪ .‬إذن‪ :‬نحن نحتاج الى ‪( class‬بمثابة‬ ‫ً‬ ‫قالب)‪ .‬فمثال لصنع باب‪ ،‬نحتاج الى مادة صلبة ال تلين (‪)material‬‬ ‫ُ‬ ‫نحناج ايضا لتحديد طول ‪ length‬و عرض ‪ width‬الباب‪..‬‬ ‫اذن‪ ،‬من خصائص الباب ان له طول و عرض و انه مصنوع من مادة صلبة‪.‬‬ ‫**ماذا عن السلوك الذي يسلكه الباب؟‬ ‫‪ ‬مزايا البرمجة باستخدام ‪OOP‬‬ ‫ً‬ ‫‪ .0‬امكانية صنع أي قالب ‪ class‬وفقا للمعايير و املقاييس املحددة حسب الحاجة‪.‬‬ ‫‪ .7‬امكانية استخدام هذه ال‪ classes‬و االستفادة منها في تكوين أي عدد من الكائنات دون‬ ‫الحاجة الى معرفة التفاصيل عن هذه ال‪.classes‬‬ ‫ً‬ ‫‪ .5‬امكانية استخدام أي تصنيف ‪ class‬موجود مسبقا و امكانية اضافة بيانات اخرى إليه‬ ‫دون الحاجة الى معرفة تفاصيل هذه ال ‪( class‬الوراثة ‪.)inheritance‬‬ ‫‪ .4‬امكانية تعدد االشكال (‪ ،)polymorphism‬بمعنى انه يمكن ان نجعل البرنامج املكتوب‬ ‫بصفة عامة ‪ general‬يخضع لتنفيذ مهمة خاصة ‪.specific‬‬ ‫ُ‬ ‫‪ .1‬امكانية حماية البيانات و تغليفها داخل كبسولة ‪ encapsulation‬حيث تغلف البيانات‬ ‫داخل ‪ class‬و ال يمكن الوصول اليها بدون تخويل ‪.authorization‬‬

‫‪22‬‬


‫‪CS602: Java Programming‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪Fall2016‬‬

‫‪ 1.5‬التصانيف ‪classes‬‬ ‫يمكن تعريف ال‪ class‬على انها‪:‬‬ ‫‪ ‬وصف لعدد من الكائنات املتشابهة‪.‬‬ ‫‪ ‬مجموعة من البيانات )‪ data (attributes‬و الدوال )‪methods (behavior‬‬ ‫التي تشترك في صفة معينة‪.‬‬ ‫أي ‪ class‬في لغة ‪ Java‬تتكون من جزئين‪:‬‬ ‫‪ .0‬الخصائص ‪attributes‬‬ ‫ُ‬ ‫و هي البيانات‪ :‬الثوابت و املتغيرات التي تخص الكائن ‪ .object‬و تسمى بمتغيرات االعضاء‬ ‫‪ member variables‬أو ‪.instance variables‬‬ ‫‪ .7‬السلوك ‪behavior‬‬ ‫ُ‬ ‫و هي الوظيفة او املهمة )‪(function or method‬التي يقوم بها الكائن ‪ .object‬و تسمى‬ ‫بالدوال االعضاء ‪.member methods‬‬ ‫‪ ‬تعريف التصنيف ‪class definition‬‬ ‫لتعريف تصنيف في البرنامج يجب ان نتبع الشكل التالي‪:‬‬ ‫كلمة محجوزة معدل الوصول (اختياري ‪)optional‬‬

‫اسم التصنيف‬

‫‪Access modifier‬‬ ‫‪class‬‬ ‫‪class-name‬‬ ‫{‬ ‫اسماء الثوابت و املتغيرات ‪Fields‬‬ ‫دوال البناء ‪Constructors‬‬ ‫الدوال ‪Methods‬‬ ‫}‬ ‫‪Fields .a‬‬ ‫و هي الثوابت و املتغيرات التي نحتاج اليها لوصف خصائص الكائن‪ ،‬و تتمثل في االنواع‬ ‫التالية‪:‬‬ ‫‪Instance variable .1‬‬ ‫و هو متغير يتم االعالن عنه داخل التصنيف ‪ class‬بالشكل التالي‪:‬‬ ‫اسم املتغير‬

‫; ‪variable-name‬‬

‫النوع‬

‫‪access modifier type‬‬ ‫معد الوصول‬

‫‪23‬‬


‫‪CS602: Java Programming‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪Fall2016‬‬

‫‪Constant .2‬‬ ‫و هو ثابت يتم االعالن عنه داخل التصنيف ‪ class‬بالشكل التالي‪:‬‬ ‫قيمة‬

‫النوع‬

‫اسم الثابت‬

‫;‪constant-name = value‬‬

‫‪type‬‬

‫‪final‬‬ ‫معدل الوصول‬ ‫(نهائي و ال يتغير)‬

‫و يمكن تعريف متغير من نوع ‪ final‬على ان يتم اعطاءه قيمة ثابتة من قبل دالة‬ ‫البناء ‪ constructor‬و ال يمكن ان تتغير قيمته داخل البرنامج و الشكل العام لها‬ ‫هو‪:‬‬ ‫النوع‬

‫اسم الثابت‬

‫; ‪constant-name‬‬

‫‪type‬‬

‫‪final‬‬ ‫معدل الوصول‬ ‫(نهائي و ال يتغير)‬

‫‪Class variable .3‬‬ ‫و ُيسمى متغير التصنيف (او املتغير الساكن)‪ ،‬و هو متغير يتم االعالن عنه داخل‬ ‫ال‪ class‬مسبوق بالكلمة املحجوزة ‪ ،static‬و الشكل العام له هو‪:‬‬ ‫اسم متغير التصنيف‬

‫; ‪variable-name‬‬

‫النوع‬

‫‪type‬‬

‫‪static‬‬ ‫معدل الوصول‬

‫و معنى ذلك ان موقع هذه املتغيرة داخل موقع ذاكرة ال‪ ،class‬و كل كائن مكون‬ ‫من هذه ال‪ class‬يمكنه الوصول إليه‪.‬‬ ‫مالحظة‬ ‫يمكن ان يكون الثابت ‪ constant‬من نوع ‪ final static‬كما في الشكل التالي‪:‬‬ ‫النوع‬

‫اسم ثابت التصنيف‬

‫; ‪constant-name‬‬

‫‪type‬‬

‫‪static‬‬

‫‪final‬‬

‫معدل الوصول الثاني معدل الوصول االول‬

‫***سؤال‪ :‬ماذا يعني ذلك؟‬

‫‪24‬‬


‫‪CS602: Java Programming‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪Fall2016‬‬

‫‪constructor .b‬‬ ‫ُ‬ ‫هي دالة خاصة تسمى بدالة بناء ‪ constructor‬تأخذ نفس اسم ال‪ class‬املوجودة‬ ‫فيها‪ ،‬و ال ترجع قيمة و يتم تنفيذها مباشرة عند تكوين الكائن ‪ ،object‬و يمكن لهذه‬ ‫الدالة ان تاخذ قيم (تستقبل معامالت)‪ ،‬و الشكل العام لها‪:‬‬ ‫(باراميتر) متغيرة‬

‫نوع اسم التصنيف معدل الوصول‬

‫) ‪public class-name ( type variable‬‬ ‫{‬ ‫‪,‬‬ ‫‪ Constructor body‬جسم الدالة‬ ‫}‬ ‫‪ ‬اهمية دالة البناء‬ ‫‪ .1‬تهيئة الكائن ‪object initialization‬‬ ‫حيث تقوم دالة البناء بإعطاء قيم ابتدائية للكائن اثناء تكوينه‪ ،‬و في هذه الحالة يتم‬ ‫تمرير هذه القيم كمعطيات مع جملة تكوين الكائن مع مراعاة الترتيب‪.‬‬ ‫‪ .2‬تخاطب الكائنات ‪inter-object communication‬‬ ‫ُ‬ ‫و تعد هذه العملية من أهم مبادئ برمجة ‪ OOP‬حيث تقوم دوال البناء بدور هام في هذه‬ ‫ً ُ‬ ‫العملية‪ ،‬و تتم هذه العلملية باستخدام تقنية ‪ .callback‬و غالبا ما تستخدم في الواجهات‬ ‫الرسومية ‪.GUI‬‬ ‫‪ ‬مالحظات‬ ‫‪ .0‬يمكن ان تحتوي ال‪ class‬الواحدة على أكثر من دالة بناء ‪ constructor‬بشرط ان يكون‬ ‫هناك اختالف بينها في عدد البارامترات أو نوعها‪.‬‬ ‫‪ .7‬يمكن االستغناء عن كتابة معدل وصول ‪ public‬مع دالة البناء‪.‬‬ ‫‪methods .c‬‬ ‫ُ‬ ‫تعبر الدوال عن سلوك الكائن او املهمة او العملية او الوظيفة املطلوبة منه (‪.)action‬‬ ‫و الشكل العام لها‪:‬‬ ‫(باراميتر) متغيرة نوع‬

‫اسم الدالة‬

‫نوع القيمة املرجعة معدل الوصول(اختياري)‬

‫‪access modifier‬‬ ‫) ‪return-type method-name ( type variable‬‬ ‫{‬ ‫‪,‬‬ ‫‪ method body‬جسم الدالة‬ ‫}‬ ‫‪25‬‬


‫‪CS602: Java Programming‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪Fall2016‬‬

‫‪ ‬مالحظات‬ ‫ُ‬ ‫‪ .1‬يمكن ان ال ترجع الدالة أي قيمة‪ ،‬و عندها يكون نوع القيمة التي ترجعها‬ ‫الدالة ‪ return type‬هي الكلمة املحجوزة ‪.void‬‬ ‫‪ .2‬يمكن ان تحتوي ال‪ class‬الواحدة على أكثر من دالة بنفس االسم بشرط ان‬ ‫ُ‬ ‫تختلف إما في نوع القيمة التي ترجعها الدالة او في عدد البارمترات او نوعها‪ ،‬و‬ ‫ُ‬ ‫تسمى هذه العملية ب‪.overloading‬‬ ‫‪ .3‬يمكن ان يكون للدالة اكثر من معدل وصول ‪.access modifier‬‬ ‫‪ ‬استدعاء الدوال ‪method calling‬‬ ‫الستدعاء أي دالة نستخدم الشكل التالي‪:‬‬ ‫متغيرة تستقبل القيمة التي ترجعها الدالة‬

‫نوع املتغيرة‬

‫‪type‬‬ ‫;‪variable-name‬‬ ‫القيم املراد تمريرها الى الدالة (معامالت)‬ ‫; ) ‪)variable-name = ( Object-name.method-name( argument‬‬ ‫‪,‬‬

‫اسم الدالة نقطة اسم الكائن‬

‫في حالة ان الدالة ترجع قيمة‬

‫‪ ‬دالة التصنيف (الدوال الساكنة) ‪class method‬‬ ‫هي دالة تحتل مكان واحد في موقع ذاكرة ال‪ ،class‬و يمكن ألي كائن من هذه ال‪ class‬ان‬ ‫يصل إليها‪ ،‬و لها معدل وصول ‪ static‬كما في الشكل التالي‪:‬‬ ‫(باراميتر) متغيرة نوع‬

‫اسم الدالة‬

‫نوع القيمة املرجعة معدل الوصول(اختياري)‬

‫) ‪return-type method-name ( type variable‬‬ ‫‪,‬‬ ‫‪ method body‬جسم الدالة‬

‫‪static‬‬ ‫{‬ ‫}‬

‫‪ ‬مالحظات‬ ‫‪ .0‬تستخدم دالة من نوع ‪ static‬متغيرات من نوع ‪ static‬فقط‪.‬‬ ‫‪ .7‬يمكن استدعاء الدالة ال‪ static‬بدون اقترانها باسم الكائن لوجودها في موقع ذاكرة‬ ‫ال‪ class‬حيث يتم استدعائها عن طريق اسم ال‪ class‬املوجودة فيها‪.‬‬ ‫‪ .5‬تحتوي ‪ Java‬على مجموعة من ال‪ classes‬التي تتضمن دوال يمكن استدعائها باسم‬ ‫ال‪ class‬املوجودة فيها مثل ‪ class Math‬التي تتضمن مجموعة كبيرة من الدوال‬ ‫الرياضية مثل دالة الجذر التربيعي )(‪.sqrt‬‬ ‫‪26‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ 7.1‬الكائنات ‪Objects‬‬ ‫الكائن عنصر ُيمثل استخدام ‪ class‬داخل البرنامج و هو يأخذ نفس الصفات ‪ data‬و‬ ‫السلوك املوجودة في هذا ال‪ .class‬بمعنى أنه يستطيع استخدام البيانات و الدوال‬ ‫املوجودة داخل ال‪ class‬التي ينتمي إليها‪ .‬و لتكوين كائن داخل البرنامج‪ ،‬نتبع الشكل التالي‪:‬‬ ‫معامالت اسم التصنيف كلمة محجوزة اسم الكائن اسم التصنيف‬

‫;) ‪Class-name object-name =new class-name( argument‬‬ ‫‪,‬‬ ‫مالحظات‬ ‫‪ُ .0‬يعتبر الشكل السابق جملة تكوين كائن‪.‬‬ ‫‪ .7‬يمكن ان ال تحتوي جملة تكوين كائن على معامالت ‪ ،argument‬و في هذه الحالة ال يتم‬ ‫تمرير أي بيانات الى موقع ذاكرة الكائن‪.‬‬ ‫‪ .5‬يمكن تكوين أكثر من كائن من نفس ال‪ class‬في نفس السطر و ُيفصل بينها بالفاصلة‬ ‫كما في الشكل التالي‪:‬‬ ‫; ‪Class-name object-name1, object-name2,……,object-namen‬‬ ‫ثم يتم تكوين كل كائن على حدة كما في الشكل التالي‪:‬‬ ‫معامالت اسم التصنيف كلمة محجوزة اسم الكائن‬

‫;) ‪object-name1 =new class-name(argument‬‬ ‫‪,‬‬ ‫‪ ‬تفسير جملة تكوين الكائن‬ ‫تعني جملة تكوين الكائن السابق ان املترجم ‪ compiler‬يستخدم الكلمة املحجوزة ‪new‬‬ ‫ليقوم بالتالي‪:‬‬ ‫‪ .0‬تكوين كائن باالسم املعطى ‪create object‬‬ ‫‪ .7‬حجز موقع في الذاكرة لهذا الكائن ‪memory location‬‬ ‫‪ .5‬استدعاء دالة البناء اذا كانت موجودة في البرنامج و تمرير البيانات اليها و تخزينها في‬ ‫موقع ذاكرة الكائن‪ ،‬و إال‪ ،‬فإنه يقوم بفرض دالة بناء افتراضية و يرجع القيمة ‪.null‬‬ ‫‪The statement in the program uses the variable reference to send messages to an‬‬ ‫‪object. These messages are called to the methods that enable the program to‬‬ ‫‪interact with an object. The message includes the arguments that are method‬‬ ‫‪requires for performing its task.‬‬ ‫‪27‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ ‬املؤثر ‪this‬‬ ‫ُيستخدم املؤثر ‪ this‬فيما يلي‪:‬‬ ‫‪ .0‬حل مشكلة االسماء املتشابهة‪ ،‬حيث يقترن املؤثر ‪ this‬مع اسم املتغيرة العضو‬ ‫‪.member variable‬‬ ‫‪ .7‬استدعاء دالة بناء‪ ،‬حيث يمكن لدالة بناء ان تستدعي دالة بناء اخرى بشرط ان‬ ‫تكون اول جملة في دالة البناء االخرى جملة االستدعاء‪ .‬و يمكن ان تحتوي جملة‬ ‫االستدعاء على معامالت ‪ arguments‬كما في الشكل التالي‪:‬‬ ‫; )معامالت (‪this‬‬ ‫***سؤال املحاضرة‪ :‬أكتب مثال لكل ما سبق‪.‬‬

‫‪28‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ .6‬معدالت الوصول ‪Access Modifiers‬‬ ‫‪ ‬الجزء االول ‪Part One‬‬ ‫ُ‬ ‫معدالت الوصول هي كلمات محجوزة تستخدم في تحديد الوصول الى ‪ class‬و دوالها و‬ ‫متغيراتها‪ ،‬و اهمها‪:‬‬ ‫‪Static modifier .1‬‬ ‫ُ‬ ‫ُيستخدم مع املتغيرات و الدوال‪ ،‬و عندها تصبح املتغيرات من نوع ‪ static variable‬و‬ ‫ُ‬ ‫الدوال من نوع ‪ static methods‬حيث تخزن في موقع ذاكرة ال‪ ،class‬و أي كائن من‬ ‫هذه ال‪ class‬يشير إليه‪.‬‬ ‫مالحظات‪:‬‬ ‫‪ ‬الدوال من نوع ‪ static‬ال تتعامل إال مع متغيرات من نوع ‪.static‬‬ ‫ُ‬ ‫‪ ‬تسمى املتغيرات من نوع ‪ static‬ب‪ ،class variables‬و الدوال من نوع ‪ static‬ب ‪class‬‬ ‫‪.methods‬‬ ‫‪ ‬يمكن استخدام متغيرة من نوع ‪ static‬او دالة من ‪ static‬بدون اقترانها باسم الكائن و‬ ‫ً‬ ‫ذلك عن طريق كتابة اسم ال‪ class‬عوضا عن أسم الكائن‪.‬‬ ‫‪ ‬يجب إعطاء قيمة ابتدائية ملتغير ‪.static‬‬ ‫‪final modifier .2‬‬ ‫ُيستخدم مع ‪ ،classes‬و ‪ methods‬و ‪ variables‬بحيث ان‪:‬‬ ‫ُ‬ ‫‪ final class ‬تعني أنه ال يمكن ان ننش ئ منها ‪ class‬فرعية‪.‬‬ ‫ُ‬ ‫‪ final method ‬تعني أنه ال يمكن أن نجري أي تعديل عليها (دوال غير مهيمنة ‪non‬‬ ‫‪.)overriding method‬‬ ‫‪ final variable ‬تعني أنه ال يمكن أن تتغير قيمتها إال عن طريق دالة البناء‪.‬‬ ‫مالحظات‪:‬‬ ‫‪ ‬إذا تم االعالن عن ‪ class‬على انها ‪ ،final‬فإن جميع الدوال بداخلها هي من نوع ‪.final‬‬ ‫‪ ‬إذا لم يتم إعطاء قيمة ابتدائية ملتغير من نوع ‪ ،final‬فإنه يجب اعطاءه قيمة ابتائية عن‬ ‫طريق ‪.constructor‬‬ ‫‪ُ :Abstract modifier .3‬يستخدم مع ‪ classes‬و ‪ methods‬و يتم اتباع الشكل التالي‪:‬‬ ‫}‪public abstract class class-name{…………….‬‬ ‫)‪public abstract void method-name(…….‬‬ ‫فإذا كانت ال‪ class‬من نوع ‪ abstract‬فهذا يعني أنه يمكن ان ننش ئ منها ‪ class‬فرعية و لكن ال‬ ‫يمكن ان نكون من ‪ abstract class‬أي كائن‪.‬‬ ‫‪29‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ ‬معدالت الوصول ‪Access Modifier‬‬ ‫‪ ‬الجزء الثاني ‪part two‬‬ ‫يمكن الي ‪ class‬موجودة في برنامج ما أن تسمح الي ‪ class‬اخرى موجودة في نفس‬ ‫البرنامج او خارجه ان تصل الى متغيراتها او دوالها باستخدام معدل الوصول املناسب‪ ،‬كما‬ ‫يمكن الي ‪ class‬أن تحد من استخدام متغيراتها و دوالها من قبل أي ‪ class‬أخرى عن‬ ‫ُ‬ ‫طريق أخفائها و حمايتها وفق عملية تسمى بالكبسلة ‪.encapsulation‬‬ ‫ُ‬ ‫و تستخدم لذلك اربع معدالت للوصول كما يلي‪:‬‬ ‫‪public modifier .0‬‬ ‫ُيستخدم عند االعالن عن ‪ class‬أو متغير أو دالة‪ ،‬و عندها تصبح هذه ال‪class‬‬ ‫متاحة لجميع ال‪ classes‬االخرى املوجودة داخل الحزمة أو خارجها‪ .‬بمعنى انه يمكن‬ ‫الوصول الى املتغيرات و الدوال و ال‪( classes‬محتويات ال‪ )class‬من نوع ‪ public‬من‬ ‫أي ‪ class‬أخرى كانت‪.‬‬ ‫‪private modifier .7‬‬ ‫ُيستخدم مع املتغيرات و الدوال ضمن ‪ class‬محددة‪ ،‬و هذه ال‪ class‬هي الوحيدة التي‬ ‫تستطيع ان ترى املتغيرات ال‪ private‬و تتعامل مع الدوال ال‪ private‬املوجودة فيها‪.‬‬ ‫بمعنى آخر انه إذا عرفنا كائن من نوع ‪ class‬تحتوي على متغيرات و دوال من نوع‬ ‫‪ ،private‬فإن هذا الكائن ال يستطيع الوصول اليها أو التعامل معها مباشرة إال عن‬ ‫طريق الدوال املوجودة ضمن هذه ال‪ class‬بشرط ان تكون هذه الدوال من نوع‬ ‫‪.public‬‬ ‫‪protected .5‬‬ ‫ُيستخدم للحد من الوصول الى املتغيرات أو الدوال املوجودة داخل ‪ class‬ما إال عن‬ ‫طريق ‪ class‬فرعية من هذه ال‪ class‬الرئيسية و ُيستخدم هذا املعدل في الوراثة‬ ‫ً‬ ‫‪ inheritance‬حيث يسمح لجميع ‪ classes‬الفرعية بالوصول سواءا كانت هذه‬ ‫ال‪ classes‬الفرعية داخل الحزمة او خارجها‪ .‬و كذلك يسمح الي ‪ class‬عادية‬ ‫بالوصول بشرط ان تكون داخل الحزمة‪.‬‬ ‫‪default .4‬‬ ‫في هذه الحالة ال يتم إعطاء أي معدل لل‪ .class‬و يكون املعدل حينئذ افتراض ي‬ ‫‪ ،default‬حيث ال ُيستخدم أي معدل مع متغير او دالة او ‪ ،class‬و يمكن الوصول‬ ‫بحرية الى هذه املتغيرات أو الدوال أو ‪ classes‬بشرط أن ال تكون ال‪ class‬خارج‬ ‫الحزمة‪.‬‬ ‫‪31‬‬


Dr. Mabroka A.M.

Fall2016

CS602: Java Programming

.‫ أكمل الجدول السابق وفق ما سبق‬:‫سؤال املحاضرة‬ classes‫جدول ملخص الوصول الى ال‬ Access modifier public private protected default position From the same class Any class inside package Any class outside package Any subclass inside package Any subclass outside package Any class outside package

30


‫‪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‬مرة أخرى في أي برنامج‪ ،‬يجب وضعها في حزمة وفق الخطوات املبينة في‬ ‫الفقرة التالية‪.‬‬ ‫‪‬‬ ‫‪.0‬‬ ‫‪.7‬‬

‫‪.5‬‬

‫تكوين الحزمة‪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‬‬

‫‪32‬‬


‫‪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‬كائنات أكثر‪.‬‬ ‫‪ ‬تتمثل أهمية الوراثة في لغة جافا بالتالي‪:‬‬ ‫‪ .0‬عدم تكرار إعادة كتابة الكود‪.‬‬ ‫‪ .7‬سهولة تعديل البرنامج‪.‬‬ ‫‪ .5‬امكانية انشاء ‪ 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‬املتشابهة‪.‬‬

‫‪33‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫مالحظات‪:‬‬ ‫‪ .0‬كل ‪ object‬من ‪ subclass‬هو ‪ object‬من ‪.superclass‬‬ ‫‪ .7‬يمكن أن يكون ل‪ superclass‬أكثر من ‪ ،subclass‬و لكن ليس العكس‪.‬‬ ‫‪ .5‬يمكن تمثيل العالقة بين ال‪ superclass‬و ‪ subclass‬ب‪.is relationship‬‬ ‫‪ .4‬كل ‪ class‬يمكن أن ترث من ال‪ class‬التي تسبقها (التسلسل الهرمي)‪.‬‬ ‫‪ .1‬تعتبر ال‪ object class‬هي ال‪ class‬االم الرئيسية املوجودة في مكتبة جافا (‪)superclass‬‬ ‫ألي ‪ class‬في البرنامج في حالة عدم تحديد ‪ .superclass‬و أي ‪ class‬في برنامج جافا ترث‬ ‫ً‬ ‫ضمنيا من ‪ object class‬الرئيسية ‪.‬‬ ‫‪ .6‬تحتوي ‪ object class‬الرئيسية على مجموعة من الدوال التي يمكن استخدامها في أي‬ ‫ُ‬ ‫برنامج لتنفيذ غرض معين‪ .‬و من اهمها )(‪ toString‬التي تستخدم لعرض مجموعة من‬ ‫البيانات لكائن ما‪ ،‬و هي تشبه الشكل العام لدالة العرض ‪ ،printf‬و الشكل العام لها هو‪:‬‬ ‫)(‪public String toString‬‬ ‫{‬ ‫;) اسماء املتغيرات‪ “,‬وصف صيغة العرض“(‪return String.format‬‬ ‫}‬ ‫ً‬ ‫و يتم استدعاء الدالة )(‪ toString‬ظاهريا باستخدم الشكل التالي‪:‬‬ ‫دالة العرض نقطة اسم الكائن‬ ‫;)(‪Object-name.toString‬‬

‫‪34‬‬


‫‪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‬يقوم بالتالي‪:‬‬ ‫‪ .0‬عرض بيانات كل موظف‪.‬‬ ‫‪ .7‬حساب و عرض اجمالي ما يتقاضاه كل موظف اذا علمت ان نسبة العمولة هي ‪.0.1‬‬ ‫تحليل سؤال البرمجة‪:‬‬ ‫ً‬ ‫أوال‪ :‬تحديد ‪input & output‬‬ ‫بما أن املطلوب االول في السؤال هو عرض بيانات كل موظف‪ ،‬أذن البد من تحديد هذه‬ ‫البيانات و ادخالها بالطريقة املناسبة لعرضها على الشاشة‪.‬‬ ‫‪Input‬‬ ‫‪output‬‬ ‫البيانات االساسية لكل موظف‬ ‫البيانات االساسية لكل موظف‬ ‫‪Firstname‬‬ ‫‪firstname‬‬ ‫‪Lastname‬‬ ‫‪lastname‬‬ ‫‪Socialno‬‬ ‫‪socialno‬‬ ‫‪sale‬‬ ‫‪sale‬‬ ‫‪Totals‬‬ ‫?‬ ‫‪35‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫ً‬ ‫وفقا للمطلوب االول‪ ،‬فإن البيانات االساسية هي‪ :‬االسم االول‪ ،‬االسم االخير‪ ،‬رقم الضمان‬ ‫االجتماعي‪ ،‬مقدار املبيعات‪ ،‬اجمالي ما يتقاضاه‪.‬‬ ‫ً‬ ‫ً‬ ‫ثانيا‪ :‬تحديد املعالجة‪ ،‬بمعنى معرفة ما إذا كان هناك ‪ output‬يكون نتيجة عملية ما (مثال‬ ‫عملية حسابية)‪ .‬بالنظر الى السؤال الحالي‪ ،‬نجد ان اجمالي ما يتقاضاه هو املطلوب الثاني في‬ ‫السؤال‪ .‬إذن‪ ،‬البد من عملية ما (سلوك ُيترجم الى دالة ‪ )method‬اليجاد اجمالي ما يتقاضاه‬ ‫كل موظف ثم عرضه على الشاشة‪.‬‬ ‫العملية هي‪:‬‬ ‫‪ .0‬اجمالي ما يتقاضاه موظف العمولة = مقدار املبيعات (‪*)sale‬النسبة (‪)rate‬‬ ‫‪ .7‬اجمالي ما يتقاضاه موظف املرتب و العمولة=‬ ‫مقدار املبيعات (‪*)sale‬النسبة (‪ + )rate‬املرتب (‪.)salary‬‬ ‫ً‬ ‫ثالثا‪ :‬تحديد طريقة البرمجة‪ :‬بما ان لغة البرمجة هي جافا‪ ،‬إذن‪ ،‬نوع البرمجة هي ‪OOP‬‬ ‫ً‬ ‫بناءا على ذلك‪ ،‬يتم اتباع خطوات محددة لكتابة برنامج ‪ OOP‬كما يلي‪:‬‬ ‫‪ .0‬تحديد الكائنات‪ :‬لدينا نوعان من املوظفين‪ .‬إذن‪ ،‬نحتاج لكائنين‪ :‬كائن موظف عمولة‪ ،‬و‬ ‫كائن آخر موظف مرتب و عمولة‪.‬‬ ‫‪ .7‬لكل كائن نموذج خاص به (‪)class‬‬ ‫‪ .5‬الحظ ان الكائنين يتفقان في البيانات االساسية ويختلفان في اجمالى ما يتقاضاه كل‬ ‫منهما‪.‬‬ ‫‪ .4‬املطلوب في البرنامج استخدام الوراثة (لتجنب تكرار البيانات االساسية)‬ ‫ً‬ ‫‪ .1‬مطلوب أيضا استخدام الدوال الزائدة (لتجنب تكرار العمليات الحسابية)‪.‬‬ ‫**كتابة ‪classes‬‬ ‫**كتابة البرنامج الرئيس ي‬

‫‪36‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ .11‬تعدد االشكال ‪polymorphism‬‬ ‫ً‬ ‫ُ‬ ‫يمكن لدالة ما أن تؤدي اكثر من وظيفة وفقا السم الكائن الذي يستدعيها‪ .‬هذه العملية تسمى‬ ‫بتعدد االشكال ‪.polymorphism‬‬ ‫‪ ‬بما ان كل كائن من ‪ subclass‬هو كائن من ‪ ،superclass‬أذن‪ :‬يمكن أن يكون هناك عدد‬ ‫كبير من الكائنات ‪ objects‬املتنوعة (كل كائن من ‪ subclass‬مختلفة) تنتمي الى نفس‬ ‫‪.superclass‬‬ ‫‪ ‬يمكن ان تشير متغيرة ‪ object‬من نوع ‪ superclass‬الى كائن من نوع ‪.subclass‬‬ ‫‪ ‬بما ان كل ‪ object‬من ‪ subclass‬يمكن التعامل معه على انه ‪ object‬من ‪ ،superclass‬إذن‪:‬‬ ‫يمكن وضع هذه الكائنات املختلفة مع بعضها البعض (مصفوفة من نوع ‪ )superclass‬بحيث‬ ‫يدل كل عنصر فيها على كائن ما داخل املصفوفة من ‪ subclasses‬التي ترث من هذه‬ ‫‪.superclass‬‬ ‫‪ ‬إذن‪ ،‬يمكن ملتغير من نوع ‪( superclass‬اسم املصفوفة) أن يحتوي (او يشير الى ) أكثر من نوع‬ ‫من كائنات من ‪ subclasses‬مختلفة‪ ،‬هذا املتغير حيئذ ُيسمى بمتغير متعدد االشكال‪.‬‬ ‫‪ ‬كما يمكن لدالة ما ان تقوم بعدة مهام مختلفة حسب نوع الكائن الذي يستدعيها‪ ،‬و تسمى‬ ‫هذه الدالة حيئذ بدالة متعددة االشكال‪.‬‬ ‫مالحظات‪:‬‬ ‫‪ .0‬تتم عملية تخصيص الكائن ملتغير كائن آخر من نوع ‪ superclass‬اثناء زمن التنفيذ‪ ،‬و‬ ‫ليس عند عملية الترجمة (‪.)compilation‬‬ ‫‪ .7‬باستخدام الدوال ‪ ،overriding‬يمكن التعامل مع املتغيرات الخاصة املصرح بها داخل‬ ‫ال‪.superclass‬‬ ‫‪ .5‬نوع الكائن هو الذي يحدد الدالة املراد استدعائها‪.‬‬ ‫**سؤال املحاضرة‬ ‫أكتب برنامج بلغة الجافا يحاكي حركة حيوانات (اسد بري‪ ،‬حمامة طائر‪ ،‬سمك السردين)‬ ‫ليحسب املسافة التي يقطعها كل حيوان في زمن قدره ن‪ ،‬ثم يعرض بيانات كل حيوان و املسافة‬ ‫ً‬ ‫املقطوعة‪ ،‬مع خصم حجم الحيوان من أجمالي املسافة (مستخدما تعدد االشكال‬ ‫‪.)polymorphism‬‬

‫‪37‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ .11‬التصنيف املركب ‪Composite Class‬‬ ‫يمكن الي ‪ class‬أن تحتوي على متغيرة مرجعية ‪ reference variable‬لكائن ما‪ ،‬او عدد من‬ ‫املتغيرات املرجعية لعدة كائنات من ‪ classes‬أخرى كا ‪ instance variable‬فيها‪ ،‬و حينئذ يكون‬ ‫التصنيف مركب ‪ composition‬من تصنيف أخر او عدة تصنيفات‪.‬‬ ‫‪A class may have references to objects of other classes as variables; such a‬‬ ‫‪capability is called a composition.‬‬ ‫مالحظات‪:‬‬ ‫‪ .0‬يمكن تمثيل العالقة فيما بين ‪ class‬الذي يحتوي على ‪ class‬أخر بداخله ب ‪has‬‬ ‫‪relationship‬‬ ‫‪ .7‬يجب مراعاة ترتيب الكائنات املتداخلة حسب االولوية و كذلك ترتيب استدعاء الدوال‪.‬‬ ‫سؤال املحاضرة‪ :‬أعد كتابة الحل للسؤال الثالث من االمتحان النصفي مع طباعة بيانات السائق‬ ‫ً‬ ‫لكل سيارة (االسم االول‪ ،‬االسم االخير‪ ،‬رقم التعريف‪ ،‬تاريخ امليالد) مستخدما ‪composition‬‬ ‫‪.classes‬‬

‫‪38‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ .12‬معالج االستثناء ‪exception handling‬‬ ‫االستثناء في البرمجة هو وقوع حدث اثناء تنفيذ البرنامج مما يؤدي الى خلل في التسلسل الطبيعي‬ ‫للتعليمات في البرنامج‪.‬‬ ‫و يحدث عند حدوث خطأ في البرنامج‪ ،‬عندها تقوم دالة االستثناء بانشاء كائن من نوع االستثناء‬ ‫و يتم تمرير هذا الكائن الى ‪.run time system‬‬ ‫هذا الكائن يحتوي على املعلومات الخاصة باالستثناء مثل نوع االستثناء و حالة البرنامج عند‬ ‫حدوث الخطأ‪ .‬عندئذ يكون ال‪ run time system‬مسئول عن أيجاد جزء ال‪ code‬الذي يعالج‬ ‫ُ‬ ‫االستثناء (الخطأ)‪ ،‬هذه العملية تسمى بمعالجة االستثناء ‪.Exception Handling‬‬ ‫‪ ‬تعتبر دالتي ‪ try & catch‬هما املسئولتان عن معالجة االستثناء في أي جزء من البرنامج‪ ،‬و‬ ‫يمكن اضافتهما في الجزء املحدد ملعالجة االستثناء املتوقع حدوثه‪.‬‬ ‫‪ ‬الشكل العام لهاتين الدالتين‪:‬‬ ‫‪try‬‬ ‫{‬ ‫ال‪ code‬املراد التحقق من صحته‬ ‫;‪throw new Exception‬‬ ‫}‬ ‫)‪catch(Exception exception‬‬ ‫{‬ ‫رسالة خطأ‬ ‫;‪throw exception‬‬ ‫}‬

‫‪39‬‬


Dr. Mabroka A.M.

Fall2016

CS602: Java Programming

event handling ‫ معالجة الحدث‬.13 ‫يتفاعل املستخدم عادة مع النظام او واجهات نظام التطبيق ليشير الى أو يحدد الوظائف التي‬ .‫يجب على التطبيق أن ينجزها له‬ ً ‫ يخبر‬send ‫ فإن الضغط على الزر‬،yahoo email ‫ ضمن تطبيق‬email ‫ عندما نكتب‬:‫فمثال‬ .‫ املحدد‬email ‫ الى عنوان‬email ‫التطبيق بانه يجب عليه ان يرسل‬ *GUI are event driven. When the user interacts with a GUI Components, the interaction –known as an event- drives the program to perform a task. *Some common events(user interactions) that might cause an application to perform a task including clicking a button, typing in a text field, selecting an item from a menu, closing a window and moving a mouse. *Event Handler: the code that performs a task in response to an event is called an event handler. *Event handling: the over all process of responding to events is known as event handling.

event component ‫ مكونات الحدث‬ :‫يتكون الحدث مما يلي‬ event object ‫ كائن الحدث‬.1 ‫ كل حدث متكون هو عبارة‬،‫ في لغة جافا‬.‫ يقع الحدث‬،‫عندما يتفاعل املستخدم مع البرنامج‬ .‫عن كائن يصف الحدث نفسه‬ .ActionEvent Class ‫ يتكون كائن من نوع‬،button ‫ عند الضغط على الزر‬:‫مثال‬ mouseEvent class ‫تحريك الفأرة يكون كائن من نوع‬ .............‫و هكذا‬

41


Dr. Mabroka A.M.

Fall2016

CS602: Java Programming

event source ‫ مصدر الحدث‬.2 ً ‫ مصدر الحدث هو الزر نفسه‬،‫ في حالة الضغط على الزر‬:‫ فمثال‬،‫هي االداة التي كونت الحدث‬ .button event handler ‫ معالج الحدث‬.3 ‫هو الدالة التي تستطيع فهم الحدث و التعامل معه و تنفيذ االوامر املكتوبة ضمن نطاق‬ event ‫ و تستقبل هذه الدالة معامل من نوع الكائن املتكون من‬.‫الدالة كرد فعل للحدث‬ .object event handling mechanism ‫ آلية معالجة الحدث‬ ‫كيف يتم تسجيل معالج الحدث؟‬ count ‫ عندما‬،‫ عناصر‬6 ‫ مكونة من‬button[ ] ‫عند التصريح بكائن من نوع مصفوفة ازرار‬ JButton class ‫ و هو كائن من نوع‬button[0]= zero ‫ إذن‬،1 ‫تساوي‬ ُ button [0] ‫ له متغيرة عضو تسمى‬JComponent ‫بما ان كل‬ ListenerList

every JComponent has an instance variable called listenerList which refere to an object of class EventListenerList (javax.swing.event) **each object of JComponent subclass maintains a reference to all its registered listeners in the listenerList. **button[0].AddActionListener(handler); ‫عند تنفيذ السطر‬ A new entry containing a reference to the buttons handler object is placed in buttons listenerList. This entry also included the listener type (in this case ActionListener). ‫**تعريفات هامة‬ .user interaction ‫ هو التفاعل فيما بين املستخدم و التطبيق‬:event ‫*تعريف الحدث‬ .‫) التي تكتب لكل حدث‬code( ‫ رد فعل البرنامج يعتمد على تنفيذ االوامر‬:reaction ‫*رد الفعل‬ 40


‫‪CS602: Java Programming‬‬

‫‪.14‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫لغة الجافا و الواجهات الرسومية ‪java language and graphical user‬‬ ‫)‪interfaces(GUI‬‬

‫تعتبر واجهات االستخدام الرسومية احد انواع واجهات االستخدام التي تسمح للمستخدم‬ ‫ً‬ ‫بالتفاعل مع االجهزة االلكترونية باستخدام الصور و العناوين و االدوات بدال من االوامر النصية‬ ‫‪ ،text command‬من امثلة ‪ GUI‬بيئة التطوير املتكاملة للبرمجة بلغة الجافا ‪ NetBeans‬التي‬ ‫تتكون من عدة واجهات استخدام لتسهيل االستخدامية و تجنب االدخال الخطأ‪ .‬و تحتوي هذه‬ ‫البيئة على ما يلي‪:‬‬ ‫‪ Title bar .0‬الذي يحتوي على عنوان النافذة ‪،window title‬‬ ‫‪ Menu bar .7‬الذي يحتوي على القوائم (املهام) مثل‪ file, edit…. :‬و هكذا‪.‬‬ ‫‪ A set of buttons .5‬و تعني مجموعة من االزرار التي يستخدمها املستخدم عن طريق الضغط‬ ‫عليها لتنفيذ مهمة معينة مثل حفظ ملف أو تنفيذ ملف‪ ،‬و هكذا‪.‬‬ ‫‪ُ Combo box .4‬يستخدم لكتابة بيانات‪.‬‬ ‫‪ُ Scroll bar .1‬يستخدم لتحريك الشاشة من اعلى الى اسفل و العكس او من اليمين الى اليسار و‬ ‫العكس‪.‬‬ ‫باإلضافة الى العديد من ‪ GUI Components‬التي تمتاز بها بيئة التطوير املتكاملة كما في الشكل‬ ‫التالي‪:‬‬

‫‪combo box‬‬

‫‪menu bar‬‬

‫‪buttons‬‬

‫‪Scroll‬‬ ‫‪bar‬‬

‫‪42‬‬


‫‪CS602: Java Programming‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪Fall2016‬‬

‫‪ ‬مزايا ‪:GUI‬‬ ‫‪ .0‬سهولة تعامل املستخدم مع النظام‪.‬‬ ‫‪ .7‬تقليل نسبة االخطاء‪.‬‬ ‫‪ .5‬سرعة التعلم و االبداع‪.‬‬ ‫‪ ‬مكونات الواجهات الرسومية ‪GUI Components‬‬ ‫ُ‬ ‫تشيد ‪ GUI‬من ‪ .GUI Components‬و هذه املكونات هي مجموعة من الكائنات ‪ objects‬التي من‬ ‫خاللها يتفاعل املستخدم مع اجهزة االدخال و االخراج مثل الفأرة و لوحة املفاتيح أو أي جهاز‬ ‫آخر‪ .‬و تحتوي لغة جافا على حزم خاصة إلنشاء و تكوين واجهات مستخدم رسومية اهمها ما يلي‪:‬‬ ‫‪ .1‬الحزمة )‪AWT (Abstract Window Toolkit‬‬

‫ُ‬ ‫ُ‬ ‫تعتبر هذه الحزمة هي االقدم‪ ،‬حيث كانت ‪ java GUIs‬تبنى و تشيد من ‪ AWT‬املتمثلة في الحزمة‬

‫‪ java.awt‬و هي تعتمد على نوع نظام التشغيل‪ .‬و يتم تضمين الحزمة بالشكل التالي‪:‬‬ ‫;‬

‫*‪import java.awt.‬‬

‫تعني امكانية باستخدام اي ‪ class‬موجودة داخل هذه الحزمة‬ ‫‪ .2‬الحزمة ‪swing‬‬

‫ً‬ ‫و هي حزمة تم اصدارها و استخدامها حديثا في تصميم الواجهات الرسومية‪ .‬و تعتبر جزء من ‪JFC‬‬ ‫و هي اختصار ل‪ .Java Foundation Calsses‬و تحتوي على مكونات رسومية ‪GUI Components‬‬ ‫موجودة ضمن الحزمة ‪ javax.swing‬التي يتم استخدامها إلنشاء واجهات رسومية بلغة جافا‪.‬‬ ‫تتميز ال‪ swing‬بالكفاءة و املرونة في تصميم الواجهات الرسومية‪ ،‬كما تتميز باالستقاللية حيث‬ ‫أنها ال تعتمد على نوع نظام التشغيل‪.‬‬

‫و تحتوي ‪ swing‬على العديد من ال‪ classes‬التي تسمح للمستخدم بالتفاعل مع البرنامج بإضافة‬ ‫النوافذ و القوائم و االزرار للتطبيق ‪.application‬‬ ‫و اهم هذه ال‪ classes‬ما يلي‪:‬‬ ‫‪Input/output JOptionPane class ‬‬ ‫يوجد التصنيف ‪ JOptionPane class‬ضمن الحزمة ‪ javax.swing‬التي تزود املستخدم‬ ‫بصناديق حوار ‪ )command windows( dialog boxes‬لإلدخال و االخراج‪ .‬هذه الصناديق يتم‬ ‫عرضها عن طريق استدعاء الدوال املوجودة في التصنيف ‪ .JOptionPane class‬و من اهم هذه‬ ‫الدوال ما يلي‪:‬‬ ‫‪43‬‬


‫‪CS602: Java Programming‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪Fall2016‬‬

‫‪ .0‬الدالة ‪ showInputDialog‬و هي دالة من نوع ‪ .static‬و يمكن استدعائها باستخدام اسم‬ ‫ُ‬ ‫‪ class‬املوجودة فيها دون الحاجة الى كائن‪ .‬و تستخدم لعرض صندوق حوار لألدخال و‬ ‫ترجع القيمة املدخلة بشرط ان تكون من نوع ‪ .string‬و الشكل العام لها هو‪:‬‬ ‫; )"‪Type (String) variable-name = JOptionPane.showInputDialog("text message‬‬ ‫ً‬ ‫**مالحظة‪ :‬الدخال رقم (‪ ،)int or double‬البد أوال من ادخال القيمة على اهها ‪ ،string‬ثم‬ ‫تحويرها (تحويلها) الى النوع املناسب باستخدام دوال التحوير مثل‪:‬‬ ‫;)‪int variable-name=Integer.parseInt(string value‬‬ ‫;)‪or double variable-name=Integer.parseDouble(string value‬‬ ‫ُ‬ ‫‪ .7‬الدالة ‪ showMessageDialog‬و هي دالة من نوع ‪ .static‬تستخدم لعرض رسالة ضمن‬ ‫صندوق حوار و كذلك قيم متغيرات‪ ،‬و الشكل العام لها هو‪:‬‬ ‫موضع ظهور الصندوق على الشاشة‬

‫الرسالة املراد ظهورها على الشاشة‬

‫‪JOptionPane.showMessageDialog(null ," text message"+variable-name+"text message"+…. ,‬‬ ‫; )‪"window title" , message-type‬‬

‫اسم متغيرة املراد طباعة محتواها‬

‫نوع الرسالة‬

‫عنوان الصندوق‬

‫‪ ‬هناك أنواع عديدة من ‪ classes‬التي تحتوي على دوال جاهزة للحصول على ‪ GUI‬مثل‪:‬‬ ‫‪ JLable .0‬لوضع عنوان أو ملصق‬ ‫‪ JRadioButton .7‬الختيار قيمة واحدة من عدة خيارات‬ ‫‪ ImageIcon .5‬لوضع ازرار‬ ‫‪ JLable .4‬لوضع ملصق‬ ‫‪ JMenu .1‬لتكوين قائمة‬ ‫‪ JTextField .6‬للحصول على صندوق لكتابة نص‬ ‫ُ‬ ‫‪ :LayoutManager ‬يتمثل في مجموعة من ال‪ classes‬التي تحتوي على دوال تستخدم‬ ‫لترتيب مكونات ال‪ GUI‬في محتوى متنوع مثل‪:‬‬ ‫‪ :Flow layout class ‬يسمح بترتيب ال‪ GUI Components‬بشكل متتالي من اليمين الى‬ ‫اليسار بالترتيب املعطى‪.‬‬ ‫‪ :Border layout class ‬يرتب ال‪ GUI Components‬في خمس مناطق‪ :‬شمال‪ ،‬جنوب‪،‬‬ ‫شرق‪ ،‬غرب‪ ،‬وسط‪.‬‬ ‫‪ :Grid layout class ‬يرتب ال‪ GUI Components‬في شكل صفوف و اعمدة‪.‬‬ ‫‪44‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫مالحظات‪:‬‬ ‫‪ ‬يمكن برمجة الواجهات ‪ GUIs‬إما بكتابة ال‪ code‬مباشرة في التطبيق‪ ،‬أو باستخدام مزايا بيئة‬ ‫التطوير ‪ NetBeans‬التي توفر امكانية تصميم الواجهات باستخدام املصمم ‪ design‬الذي‬ ‫يسمح بتصميم واجهات البرنامج عن طريق اختيار ‪ GUIs Components‬املناسبة من لوحة‬ ‫الخيارات و بالتالي تهيئة ال‪ code‬املناسب لكل مكون ليتمكن املبرمج من اضافة اجزاء أخرى‬ ‫لل‪ code‬حسب الحاجة (انظر بيئة تطوير ‪.)NetBeans‬‬ ‫ً‬ ‫ُ‬ ‫‪ ‬هناك ‪ GUI Components‬التي ال تستطيع أن تولد حدثا (‪ ،)can not generate event‬مثل‬ ‫‪ JOptionPane class‬التي تسمح فقط بالعرض و االدخال لنص ‪ .text‬فعند الضغط على الزر‬ ‫‪ ok‬في صناديق الحوار لدوال ‪ ،JOptionPane‬ال يتولد حدث‪ ،‬و انما فقط يتم تمرير القيمة‬ ‫املدخلة الى البرنامج‪ ،‬او يتم إزالة صندوق الحوار من الشاشة‪.‬‬ ‫ً‬ ‫ُ‬ ‫‪ ‬هناك ‪ GUI Components‬التي تستطيع ان تولد حدثا (‪ )can generate event‬مثل ‪JButton,‬‬ ‫‪ JTextFields, JLabel‬و غيرها‪ .‬في هذه الحالة‪ ،‬البد من اتباع الخطوات التالية‪:‬‬ ‫‪1. Create class that represents the event handler.‬‬ ‫‪2. Implement an appropriate interface, known as an event –listener interface, in‬‬ ‫‪the class from Step 1.‬‬ ‫‪3. Indicate that an object of the class from Step1 and 2 should be notified when the‬‬ ‫‪event occurs. This is known as registering the event handler.‬‬ ‫ُ‬ ‫‪ ‬تستخدم التصنيفات املتداخلة ‪ inner classes‬في معالجة الحدث ‪ ،event handling‬حيث‬ ‫تسمح لغة جافا للمبرمج بالتصريح ب‪ classes‬داخل ‪ ،classes‬و تتميز هذه ال‪ classes‬املتداخلة‬ ‫بكونها قادرة على الوصول لجميع محتويات ال‪ class‬السابقة لها‪ .‬و يمكن ان تكون هذه‬ ‫ً‬ ‫ُ‬ ‫ال‪ inner classes‬من نوع ‪ static‬أو ‪ .non static‬و تسمى هذه ال‪ inner classes‬أيضا ب ‪nested‬‬ ‫‪ ،classes‬و عادة ما تكون ‪ inner classes‬املستخدمة في ‪ event handling‬من نوع ‪.non-ststaic‬‬ ‫**سؤال املحاضرة‪ :‬ترغب أحد الشركات في بناء برجين على قطعة ارض‪ .‬فإذا كانت قاعدة البرج‬ ‫االول مربعة (طول الضلع ‪41‬م)‪ ،‬و البرج االخر مثلثة ‪،‬أكتب برنامج بلغة الجافا يقوم بالتالي‪:‬‬ ‫‪ .0‬عرض بيانات البرجين و املساحة االرضية لهما باستخدام ‪ .GUI‬علما بان مساحة البرج ذو‬ ‫القاعدة املثلثة تساوي نصف مساحة البرج املربعة‪.‬‬ ‫‪ .7‬عرض مساحة البرجين بعد بناءهما على ارتفاع قدره ‪ 11‬طابقا علما بان مساحة قاعدة‬ ‫البرج تزداد بمقدار ‪ 1.10‬لكل ‪ 1‬طوابق اضافية إذا زاد ارتفاع البرج عن ‪ 01‬طوابق‬

‫‪45‬‬


‫‪CS602: Java Programming‬‬

‫‪.15‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪Fall2016‬‬

‫الواجهات (الوصالت) ‪interfaces‬‬

‫تشبه الى حد كبير ‪ class‬و لكنها تختلف عنها في كونها تدعم الوراثة املتعددة على عكس‬ ‫ً‬ ‫‪ ،superclass‬فمثال لكل ‪ subclass‬يوجد ‪ superclass‬واحدة فقط‪ ،‬بينما يمكن أن يكون ل‪class‬‬ ‫اكثر من ‪ interface‬واحدة‪ .‬و الشكل العام لها هو‪:‬‬

‫اسم التصنيف‬

‫كلمة محجوزة معدل الوصول (اختياري ‪)optional‬‬

‫‪Access modifier‬‬ ‫‪interface‬‬ ‫‪interface-name‬‬ ‫{‬ ‫اسماء الثوابت من نوع )‪final type variables (constants‬‬ ‫الدوال من نوع ‪abstract methods‬‬ ‫ال يمكن استخدام هذه الدوال إال بعد إعادة تعريفها مرة أخرى‬ ‫في التصنيف املراد استخدام هذه الدوال فيه‬ ‫}‬ ‫**مالحظات‪:‬‬ ‫‪ .0‬يتم تعريف الدالة في ال‪ interface‬عن طريق كتابتها بالشكل التالي‪:‬‬ ‫; )…………(‪Return-type method-name‬‬ ‫‪ .7‬تدعم ‪ interface‬عملية تعدد االشكال‪ ،‬حيث يمكن تكوين مصفوفة من نوع ‪interface‬‬ ‫تحتوي على أنواع مختلفة من الكائنات‪.‬‬ ‫‪ .5‬الستخدام ‪ interface‬في البرنامج‪ ،‬نتبع الشكل التالي‪:‬‬ ‫اسم الوصلة ن‬

‫اسم الوصلة‪7‬‬

‫اسم الوصلة‪0‬‬

‫كلمة محجوزة‬

‫‪interface-name1 ,interface name2 ,…,interface-namen‬‬

‫‪implements‬‬

‫اسم التصنيف معدل الوصول‬ ‫‪class class-name‬‬

‫‪Public‬‬

‫كلمة محجوزة {‬ ‫‪……….‬‬ ‫……………‬ ‫‪……….‬‬ ‫}‬

‫‪46‬‬


‫‪CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪ .4‬يمكن الي ‪ class‬تنجز او تنفذ ‪ interface‬ان تستخدم الدوال املوجودة داخل‬ ‫ال‪ interfaces‬عن طريق إعادة تصرحها و كتابة تفاصيلها مرة اخرى داخل هذه ال‪.class‬‬ ‫‪ .1‬ال‪ interface‬تعتبر بمثابة تعريف للطرق التي تحدد التفاعل فما بين االشياء‪ ،‬مثل‬ ‫املستخدم و النظام‪ .‬بمعنى آخر‪ interface ،‬هي التي تحدد العمليات املسموح بتنفيذها‬ ‫دون الحاجة الة معرفة كفية عمل هذه العمليات‪.‬‬ ‫سؤال املحاضرة‪ :‬باستخدام ‪ ،GUIs‬اكتب برنامج يقرأ بيانات كتاب في معرض للكتاب‪ ،‬ثم يحسب‬ ‫و يعرض عدد النسخ املباعة و مقدار ما تبقى‪.‬‬

‫‪47‬‬


‫‪CS602: Java Programming‬‬

‫‪Dr. Mabroka A.M.‬‬

‫‪Fall2016‬‬

‫‪ .16‬التدفق و امللفات ‪stream & files‬‬ ‫ُيسمى تدفق فيض من البيانات و املعلومات من مصدر معين ‪ source‬الى جهة وصول محددة‪،‬‬ ‫ُيسمى ‪.stream‬‬ ‫و من اشهر ال ‪ classes‬الخاصة ب‪ stream‬هي‪ System.in :‬و هو ‪ input stream‬الذي مصدره لوحة‬ ‫املفاتيح‪.‬‬ ‫أما ‪ System.out‬فهو تعتبر ‪ output stream‬و جهة الوصول هي الشاشة‪.‬‬ ‫للتعامل مع امللفات في لغة جافا‪ ،‬البد من تضمين الحزمة‪:‬‬ ‫;*‪import java.io.‬‬ ‫حيت تحتوي هذه الحزمة على ‪ classes‬للتعامل مع امللفات‪ .‬و تحتوي هذه ال‪ classes‬بدورها على‬ ‫دوال للقراءة من او الكتابة في امللفات النصية‪.‬‬ ‫من أمثلة هذه الدوال ما يلي‪:‬‬ ‫)(‪exists‬‬ ‫)(‪canRead‬‬ ‫)(‪canWrite‬‬ ‫)(‪isFile‬‬ ‫و يتم اوال تكوين كائن من نوع ملف باستخدام الشكل التالي‪:‬‬ ‫اسم امللف‬

‫اسم التصنيف كلمة محجوزة‬

‫اسم الكائن‬

‫اسم التصنيف‬

‫; )‪File object-name = new File ( file-name‬‬

‫‪48‬‬


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.