Wed
10
Oct
1:20 am

In this article i review the new W960i Sony Ericsson mobile phone .

i captured this video at Gitex 2007 , and the phone will be avilable in ME at the end of this year.

Sony Ericsson W960i

Here is some the features of W960i:

Size
  • 109 x 55 x 16 mm
  • 4.3 x 2.1 x 0.6 inches
Weight
  • 119 gr
  • 4.2 oz
Available colors
Screen
  • 262,144 color touchscreen
  • 240×320 pixel
Memory
  • Phone memory 8 GB

to see full list of features : W960i Features

I think Sony Ericsson answers Apple

سلسلة C# و البرمجة الغرضية التوجه

هذه السلسلة لا تبدأ من الصفر إلى النهاية لتعلمك البرمجة غرضية التوجه مع C# بل هي تسليط للضوء على بعض النقاط للتعامل مع OOP في C# , اذا كنت مبتدأاً او لا تعلم شيئا عن مبادئ البرمجة غرضية التوجه او C# فلا انصحك بمتابعة هذه السلسلة , يمكنك ان تبحث عن مقالات على الانترنت او في الكتب تشرح لك مفاهيم OOP .

ملاحظة : اية سلسلة اطرحها او طرحتها لا اعني بها اني ملتزم بأن أكمل حتى النهاية او اتابع بها بشكل دوري فللحياة مشاغلها لذا اعذروني.

بسم الله الرحمن الرحيم

ماذا ستتعلم من هذا الدرس :

سيكون هذا الدرس شرحا لبعض ميزات لغة C Sharp و التي ستستخدمها عندما تريد الاستفادة من خصائص البرمجة غرضية التوجه (Object Oriented Programming (OOP)) و تحديدا انا اقصد الوراثة Inheritance.

هذا الدرس مطبق على :

  • Microsoft Visual Studio .NET 2005
  • Windows XP Professional SP2

مقدمة :

لغة البرمجة C# من اللغات الحديثة و قد بنيت هذه اللغة منذ الصفر لتستفيد من خصائص البرمجة غرضية التوجه , حاولت C# ان تضيف و تجمع في تعريفها للـOOP معظم الميزات المتاحة في اللغات غرضية التوجه ( و حتى بعض الميزات الموجودة في لغات ليست غرضية التوجه مثل Visual Basic ) و بالمقابل تخلت عن بعض امور الـ OOP التي تسبب تعقيدا للمبرمج او انها تستخدم نادرا( مثل الوراثة المتعددة حيث تسمح C++ للصنف Class بأن يرث من أكثر من صنف Class بينما في C# لا يمكن للصنف Class ان يرث سوى من صنف Class واحد )

في هذا الدرس سنتحدث عن الطرائق الافتراضية (Virtual Methods) و إخفاء الطرائق (Hiding Methods) في C# . (اقصد بالطريقة Method هي إما إجرائية Procedure او دالة Function )

الشرح:

الطرائق الافتراضية Virtual Methods :

 

عندما تستخدم الوراثة (Inheritance) فإنه على الأغلب سيكون لديك صنف أب (Base Class)

و صنف ابنDerived Class) ) و سيكون لديك على الأغلب دالة او إجرائية في الصنف الاب

و ترغب بأن تعطي هذه الدالة وظيفة أخرى في الصنف الابن مع الحفاظ مع اسمها , هنا يأتي دور الكلمة المحجوزة virtual استخدام هذه الكلمة المحجوزة مع اية طريقة Method في الصنف الاب يتيح لنا ان نتخطى Override هذه الدالة و نستخدمها بوظائفية ثانية في الصنف الابن لكنك مضطر هنا ان تستخدم الكلمة المحجوزة override قبل اسم الدالة في الصنف الابن

مثال على ذلك :

class MyBaseClass

{

public virtual string VirtualMethod()

{

return “This method is virtual and defiend in MyBaseClass”;

}

}

class MyDrivedClass : MyBaseClass

{

public override string VirtualMethod()

{

return “This method is an override and defiend in MyDrivedClass”;

}

}

