• 0
صمودا

امثله عن ال functions لغرض التدرب عليها

سؤال

السلام عليكم,

ممكن حدا من الاخوة بيكتب لنا افكار عده متسلسله لعمل functions احب ان اتدرب عليها و كتابتها و من ثم و ضعها هنا للنقاش ان كان فيها خطأ ما

اكملت دروس الدوال من مده فصيره و حابب اتدرب عليها عن طريق كتابه ما ستقترحونه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

28 إجابة على هذا السؤال .

  • 0

يعني مثلاً ...اكتب دالة تقوم بحساب مجموع عددين (نمررهما كوسائط ) وتعيد المجموع ..

هكذا تقصد ؟...إذا كان ذلك ..فهذه بعض الأمثلة :

اكتب دالةتأخذ وسيطين (عددين صحيحين) ..وتعيد ناتج قسمة الأول على الثاني ..(إن لم يكن الثاني 0)

اكتب دالة تأخذ وسيطاً (حرف ).. تعيد الحرف التالي له ... وتعيد a إن ان الحرف المدخل هوz ..

اكتب دالة تأخذ حرفاً صغيراً وتعيد الحرف الكبير المقابل له ...

اكتب دالة تأخذ حرفاً كبيراً وتعيد الحرف الصغير مالقابل له ...

اجمع الدالتين السابقتين في دالة واحدة واكتب دالة أخرى للتعرف إذا كان العدد المدخل كبير أو صغير ثم تقوم بعكسه (الكبير تجعله صغير والصغير تجعله كبير )

حل المسائل الخمس السابقة وأنتظر إجاباتك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

و أنا أقترح عليك السؤال التالي :

اكتب دالة تستقبل عددا صحيحاً و تعيد true إذا كان فردياً و false في الحالة المعاكسة.

المطلوب هو كتابة الدالة بأكثر من خمسة طرق :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يعني مثلاً ...اكتب دالة تقوم بحساب مجموع عددين (نمررهما كوسائط ) وتعيد المجموع ..

هكذا تقصد ؟...إذا كان ذلك ..فهذه بعض الأمثلة :

اكتب دالةتأخذ وسيطين (عددين صحيحين) ..وتعيد ناتج قسمة الأول على الثاني ..(إن لم يكن الثاني 0)

اكتب دالة تأخذ وسيطاً (حرف ).. تعيد الحرف التالي له ... وتعيد a إن ان الحرف المدخل هوz ..

اكتب دالة تأخذ حرفاً صغيراً وتعيد الحرف الكبير المقابل له ...

اكتب دالة تأخذ حرفاً كبيراً وتعيد الحرف الصغير مالقابل له ...

اجمع الدالتين السابقتين في دالة واحدة واكتب دالة أخرى للتعرف إذا كان العدد المدخل كبير أو صغير ثم تقوم بعكسه (الكبير تجعله صغير والصغير تجعله كبير )

حل المسائل الخمس السابقة وأنتظر إجاباتك

شكرا لك اخي و شكرا للاخ احمد,

حابب اعرف ماذا تقصد بالوسيط في اللغه الانكليزيه؟ هل هو integer or variable?

انا عارف لان حظرتك وضحت عددين صحيحين اذن هو انتجر و لكن في السؤال الثاني مطلوب و سيط حرف اريد التاكد ان الوسيط معناه فريبل او ماذا في الانكليزيه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا لك اخي و شكرا للاخ احمد,

حابب اعرف ماذا تقصد بالوسيط في اللغه الانكليزيه؟ هل هو integer or variable?

انا عارف لان حظرتك وضحت عددين صحيحين اذن هو انتجر و لكن في السؤال الثاني مطلوب و سيط حرف اريد التاكد ان الوسيط معناه فريبل او ماذا في الانكليزيه

على ما اعتقد تقصد الوسيط الحسابي و لست متاكدا لاني و اعوذ بالله من كلمه اني تعلمت بدائيات اللغه بالانكليزي

حل السؤال الاول ادناه ارجو ان تخبرني باي خطأ

شكرا

#include <iostream>
using namespace std;

int average(int x, int y);

int main()

{
int firstn;
int secondn;
cout << "Please enter the tow numbers below to get the median: " << endl;
cin >> firstn;
cin >> secondn;
int total = average(firstn, secondn);
cout << total << endl;

}

