أهلا وسهلا بكم بنات في محاضرتنا التانية من برمجة
تلاتة اليوم كما تشاهدون على الـ slide سنبدأ
بالمراجعة سنغطي المراجعة اليوم ومحاضرة الأربع ان
شاء الله تبارك وتعالى ونبدأ في المادة بشكل فعلي
يوم السبت لما أتكلم عن المراجعة سنمر بشكل سريع
لماذا الجافة من لغات البرمجة القوية والمعتمدة في
معظمالأماكن طبعا اتفقين simple كلغة سهلة وأسهل من
ال C++ أو ال C object oriented مثلها مثل ال C
distributed تخدم النظوم الموزعة وبتقدر تشتغل على
أكتر من ال protocol وبتقدر تشتغل على distributed
system أو ما شابهrobust قوية بمعنى آخر إنه دائما
بتشتغل على الـ optimization بتعمل garbage
collection من ال memory بتعمل drop لأي unused data
أو أي object وبالتالي بتحافظ على إنه البرنامج
متشغّال لأقبل فترة ممكنة secure آمنة architectural
neural بمعنى آخر إنها ممكن platform independent أو
بنسميها portable interpreted
تخدم أو تتمد تستخدميها ك compiler و ك interpreter
حسب إيش ال settings اللي أنت بدك إيها وهل بدنا
نذكر أو بدنا نراجع بشكل سريع الفرق ما بين ال
compiler و ال interpreter حد
بيقدر يفرقلي بينهم؟ تفضلي ال interpreter بيعمللكل
سطر في ال code لكن ال compiler يروح في ال code
كامل يجب ان يكون ال code صحيح خلال الأخطر 100%
الآن احنا بنقول ان ال compiler و ال interpreter هي
عبارة عن مترجمات تنسيش انت بتكتبي بال Java بتروح
بتقوله system dot out dot print أو print line
بتحطوله وفتحله أقواص علامات تنصيص و semi colon لو
أنا سألتك الحروف هذه اللي انت طبعتها هي عبارة عن
human charactersيعني الحروف مستخدمة للبشر فالآن
احنا كتبنا بالـ Java بالشكل هذا طب عشان يفهمها
الكمبيوتر بدنا يأتي الترجم لـ 0 و 1 عشان يقدر
الكمبيوتر يفهمها فبتيجي ال compiler و ال
interpreter كمترجمات
للغةماذا سيحصل؟ نفهم في البداية عملتي الترجمة Head
-Cap بالتم و سنعرج مرة أخرى على الكمبيولير أو
الـRound-Terpreter لاحظ طول ما تكتبي الـCode أو
الـCompiler أو الـIDE اللي تستخدمه، لا تريد إرر صح
أو خطأ بمجرد تضع Space بعد الكلمة وهو الـMain
-Delimiter في الفاصل ما بين الكلمات بروح بدور هل
الكلمة هذه زي كلمة System اللي أنا كتبتها هنا
خلصتها وحطيت dot معناته انا بقول ان كلمة system
هذه انتهت او حطيت space الان هيروح ال system ال ID
ايش روح يساوي؟ يروح يدور هل كلمة system هذه
predefined هل تم تعريفها مسبقا سواء كانت في داخل
البرنامج مثل لما انا باجي بقوله integer system او
sys equal 1 مثلا هل تم تعريفها في البرنامج؟ولّا هل
هي من الكلمات المحجوزة المعرفة بالبرنامج المسبق أو
بالـ Java اللي عندي فبروح بدور هل الكلمة defined؟
إذا هي defined بروح بيبني عليها إيش لازم يكون
وراها؟ defined as what؟ hand system معرفة as class
dot إيش بدو يجي وراها؟ بدو يجي وراها method أو بدو
يجي وراها subclass؟ dot إيش بدو يساوي؟ إيش ال
methods المتاحة؟ و هكذاوبالتالي هذه العملية احنا
بنسميها عملية الـ Parsing بعد ما بروح بفحص الـ
syntax صح
100% مافيش فيه أخطاء يعني مكتوب ضمن ال rules اللي
وضعوها للناس الصممة الـ Java بروح بدأ دور التحويل
من readable language أو readable code ل machine
code المسئول عنه إما compiler أو interpreter الآن
احنا بنعرفأهم رول في الـ Java أو واحدة من الرول في
كتابتي الـ Java أن كل .. كل statement لازم تنتهي
في سيمي كولون الآن السيمي كولون هذه بتقول أنا خلصت
الجملة ال interpreter بيشتغل على البرنامج تابعك
بالـ Java جملة جملة يعني وان السيمي كولون تجف
بيلاقي السيمي كولون بياخد كل اللي جابلها وبتعامل
معاه as one block بفحص ال syntax تبعهالـ syntax
صحيح بروح بحوله لغوية الآلة و بعمل execution له
بينما الـ compiler بدي مر على كل statement كل ال
code من الالف إلى الياء من سطر رقم zero أو سطر رقم
واحد لإنهاء أخر سطر و يتأكد إن الـ syntax تبع صحيح
مية في المية قبل ما يبدأ يحوله لمين للغة آلة
وبالتالي هذا الفرق الأساسي ما بين اتنين
high performance طبعا احنا بما انه ان ال Java
تشتغل على موضوع ال optimization ممكن تشتغل على
موضوع ال interpreter معناته ممكن تكون أسرعمن غيرها
أو من لغات تانية في الـ execution multithreading
الان احنا كلنا بنعرف انه البرنامج تبعنا بأي لغة
بنكتبه لحد اللحظة كان هو عبارة عن sequential flow
من أول سطر في ال code لنهاية سطر و آخر سطر بيظل
يشتغل statement by statement مصبوط ولا لأ الان بال
multithreading انا بقدر اعمل concurrent execution
لبعض ال task داخل البرنامج تبعي وهذه واحدة من
الشغلات اللي هنغطيها ان شاء الله خلال المساقر اللي
عندى ال dynamic او ال dynamicityالخاصة بالـ Java
الآن حجم ال libraries اللي تطور بالـ Java كبير جدا
و لو دورتي في مجالات مختلفة يعني اهتمامك في ال AI
هتلاقي مكتبات جاهزة بالـ Java بسمع عليك اللي جات
تستدعيها أو تشتغلي عليها و إذا قلتلك كمان معظمها
هتلاقيها open source بمعنى آخر بتقدر تشوف ال code
الأصلي تبع ال library هذه و إذا عندك أي تعديل عليه
بتقدر تشتغل عليه وهذا طبعا بيخدمنا أو بيساعد على
انتشار لغة الـ Java بشكل كبير ما بين الناس من ال
APIs اللي موجودة عندها هذه مجموعة من ال libraries
أنا هتكلم على ال swing اللي هستخدمها في تصميم ال
graphical user interface اللي في خلال ال course
عندها ال Java database connectivity ال JDBC
library موجودة من أجل ربط برنامج ال Java تبعكبأي
قاعدة بيانات ممكنة Oracle MySQL SQL Server Access
أي قاعدة بيانات بس طبعاً في ملف لازم عند ال
provider تبع ال database نجيب ان عنده ملف معين ال
RMI وال Corpo بدعمه ال distributed system ال media
الآن في الويكا وال gate بدعموني في ال data mining
الويكا على ال data mining بشكل عام وال gate على ال
text mining ال Apache Spark على ال distributed
systemأو الـ Hadoop التكنيكية الموجودة حاليًا
وبالتالي الـ Java فعليًا تقدر تخدمني في مجالات عدة
مع platform independent معناته أنا بقدر أشتغل
برنامجي على أي platform و لأي domain أنا ممكن
أستخدمه طيب بعد الكلام النظري اللي بمجد بال Java
نروح باتجاه بعض ال code اللي بهمنا هنبدأ في موضوع
ال comments كام نوع من ال comments موجود عندي أنا
تلاتة اللي هم
طيب الآن انت ع مستواكك ك programer في عندك اتنين
فقط ع مستواكك ك programer في عندك اتنين اللي هو
اللي فيه ال inline او ال line comment اللي انا
بستخدم فيه ال double quotation او ال double colon
ال double forward slash وهذه من كتابتهاالى نهاية
السطر بيصير كله ايش؟ comments مفهوم ال comments ان
انا بقول ال compiler او ال interpreter هذا ال code
مش إلك هذا ال code إلي ك programmer فانت مش لازم
تطالع عليه او ما تحاولش ترجم ولا لغة القالة لانه
حدين syntax error النوع التاني لما انا بأستخدم ال
block اللي هو ال forward slash نجمة forward slash
نجمة التانية يعني على سبيل المثال لما احنا بنروح
هنا
لما احنا بنروح هنا على الـ eclipse بمجرد ان انا
عملتي class تمام جهزته على جهازي وهي عملت remote
desktop عشان لو بدنا نجرب شغلة مباشر راح قاللي
استخدم ال inline comments لاحظي اذا انا كتبت اي
code هنا هيحسبني عليه بينما بعد ال double forward
slashلأ وبالتالي عندك ال comments انت بتتحرك فيه
زي ما بدك بعد
ال comments خلّينا نراجع مع بعض ال primitive data
types انا في عند خطأ .. خطأ اثناء
الكتابة ان hand, bite small letterctrl z short
small letter و
ال I و
ال long هيك تمام ال
data اللي عندى ال primitive data type عندى eight
primitive data type تمانيةوحسب ما احنا بتتعامل في
حياتنا بتعامل مع أعداد صحيحة أعداد حقيقية اللي
فيها الفاصلة العشرية وبتعامل مع ال text وبتعامل مع
ال boolean value أو ال logical value الآن ال
integer بتتقسم لأربع أنواع byte short int و long
احنا للأسف غالبا لو بدي iterator على loop ايش بروح
بسويه بقوله integerI equal 1 بدون ما أنا أقراعي
جداش حجم الـ iterator اللي أنا بدياه و ليش أنا بدي
أستخدمه و كم مرة اللي هو بدها تشتغل تعالى نشوف وين
هذا الكلام طبعا هذا الكلام بيفرج معاه في ال
optimization جداش البرنامج تبعي light أو جداش
بيستهلك resources من الجهاز RAM و CPU تعالى نشوف
ال byte حجمها one byte و احنا بنعرف ان الواحد byte
تساوي 8 bits يعني لما انا بقول اتنين از تمانية
جداش 256 صح
256 هيهم من سالب 128 ل 127 يعني انا فعليا لو عرفت
byte انا بتكلم على 256 إتراترالانهيلوب انت
بتعمليها 4 كده تمام الآن ال integer أربعة بايت
يعني اتنين اص اربعة ضرب تمانية اتنين اص اتنين و
تلاتين فبتدين حوالي خمسة مليار رقم هاي ال range
اللي موجود عندىو هكذا وبالتالي المفروض إذا أنا بدأ
أتكلم على optimization للبرنامج تبعي أبدأ قراعي ما
تقولليش يا أستاذ شو يعني variable أخد 4 byte من
الذاكرة و هي 8 جيجا ماقلتليش له أخد 4 كيلو ولا أخد
4 جيجا اللي ممكن الرام عندي أو 8 جيجا قلتلي 4 byte
ولا حاجةهي الفكرة الصحيحة لو أنا بدأ أنظرها من
المنظور اللي بتتكلم عليه فقط الكلام صحيح 100% لكن
اربعة bytes هنا و اربعة bytes في مكان تاني و سبعة
bytes هناك و سبعة هناك فتبدأ الأعداد ال bytes
الضائعة أو غير مستغلة اللي بتحزيها بتتضخم وبالتالي
بيصير في عندك مشكلة في برنامجك فاحنا المفروض نراعي
ايش ال data type اللي احنا بنستخدمهابالإضافة لل
data types فى عندي مجموعة من ال operators ال
arithmetic operators جمع و قرح و ضرب و قسمة و
modulus و increment و decrement نعرفهم كلهم صح؟
relational operator ليش أنا بستخدمهم؟ عشان أعمل
مقارنات للمقارنات equal يعني بيجموزين is equalnot
is not equal greater than less than إلى آخره ال
bit twice operator المفروض أقدم تهالي عنها مش
مشكلة الآن أنا في عند ال and وفي عند ال bit twice
and في ال logical operator ك logical operator أنا
في عند ال and وفي
عند ال or خلّيني أتكلم على هدول التانية فقط عشان
نوضح مفهوم ال bit twiceالان ديش بتقوللي لازم يكون
الـ true operand true عشان يتحقق output أو ال
condition العام true بينما ال or بتقوللي واحد منهم
على الأقل يكفي يكون true عشان يكون ال output true
مع ال and و ال or ما يعمل؟ يعمل كالتالي لو أتي بال
and و لجأ ال first operand true بروح و أفحص ال
second operand التاني لكن لو لجأها false خلاص بحسم
الأمر بقول false تمام؟ بال true و ال and بال or لو
لجأ ال operand true بقول true لو لجأ ال operand
الأول true فبقول true ال output لو لجأها falseبدي
يروح يفحص أو يقارن مع التاني عشان ياخد decision في
الـ Bitwise ما بيهمهوش إيش قيمة الـ operand الأول
الـ Bitwise هيحول إياه لمجموعة من الـ bits ويقارن
كل bit مع ال bit المقابل له لحد
ما يلاقي صارت falseبياخد decision على الموضوع
بمعنى آخر لازم المقارنة تم بين ال two operands
اللي موجودين عندها هذا الفرق الأساسي ما بين ال
logical operator ال and و ال or و ال bitwise اللي
هي and و or و الشغلات التانية اللي ممكن نشوفها في
عند ال assignment operator من ال assignment
operator احنا غالبا بنستخدمها أو بنستخدم واحد منهم
لما باجي بقوله انا عندي integer x بتساوي سبعة وروح
تقولتله x plus equal 7 جديش قيمة الـ x الآن؟قيمة
الـ X 14 لماذا؟ لأن هذه الـ Translation تبعيتها
كانت عبارة عن X بتساوي X زائد سبعة X تساوي X زائد
سبعة وطبعا نفس الـ Operand هذا ممكن أنا أطبقه مع
كل العناصر الموجودة بما أن في عندي Multiple
Operands تمام؟ هتدخل عندي موضوع ال precedence
الأولوية تبعي ال operators اللي عندي عفوا طلبة في
عندي أكتر من Operator تدخل عندي الأولويات ودائما
كان يعلمونا إيها من ابتدائي بشكل بسيط الأولوية
للأقواص بعدين ضربوا القسمة بعدين جمعوا وطرح مظهورة
لأ؟ الآن إيش اللي اختلف عنها؟ اللي ممكن لو اجتمعت
الضرب والقسمة لحالهم المسألة كلها X ضرب Y تقسيم Z
ضرب Y أو ضرب 2مش حل هذا؟ عادي اشتغل من اليسار
لليمين مافيش مشكلة ليش؟ لأنه الآن المعادلات هذه أو
ال operators هدول من نفس المستوى طبعاً إذا حبيت
ترجعي ارجع لل slide مرة تانية عشان تستنقل طبعاً
بال Java أو بالبرمجة ظهرت إن احنا كنا بنقول أقواس
درب و قسمة و modulusجمعنا و طرح و صار في عندي اللي
يساوي اللي يساوي هذه اللي هي ال assignment خلتني
صارت في عندي increment plus plus minus minus
prefix و
increment او decrement postfix احنا
بنعرف لما انا باجي بقول x بيتساوي سبعةx++ انا
قلتله اطبع ليه print x++ ايش هيطبع هان؟ هيطبع سبعة
بينما لو انا هان قلتله print++x
الأولوية لمين؟ للمجامعات هان هيطبعليهان تماما
ممتاز معناته احنا لحد الآن أمورنا ماشية تمام
الاريز
المصفوفات المصفوفات عشان أتعامل مع عناصر أو أعرف
أكثر أو أخزن أتعامل مع أكتر من قيمة في one
variable أو one object one variable الآن بالتالي
القرن هي عبارة عن data structure تركيب من البيانات
بحيث أنه أخزن مجموعة من القيم من نفس النوعمن نفس
النوع integer, double, character, boolean حتى من
ال object oriented زي ما هنشوف لاحقا طريقة تقليدية
جدا لتعريف المصفوفة بقول انتجر اسم ال array وحط
الأقواص المربعة new integer وطبعا في عند التعريف
التاني هذا برضه ان احط الأقواص مع ال data type
والتانين صح بالمناسبةهذه بالتعريف بالشكل هذا
والتعريف بالشكل هذا مافيش فرق بينهم مطلقا لكن في
كل الأحوال أنا لازم أحدد حجم ال array تبعتي ال
array مشكلتها أنه لازم أحدد لها حجم و حجم ثابت
تمام لكن لاحظوا في التعريف التاني هذا اللي هنا
ماعرفتش ال size ولا عرفتهأيوة تم تحديد الحجم بناء
على القيم المدخلة تم تحديد الحجم على القيم المدخلة
و ادري بالك و زي ما انت بتعرفي مشكلة ال array
دائما بال size انها limited size الحجز اللي انا
بطلبه محدود اما بيظل في عندي فائض بقدرش اتخلص منه
او بيصير في عندي shortage او في عندي قصور و بقدرش
اضيف عليها عناصر عشان هي اتجت بعد هيكال list حلتني
أو حلت المشكلة تبعت ال array وصار لي اعتماد على ال
list أكبر من ال array في ال two dimension طيب أخر
شغلة بديها هنا في موضوع ال single array المصفوفة
هذه اللي أنا بعرفها بالشكل هذا بتمثل صف ولا عمود
صف
ولا عمود صف صمتيها صف صمتيها عمود مش فارقة كتير
معانا احنا بنسميها linearأو one dimension array
سواء كانت بشكل أفقي أو بشكل عمودي وإن كان الصف هو
السمة الغالبة أو هي السمة الأدق لأنه لما بعرف
المصوفة بالشكل هذا two dimensional array ايش عاملا
هذا الصف القوس الأول للصفوف والتانيللـ columns
وبالتالي لما أنا بعرف هيك هو كأنني بعرف raw وهي
فعليا احنا غالبا بيقولك raw vector سمينا إياها raw
vector طيب لما أنا بحتاج أتعامل مع مصفوفة من الـ
two dimensional array غالبا أنا بحتاج ل two loops
عشان أقدر أمر على كل العناصر اللي موجودة تقريبا
ال primitive data type خلصنا منها لكن ال string
على الرغم إن أنا بستخدمها باستمرارstring مش
strings يلا بسيطة برضه هيبقى تعديل الـ string اللى
موجود عندى هان هو فعليا على reference data type
لأن احنا شوفنا في الجدول ال primitive ال text كان
بتمثلها character character وبالتالي هذه عبارة عن
primitive او عفوا ان هذه ال string عبارة عن
reference data type بقدر اخزن فيها array of
Character Implied Array of Character حسب الحجم
وبيبقى إن هي reference معناته أن في عندي مجموعة من
ال functions ال length و ال character at و ال
substring و ال concatenation و ال split و ال equal
و ال index of و ال start و ال end with هنشوفهم
بعدين لما نتكلم مع ال string تمام بعد هيك في
برنامجنا بعد معرفنا ال data types و ال variables
ظهرت عند مين؟ الـ control flow احنا بنتكلم عن الـ
sequential flow لكن ممكن اتحكم فيه انافذ هذا او
انافذ هذا لكن مانقدرش ان انافذ الاتنين مع بعض ال F
statement أبسط صورة لل F statement F ال condition
و block او statement و سيمي كولون، مظهورة او لا؟
إذا بدي أوسع، هبحث في ال true و ال false معناته
هيفي عندtwo statements بعد ال ال's وفي عند ال ال's
if كذلك لما تكتر ال ال's if وخصوصا
مع ال equal case بستخدم مين؟ بستخدم ال switch ال
switch فيها مشكلة في مغياب او مع ال break تعالى
اكتب الكود هذا البسيط لو
انا جيت وقلتلك في عند انتجرX ده تساوي عشرة و جيتها
انقلت switch X
فتحت الأقواس تبعتها و قلتله case 1 system
.out.print 1 وهي break case
2
system.out.print 2 وهي كمان break default
high
colon system.out.print other value محتاج break بعد
ال default؟ مش محتاجطيب ضمن ال code اللي مكتوب
عندي هان إيش ال output؟ other في حاجة بيقول غير
هيك؟ لأ طيب لو أنا جيت و قولت والله ال break هذي
بدي أعملهم comments أعلقهم إيش
ال output؟ other كام واحدة بتقول other؟ تنتين،
تلاتة، أربعةتلاتة اربعة معاهم خمسة خمسة بيقولوا
other والباقي وين رأيكوا في الموضوع ايش هيطبع مين
بيقول هيطبع كلهم يطبع واحد واتنين و other مستحيل
طيب هو اللي هيطبع هيطبع other شوفي يا أستاذ شوفي
وانتبهي معايا بصي صبر قبل ما تتكلمي هيرمر عليهم
كلهم الفكرة وين؟ الآن هياخد قيمة X ويقارنها مع ال
case الأولى true؟False، هيروح على الـ Case التاني
مباشرة True؟ لأ، بالتالي هيروح يطبع Other، الـ
Default الآن مفتاح الـ execution للجزء اللي على
اليمين هذا كله ياته للـ True اللي بتحققها في ال
Case تخيلي، لو أنا مكان الواحد، أنا قلتله عشرة
بدون ال break، هيطبعهم كلهم هيطبع واحد، هيطبع
اتنين، و هيطبع Other لو أنا هذهحطيت العشرة هنا حيش
تيجي كالتالي قارن X مع واحد false X مع عشرة true
فدخل ان عدى الحدود بالـ colon هذه و هيطبع اتنين و
هيطبع مين فبتيجي ال break بتقوله بيوقف عندك
ماتكملش في ال execution وبالتالي مفتاح التنفيذ
تبعتنا ال equal اللي بتتحقق مع ال case اللي عندها
واضحة؟نجربها عملي ولا مافيش داعي؟ كام واحدة
مصدقاني؟ ماشي الحل طيب ال four و ال while و ال do
while four لازم يتحقق condition و غالبا أنا بتكلم
على iterator مظبوط ولا لأ؟ طيب لو أنا سألتك four و
عملته بالشكل هذامش هي الـ structure تبعتها وماحطتش
ولا إشي إيش بيصير؟ Error لأن المفروض ال four
بتحتاج إلى variable counter بتحتاج إلى counter
وبتحتاج إلى condition على الأقل condition على
الأقل وبالتالي ال increment ممكن أن اعملها في داخل
ال block طبعا؟ ايه الآن ال while هتفحص الشرط طب
إيه كيف ال execution تبعت ال four هيكون؟لو أنا جيت
وقلت له integer I equal واحد I أقل من عشرة I plus
plus وهي في عندي block هنا كيف هيشتغل؟ هيجي عند
أول مرة يعمل assignment creation لل counter ويدي
assignment بواحد هيروح يفحص ال condition true
هيروح ينفذ هنا بعد ما يصل لنهاية ال blockهيروح على
الـ increment بعد الـ increment هيرجع على ال
condition مرة تانية وتستمر العملية هنا يعني ال
condition هنا هيك بيروح على ال execution وبالتالي
هذه الدورة تبعت ال four ال why بفحص ال condition
إذا true بنفذ ال block otherwise بعمله skip ومنتقل
للي بعده ال do whileببدأ ينفذ حد ما يصل الـ while
و الـ while مفهومها هل أرجع نفذ ال block اللي مني
و فوق ولا لأ؟ مظلوط ولا لأ؟ لو كانت true بيرجع لحد
من عند ال do و بعمل execution otherwise بكمل و هيك
بصير على الأقل ال block المرتبط بالwhile اتنفذ
لمرة واحدة
in a
الانم لما انا بحتاج اعرف constant لما بحتاج اعرف
constant طبعا لما انا بتكلم الانم هو عبارة عن
special data type special data type او special
classes ان شئتي بس خليني احنا نسميها special data
type عشان اعرف في داخله مجموعة من ال constant
predefined constant بالمثال public انم directions
Parenthesis North, South, East and West تبهي معايا
هنا إن ال text اللي أنا كتبته مش text مش string
لأن لو string كان استخدمت معاه double quotations
وفي نفس الوقت ما كتبتش أرقام كتبت على نص بالشكل
هذا الآن في داخل برنامجي بقدر أخد data أو أعرف
objectمن الـ Enum اللي أنا عرفته يعني صرت بتعرف
انها عبارة عن special data type فهنا بستخدمها
واخدت منها variable ال values المتاحة فيها إيش هي
واحدة من العناصر الأربعة اللي موجودة عندها في الـ
Enum اللي أنا عرفتها بدي أعرف خمسة بدي أعرف خمسين
أنت حرة حسب حاجتك تعالى نشوف المثال التالي أفضل من
المثال الأول في التعريف وأوسع وأشمل لأن لما بتكلم
على الموظفينفينا شغلة بنسميها الدرجة، درجة الموظف
الدرجة بتحدد الـ Basic Salary هيك، بيجيب ويقولك
الموظف على الدرجة الأولى أو درجة التانية أو كده،
رتبه كده الدرجة X، رتبها كده، الدرجة Y، رتبها كده
فأنا بدى أوسع تعريف الـ Enum تبعي بحيث إنه أنا
أقدر أستخدم .. أستفيد من الدرجة وأستفيد من الـ
Associated Salary أو الـ Value تبعتها شوية هيفترج
التعريف معايا، بدايةالإنما بنفس الكيفية الـ string
تبع كيبت ال letter زي ما انت شايفاه وعملتله
association ربطه ب integer أو real number من خلال
الأرقام اللي موجودة عندها بس لحد لحد تلاني ما
انتهاش التعريف لازم أكمل لازم أكمل و أقوله إيش
القيمة اللي أنا بدي إياها إيش نوعها integer هذه
دلالة على إنه الخمسمية والألف و العناصر هذه هي
عبارة عن نوعها integer و أنا سميتها value
Constructor تبع الإنهامطبعاً الآن بقول يا أستاذ طب
احنا لسه في الـ Basic دخلت على الـ Object Oriented
مش قضية كتير الآن الـ Grade انتجر وقلتله عشان أعمل
assignment أو initialization لل value اللي موجودة
عندها ولمّا أنا بدي أرجع بال salary بالقيمة عرفت
method اسمها salary بتعمل return بال value اللي
موجودة عندها وبهيك صار في عندي أنا في الانم تبعي
في عندي شغلتين في عندي ال grade وفي عندي ال
associatedvalue تبعتها في داخل البرنامج كيف أستفيد
منها؟ بعرفي grade زي ما في المثال السابق
الـdirection grade يتساوي grade dot a هذه الدرجة
إذا أنا محتاج لل salary اللي هي نوعها integer
salary ل grade dot a dot ال salary وبالتالي أنا
برجع بالقيمة اللي موجودة عندها هذا الكلام مهم جدا
عشان يكون برنامج genericبكون برنامج بشكل عام
ومابديش حد يبدأ يشتغل بالقيم اللي موجودة عندنا آخر
شغلة في محاضرتنا اليوم شغلة بسيطة اللي لها علاقة
بال rubber classes لأن إيش ال rubber class؟ هي
عبارة عن object أو class من ال primitive dataوين
برزت الحاجة إليها؟ تعالي شوف لو كنت .. لو قلتلك
أنا في عندي form أو في عندي صفحة HTML وفيها text
field و ال text field هذا أنا روحت كتبت في داخله
واحد اتنين تلاتة و أنا بديهم as number لكن بما أن
هذا عبارة عن text text boxمربع نقص فاللي انكتب في
داخله عبارة عن إيه؟ عبارة عن string عبارة عن
string طب أنا كيف بدأ أتعامل مع ال string هذا؟ أنا
بعرف إن هذا integer واحد اتنين تلاتة هذولة ال
digits بتمثل رقمية تلاتة وعشرين، مظبوط؟ فكيف ممكن
أنا أرجع لأصله؟ برزد حاجة عندي أن يكون في عندي
مجموعة من ال methods أقدر أستفيد منها فبروح أنا
بقوله integer X بدها تساوي integer
.barsint و بديله ال text field هذا على فرض اسمه T
.value ال T اسمه T فابقى و هقوله T.value القيمة
اللي موجودة في ال T هنا فبرجعلي بالمية و تلاتة و
عشرين as integer فلما أنا بتكلم على ال rubber
class هي عبارة عن طريقة و قاليةلتحويل الـ
Primitive Data لـ Object والعكس صحيح والـ Object
منها لـ Primitive Data وطبعاً لما بتكلم عن عملية
تحويل هنا بتتكلم عن عمليتين مهمات جدا Auto Boxing
و Auto Unboxing Auto Unboxing شو يعني؟ الألوان
أتيت تعرفت
قلت أنا في عندي integer X equal 7 وفي عندي integer
Y equal 10 هذه primitive data primitive data type
variable بشير ل primitive data وخزنت في داخله
primitive الـ Y هي عبارة عن object من ال class
integer وخزنت في داخلهprimitive data فعملية إضافة
الـ primitive data في داخل ال class المناظر لها
اللي هو ال rubber class تبعتها بنسميها auto boxing
يعني أنا أخدت القيمة ال primitive و حطيتها في ال
object و
حطيتها في ال object العملية هذه بتصير بشكل تلقائي
في المقابل لو انا قلت له ان الـ X بدها تساوي Y
بعيدا
عن الـ rubber class هذا الكلام مستحيل يصير بعيدا
عن ال rubber class هذا الكلام مستحيل يصير اخد
object او احطه او اسويه او اخصص قيمته في primitive
dataبينما مع الـ rubber class هذا الكلام إيش؟ صحيح
و هذه العملية بنسميها auto unboxing يعني فعليا
بيقدر بياخد القيمة و بصدرها لمين؟ لل primitive
data اللي موجودة عندها أذكر في مقابلة المقابلات
كان في أسئلة مكتوبة أو كانوا يتكلموا شو الفرق؟ أو
شو تعريفك لل auto boxing؟Autoboxing دي الـ blank
اللي في المقابلات أحيانا بتكون الأسئلة في كلمات زي
هاي عشان يقول و الله .. ديش أقول عشان يفرقوا ما
بينهم بقدر ما انهم بيحاولوا يصلوا مين بنتبه لكل
شغلة في ال code والمثال اللي جربناه قبل شوية مع ال
switch case مش كل الناس بتعرفه خلاص احنا بنعرف إذا
مافيش شي break بنفذ كل حاجةلأ مش صحيح بنفذ كل حاجة
بعد ما بيعمل match بعد ما بيعمل match طبعا لو أنا
بدأ أطلع في ال primitive data اللي عندي ال
primitive type و ال rubber class اللي لها بوليان
بوليان character أو car character byte byte لاحظي
التسميات تقريبا هي نفسها لكنها بدأت ب capital
letter عشان تحقق المبدأ اللي موجود عندهاهكذا
تقريباً خلصنا برمجة واحد وليش رأيكوا؟ ياريت الدنيا
مشة بالسهولة هاي طيب، في أي سؤال يا بنات؟ المحاضرة
اللي جاي ان شاء الله هنركز على مراجعة الـobject
-oriented عشان فعليا زي ما قلنا نبدأ يوم السبت
بأول لقائلنا بإذن الله تبارك وتعالى نعم حان؟ طيب،
خليكي معايا الآن احنا اتفقنا أنه أنا في عندى class
اسمهInteger مصبوط هذا ال class ايش بيخزن في داخله
بيخزن integer values سمناها rubber class يعني هيك
لما أنا بتكلم عن object في عندي data زائد في عندي
مجموعة من ال method و لا لا تمام و في عندي
primitive primitive
data integerالان العلاقة بينهم ان لو انا اخدت
primitive data وحطيتها في داخلالـ object من الـ
rubber class بشكل تلقائي انت عشان نمشي خطوة لقدام
لما درست object oriented في ال private values
مابلازم تتعاملي معاها من خلال ال set و ال get
method مصبوط ولا او بدك تعامل فيه public و تقول
اللي ال class dot ال object او ال dot ال variable
هذا equal كده صح ولا لا هذا الكلام مش موجود هنا
فانا اجي اتعرفت اللي كان x او y عفوا y as object
وأتيت خزنت في داخلها مباشرة قيمة العشرة هذه سمناها
ايش auto boxing يعني أنا ماكنتش بحاجة لأي وسيط للا
method ولا لأي sequence of list أو من العناصر هذه
عشان أقدر أخصص القيمة والعكس صحيح لما أنا باجي
بقوله X بتساوي Y الآن في قانون ال object oriented
مستحيل هذا الكلام يصيرprimitive data بيستوي object
لأن الـ object نحنا بنعرف موضوع الـ encapsulation
جمع ال data و جمع ال methods مع بعضهم طب أنا كيف
بدأ أخد ال data لحالها لازم يكون في طريقة كانت من
خلال ال get methods بينما مع ال rubbery class هذا
الكلام مش موجود بمجرد أقوله X as primitive data
equal Y as object كان مباشرة بياخدوا ال value اللي
في ال Y و بيخصصها لمين؟ لموضوع .. لاالـ X وهذه
نسميها Auto Unboxing واضحة إن شاء الله؟ في أي سؤال
تاني يا بنات؟ تفضلي كيف
يعني نوعها غير؟ اه ازمنتك بتقول character X بدها
تساوي Y هذه مثلا بدها تساوي Y هل الكلام هذا صحيح؟
هل الـ Y هذي as integer مناظرة لل character؟ أكيد
في أي سؤال تاني يا بنات؟ الله يعطيكوا العافية
وكمان مرة بذكر لقاءنا المرة اللي جاية هيكون
باستمرار هان يعني هنبدأ المحاضرة تسعة وخمسة ان شاء
الله و بننتهي في الوقت