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