int average(int x, int y)

{

if (x == 0 || y == 0)
{
cout << "Either x or y is ZERO" << endl;
}
else
{
return (x + y)/2;
}

}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يعني مثلاً ...اكتب دالة تقوم بحساب مجموع عددين (نمررهما كوسائط ) وتعيد المجموع ..

هكذا تقصد ؟...إذا كان ذلك ..فهذه بعض الأمثلة :

اكتب دالةتأخذ وسيطين (عددين صحيحين) ..وتعيد ناتج قسمة الأول على الثاني ..(إن لم يكن الثاني 0)

اكتب دالة تأخذ وسيطاً (حرف ).. تعيد الحرف التالي له ... وتعيد a إن ان الحرف المدخل هوz ..

اكتب دالة تأخذ حرفاً صغيراً وتعيد الحرف الكبير المقابل له ...

اكتب دالة تأخذ حرفاً كبيراً وتعيد الحرف الصغير مالقابل له ...

اجمع الدالتين السابقتين في دالة واحدة واكتب دالة أخرى للتعرف إذا كان العدد المدخل كبير أو صغير ثم تقوم بعكسه (الكبير تجعله صغير والصغير تجعله كبير )

حل المسائل الخمس السابقة وأنتظر إجاباتك

اخي ممكن تعيد كتابه اخر 4 اساله و تكتبها باللغه الانلكيزيه اجد صعوبه بفهمها مثلا

حرف كبير و حرف صغير, هل تقصد Cap Letter and Small Letter?

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مرحبا بك أخي...

بالنسبة لكودك ..

#include <iostream>
using namespace std;

int average(int x, int y);

int main()

{
int firstn;
int secondn;
cout << "Please enter the tow numbers below to get the median: " << endl;
cin >> firstn;
cin >> secondn;
int total = average(firstn, secondn);
cout << total << endl;

}

int average(int x, int y)

{

if (x == 0 || y == 0)
{
cout << "Either x or y is ZERO" << endl;
}
else
{
return (x + y)/2;
}

}

في هذا المكان بالتحديد :

    if (x == 0 || y == 0)
{
cout << "Either x or y is ZERO" << endl;
}

. لا تتركها بدون return سيولد لك ذلك أخطاء في البرنامج ..

حابب اعرف ماذا تقصد بالوسيط في اللغه الانكليزيه؟

أقصد parameter ..

على ما اعتقد تقصد الوسيط الحسابي

لا بل أقصد عملية القسمة العادية : مثلاً نمرر 2 , 3 ,ويعيد التابع 3/2 ... وإذا مررنا 3و0 نطبع عبارة خطأ :القسمة على صفر ولا ننفذ العملية ...

حرف كبير و حرف صغير, هل تقصد Cap Letter and Small Letter?

نعم هذا ما قصدته ... مثلاُ نمرر a للfunction فتعيد A

اخي ممكن تعيد كتابه اخر 4 اساله و تكتبها باللغه الانلكيزيه اجد صعوبه بفهمها

حسنا سأكتب لك الprototype للدوال الأربعة الأولى وأنت اكتب الbody لها ..

float first(float ,float );
char second(char );
char third(char);
char forth(char);

ترجمة الكلام السابق :

دالة function

تأخذ وسيط : pass a parameter

تعيد قيمة return a value

حرف char

إذا كان لا يزال هناك شيء غير مفهوم فلا بأس اسأل ..

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مرحبا بك أخي...

بالنسبة لكودك ..

#include <iostream>
using namespace std;

int average(int x, int y);

int main()

{
int firstn;
int secondn;
cout << "Please enter the tow numbers below to get the median: " << endl;
cin >> firstn;
cin >> secondn;
int total = average(firstn, secondn);
cout << total << endl;

}

int average(int x, int y)

{

if (x == 0 || y == 0)
{
cout << "Either x or y is ZERO" << endl;
}
else
{
return (x + y)/2;
}

}

في هذا المكان بالتحديد :

    if (x == 0 || y == 0)
{
cout << "Either x or y is ZERO" << endl;
}

. لا تتركها بدون return سيولد لك ذلك أخطاء في البرنامج ..

أقصد parameter ..

لا بل أقصد عملية القسمة العادية : مثلاً نمرر 2 , 3 ,ويعيد التابع 3/2 ... وإذا مررنا 3و0 نطبع عبارة خطأ :القسمة على صفر ولا ننفذ العملية ...

