هذا هو الدرس الثاني من سلسلة دروس برمجة تطبيقات الآيفون ( لمشاهدة الدرس الأول ) ،في البداية سأتفق معكم على بعض المصطلحات التي سأترجمها هنا، إلا أنني في الشرح سأستخدم المفردات الإنجليزية :
وذلك لأن التعامل مع هذه المصطلحات باللغة الإنجليزية سيكون أسهل لمن درس الحاسب أن يستوعب الدروس بشكل أكبر والنقطة الثانية عندما تتعود على هذه المصطلحات سيكون من السهل عليك عندما تعمل على البرنامج أن تجدها وتستوعب عملها.
نبدأ في الدرس سيكون درس اليوم نظري بحت والتطبيق غير داخل فيه.
عناوين اليوم:
- نظرة عامة عن Object Oriented Programming
- لغة الـ Object-C
- الـ Classes الأساسية والشائعة
المفردات الأساسية في OOP :
- Class :
هو تعريف لمجموعة من البيانات والأكواد وهي تحدد نوع Object
- Instance :
هو المكان الموجود في الذاكرة والذي يحفظ فيه Object من أي نوع من الـ Class
- Method :
هي الـ function التي يطلب منها الـ Object عمل ما
- Instance variable :
جزء محدد من البيانات تنتمي إلى الـ Object
- Encapsulation :
هو التطبيق أو جزء من الكود الذي يكون خاصًا ومفصولاً عن الواجهة Interface
- Polymorphism :
هي عبارة عن Object مختلفة لها نفس الـ Methods
- Inheritance :
أو التوارث هو تنظيم هرمي فيه مشاركة للأكواد و للـ behaviors فالفئة الفرعية subclass تتوارث كل البيانات والتعاريف من الفئة الأساسية Superclass
- Objective-C :
هي لغة مأخوذة في الأساس من الـ C وهي لغة سهلة لكن من ناحية الـ Syntax تقريبا مختلفة ولا تحتاج إلى تحديد نوع للـ Object يكتفى فقط بتعريفها على أنها id يمكن فهم ذلك أكثر في التطبيق.
الأشياء المتغيرة على اللغة من ناحية الشكل النصي Syntax :
- أنواع جديدة: لدينا Class ونوع آخر وهو Selectors والأخير هو الرسائل التي ترسل للـ Object
- الـ Syntax في تعريف الــ Classes
- الـ syntax عند مناداة Function للـ Object
Obj مع OOP
في الـ Objective-C الـ classes والـ Instance كلها عبارة عن objects لكن الـ Class هو عبارة عن النسخة الأساسية التي ينشأ منها الـ Instances وهذه صورة توضيحة:
الـClass تقوم بتعريف Variables والـ Methods or Behaviors عندما نعرف Instance أو Object من الـ Class يمكننا استخدام الـ Method فقط بمناداتها أما بالنسبة Variable فيمكن التعديل عليها فقط من خلال Setter / Getter methods .
الشكل النصي للرسائل المتبادلة (Messaging syntax)
Class and instance methods :
- فلدينا الـ Instance يستجيب للـ instance methods مثال عليها:
-(id) init;
-(float)height;
-(void)walk;
هذه الطرق تسأل عن الطول وتطلب من الـ Instance المشي فنلاحظ أنها كأنها تخاطب شخص بعينه
- ولدينا الـ Class وتستجيب فقد للـ Class methods مثال عليها:
+(id)alloc;
+(id)person;
+(person *)sharedPerson;
نلاحظ هنا أن الـ Methods منها مايطلب إنشاء وتعريف ومشاركة وكلها للـ Object التابع للـ Class وليس في تفاصيل Object نفسه
ويتم التفريق بين الطريقيتين بعلامة – قبل Instance method وعلامة + قبل Class method
كمثال على ماشرح عندما يكون لدينا Class من نوع سيارة فـ Methods التابعة لها هي إنشاء سيارة وتعريف للسيارة ولو أنشأنا Instance فـ Methods التابعة لها نوع السيارة طولها عرضها ولونها وغير ذلك.
الشكل النصي Message :
[receiver message]
[receiver message:argument]
[receiver message:argument1 andArg:argument2]
Person *Khaled;
هنا تعريف لـ Instance وتم تسميته خالد//
[khaled walk];
هنا تم مناداة Method تطلب من خالد المشي //
Int theAge = [khaled age];
هنا طلب من Method أن تعلم كم عمر خالد //
[khaled setAge:23];
أما هنا فطلب تثبيت عمر خالد23 //
أنواع التعاريف للـ Objective-C :
- التعاريف الثابتة و�لمتغيرة (Dynamic and static typing):
عندما نعرف أي Object على أنه ID فهذا تعريف Dynamic ويمكن إعطاء الـ Object أي قيمه وبالأصح فهنا ال Object بلا تعريف وبلا نوع ويكون بالشكل التالي:
id myObject;
أما عندما أعرف الـ Object باسم من Class فعندها نسمي التعريف Static ويكون بالشكل التالي:
Person *myObject;
- النوع الثاني من التعاريف هو Null :
فأي Object قد يحمل النوع أو القيمة Null ويمكن استخدامها في اختبار قيمة Object :
If ( person == nil) return;
أو بطريقة أخرى :
If(!person) return;
ويمكن أيضا أن نساوي Object بقيمة Null :
Person = nil;
[button setTarget:nil];
- أيضا هناك نوع آخر وهو الـ Boolean type :
لتعريف متغير على أنه Boolean فيعرف بالطريقة التالية :
BOOL flag = NO;
ويمكن اختبار المتغير على أنه BOOL بعدة طرق:
If(flag == YES)
If(flag)
If(!flag)
If(flag != YES)
flag= YES;
flag= 1;
- نوع يسمى Selector :
أفضل شرح هذا النوع عند التطبيق ستكون الفكرة أوضح هناك بإذن الله.
التعامل مع الـClasses
يمكن سؤال الـ Object عن نوع الـ Class التي ينتمي لها بهذه الطريقة:
Class myClass = [myObject class];
NSLog(@”MY class is %@”,[myObject className]);
أو أيضًا يمكن اختبار الـ Object هل يتبع إلى Class عامة أو إلى Class خاصة كما في المثاليين:
if ([myObject isKindOfClass:[UIControl class]]) { // something
}
if ([myObject isMemberOfClass:[NSString class]]) { // something string specific
التعامل مع الـ Object
يمكن اختبار أن اثنين من الـ Object هم نفس الـ Object بهذا الـ Syntax :
if (object1 == object2) {
NSLog(@”Same exact object instance”);
}
لكن إذا أردت اختبار اثنين من الـ Object على أنهم مختلفين من ناحية أنهم اثنين وليس واحد ولكن متساويين في القيم:
if ([object1 isEqual: object2]) {
NSLog(@”Logically equivalent, but may
be different object instances”);
}
الـ Classes الأساسية :
- NSObject :
هي Class أساسية تنفذ العديد من الأساسيات كـ إدارة الذاكرة ومساواة الـ Object وغيرها.
- NSString :
تستخدم في الأغراض العامة في ترميز النصوص “Unicode” وأيضاً تستخدم بدلاً عن استخدام char*.
لتعريف String :
NSString *aString = @”Hello World!”;
ولطباعتها نقول
NSString *log = [NSString stringWithFormat: @”It’s %@”, aString];
ونلاحظ هنا أننا نستخدم %@
قبل طباعة الـ String Object Value
بالنسبة للـ NSString تحوي العديد من الـ Methods وغيرها سنتكلم عنها بالتفصيل في الدروس القادمة بإذن الله وفي مرحلة التطبيق.
بهذا نكون قد انتهينا من درسنا الثاني نتمنى أن نراكم في الدروس القادمة.
دمتم بود 🙂
شكرا لك أختي
عندي سؤال هل يمكن عند برمجة تطبيقات الأيفون إستبدال الأيفون بأيبود تاتش طبعا مع وجود الماك أم يجب أن يكون أيفون مع الماك ؟؟؟؟
نعم بالامكان
يعطيك العافية ..
ومتابعين معاك .. وياريت تواصل ..
جزاك الله خيرا ووفقك لما يحبه ويرضى
وارجو المواصلة في ترجمة الشروحات
لا اعرف ماذا اقول ؟؟؟؟!!!
شكراً شكراً شكراً 🙂
كل الشكر أختي روان ونحن معك قلبا وقالباً
اتمنى الاستمرار واقترح بأن يكون هذا العمل على شكل كتاب مطبوع بعد المراجعة والتنقيح فستكون الفائدة عظيمة لك وللمهتمين وتكون اضافة متميزة للمكتبة العربية. جعل الله ما تقدمين في موازين اعمالك
أنا أعرف إن أبل سمحت بالبرمجة باستخدام سي و سي++ .. ولكن هل جميع إمكانيات الأيفون متاحة للتفاعل مع سي++ وكذلك الاس دي كي تبع الايفون
لأنه هناك كثير من مبرمجي السي ++ والمتمكنين سلفا من هذه اللغة
نعم يمكن استخدام الـ c++ مع الـ iphone لكن لعمل احترافي أكثر يفضل استخدام الـ objective-c والفرق بين الـ c++ والـ objective-c هو فقط في الـ syntax فهي مسألة وقت وسيكون استعمالها سهلاً بإذن الله.
ويمكن استخدام الـc++ مع الـ objective-c بتغيير صيغة ملف الـ implementation من .m إلى .mm
مو شرط تغيير اسم امللف، ممكن فورا نستخدم سي ++ مع اوبجكتف
هذا الرابط يساعدك في الفهم أكثر إن شاء الله:
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCPlusPlus.html
شكرا لكم على مجهوداتكم الجبارة وأرجوا منكم أن تستعجلوا لنا في الدروس القادمة إن أمكن .. ولو يكون كل يومين درس حلو مرررررره
بارك الله فيكم وإلى الأمام.
مشكووووووووورين جدا يا رواااااان على الإبداع الكبير الي تقدميه انتي والموقع
واتمنى الإستمرارية وعدم اليأس حتى لو لم يكن هناك متابعين كثر
تأكدوا اننا سوف نتابعكم حتى آخر لحضه
وشكرا مره اخرى
تشكرين روان على المجهود ..