في المثال السابق أنشأنا صنفا أب هو MyBaseClass و عرفنا فيه الدالة VirtualMethod و وضعنا الكلمة المحجوزة virtual في تعريف الدالة لنتمكن من تخطيها في الصنف الابن

ثم أنشأنا الصنف الابن MyDrivedClass الذي يرث من الصنف MyBaseClass

و عرفنا فيه الدالة VirtualMethod و وضعنا في تعريفها الكلمة المحجوزة override لنقوم بتخطيها و تعديل عملها في الصنف الابن

و بالتالي اصبح لدينا صنفين احدهما أب و الاخر ابن و فيهما دالتان متطابقتان من ناحية التعريف لكنهما مختلفتان وظيفيا

إخفاء الطرائق Hiding Methods :

إخفاء الطرائق يحدث عندما تعرف دالة في الصنف الاب لكنك لا تضع في تعريفها الكلمة المحجوزة virtual

ثم تقوم بوضع دالة متطابقة من ناحية التعريف مع الدالة السابقة في الصنف الابن لكنها مختلفة معها وظائفيا كما في المثال التالي:

class MyBaseClass

{

public string HidenMethod()

{

return “This method is an Hiden and defiend in MyBaseClass”;

}

}

class MyDrivedClass : MyBaseClass

{

public string HidenMethod()

{

return “This method is an Hiden and defiend in MyDrivedClass”;

}

}

حسنا ستعمل معك الشيفرة السابقة لكن من الافضل ان تستخدم الطرائق الافتراضية و تقوم بـ override

كما أن القيام بإخفاء الطرائق قد يؤدي إلى حصول أخطاء في استدعاء الدالة المناسبة لذا يظهر لك مترجم الـ C# رسالة تنبيه عند تنفيذ برنامجك تنبهك إلى ان قيامك بذلك ستسبب بعملية إخفاء للدالة

أهلا بكم نلتقي الان مع الجزء الثاني من سلسلة الظواهر المدهشة في الجز الاول تحدثت عن مشكلة التعامل مع اعداد الفاصلة العائمة في هذا الجزء نتحدثعن ظاهرة جديدة فلنبدأ انظر معي للشيفرة التالية:

byte x = 1;
byte y = 2;
byte z = x + y;

قد تقول في نفسك ما هذه الشيفرة السخيفة مجرد جمع عددين ؟ سأسألك سؤالا بسيطا ماذا سينتج عند تنفيذ الشيفرة السابقة , ربما ستجيب بكل بساطة نحن نعرف متحولا اسمه x من النوع byte و نسند له القيمة 1 و نعرف متحولا اخر اسمه y من النوع byte و نسند له القيمة 2 ثم نعرف متحولا ثالثا z من النوع byte أيضا و نسند له ناتج جمع القيم في المتحولين x و y اي 1+2 و بالتالي ستكون القيمة المخزنة في هذا المتحول هي 3 . أسف لأني سأخيب ظنك ناتج تنفيذ الشيفرة السابقة هو أنها لن تنفذ أصلا لأن مترجم اللغة Compiler سيعطي رسالة خطأ عند ترجمة الشيفرة و ستتوقف عملية الترجمة و بالتالي لن يتم التنفيذ , نص الرسالة هو

” Cannot implicitly convert type ‘int’ to ‘byte’. An explicit conversion exists (are you missing a cast?) “