نعم هذا ما قصدته ... مثلاُ نمرر a للfunction فتعيد A

حسنا سأكتب لك الprototype للدوال الأربعة الأولى وأنت اكتب الbody لها ..

float first(float ,float );
char second(char );
char third(char);
char forth(char);

ترجمة الكلام السابق :

دالة function

تأخذ وسيط : pass a parameter

تعيد قيمة return a value

حرف char

إذا كان لا يزال هناك شيء غير مفهوم فلا بأس اسأل ..

تحياتي

السلام عليكم اخي مصطفى

شكرا جزيلا لك الان كل شي واضح

نعم كان لدي خطأ و اكتشفت عدم وجود ال return

لانه لازال يوجد احتمال اخر يمكن ان يكون الرقم غير صفر في if conditional statement

ساقوم بحل البقيه ان شاء الله

تحياتي لك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم اخي مصطفى

شكرا جزيلا لك الان كل شي واضح

نعم كان لدي خطأ و اكتشفت عدم وجود ال return

لانه لازال يوجد احتمال اخر يمكن ان يكون الرقم غير صفر في if conditional statement

ساقوم بحل البقيه ان شاء الله

تحياتي لك

حل التمرين الثاني حسب ما فهمته

#include <iostream>
using namespace std;

char letterFun(char word);

int main()

{
char letter;
cout << "Enter a character please: " << endl;
cin >> letter;
cout << letterFun(letter);


}


char letterFun(char word)
{

return word;

}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

حل التمرين الثاني حسب ما فهمته

#include <iostream>
using namespace std;

char letterFun(char word);

int main()

{
char letter;
cout << "Enter a character please: " << endl;
cin >> letter;
cout << letterFun(letter);


}


char letterFun(char word)
{

return word;

}

حل السؤال الاخر

#include <iostream>
using namespace std;



char capt(char const * x);

int main()


{


cout << capt("training");


}


char capt(char const * x)

{

return x[0] - 32;

}

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

بالنسبة لسؤالي فقد يكون صعباً عليك بعض الشيء إذا كنت جديد على C++, لذا سأضعه في موضوع مستقل للنقاش و أضع جميع الحلول الممكنة و يمكنك المشاركة إ أردت :)

سأضع رابط الموضوع حالما تتم كتابته.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

حل السؤال الاخر

#include <iostream>
using namespace std;



char capt(char const * x);

int main()


{


cout << capt("training");


}


char capt(char const * x)

{

return x[0] - 32;

}

مثال اخر استخدمت فيه ال toupper() built in function

#include <iostream>
#include <string>
using namespace std;

char const capt(string letter);
int main()

{

cout << capt("wadi");


}


char const capt(string letter)
{

letter[0] = toupper(letter[0]);
return letter[0];
}

السلام عليكم

بالنسبة لسؤالي فقد يكون صعباً عليك بعض الشيء إذا كنت جديد على C++, لذا سأضعه في موضوع مستقل للنقاش و أضع جميع الحلول الممكنة و يمكنك المشاركة إ أردت :)

سأضع رابط الموضوع حالما تتم كتابته.

شكرا لك اخي احمد انتظر منك الرابط

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

مشا شاء الله عشره طرق؟ زاد المطلوب من 5 الى 10 :)

لا اتسطيع صراحه, و لكن هذا ما احتاج لتعلمه لا احب ان استخدم داله موجوده اصلا للاستخدام

اريد ان اتعلم ان اكوت شبيه لها حتى تسهل مسيرتي في التعلم ان شاء الله

انفعنا يعملك هنا او في موضوع اخر و ارجو ان تعلمني بالرابط

تحياتي لك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الرابط مُدرج تحت الكتابة, اضغط على العنوان ذو اللون الأزرق للذهاب إلى الموضوع.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الاجابة للسؤال قبل الاخير

#include <iostream>
#include <string>
using namespace std;
string letter(string lower);
int main()

{
string name;
cout << "Type your name: " << endl;
cin >> name;
cout << letter(name);

}

string letter(string lower)

{
lower[0] = tolower(lower[0]);
return lower;

}

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الاجابه للسوال الاخير

#include <iostream>
#include <string>
using namespace std;
string letterFun(string letter);
int main()

