Professional Documents
Culture Documents
Java Course
Java Course
اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ
www.boosla.com
جامعة الملك سعود
كلية المعلمين
قسم الحاسب اآللي
تعتبر لغة الجافا من اللغات القوية جدا في مجال إنشاء التطبيقات المختلفة سواء كانت
هذه التطبيقات
تعمل منفردة على أجهزة الكمبيوتر الشخصي أو تطبيقات اإلنترنت أو التطبيقات المختلفة
لألجهزة المحمولة ,مثل الموبايل والمفكرات اإللكترونية وهكذا.
ولقد قامت شركة صن ( )Sun Microsystemsباختراع وتطوير هذه اللغة .وأصبحت
شركة صن مملوكة لشركة أوراكل وبالتالي انتقلت ملكية الجافا ألوراكل .وكان الهدف
عند اختراع لغة الجافا هو عمل لغة قادرة على برمجة نظم التشغيل لجميع األجهزة من
حاسبات عمالقة ( )mainframesإلى األجهزة الصغيرة مثل مشغالت MP3ولقد
اختارت الشركة صورة فنجان القهوة لتمثيل هذه اللغة .
قبل البدء في عملية البرمجةة ( أي كتابةة البرنةاما المطلةون تنفيةذه ) بلغةة الجافةا دبةد مةن
توافر العدة الالزمة ( . )Tool Kitوهةذه العةدة عبةارة عةن البةراما الالزمةة لعمليةة كتابةة
البرناما نفسة ونقةول أننةا كتبنةا برنةاما بلغةة الجافةا .بعةد للةك تة تي عمليةة الترجمةة لهةذا
البرناما وهي ما نطلق عليها عملية الترجمة (.)compiling
والحقيقة ف ن يوجد أكثر من طريقة لكتابة براما الجافا وترجمتها نوجز منها :
2
استعمال المكتبة ( )JDKوهي اختصار JAVA DEVELOPMENTE -1
KITمن إنتاج شركة صن مع أي محرر نصوص وليكن برناما Notepadالموجود
في الويندوز.
استعمال براما وسيطة تسهل عملية الكتابة والترجمة وتصحيح األخطاء مثل -2
برناما (… .)Net Beans – Jcreator
وسوف نتناول في الجزء الخاص بالمعمل كيفية تثبيت هذه البراما على جهاز الحاسب
التعامل معها .والشكل ( ) 1-1يبين كيفية عمل لغة الجافا . وكيفية
3
:J2EE هي اختصار ل Java 2 Enterprise Editionوهي تزودنا بالتطبيقات
الكبيرة على مستوى الشركات الكبيرة.
:J2ME هي اختصار ل Java 2 Micro Editionفهي تخص األجهزة الالسلكية
( )wireless devicesبشكل عام يعني على أجهزة المحمول وغيرها.
شرح ألهم مميزات لغة الجافا كما لكرناها في النقاط السابقة :
Java Is Platform - 1لغة الجافا غير مرتبطة ب نظمة التشغيل المختلفة
Independent
ومعنى للك إن يمكن نقل البراما (المكتوبة بلغة الجافا) بسهولة من نظام تشغيل إلى آخر.
وفي المقابل يمكن القول إن ال يمكن تشغيل برناما WORDمثال والخاص بنظام تشغيل
ويندوز( )WINDOWSعلى جهاز حاسب آخر يعمل بنظام تشغيل مختلف مثل يونيكس
( )UNIXأو نظام تشغيل لينكس ( )LINUXأو أي نظام تشغيل آخر غير نظام
WINDOWSوالمستخدم مع أجهزة الحاسبات المختلفة .ويرجع للك ألن برناما
WORDبشكل عام مكتون بلغة
4
) )C++/Cوالتي تعطي ملف من نوع EXEخالل عملية تسمى عملية الترجمة
COMPILATIONوبذلك يكون الملف الناتا مرتبطا ارتباطا كليا بنظام التشغيل.
أما بالنسبة للغة الجافا فالوضع مختلف حيث يوجد وسيط بين البرناما وبين نظام التشغيل
وهذا الوسيط يسمى ) (Byte Code Interpreterأي الترجمة على مستوى البايت.
وكذلك يمكن تسميت باآللة التخيلية للجافا ( .)Java Virtual Machineويوضح الشكل
( )2-1خطوات تشغيل برناما مكتون بلغة ( cأو . )c++
5
كما يوضح شكل (3-1أ) و شكل (3-1ن) و شكل (3-1ج)خطوات تشغيل برناما مكتون
بلغة الجافا .
شكل (3-1ن)
6
- 2تعتمد لغة الجافا على أسلوب برمجة األهداف Object Oriented Programming
حيث وفرت كثيرا من الجهد الذي كان يبذل باستخدام البرمجة التقليدية .فقد كانت البرمجة
التقليدية توفر للمبرما مكتبة من الدوال إضافة إلى تركيب تقليدي للبرناما وعلى المبرما
أن يستعمل الدوال مع تركيب البرناما إلنشاء التطبيقات المختلفة مما يضطره لكتابة
السطور الكثيرة أكثر من مرة؛ و لقد كانت وحدة بناء البرناما هي الدالة .functionفي
حين أتت البرمجة بواسطة األهداف بفكرة جديدة هي إنشاء عناصر متكاملة تحتوي على
بيانات ودوال هي أساس إنشاء البرناما .وبالتالي أصبحت وحدة بناء البرناما وحدة كبيرة
هي الفصيلة أو الفئة Classأو العنصر Objectمما سهل واختصر الكثير من الوقت
والجهد.
وسوف نتحدث على هذه النقطة بالتفصيل في البان الثاني .
7
-4تصميم برمجيات تستفيد من كل مميزات اإلنترن . Java Applet
وهي نوع من التطبيقات التي صممت خصيصا لإلنترنت .حيث يقوم المطور (
) Developerبإعداد هذا البرناما Appletثم يتم استدعاءه من خالل ملف HTML
بشرط تحميل برناما Appletعلى الخادم ( )Serverالموجود علي ملف .HTML
فيتم عرض هذا التطبيق من خالل صفحة ادنترنت عندما يستعدي المستخدم هذه الصفحة.
8
الهدف من المحاضرة الثانية :
– 1معرفة الطلبة الشكل العام لبرنامج الجافا
البرناما اآلتي يبين الشكل العام لبرناما الجافا ود يهمنا هنا فهم كل جزئية في البرناما فهذا سوف يتم في الدروس
التالية :
9
مثال( ) 1المطلوب عمل برنامجا يقوم بطباعة العبارة .Hello Egypt
public class HelloEgypt
{
( Publicالفصيلة عامة ) ائما تسبق تعريف الفئة أو الفصيلة Classوهي تعني أن هذه
الفئة أو أي يمكن ألي فئة أخرى في البرناما استخدام عناصر هذه الفئة .ألن برناما الجافا قد
يتكون من أكثر من فئة .class
classوهنا يتم بداية الفصيلة
اسم الفصيلة ( البرناما ) ولقد تم تسميت هنا بادسم الذي نريده . HelloEgypt
ودبد هنا أن نشير إلى نقطة هامة جدا وهي أن عند حفظ ملف الجافا دبد أن يتم حفظ
بنفس اسم الفصيلة وبنفس شكل الحروف والمسافات وفي مثالنا هذا سيكون
ادسم .HelloEgypt.java
قوس بداية تعريف الفصيلة . {
السطر الثاني
11
( (String [ ] sالجملة الموجودة داخل قوسي البداية للدالة mainوهي ] [ String sتعني
مصفوفة من النوع الحرفي وتسمى sلتخزين جملة الطباعة في البرناما .
وكما قلنا من قبل أن لغة الجافا هي لغة حساسة لحالة األحرف لذلك يجب مالحظة أن حرف
Sفي كلمة Stringيجب أن يكون حرفا كبيرا ( )capital letterوإد سيعطى البرناما خط
عند الترجمة .
السطر الثالث
وهذا هو أمر الطباعة في لغة الجافا وسوف نتناول بالتفصيل في األمثلة القادمة .
النص المراد طباعت ويجب أن يوضع بين عالمتي تنصيص (" ")
وقوسين
بعد للك يتم إنهاء البرناما بقوسي النهاية حيث يمثل القوس األول نهاية الوظيفة
method
للدالة mainوالقوس اآلخر يمثل نهاية الفصيلة . classوالشكل اآلتي يبين للك :
11
الهدف من المحاضرة الثالثة:
– 1معرفة الطلبة بالحروف المستخدمة في لغة الجافا
– 2معرفة الطلبة بالثواب والمتغيرات في لغة الجافا
– 3معرفة الطلبة بقواعد تسمية المتغيرات
– 4التعرف على العمليات الحسابية والمنطقية في لغة الجافا
تت لف حروف لغة الجافا مما يلي : أوال :حروف لغة الجافا
- 1الحروف األبجدية ( )Lettersوهي الحروف الكبيرة ( )Capital Lettersمن Aإلى Zوكذلك
الحروف الصغيرة ( )Small Lettersمن aإلى .z
- 2األرقام العددية ( )Digitsمن 1إلى .9
- 3الحروف الخاصة ( )Special Charactersوهي تلك الحروف التي ليست ب عداد أو بحروف أبجدية
ولكنها تكون على هيئة رموز كاآلتي(+,-,/,//,<,>,$,#,%,(),||,!,[],!=,,;,”,…..) :
:Constants & variables ثانيا الثواب والمتغيرات
أوال :الثواب :Constants
وهى عبارة عن قيم ثابتة يراد ادحتفاظ بها طوال البرناما ود تتغير قيمتها أبدا.
وتنقسم الثوابت في لغة الجافا إلى-:
-1ثوابت عددية Numeric Constants
-2ثوابت رمزية Non-numeric Constants
-1الثواب العددية:
يمكن تمثيل الثوابت العددية في لغة الجافا كاآلتي-:
الثاب العددي الحقيقي Floating Constant -الثاب العددي الصحيح : integer
هو عدد مكون من األرقام من ( 0إلى )9 o -هو عبارة عن عدد مكون من األرقام من ( 0إلى .)9
يجب أن يحتوي على فاصلة عشرية o -ال يحتوي على فاصلة عشرية.
يمكن أن يحوي اإلشارة ( ) - ،+ o -يمكن أن يحوى اإلشارة ( +أو .) -
مثال ().. ،-67.99 ،10.55 ،421.5 مثال (.)..........،-20 ،1000 ،12 ،0
تصنف األعداد الصحيحة في لغة الجافا حسب طولها والسعة التخزينية لها في الذاكرة كما يلي -:
تسمى ثوابت صحيحة طويلة .long int -الثوابت الصحيحة ( )40000 ،19679
تسمى ثوابت صحيحة قصيرة .short int -الثوابت () 55 ، 90 ،-16
تسمى ثوابت صحيحة بدون إشارة .unsigned int -الثوابت () 967 ، 20000
12
الرمزية :Non-Numeric الثواب -2
وهى عبارة عن رموز اللغة وتتكون من الحروف واألرقام وتكون بين عالمتي تنصيص أو اقتباس.
ومن األمثلة على الثوابت الرمزية ما يلي-:
)" )"name" - "Khaled" - "12345" - "30+40
وإلا أردنا أن نضع قيمة سوف تظل ثابتة داخل البرناما في مكان في الذاكرة ف ننا
نستخدم العبارة finalلإلعالن أن هذه القيمة ستظل ثابتة طوال تنفيذ البرناما مثل:
ويجب مراعاة أن اسم الثوابت constantsيكون باألحرف الكبيرة كامال و يفصل بين الكلمات كما يتم
في المتغيرات مع مالحظة أن الثوابت يتم تعريفها على أنها . final
مثال ألسماء الثوابت :
LEFT EXIT_ON_CLOSE
CENTER MY_NAME
BOTTOM CLASS_VERSION
TOP MATH_PI
ثانيا :المتغيرات :Variables
هي عبارة عن أسماء تحجز مواقع في الذاكرة حتى يتمكن البرناما من تخزين
البيانات فيها.
هي عبارة عن وعاء يمكن تحميل بقيمة وهذا الوعاء يتغير حجم حسب القيمة التي سوف توضع في .
قواعد تسمية المتغيرات:
-يمكن أن يبدأ ادسم بالحرف أو الشرطة السفلية ( _ ) under scoreأو عالمة الدودر ( )$ولكن د يمكن بدء
التسمية برقم ولكن يمكن أن نضع رقم بعد الحرف.
-د يمكن تسمية المتغير بإحدى الكلمات المحجوزة
للغة الجافا والجدول شكل ( ) 6-1يبين هذه الكلمات .
-اسم المتغيرات variablesيكون باألحرف الصغيرة
لكل األحرف ويالحظ عدم وجود أقواس.
13
أنواع المتغيرات
Primitive Variables – 1متغيرات أساسية
ب -متغيرات عددية. أ -متغيرات رمزية (حرفية).
Reference Variables – 2متغيرات مرجعية
14
أي يتم وضع حرف ( )fبعد الرقم لكي يتم حجز مكان ل في الذاكرة مقداره 32بت وبذلك نكون قد
وفرنا في الذاكرة المستخدمة.
15
العمليات الحسابية والمنطقية في لغة الجافا
الجدول شكل( )9-1التالي يبين أهم العمليات الحسابية في لغة الجافا :
وهذه المعامالت قد تمت دراستها باستفاضة في منها الصف الثاني .والجدول التالي يبين العمليات المنطقية:
16
الكلمات المحجوزة في لغة الجافا ود يجوز استخدامها في غير للك ك سماء لمتغيرات مثال ولذلك فهي محجوزة لمفردات اللغة
أي أنها هي الكلمات واألوامر التي تعبر وتستخدم في لغة الجافا. فقط
الكلمات المحجوزة في اللغة
abstract finally public
boolean float return
break for short
byte if static
case implements super
catch import switch
char instanceof synchronized
class int this
continue interface throw
default long throws
do native transient
double new true
else null try
extends package void
false private volatile
final protected while
17
الهدف من المحاضرة الرابعة :
– 1معرفة الطلبة بدالة اإلخراج في لغة الجافا
– 2تدريب الطلبة على استخدام دالة اإلخراج من خالل برامج وأمثلة
السير في الدرس
ولتوضيح عمل هذه الدالة سوف يتم دراسة بعض األمثلة :
مثال( ) 1المطلوب عمل برنامجا يقوم بطباعة العبارة .Hello Egypt
public class HelloEgypt
{
( Publicالفصيلة عامة ) ائما تسبق تعريف الفئة أو الفصيلة Classوهي تعني أن هذه
الفئة أو أي يمكن ألي فئة أخرى في البرناما استخدام عناصر هذه الفئة .ألن برناما الجافا قد
يتكون من أكثر من فئة .class
classوهنا يتم بداية الفصيلة
اسم الفصيلة ( البرناما ) ولقد تم تسميت هنا بادسم الذي نريده . HelloEgypt
18
ودبد هنا أن نشير إلى نقطة هامة جدا وهي أن عند حفظ ملف الجافا دبد أن يتم حفظ
بنفس اسم الفصيلة وبنفس شكل الحروف والمسافات وفي مثالنا هذا سيكون
ادسم .HelloEgypt.java
قوس بداية تعريف الفصيلة . {
السطر الثاني
( (String [ ] sالجملة الموجودة داخل قوسي البداية للدالة mainوهي ] [ String sتعني
مصفوفة من النوع الحرفي وتسمى sلتخزين جملة الطباعة في البرناما .
وكما قلنا من قبل أن لغة الجافا هي لغة حساسة لحالة األحرف لذلك يجب مالحظة أن حرف
Sفي كلمة Stringيجب أن يكون حرفا كبيرا ( )capital letterوإد سيعطى البرناما خط
عند الترجمة .
السطر الثالث
وهذا هو أمر الطباعة في لغة الجافا وسوف نتناول بالتفصيل في األمثلة القادمة .
النص المراد طباعت ويجب أن يوضع بين عالمتي تنصيص (" ")
وقوسين
19
بعد للك يتم إنهاء البرناما بقوسي النهاية حيث يمثل القوس األول نهاية الوظيفة
method
للدالة mainوالقوس اآلخر يمثل نهاية الفصيلة . classوالشكل اآلتي يبين للك :
21
ويمكن إضافة متسلسالت الهرون مع جملة الطباعة للحصول على عدة أشكال من
المخرجات
; )"System.out.print("Welcome to
21
; )"System.out.print("Egypt
}
}
نالحظ أن عند تنفيذ هذا البرناما ستظهر العبارة ( )Welcome to Egyptعلى
سطر واحد
وللك تبعا لعبارتي الطباعة في السطر ()3،4
أما إلا أردنا أن تكون المخرجات على سطرين مختلفين فيتم إضافة حرفي ()ln
على العبارة printومعناها ادنتقال إلى سطر جديد ( )new lineويتم للك في السطر
الثالث كاآلتي :
; )"System.out.print("Egypt
Egypt
ويمكن تنفيذ نفس شكل المخرجات السابقة بسطر واحد وللك عن طريق إضافة ()\n
وتعني ادنتقال إلى سطر جديد ويكون شكل البرناما كالتالي :
22
أما الا أردنا طباعة عدة أسطر متتالية ب مر طباعة واحد فيتم للك بتكرار ()\n
كالتالي:
; )"System.out.print ("One\n Two \n Three \n Four
أما الا أردنا أن تكون المخرجات على مسافات أفقية متساوية ف ننا نستخدم ()\t
كالتالي:
; )"System.out.print ("One\t Two \t Three \t Four
ويتم للك بكتابة األرقام المراد جمعها داخل أقواس جملة printولكن من دون عالمتي
تنصيص
ألن عالمتي التنصيص تكون دائما لطباعة الحروف وحتى الا تم كتابة ارقام داخل
عالمتي التنصيص ف نها تعامل معاملة الحروف أي د يمكن اجراء أي عمليات حسابية
عليها .
ويكون شكل عبارة printكالتالي:
; )System.out.print (5+16
ويكون الناتا (. )21
23
5-2-1التعليقات Comment
إن أي مبرما يحتاج في بعض األحيان إلى إضافة بعض التعليقات والمالحظات
الخاصة ب و التي د يتم تنفيذها في البرناما ولكن فقط تذكره بالغرض من األوامر التي
يقوم بكتابتها .
ويمكن تعريف التعليقات كاآلتي :
أنه ا األسطر التي يتجاهلها مترجم الجافا ،و لكنها تجعل البرناما أسهل قراءة للمبرما
نفس .بعبارة أخرى ،أنها مجموعة المالحظات التي يضعها المبرما في برنامج لتسهيل
قراءت .
.
أو يمكن كتابة التعليقات بجانب أسطر البرناما كما يلي :
وفي هذه الحالة يمكن كتابة تعليق مكون من عدة أسطر كما يلي:
24
ويكون التعليق بين عالمتي ( */التعليق *)/
مثال ( :) 4أكتب برنامج يقوم بجمع عددين أحدهما صحيح واآلخر حقيقي.
25
الهدف من المحاضرة الخامسة :
.1أمثلة تطبيقية عن كل ما سبق.
.2التعرف على دالة اإلدخال . Input
جملة الطباعة
26
a + b = 19
a - b =11
a * b = 06
a/b =3
a %b = 3
A=15
B=18
27
مثال ( ) 7ما هي مخرجات البرنامج التالي :
ونالحظ في هذا المثال أن قيمة x1دزالت تساوي 11ود يتم إنقاص الواحد منها إد بعد
الخروج من هذه الخطوة وتصبح قيمة zالجديدة z=9
ويكون ناتا خرج البرناما كالتالي:
X1=10
X2=8
بطبيعة الحال د يخلو أي برناما لو فائدة من جملة اإلدخال ,فهي الجملة التي تربط
البرناما بالعالم الخارجي وهي الوسيلة الوحيدة التي يستطيع فيها المستخدم إدخال القيم
عن طريق لوحة المفاتيح للحاسب ,حتى يقوم بمعالجة هذه القيم سواء كان البرناما
(برناما حسابات – قاعدة بيانات . )......
28
والحقيقة أن لغة الجافا تحتوي على أكثر من طريقة إلدخال البيانات منها ما هو مناسب
لتطبيقات الويندوز ومنها ما هو مناسب لبراما الدوس ()Console Application
وهي البيئة التي سيتم تنفيذ برامجنا من خاللها في هذا المنها .
وعبارة اإلدخال التي سوف نستخدمها هنا هي العبارة ( )Scannerوهي عبارة عن
فصيلة من فصائل لغة الجافا وهي موجودة في مكتبة تسمى ( ) java.utilودبد
دستخدام عبارة اإلدخال ( )Scannerأن نستدعيها من مكتبات لغة الجافا ويتم للك
كالتالي :
; Import.java.util
ويكون للك بحجز مخزن لمتغير في الذاكرة ليحتوي الرمز المدخل عن طريق لوحة
المفاتيح كالتالي:
29
مثال ()8
أكتب برناما لجمع رقمين على أن يتم إدخال الرقمين من لوحة المفاتيح ثم طباعة الناتا
على الشاشة.
شرح البرنامج
- 1في السطر األول تم استدعاء المكتبة التي تحتوي على جملة اإلدخال Scanner
31
-3أما السطر الخامس فهو يعمل على تهيئة الحاسب دستقبال مدخالت من لوحة
المفاتيح ولقد تم تسمية مخزن مؤقت تم تسميت Keyboardأو يمكن تسميت ب ي اسم
ويتم في تخزين القيمة المدخلة مؤقتا تمهيدا لنقلها لمتغير أخر سيكون هنا aأو bودحظ
كلمة ( )System.inأصبح بجوارها كلمة inددلة على عملية اإلدخال
-4أما السطر السادس فوظيفت هي طبع رسالة على الشاشة تخبر المستخدم بإدخال الرقم
األول.
-5أما في السطر السابع فيتم إدخال الرقم األول ثم يخزن مؤقتا في المخزن Keyboard
ثم ننقل أو نخصص القيمة الموجودة في المخزن Keyboardوهي هنا الرقم األول
ونضعها في المخزن .a
31
- 3بالنسبة لألرقام المدخلة يجب أن تكون من النوع الصةحيح فقةط integerو هةذا يكةون
في مثالنا فقط ألننا طلبنةا منة للةك فةي برنامجنةا وللةك فةي السةطر السةابع عةن طريةق
عبارة
( )nextIntفةةالحروف الثالثةةة لات اللةةون األحمةةر ( ) Intوالتةةي جةةاءت بعةةد
كلمةةةة nextهةةةي المسةةةئولة عةةةن المةةةدخالت يجةةةب أن تكةةةون مةةةن النةةةوع األرقةةةام
الصحيحة وهي لها عدة حادت:
32
وهنا يتم إدخال العدد .31
ويجب مالحظة أن عند إدخال الرقم الثاني يجب الضغط على مفتاح Enterأو ترك
مسافة واحدة.
مثال ()9
أكتب برناما تقوم من خالل بإدخال اسمك فيطبع عبارة ترحيب بك
Cairo
ونالحظ هنا أن عبارة اإلدخال لم تتغير كثيرا عن البرناما السابق والذي تم في إدخال
األرقام,
إد اختالفا بسيطا في السطر السادس.
وقد تم عمل متغير حرفي من نوع Stringهو المتغير aوالذي يتم في تخزين الحروف
المدخلة من لوحة المفاتيح كما نالحظ تغير العبارة nextولقد كتبت منفردة بدون أي
اضافات (أنظر الجدول السابق الذي يوضح وظائف . )next
تشغيل البرنامج
33
عند تشغيل البرناما يطلب منك إدخال أسمك فنقوم بإدخال ادسم من لوحة المفاتيح فيقوم
بعد للك بطباعة عبارة الترحيب كالتالي:
34
الهدف من المحاضرة السادسة :
ويطلق عليها أيضا جمل التحكم أو جمل اتخال القرار ولقد سبق دراسة هذه الجمل في
الصف الثاني وهي د تختلف كثيرا عن الجمل الموجودة في لغة الجافا.
ومعنى هذه العبارة أن الا كان الشرط الذي تقوم الجملة ( ) ifباختباره صحيحا فقم بتنفيذ
الجملة التي بين القوسين .وفي حالة عدم صحة ادختبار فال تقم بتنفيذ جملة ( ) ifوإنما
استمر في تنفيذ بقية جمل البرناما من بعد تخطي جملة ( . ) if
وفي حالة تنفيذ جملة واحدة فقط بعد جملة ( ) ifفإن يمكن ادستغناء عن األقواس وفي
هذه الحالة تنتهي جملة الشرط بالفاصلة المنقوطة ( ; ) كما يلي :
35
شكل ()14-1
وكما نعرف دائما فإن الشرط يجب أن يكون شرطا منطقيا ولفهم طريقة عمل جملة if
ندرس األمثلة التالية:
36
مثال ()11
المطلون كتابة برناما يقوم بفحص رقم يتم إدخال من لوحة المفاتيح وليكن ( )xبحيث
إلا كان موجبا يقوم بطباعة العبارة (. )x is positive
ونالحظ هنا أن جملة ifانتهت ب ول فاصلة منقوطة قابلتها أي بعد عبارة الطباعة
ونالحظ هنا أننا لم نستخدم األقواس في جملة ifألننا لم نكتب غير سطر واحد فقط بعد
عبارة ifوهي جملة الطباعة أما لو كتبنا أكثر من جملة يجب تنفيذها عند تحقق الشرط
في هذه الحالة يجب إضافة األقواس
ويتم تنفيذ البرناما كما يلي :
37
مثال ()11
كرر نفس المثال السابق مع استخدام أكثر من سطر في جملة ifكاآلتي:
38
الصيغة الثانية لجملة if
مثال ()12
نفذ البرناما السابق بحيث يطبع عبارة ( )X is positiveفي حالة إلا كانت موجبةة وإد
يطبع عبارة ( )X is negativeفي حالة إلا كانت Xسالبة.
ويتم للك باستخدام عبارة IFالكاملة كاآلتي:
:]2AA[Commentفي هذه الصورة ،جملة
X is not negative
يجب تعديلها لتصبح
X is negative
39
و يمكننا في البرناما السابق حذف األقواس الموجودة بعد جملة , ifوكذلك حذف
األقواس الموجودة بعد elseوللك لوجود جملة طباعة واحدة بعد كال منهما.
2- 3- 1جملة switch
تستخدم عبارة ifإلا كان جوان الشرط عبارة عن احتمالين أو ثالثة احتمادت على
األكثر ,أما إلا زاد عدد ادحتمادت على للك فمن األفضل استخدام عبارة switch
وصيغتها العامة كاآلتي:
41
مثال ()13
لنفرض أننا نريد إن يطبع الحاسب جملة ترحيب معينة إلا تم الضغط على أحد األرقام
في لوحة المفاتيح .
خطوات البرناما :
41
وعند تنفيذ هذا البرناما ف ن تحدث إحدى الحادت اآلتية:
- 1إلا تم إدخال الرقم ( ( 1فإن يطبع العبارة األولى Welcomeثم يجد عبارة break
فيخرج خارج جملة switchوينتهي البرناما .
- 2إلا تم إدخال الرقم ( ( 2فإن يطبع العبارة الثانية how are youثم يجد عبارة
التوقف breakفيخرج خارج جملة switchوينتهي البرناما .
- 3وهكذا في حالة إدخال الرقم ( )3فإن يطبع الجملة الثالثة ثم breakثم يخرج .
- 4أما في حالة إدخال أي رقم غير موجود في البرناما وليكن ( )4مثال ,فإن البرناما
يطبع العبارة الموجودة في جملة defaultثم ينتهي البرناما .
- 5يجب مراعاة أن جملة switchلها قوسي بداية ونهاية.
- 6يجب دائما أن تنتهي كل حالة caseمن حادت switchبالعبارة .break
☺ حاول أن تقوم بإلغاء هذه العبارة وتجربة البرناما ...مالا تجد ؟؟
☺جرن إدخال حرف بدد من الرقم مالا تجد ؟؟
42
الهدف من المحاضرة السابعة:
3- 1جمل الدوران
كثيرا ما نحتاج في البرناما إلى تكرار أمر معين موج إلى الحاسب عددا من المرات ،
وتوفر لغة الجافا عدة وسائل تمكن المبرما من أداء هذا التكرار .وعادة ما تسمى هذه
الوسائل بالحلقات التكرارية ويوجد العديد من الحلقات التكرارية التي سوف نتناولها
بالشرح وهي:
- 1الحلقة ()for Loop
- 2الحلقة ()while loop
- 3الحلقة ()do-while Loop
43
- 1القيمة االبتدائية . initialization
نضع في هذا الجزء متغير ونعطي القيمة ادبتدائية التي يبدأ منها التكرار.
- 2الشرط Condition
هنا نضع الشرط الذي يتوقف عنده العد.
- 3مقدار الخطوة increment
هنا نضع مقدار الزيادة في حالة العد التصاعدي أو النقصان في حالة العد التنازلي.
ونالحظ هنا أن جملة forلها قوس بداية وقوس نهاية ويتم وضع األقواس في حالة
تكرار أكثر من جملة كما يمكن ادستغناء عن هذه األقواس في حالة تكرار جملة
واحدة.
مثال ()14
نفذ برناما بلغة الجافا يقوم بالعد من ( 1إلى . )21
خطوات البرناما كالتالي :
في هذا البرناما تم استخدام متغير aمن نوع integerفيتم زيادة قيمت كل مرة بمقدار
واحد .والقيمة ادبتدائية ل داخل الحلقة a=1حتى يصل العد إلى . 21تنتهي الحلقة
وينتهي البرناما
44
و في كل خطوة زيادة يتم طباعة قيمتها على الشاشة عن طريق أمر الطباعة.
وتكون األرقام في شريط تحت بعضها على الشاشة .لمالا ؟؟
ثم فك ر كيف يمكن طباعة المخرجات متجاورة أو على سطر واحد بينها مسافات
متساوية.
مثال ()15
المطلون عمل عداد تصاعدي يبدأ العد من القيمة ( )1حتى القيمة ( )xعلى أن يتم
إدخال قيمة نهاية العد من لوحة المفاتيح .
وفي هذا البرناما استخدمنا عبارة اإلدخال كما استخدمناها في البراما السابقة ,وعن
طريقها تم إدخال رقم نهاية العد وتم وضع في المتغير ( )xثم وضعناه في الجزء
الخاص بالشرط في الحلقة .
ونالحظ هنا أن المتغير ( )aقد تم تعريف وإعطاؤه قيمة ابتدائية داخل الحلقة int
).)a=1
خطوات البرناما :
45
46
مثال ()11
عمل برناما يوضح تكرار أكثر من جملة داخل الحلقة .for
وفي هذا البرناما تم استخدام أكثر من جملة يراد تكرارها داخل الحلقة ولذلك تم استخدام
قوسي بداية ونهاية للحلقة وهذا البرناما يقوم بطباعة المخرجات كالتالي :
47
-2-4-1الحلقة ()while loop
في هذه الحلقة التكرارية نحتاج إلى الشرط فقط وطالما كان هذا الشرط متحققا
استمرت الحلقة في التكرار والصيغة العامة لها كاآلتي:
مثال ()17
أكتب برناما يقوم بعملية العد من ( 1إلى ) 11باستخدام الحلقة while loopمع طباعة
النتائا على الشاشة.
48
ونالحظ في هذا البرناما أن دبد من إعطاء قيمة ابتدائية للعداد ) . ) int a=0ونالحظ
كذلك أن في جملة whileدبد من وجود األقواس ,ألن الجملة بطبيعتها تتكون من أكثر
من سطر.
كذلك يتم زيادة قيمة ( )aبمقدار واحد عن طريق الصيغة ( )++aوبعد أن يتم زيادة قيمة
aبمقدار واحد يتم التحقق من الشرط كل مرة وستكون نتيجة البرناما طباعة األعداد
من ( 1إلى . )11
-3-4-1الحلقة ()do – while
تختلف هذه الحلقة عن الحلقات السابقة في مكان وضع الشرط ،حيث يكتب الشرط بعد
العبارات المطلون تكرارها وتكون صيغتها العامة كالتالي:
49
ونالحظ هنا أن في كل مرة يقوم البرناما بالتحقق من الشرط في نهاية الحلقة ,وهذا يعني أن
إلا لم يتحقق الشرط فسوف يتم تكرار الحلقة مرة واحدة فقط.
51
الهدف من المحاضرة الثامنة:
.1التعرف على الدوال.
.2مزايا استخدام الدوال.
.3التعرف على أنواعها .
5-1الدوال methods
وهي عبارة عن طرق ودوال من تعريف (تصميم) المبرما أو تكون جاهزة في البرناما.
والغرض منها هو تسهيل عملية البرمجة في األشياء التي تتكرر أكثر من مرة في البرناما.
الهدف من الدوال
في حالة تكرار مجموعة من سطور األوامر أكثر من مرة في مواضع مختلفة في
البرناما فإن أوامر التكرار لن تكون لات منفعة .ولذلك يتم كتابة هذه الجمل منفصلة عن
البرناما الرئيسي .
51
شكل ()15-1
الجدول شكل ( )16-1يبين المكتبات الخاصة بالجافا وما تقدم هذه المكتبات من خدمات .
52
التطبيقات الخدمات /الفئات المكتبة
البرمجة الخوارزمية العادية. java.utilتحتوي هذه الباقة على فئات تمثل هياكل بيانات
عامة االستعمال مثل الصفوف و المجموعات و
غيرها.
البرامج التي تتطلب معاملة java.ioتحتوي هذه الباقة على فئات تتصرف في
فورية مع المستخدم. عمليات تصدير و توريد البيانات.
كل البرامج /كل التطبيقات. java.langتحتوي هذه الباقة على الفئات المتعلقة بتنفيذ
البرنامج و مراقبته ،بما فيها الفئات التي تعالج
أخطاء التنفيذ و بعض الفئات العامة .نظرا
ألهميتها ،فإن هذه الباقة يقع توريدها ضمنيا في
كل برنامج.
التطبيقات الهندسية و تطبيقات java.mathتحتوي هذه الباقة على فئات تقوم بعمليات
الرياضيات. حسابية ،بأي دقة يطلبها المستخدم.
تطبيقات التصرف التي تتطلب java.sqlتحتوي هذه الباقة على فئات تختص في عمليات
قواعد بيانات. على قواعد البيانات.
تطبيقات تتطلب واجهات java.awtتحتوي هذه الباقة على فئات تختص في الرسم
رسومية مع المستخدم. و في إنجاز واجهات رسومية.
تطبيقات تتطلب إجراءات أمنية. java.securityتحتوي هذه الباقة على فئات تختص في تنفيذ
إجراءات أمنية في البرنامج ،مثل مراقبة
المستخدمين و صيانة الوارد و غير ذلك.
شكل ()16-1
53
ويمكن استدعاء الدوال بكتابة اسم الفصيلة(الفئة) متبوعا بنقطة بعدها اسم الطريقة ثم
قائمة المعامالت داخل أقواس دائرية كما يلي:
)Class_Name.method_Name(Argument List
فمثال إلا أردنا الحصول على الجذر ألتربيعي للعدد( )25فيمكن كتابة الصيغة كالتالي:
))System.out.print(Math.sqrt (25.0
;
تقوم هذه الجملة باستدعاء الدالة ( )sqrtالموجودة في الفصيلة ( )Mathوالتي ت خذ
معامل واحد من نوع ( )Doubleونتيجة تنفيذ هذه الجملة سيكون طباعة (. )5.0
54
في هذا البرناما تم اإلعالن عن متغير من نوع .)double number( double
ثم يتم إدخال الرقم من لوحة المفاتيح وفي سطري الطباعة .السطر األول يقوم بطباعة
الجذر التربيعي أما السطر الثاني فيقوم بطباعة مربع هذا الرقم .
وعند تنفيذ البرناما تظهر المخرجات كالتالي :
55
وفيما يلي شرح الشكل العام للدالة:
: public - 1أي عامة أي تستطيع الوصول اليها من خارج الفصيلة ومن خارج البرناما
أيضا.
: private - 2أي خاصة فتسةتطيع الوصةول للدالةة مةن داخةل الفصةيلة فقةط ,ود يمكةن ان
تصل اليها من خارج الفصيلة.
: protected- 3أي محمةةي ,أي أنةةك تسةةتطيع الوصةةول للدالةةة مةةن داخةةل الفصةةيلة أو مةةن
خارج الفصيلة (وهذا يدعم موضوع الوراثة).
أمةةا عبةةارة staticالتةةي نجةةدها فةةي معظةةم البةةراما فهةةي مةةن أجةةل إخبةةار المتةةرجم أن هةةذه
الدالة من نوع ثابت أي يتعرف عليها المترجم قبل الدخول للدالة الرئيسية.
وهنا نرى أن الدالة المعرفة تعود بالتاريخ وهو قيمة ولذلك تم وضع عبارة .return
56
)public void method_ name(parameter_list
{
><list of statements
}
وهنا نالحظ أن عبارة الطباعة د تعود ب ي قيم للبرناما الرئيسي ولذلك تم استخدام
voidأي دالة د تعود بقيم وكذلك لم يتم استخدام العبارة . return
57
الهدف من المحاضرة التاسعة:
كيفية استدعاء الدوال داخل البرنامج.
حل بعض التمارين.
العبارة return
وتوجد في نهاية الدالة وهي تجعل البرناما يعود في مساره بعد انتهاء تنفيذ الدالة.
والصيغة العامة لهذه الدالة كالتالي :
; return Expression
وكمثال على هذه العبارة
) (public int getYear
{
; return year
}
الحظ
استخدام العبارة returnبدون أي أقواس في الدوال من نوع voidيمكن أن
يتسبب في إنهاء البرناما في الحال .
58
شكل()17-1
يمكن استدعاء الدالة داخل أي مكان في البرناما عن طريق كتابة اسمها وارسال قيم
المعامالت إن وجدت .والصيغة العامة دستدعاء الدالة كاآلتي :
59
مثال (: )21
كيفية كتابة دالة بسيطة تقوم بعملية الجمع وطريقة استدعائها.
ونالحظ أن تم مناداة دالة الجمع sumفي الدالة الرئيسية مع اسناد معامالت لها .
)Sum(10,20
;
ونالحظ في جسم الدالة الفرعية التي تقوم بعملية الجمع أنها من نوع .voidأي د تعود
للدالة الرئيسية ب ي قيم ,بل ينتهي دورها بمجرد طباعة ناتا الجمع .ونالحظ كذلك أنها د
تنتهي بعبارة . returnلمالا؟
ويالحظ أن معامالت الدالة المستدعاة عبارة عن متغيرين ( )a,bمن النوع intكما تم
تعريف متغير آخر داخل جسم الدالة الفرعية وهو ( )cليتم تخزين ناتا الجمع ب .
وعند تشغيل البرناما يتم طباعة ناتا الجمع وهو هنا (. )31
كما يمكن تغيير القيم الداخلة إلى الدالة الفرعية بمتغيرات ( )x,yكالتالي :
61
مثال (:) 21
استخدام دالة تعود بقيم .
ومن المؤكد عند تنفيذ البرناما سوف يتم طباعة حاصل الجمع (. )31
61
الهدف من المحاضرة العاشرة :
.1التعرف على المصفوفات وأنواعها .
.2حل بعض التمارين.
في الحقيقة وقبل أن نبدأ في شرح المصفوفات نس ل أنفسنا أود :لمالا استخدمت طريقة
المصفوفات ؟
;int a1=80
;int a2=90
;int a3=60
;int a4=50
;int a5=45
فهنا يمكننا فعال اإلعالن عن خمس متغيرات وإعطائهم القيمة المطلوبة .ولكن مالا نفعل
لو أن هناك مائة طالب أو ألف طالب مثال ؟ هل سنعلن عن كل هذه المتغيرات في
62
البرناما ؟ فيمكن إن نتخيل حجم البرناما وكيفية فهم وتصحيح الا تم اإلعالن
تعريف المصفوفة
المصفوفة هي عبارة عن مخزن يحمل عدد محدد من القيم Valuesلمتغيرات
Variablesمن نفس النوع .typeوهذا النوع يمكن ان يكون ( int , float , string
),….ويتحدد سعة هذا المخزن (المصفوفة) عند اإلعالن عنها وبعد اإلعالن عن
المصفوفة وتحديد طولها (عدد المتغيرات التي ستخزنها) فإن هذا الطول يظل ثابتا ود
يمكن تحميل المصفوفة بعناصر أكثر من سعتها .
وكل عنصر في المصفوفة arrayيسمى elementويمكن الوصول لهذا العنصر في
المصفوفة عن طريق فهرس رقمي . index
- 2المصفوفة متعددة األبعاد :وهي مكونة من عدد من الصفوف واألعمدة (ليس شرطا ان
وسوف نتناول بالشرح ,المصفوفة لات البعد الواحد ,والمصفوفة لات البعدين .
63
أو يمكن اإلعالن عنها بنفس الصيغة السابقة مع وضع األقواس بعد اسم المصفوفة
كالتالي:
فمثال لعمل مصفوفة رقمية من النوع intخاصة بدرجات عشرة طالن مثال يتم للك
كالتالي:
64
; ][ int degree
;]degree[ ]= new int[10
أو يمكن اإلعالن عن المصفوفة وتحديد عدد عناصرها في سطر واحد كالتالي:
والحقيقة أن بعد تحديد عدد عناصر المصفوفة يتم حجز 11مواضع في الذاكرة لتخزين
األرقام الصحيحة التي سيتم إدخالها ويبدأ الترقيم في الذاكرة من الصفر كالتالي:
65
وكما قلنا إن عناصر المصفوفة عبارة عن متغيرات يتم تخزينها في الذاكرة ,وأن
المتغير عبارة عن وعاء يتم تخزين القيم ب والمثال التالي يوضح هذا المفهوم :
فمثال العنصر رقم ( )1يمكن إعطاؤه الرقم ( , )6ورقم ( )5يمكن إعطاؤه القيمة (, )21
وهكذا ....
66
نفرض أننا نريد تخزين عدد ( )5أسماء ثم طباعتهم فيتم عمل للك كاآلتي :
ونالحظ هنا أننا استخدمنا الحلقة التكرارية ( )forلطباعة عناصر المصفوفة وتكون
المخرجات كالتالي:
:]3AA[Commentكلمة عمرو بالصورة تعدل
لتصبح بحروف صغيرة لتتطابق مع المكتون في
الصورة السابقة
; }int student[]={10,20,30,40,50
فهذه المصفوفة تم إعطاؤها 5قيم مسبقة ويتم تخزينها في الذاكرة كالتالي :
67
ولطبع الرقم 31الموجود في الخانة 2يتم كتابة األمر التالي:
;)]System.out.println(student[2
ونالحظ مما سبق أن إلا لم نحدد قيما ابتدائية للمصفوفة فيجب أن نستخدم كلمة ()new
لحجز مواقع للمصفوفة كما أوضحنا سابقا.
مثال () 22
المطلون عمل مصفوفة لات بعد واحد تحتوي على درجات خمس طالن وطباعة الناتا
على الشاشة.
نفترض أن درجات الطالن (. ) 10, 20, 30, 40, 50و البرناما كالتالي:
ونالحظ هنا أن تم عمل حلقة بجملة forلقراءة محتويات المصفوفة وطباعتها على
الشاشة.
68
ونالحظ كذلك أن نهاية العداد هو العدد 4على الرغم من كونهم 5عناصر .لمالا ؟
11؟
وضح مالا يحدث لو جعلنا نهاية العد إلى الرقم 5
21 وتكون مخرجات البرناما كالتالي:
31
41
51
مثال ()23
مطلون كتابة برناما يقوم بعمل مصفوفة حروف تقوم بطبع أيام األسبوع على الشاشة
كاآلتي:
69
-2-1-1المصفوفة متعددة األبعاد (ذات البعدين) Multidimensional array
ويمكن القول ب ن المصفوفة لات البعدين هي عبارة عن جدول يحتوي على صفوف
وأعمدة .
والصيغة العامة لهذه المصفوفة كالتالي :
71
فإلا أردنا مثال أن نعرف محتويات المصفوفة في الموقع ) ] ) a[1][2فنجد أن حرف (
.) tوكذلك الموقع (] )a[2][3فنجد أن الحرف ( ) rوهكذا.
وبطبيعة الحال يمكن إعطاء هذا النوع من المصفوفات قيما ابتدائية كما سبق ورأينا في
المصفوفة لات البعد الواحد ,ولكننا هنا في المصفوفة لات البعدين سوف نتعرف على
كيفية إدخال القيم من لوحة المفاتيح .
لنفرض أن هناك مصفوفة لات بعدين يراد فيها إدخال درجات 6طالن عن طريق لوحةة
المفاتيح يتم للك كالتالي:
سنقوم بتسمية المصفوفة studentوسوف نسةتخدم دالةة اإلدخةال Scannerإلدخةال قيمةا
صحيحة إلى هذه المصفوفة وهذا هو شكل البرناما:
- 1في السطر األول يتم اإلعالن عن مصفوفة لات بعدين من النوع intوعدد عناصرها
6عناصر.
71
- 2السطر الثاني سبق وتم شرح في جملة اإلدخال.
- 3السطر الثالث والرابع تم عمل حلقتين ,الحلقة األولى الخارجية لإلشارة إلى رقم
الصف rowوالحلقة الثانية لإلشارة إلى رقم العمود .columnوطبعا دحظ ان الحلقة
الخارجية قد تم إضافة أقواس لها .لمالا ؟
- 4أما السطر الخامس فيتم استخدام دالة اإلدخال كما شرحناها سابقا .ولكننا هنا استخدمنا
المصفوفة studentكمتغير يتم تخزين عناصر المصفوفة المدخلة في .
وعند تشغيل البرناما لن تظهر لك أي رسالة .ألننا لم نضف رسالة لإلدخال يمكنك
أنت إضافتها
ولكن ,سيظهر المؤشر في أقصى يسار الشاشة منتظرا إدخال قيم عناصر المصفوفة
فيتم إدخال 6عناصر والضغط على مفتاح اإلدخال كل مرة.
وبعد تمام اإلدخال للستة عناصر تظهر عالمة المحث للدرس ددلة على انتهاء اإلدخال.
بعد أن يتم إدخال عناصر المصفوفة وإجراء أي عمليات عليها كالعمليات الحسابية مثال,
يهمنا أن نرى المخرجات على الشاشة .وفي هذا البرناما سوف نتعرف على كيفية قراءة
عناصر المصفوفة وطباعة هذه العناصر كما هي على الشاشة دون أي تغيير ,ويتم للك
عن طريق البرناما التالي:
72
ونالحظ أننا استبدلنا جملة الطباعة printبجملة اإلدخال في البرناما السابق .ونالحظ :]4AA[Commentفعل استبدل ي تي بعده المستبدَل
ب ثم بعد حرف الباء ي تي المستبدَل
أننا أضفنا عالمة ( )\tوللك لتنسيق الطباعة على الشاشة .فتظهر عناصر المصفوفة
على سطر واحد لمالا ؟
وبينها مسافات متساوية لمالا؟
مما سبق يتبين لنا أن دبد من جمع البرناما األول (إدخال عناصر المصفوفة )
والبرناما الثاني
وهو طباعة عناصر المصفوفة مع بعضهما ليظهر برناما واحد متكامل لإلدخال
واإلخراج كالتالي
73
الهدف من المحاضرة الحادية عشر:
حل بعض التمارين.
تطبيقات
-1ما هي اإلصدارات المختلفة للغة الجافا ؟
-2ما هي مميزات لغة الجافا ؟
-3وضح مع الرسم كيف أن لغة الجافا د تعتمد على نظام التشغيل في األجهزة المختلفة .
- 3أي العبارات اآلتية تقوم بطباعة العبارة (. )Welcome to Javaيمكن أن تختار أكثر
من اختيار.
74
-4إلا أردنا ترجمة الملف المسمى ( )Test.javaف ننا نقوم بكتابة اآلتي في سطر األوامر:
5ـ -إلا افترضنا أن هناك فصيلة تمت تسميتها كما يلي :
{ public class Test
}
فإن بعد عملية الترجمة ينتا ملف باسم:
-6أي السطور اآلتية د تعتبر سطور مالحظات commentيمكن اختيار أكثر من اجابة :
-7أي من الكلمات اآلتية تعتبر من الكلمات المحجوزة في لغة الجافا (يمكنك اختيار أكثر من
اجابة) ؟
75
-8كل عبارات لغة الجافا يجب أن تكتب بحروف صغيرة :
-9أي أسماء المتغيرات اآلتية صحيحا .يمكن أن تختار أكثر من إجابة :
-11أي الطرق اآلتية تستخدم في اإلعالن عن المتغيرات (يمكن اختيار أكثر من إجابة ) ؟
76
-14ما هي النتيجة التي سوف يتم طبعها على الشاشة ؟
77
-16بفرض أننا نريد إدخال قيمة عدد صحيح من لوحة المفاتيح عن طريق استخدام العبارة
اآلتية
;)Scanner input = new Scanner(System. in
ما هي الطريقة المستخدمة فيما يلي لقراءة العدد الصحيح :
78
-19أكتب برناما يقوم بطباعة األعداد الفردية على الشاشة في صف واحد بدءا من (1
إلى .)51
-21أكتب برناما يقوم بعمل مقارنة بين مصفوفتين من النوع ,charإلا كانت كال من
المصفوفتين تحتوي على القيم اآلتية:
}'.{'d','h','r','f
–21قم بحسان قيمة المضرون لعدد صحيح يتم إدخال من لوحة المفاتيح.
المراجع:
البرمجة بلغة جافا /ترجمة ./ 2117
البرمجة غرضي التوج باستخدام حافا /ترجمة ./ 2116
محاضراتي وهي موجودة على الموقع.
79