كما توضح الصورة التالية: int2byeErr قد تستغرب من نص الرسالة السابقة فهي تقول انه لا يمكن للمترجم أن يقوم بعملية تحويل ضمني (مباشر) من النوع int (الذي هو ناتج الجمع) إلى النوع byte (و الذي هو نوع المتحول z الذي نخزن فيه نتيجة الجمع) و انه ان كنت فعلا تنوي التحويل من int إلى byte فعليك ان تستخدم دوال او طرق التحويل بنفسك. حسنا أشعر بوقع الصدمة التي تحسها , ربما تقول في نفسك من اين اتى النوع int أصلا؟ نحن قمنا بجمع متحولين كل منهما من نوع byte قيمة الأول 1 و قيمة الثاني 2 و كان الناتج هو الرقم 3 و بما ان مجال الارقام للنوع byte هو من 0 إلى 255 فبالتالي هو قادر على على استيعاب العدد 3 الذي نتج عن الجمع فلماذا كان ناتج الجمع من النوع int ؟ هممم قد يكون هذا الكلام منطقيا لكن مترجم اللغة له رأي أخر النوع byte يتألف كما يشير اسمه من 1 Byte اي 8 bit و عندما نجمع رقمين من النوع byte نكون نجمع 8 bit مع 8 bit و سيكون على الأغلب من غير الممكن وضع قيمة ناتج هذا الجمع في 8 bit اي Byte واحد لذا يقوم المترجم بالتعامل مع القيمة الناتجة على انها من النوع int لذا لتجاوز هذه المشكلة يكون عليك إما أن تقوم بتحويل الناتج من int إلى byte باستخدام إحدى طرائق تحويل البيانات لكن انتبه هذا قد يكلفك خسارة بعض البيانات او الحصول على نتائج غير دقيقة لأنك تحول من نوع أكبر إلى نوع أصغر الحل الأخر و الأفضل أن تخزن الناتج في متحول من نوع يتسع له مثل int أو long فتكون الشيفرة بعد التعديل:

byte x = 1;
byte y = 2;
int z = x + y;

نلتقي في الجزء الثالث مع حالة جديدة.

تمام كوجان في 06/10/2007 ُ
Email : TammamKoujan@Gmail.com
يجوز نشر هذه المقالة أو أجزاء منها بشرط المحافظة على اسم الكاتب و ذكر المصدر
Thu
4
Oct
5:51 am
مجموعة من الصور التي ألتقطتها (ما عدا الصورة الاولى فلست انا الذي التقطتها)
Tue
2
Oct
6:39 am
فيديو اخر من تصويري لمدينة حماة الرائعة
Mon
1
Oct
7:37 am
رغم أنني لم أنته من عرض مقاطع الفيديو التي التقطتها في رحلتي لسوريا لكن فضلت أن اعرض بعض مقاطع الفيديو التي التقطها منتصف الشهر الماضي في معرض جيتكس 2007 حيث شاركت مع شركتي في المعرض الذي استمر لمدة خمسة أيام. الفيديو التالي يتحدث عن مشروع مترو دبي الذي سينتهي في العام 2007
Wed
5
Sep
5:52 am
فيديو أخر من تصويري
Tue
28
Aug
4:35 am
فيديو أخر من تصويري
Mon
27
Aug
7:11 pm
اهلا بكم اعود إليكم من إجازتي القصيرة لكن المليئة بكثير من الأمور منها الجميل و منها المحزن هناك الكثير لأكتبه و هناك الكثير لأعرضه لكن كالعادة سأكتب على قدر ما يتوفر لي من الوقت و الفراغ نبدأ الان بمقطع فيديو صورته لمدينتي حماة خلال الاجازة
Thu
2
Aug
8:10 am
في اللحظة التي تقرؤون فيها هذه الرسالة تكون طائرتي قد انطلقت باتجاه سوريا حيث سأقضي إجازة قصيرة ستكون فرصة لأن أنعش نفسيتي و أجددها حيث سأقوم بالسياحة و التجول في كثير من المناطق السورية الجميلة خلال هذه الفترة سأخذ أجازة من المدونة أيضا لكن عندما أعود سيكون في جعبتي الكثير و قد تكون هذه الإجازة فرصة لأتحدث عما سيمر معي و ان اضع بعض المواضيع و الاخبار الحية عن سوري و بالتالي ترقبوا مواضيع مدونتي من سوريا لمن يسأل كيف يتم نشر الموضوع في اللحظة التي تكون فيها طائرتي محلقة في الجو أقول أني استخدمت خاصية النشر الالي للمواضيع و هي ميزة رائعة في مدونات ووردبرس اخر وصية ريكا بلاش لعب هنا و انا مش موجود ادعوا لي بالتوفيق