{
string name;
cout << "Type your name: " << endl;
cin >> name;
cout << letterFun(name);

}

string letterFun(string letter)

{

if (letter[0] == tolower(letter[0]))
{
cout << "This is a downcase letter! " << endl;
letter[0] = toupper(letter[0]);
cout << "Your name has been uppercased below! " << endl;
return letter;

}

else
{
cout << " this is an uppercase letter " << endl;
letter[0] = tolower(letter[0]);
cout << "Your name has been dowcased below! " << endl;

return letter;
}

}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أحسنت بارك الله فيك ... (وضعت تعليقات على كل كود على حدة ... )

ما رأيك الآن بجرعة إضافية من مستوى أعلى ((في الحقيقة أفضل من يقوم بذلك هو المشرف الأخ أحمد الشنقيطي وليس أنا ....فهو أستاذي وطبعا يعرف كيف يتدرج في المستويات))

على كل حال ... حاول أن تحل هذا التمرين ...

اكتب تابعاً ... يستقبل اسم المستخدم user name وكلمة السر password من المستخدم ... ونمرر له عن طريق parameters اسم المستخدم وكلمة السر الصحيحين ...

ويقوم بطباعة العبارة : Denied في حال عدم تطابقهما... أو Accepted في حال التطابق ... ( حاول تجزئة التابع إلى أكبر عدد من التوابع ... يعني كل عملية أنشئ لها تابع مستقل)

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أحسنت بارك الله فيك ... (وضعت تعليقات على كل كود على حدة ... )

ما رأيك الآن بجرعة إضافية من مستوى أعلى ((في الحقيقة أفضل من يقوم بذلك هو المشرف الأخ أحمد الشنقيطي وليس أنا ....فهو أستاذي وطبعا يعرف كيف يتدرج في المستويات))

على كل حال ... حاول أن تحل هذا التمرين ...

اكتب تابعاً ... يستقبل اسم المستخدم user name وكلمة السر password من المستخدم ... ونمرر له عن طريق parameters اسم المستخدم وكلمة السر الصحيحين ...

ويقوم بطباعة العبارة : Denied في حال عدم تطابقهما... أو Accepted في حال التطابق ... ( حاول تجزئة التابع إلى أكبر عدد من التوابع ... يعني كل عملية أنشئ لها تابع مستقل)

بالتوفيق

اشكرك جزيل الشكر اخي الكريم مصطفى صراحه التمرين يبدو افضل شيء للانتقال لمرحه اعلى في اللغه

جدا ممنون لوقتك و لوقت الاخ احمد في هذه التمارين الجميله

ساقوم بعمل التمرين الاخير الذي وضعته و اكتبه هنا ان شاء الله

بالنسبه للتمرين الثاني او الثالث, صراحه لم اعرف بان البراميتر يجب ان تتغير تصورت انها تعيد ما تكبته على كل حال ساحل المثال تبع اسم المستخدم و الرقم السري

شكرا لكم اخواني

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اشكرك جزيل الشكر اخي الكريم مصطفى صراحه التمرين يبدو افضل شيء للانتقال لمرحه اعلى في اللغه

جدا ممنون لوقتك و لوقت الاخ احمد في هذه التمارين الجميله

ساقوم بعمل التمرين الاخير الذي وضعته و اكتبه هنا ان شاء الله

بالنسبه للتمرين الثاني او الثالث, صراحه لم اعرف بان البراميتر يجب ان تتغير تصورت انها تعيد ما تكبته على كل حال ساحل المثال تبع اسم المستخدم و الرقم السري

شكرا لكم اخواني

بارك الله فيك اخي الكريم

لقد عملت حلين لهذا التمرين الاول وضعت فريبلس تحتوي على اسم المستخدم و الرقم السري

الحل الثاني هو عمليه تطابق if the username == "sometext" as well as the password

#include <iostream>
#include <string>
using namespace std;


int main()

{
string storedU = "somodan";
string storedP = "123456";
string username;
string password;
cout << "enter your user name: " << endl;
cin >> username;
cout << "enter your password: " << endl;
cin >> password;

if (username != storedU)
{
cout << " your username does not exist!" << endl;

}
else if (password != storedP)
{
cout << "your password do not match" << endl;
}
else if (username == storedU && password == storedP)
{
cout << "You are logged in now! " << endl;
}
}


