data structure course session 2 27/2/2011بسم الله الرحمن الرحيم
فى الموضوع ده هنتكلم عن كل حاجة تخص كورس الداتا ستركشر اللى احنا بناخده دلوقتى ارجو من جميع اصدقائى ان اى حاجة عايزنها فى الكورس يحطوها كرد فى الموضوع ده
النهاردة هنبدأ مع اول سيشن و هقول النهاردة اللى احنا اخدناه النهاردة يلا بينا
obj of this course
1- efficiency of algorthims
2- Abstract Data Type
3- ملحقتش اكتب ياريت اللى كتبها يقولنا عليها
-----------------------------------------------------------------------------------------------
دلوقتى بعد ما اتكلمنا عن اهداف الكورس نيجى نتكلم عن معنى السطور الرئيسية اللى احنا بنكتبها لما نيجى نكتب اى برنامج اول حاجة بنكتبها اللى هى
#include -------> directive
// copy and paste iostream code here
using namespace std;
using ---------> directive
std -----------> standard input and output
احنا بنكتب السطر ده بتاع using namespace std;
عشان الكومبيلر يعرف يستخدم الحاجات اللى بتتحكم فى الانبوت اللى بيخش للبرنامج والاوتبوت اللى بيطلع من البرنامج وطبعا اشهر مثال السى ان والسى اوت
ممكن السطر ده منكتبوش ونكتب ما يساويه عند كل سى ان وسى اوت السطر ده او الاضافة دى
std::cout<<" ";
std::cin>>" ";
-----------------------------------------------------------------------------------------------
دلوقتى هنتكلم عن اسماء الفريبلس names of variables
مينفعش انى لما اجى اسمى فريبل ان الاسم يبدأ برقم يعنى مثلا مينفعش اسميه
8abc ----------------> false
ممكن اسم الفريبل يبدأ بحاجة من اتنين اما _ او حرف انجليزى عادى يعنى ممكن يكون كده
abc , _abc ---------------------> true
فى طريقة تانية بيستخدمها بعض المبرمجين انهم يسمو الفريبل بطريقة معينة بحيث انهم يعرفو نوع الفريبل ده من اسمه
ازاى الكلام ده
بيحطو حرف فى الاسم بتاع الفريبل يدل على ذلك يعنى مثلا
s_i_any name , s_d_any name , s_f_any name
هنا حرف ال "i" , "d" , "f"
بيدل على النوع يعنى حرف الاى يدل على ان الفريبل ده من نوع int
برضه حرف الدى يدل على ان الفريبل ده من نوع double وهكذا بقى مع باقى الداتا تيبس
هو بصراحة اللى انا مش عارفه حرف الاس ده كنا بنحطه ليه ؟؟؟؟؟؟؟
ولكن الفكرة كلها اننا بنحط حرف صغير واحد يدل على نوع الفريبل
------------------------------------------------------------------------------------------------
طبعا كلنا عارفين اشهر انواع الدتا تيبس اللى هى
int , double , char , string , float , long
فى بقى فرق ما بين السى والجافا فى نوع معين من الداتا تيبس اللى هو
long long ده بيستخدم فى زى ال int
بالظبط لكن للارقام الكبيرة زى 2 مليار كده يعنى
فى الجافا اسم الداتا تيب المقابل ل
long long
حاجة اسمها big integer
يعنى
long long = big integer
-------------------------------------------------------------------------------------------------
بعد كده هنتكلم عن حاجة اسمها expression
الاكسبرشن ده هو المكون الاساسى لاى سطر فى اى برنامج
يعنى لما اقول x y ده اكسبرشن
وممكن سطرر واحد يكون فى اكتر من اكسبرشن لكن متداخلين مع بعض زى لما اقول
(x + y) * 5
x + y ---------------------> expression
result of x + y * 5 --------------------------> another expression
وفى الاكسبرشنس دى بنستخدم بعض العلامات الحسابية زى ال
العلامات دى بتتسمى
arithmatic operation
زى , - , * , / , | , &
طبعا ممكن حد يستغرب من اخر علامتين دول اللى هما | , &
دول بيتحول فيها الرقم الى النظام البينرى وبيحصل ما بين كل bit
ومايقابلها فى الرقم التانى عمليه اند او اور
فلو كانت العلامة اللى بين الرقمين | تبقى العملية دى اور لو كانت العلامة اللى بين الرقمين & يبقى العملية اللى هتحصل هى اند
مثال مثلا لو قلنا
3 & 2
10 & 11 = 0 1
لو اتكلمنا عن مثال تانى
3 | 2
10 | 11 = 11
-----------------------------------------------------------------------------------------------
بعد كده هنتكلم عن حاجة اسمها ال decisions اللى هى القرارات
فى كل برنامج ممكن نكون فى موقف اننا بيكون عندنا اكتر من اختيار وعايزين نختار منهم اختيار واحد بس
وبنختار الاختيار ده بناء على شروط معينة لازم تكون متحققة فى الاختيار ده
عشان كده عملو حاجة اسمها if condition
والاداة دى ( لو ممكن نسميها اداة ) بتمكنا من اختيار الاختيار الصح (ومعنى كلمة صح هنا انه يكون مطابق للشروط اللى احنا عايزينها) من مجموعة اختيارات كتيرة
السينتاكس بتاعة ال if condition هو
if ( condition )
{ -------------
-------------
----------}
else { ----------------------------
--------------------
-------------}
السينتاكس اللى فات ده بنستخدمه لو عايزين نختار مابين حاجتين بس طب لو عايزين نختار اختيار مابين اختيارات كتير بنعمل ايه
if ( condition )
{ -------------
-------------
----------}
else if ( condition ) { ----------------------------
--------------------
-------------}
else if ( condition ) { --------------
-------------------
---------------}
وهكذا مع بقية الاختيارات
فى اداة تانية غير ال if condition اسمها switch
ودى السينتاكس بتاعها كده
switch ( one variable )
case expression: ---------------------
---------------------
break;
case expression: ---------------------
---------------------
break;
السويتش دى بقى بتشتغل ازاى
اول حاجة انا بحط فريبل ما بين قوسين السويتش وده معناه انى بقول للكومبيلر ان الفريبل ده هو اللى انا هستخدمه فى المقارنة او فى اتخاذ القرار المناسب
ثم بحط كلمة case وجمبيها الاكسبرشن او الحالة اللى ممكن يكون الفريبل اللى فى السويتش بيحققها
ثم بحط نقطتين فوق بعض وبكتب للكومبيلر انا عايزه يعمل ايه لو حصل الشرط ده ثم بحط كلمة بريك break فى اخر كل case
طب انا امتى بشتغل ب if condition وبشتغل ب switch
if condition : بنستخدمها لو كان فى اكتر من فريبل هو اللى بيحدد القرار اللى هتخذه مش فريبل واحد هو اللى بيتحكم فى قرارى
switch : بستخدمها لو كان فى فريبل واحد بس هو اللى بيتحكم فى اختيارى
-----------------------------------------------------------------------------------------------
بعد كده هنتكلم عن حاجة اسمها ال loops
احنا لو كنا عايزين حاجة معينة تكرر عدد من المرات او تفضل الحاجة دى تتكرر لحد ما حاجة معينة تحصل
يعنى مثلا احنا لو عايزين نعمل لوب عدد من المرات
المعروفة مسبقا فبستخدم حاجة اسمها فور لوب
السيناتكش بتاعها بالشكل ده
for(intial value such as i = 0;condition of loop;increment or decrement)
{
-------
--------
}
فى برضه نوع تانى من اللوبس بنستخدمه لو عايزين اللوب تحصل على الاقل مرة واحدة اسمها do - while loop
والسينتاكس بتاعها بالشكل ده
do{
----------------
----------------
----------------
} while(cond);
وفى نوع تالت من اللوبس ده اللى احنا بستخدمه لما عايزين اللوب يمشى لحد ما كونديشن معين يحصل ثم يقف
اللوبس ده اسمه while loop
while ( condition )
{
-----------
-----------
-----------
}
------------------------------------------------------------------------------------------------
دبوقتى هنتكلم عن حاجة اسمها object oriented
الكلمة دى معناها انى ببص على كل حاجة فى الدنيا على انها اوبجكت
الاوبجكت ده ليه ميثودس بيستخدمها ليه بعض المميزات والخواص
ولما نيجى نتكلم عن object oriented يبقى لازم نتكلم عن اربع حاجات رئيسسة
1- Abstraction
معنى كلمة abstraction يعنى انا باخد بس من كل entity اللى انا عايزه او بحتاجه
يعنى مثلا فى الكورس اللى احنا بناخده اللى يهم ادارة الكورس حاجات معينة من الطلاب زى الاسم الاى دى والدرجة
لكن شئون الطلبة بيهتمو بحاجات اكتر زى الاسم والاى دى والجى بى ايه ومجموع المواد اللى الطالب نجح فيها
يعنى الفكرة انى باخد بس اللى يهمنى معرفته من اوبجت معين اللى هو فى المثال ده الطالب
2- encapsulation
معنى كلمة encapsulation هو انى بجمع كل الخواص والعمليات والميثودس اللى يقدر اوبجكت معين يعملها بجمعها فى شىء واحد معين
زى الوقت لو جينا نتكلم عن الوقت هنلاقى فيه ال min - sec - hours
ولو اتكلمنا عن اوبيراشن ممكن نلاقى add minutes , add hours
الفكرة بقى هنا اننا نجمع كل الفريبلس دى والاوبيراشنس دى فى شىء واحد اللى هو الاوبجكت
3- inheritance
معنى كلمة انهيرتنس كلغة انجليزية يعنى الوراثة
وكلمة الوراثة فى البرمجة تعنى ان فى اوبجكت معين بياخد كل الخواص والميثودس من اوبجكت تانى وبيكون تابع ليه
الاوبجكت الصغير ده كمان ممكن نضيفله خواص جديدة يقدر يعملها
يعنى الاوبجكت الجديد = الاوبجيكت الاب بعض الخواص الجديدة اللى يستطيع الاوبجكت المشتق (الابن يعنى) بس اللى يعملها
4- polymolphism
لو جينا بصينا على المثالين دول
1 + 2 = 3
"ab" + "c" = "abc"
الاوبيراتور فى العملية الاولى كان ليه طريقة لاستخدامه ولكن فى العملية التانية كان ليه طريقة لاستخدامه تانية خاااااااالص
وكلمة polymolphism كلغة انجليزية تعنى التشكل يعنى اقدر اغير شكل حاجة معينة اكتر من مرة
وهو ده نفس اللى حصل
الاوبيراتور بلص اتغير شكله من اول عملية الى حاجة تانية خااااااااااالص فى العملية التانية
ولو جينا اتكلمنا عن مثال تانى بس اكثر عمقا فى البرمجة
لو جينا عملنا كلاس اسمه shape والكلاس ده فى فنكشن اسمها area
الكلاس ده مشتق منه تلات كلاسات تانية
circle , square , triangle
والفنكشن area عند ال circle = Pi r^2
area -----> square = r^2
area -----> triangle = 1/2 r * h
لو جينا عملنا اوبجكت من نوع shape اسمه x
shape x = new circle ;
x.area();
كده الفنكشن area اللى عند circle هى اللى هتتنفذ
shape x = new square ;
x.area();
كده الفنكشن area اللى عند square هى اللى هتتنفذ
وهكذا بنفس الفكرة
الخلاصة ان البولى موليفيزم تعنى التشكل يعنى ممكن يكون لفنكشن واحدة اكتر من شكل واحنا اللى بنتحكم فى تشكل الفنشكشنز دى
-----------------------------------------------------------------------------------------------
اخر حاجة هنتكلم عليها حاجة اسمها uml
فى ال uml بنعمل كلاس بشكل جرافيكس شوية
ولما نيجى نعمل حاجة public فى ال uml بنحط قبل الحاجة دى علامة
لو كنا عايزين نعمل الحاجة دى private بنحط علامة -
لو كنا عايزين نعلمها بروتيكتد عدى علينا بكرة هنقلك لان الراجل مش فاكر
فى حاجة جديدة بقى اسمها package الحاجة دى هى الديفولت عند الجافا اللى هى لو البروجرامر محطش حاجة ولا بابليك ولا برايفت ولا حتى بروتيكتد
ولو عايزين نمثلها فى ال uml مبنحطش حاجة قبل لا او -
فى ال uml فى حاجتين
حاجة اسمها composition
ودى معناها ان انا بعمل علاقة مابين حاجتين منهم حاجة جزئية من الحاجة التانية الاكبر
يعنى univ -------------> departments
هنا ال departments جزئية من الشىء الكبير اللى هو university
فى حاجة تانية اسمها aggrogation دى هى هى ال composition لكن بيكون فى اختلاف بسيط بين الطرفين زى مثلا
department-----------------> professor
فى ال uml لما باجى اعمل interface لكلاس معين بعمله بالطريقة دى
public interface xyz
{
add(x , y , z) // ده طبعا مثال بسيط لفنكشن
substract(x , y);
}
ولما باجى اعمل implement للكلاس ده بعمله بالطريقة دى
public class abc implements xyz
add(x , y , z)
{
----------------
------------
---------------
}
وهكذا
انا كده خلصت وخلصت سيشن النهاردة اتمنى انى اكون عملت اضافة اعذرونى بس على عدم التنظيم وان شاء الله ملخص سيشن بكرة هيكون منظم اكتر وربنا يوفقنا كلنا ان شاء الله