#include <iostream>
#include <string>
using namespace std;


int main()

{
string username;
string password;
cout << "Please enter your username and password: " << endl;
cin >> username;
cin >> password;

if (username == "somodan" && password == "123456")
{
cout << "Access is allowed! " << endl;
}
else

cout << "Access is Denied!, your username and password do not match! " << endl;

return 0;
}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الحل الأول رائع والحل الثاني ممتاز ....laugh.gif

ما عدا نقطة بسيطة وصغيرة جدا ...أهملتها ...

أين التوابع .... لم تستخدم سوى main >>> قم بتغليف هذه العمليات داخل توابع ... هذا ما اتفقنا عليه ... بارك الله فيك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

سأترك التصحيح للأخ مصطفى لأنه صاحب السؤال :)

لكن, لدي ملاحظة بسيطة تتعلق بمقارنة المصفوفات الحرفية.

المصفوفات (بشكل عام) عبارة عن أنواع مُركبة (Complex Types) و بالتالي لا يمكنك أن تقول للكومبايلر أن يقارن مصفوفة من عشرة عناصر وكأنها كتلة واحدة !

الأنواع المُركبة (Arrays, structures, unions, classes, ...) لاتُقارن إلا عنصرا بعنصر.

لحسن الحظ أنك تتعامل مع الفئة string داخل C++, هذه الفئة تحتوي على إعادة تعريف للمعامل == و هذا ما أمكنك من مقارنة كائنات الــ string دون وجود أي مشاكل.

لكن, لو كنت تتعامل مع المصفوفات الحرفية (char *) فلا تستخدم المعامل == في المقارنة لأنه غير مُعرف.

استخدم الدالة strcmp لمثل هذا الأمر. و إن كنت تريد مقارنة جزء معين من السلسلة الحرفية فيمكنك استخدام الدالة strncmp, توجد ثلاث حالات:

  • القيمة 0 تعني أن السلسلتين متساويتين.
  • القيمة السالبة تعني أن السلسلة الحرفية الأولى تحتوي على حروف ترميزها بالـ ASCII أصغر من ترميز حروف السلسلة الثانية.
  • القيمة الموجبة تعني أن السلسلة الحرفية الأولى تحتوي على حروف ترميزها بالـ ASCII أكبر من ترميز حروف السلسلة الثانية.

مثال :

const char * chaine1 = "blabla";
const char * chaine2 = "blabla";
const char * chaine3 = "blablu";
if (strcmp(chaine1, chaine2) == 0) {
/* les chaines sont identiques */
}
if (strcmp(chaine2, chaine3) != 0) {
/* les chaines sont différentes */
}
if (strncmp(chaine2, chaine3, 3) == 0) {
/* les chaines sont identiques en se limitant a comparer les 3 premiers caracteres */
}

إذا كنتَ تريد محاكاة الدالة strcmp فيمكنك كتابتها بهذه الطريقة :

int str_cmp(char str_1[], char str_2[]) {
int i = 0;
while (str_1[i] || str_2[i])
if (str_1[i] != str_2[i++]) return -1;
return 0;
}

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الحل الأول رائع والحل الثاني ممتاز ....laugh.gif

ما عدا نقطة بسيطة وصغيرة جدا ...أهملتها ...

أين التوابع .... لم تستخدم سوى main >>> قم بتغليف هذه العمليات داخل توابع ... هذا ما اتفقنا عليه ... بارك الله فيك

اشكرك بارك الله فيك

صراحه لم افهم معنى التوابع لحد ما فسرتها لي الان

ان شاء الله اعملها ب توابع في وقت ما اليوم في توقيتي هنا

بارك الله فيك اخي و جزاك الله خيرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
صراحه لم افهم معنى التوابع لحد ما فسرتها لي الان

لا بد أنك تقصد هذه العبارة :

قم بتغليف هذه العمليات داخل توابع

التغليف أهم مبدأ من مبادئ البرمجة كائنية التوجه OOP ... object oriented programming

وهو في الحقيقة طريقة تفكير تساعد بشكل مذهل على تجزئة المشكلة إلى مشاكل جزئية ...

يمكننا عن طريق حل المشاكل الحزئية ..أن نحل المشكلة الرئيسية ...

وأهم ميزة له هي الreuse إعادة الاستخدام ...فلو أردنا أن نغير خاصية ما أو أن نضيف ميزة جديدة ... فسيكون هناك مكان محدد نبحث عنه ...ودالة بعينها نغير فيها ...

دون أن نعدل على باقي الكود ....

((طبعاً التوابع تقوم بتغليف بسيط .... أما التغليف الحقيقي فهو عن كريق الصفوف classes >>> ))

بالتوفيق ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

التغليف أو الكبسلة (Encapsulation) : هي عملية تجميع كل الخصائص properties والطرق ( العمليات ) Methods في وحدة واحدة ( داخل غلاف واحد ) حيث لا يمكن الوصول إليها ( أي الخصائص والطرق ) إلا عن طريق الكائن. يتم ذلك عن طريق محددات الوصول أو مستويات الحماية التي تنقسم إلى ثلاثة أقسام :

1- مستوى الحماية الخاص private :

وفيه يتم تعريف الأعضاء التي يتم استخدامها في الصنف ، ولا يمكن الوصول إليها من خارج الصنف.

2- مستوى الحماية المحمي protected :

الأعضاء المعرفة في هذا المستوى تشبه الأعضاء الخاصة غير أنه يمكن توريثها إلى أي صنف آخر.

3- مستوى الحماية العام Public :

وفيه يتم تعريف الأعضاء العامة التي يمكن الوصول إليها من خارج الصنف.

يوجد أيضا تغليف من نوع آخر و هو تغليف الواجهات الرسومية. في الــ windows مثلا, عندما نضغط على زرّ × لإغلاق النافذة, فإنّ النظام يستدعي الدالة WndProc وُيمرر لها الرسالة WM_CLOSE والتي تقابل الرقم 0x10 بنظام العد السداسي عشري أو 16 بالنظام العشري, لكن المُستخدم لا يشعر بما يحدث خلف الكواليس لأنه تم تغليف واجهة النظام و أصبح المستخدم يتعامل مع مجموعة أزرار و نوافذ, و بالتالي تكمن فائدة تغليف الــ GUI في إخفاء التعقيدات عن المستخدم.

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

التغليف أو الكبسلة (Encapsulation) : هي عملية تجميع كل الخصائص properties والطرق ( العمليات ) Methods في وحدة واحدة ( داخل غلاف واحد ) حيث لا يمكن الوصول إليها ( أي الخصائص والطرق ) إلا عن طريق الكائن. يتم ذلك عن طريق محددات الوصول أو مستويات الحماية التي تنقسم إلى ثلاثة أقسام :

1- مستوى الحماية الخاص private :

وفيه يتم تعريف الأعضاء التي يتم استخدامها في الصنف ، ولا يمكن الوصول إليها من خارج الصنف.

2- مستوى الحماية المحمي protected :

الأعضاء المعرفة في هذا المستوى تشبه الأعضاء الخاصة غير أنه يمكن توريثها إلى أي صنف آخر.

3- مستوى الحماية العام Public :

وفيه يتم تعريف الأعضاء العامة التي يمكن الوصول إليها من خارج الصنف.

يوجد أيضا تغليف من نوع آخر و هو تغليف الواجهات الرسومية. في الــ windows مثلا, عندما نضغط على زرّ × لإغلاق النافذة, فإنّ النظام يستدعي الدالة WndProc وُيمرر لها الرسالة WM_CLOSE والتي تقابل الرقم 0x10 بنظام العد السداسي عشري أو 16 بالنظام العشري, لكن المُستخدم لا يشعر بما يحدث خلف الكواليس لأنه تم تغليف واجهة النظام و أصبح المستخدم يتعامل مع مجموعة أزرار و نوافذ, و بالتالي تكمن فائدة تغليف الــ GUI في إخفاء التعقيدات عن المستخدم.

السلام عليكم اخوني.

شكرا لكم كثيرا, نعم اعرف ال Encapsulation و ال Classes و التوريث و لكني لم اصل الى الكلاسيس لحد الان و هو درسي القادم لتعلمها ان شاء الله

تعلمت ال ال OOP في لغه ال Ruby لكني وجدتها لغه لا تناسبني ابدا المهم:

خل تنصحوني في البدأ في تعلم ال Classes?

و كم احتاج للبدا في دراسه الواجه الرسوميه و كذلك OpenGl?

شكرا لكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .