Objective C

لە چاوگ
پێداچوونەوی ‏٠٠:٥٦، ١٠ی ئایاری ٢٠١٥ لە لایەن هیوا (لێدوان | بەشدارییەکان) (بەردوامی دەستکاریکردن)

ئەم فێرکاریە لە فێرکاریەکانی ئەپڵ بۆ پەرەپێدەرانی وەرگیراوە.

ئۆبجێکتیڤ سی (ئ.سی) زمانی سەرەکی نوسینی پرۆگرامە بۆ سیستمی OS X و iOS. بۆخۆشی گروپێکی گەورەترە لە زمانی پرۆگرامکردنی سی و توانای دابینکردنی پرۆگرامکردنی هەیە لەسەر شێوازی تەنخواز، Object Oriented. مەبەستمان لە وشەی تەنخواز بە کوردی ئەو شێوازی پرۆگرامکردنە کە پرۆگرامی نوسراو زۆرتر لە شت یان تەندا جۆر بکەین و بەکاریان بهێنین. ئەم فێرکاریە جێگای ڕوونکردنەوەی زیاتری تەنخوازی نیە.

ئۆبجێکتیڤ سی، دەق، جۆرە سەرەتاییەکان و کۆنترۆڵی ئەنجامدانەکانی زمانی سی وەرگرتوە و شێوازی دەق syntaxی پێناسەی پۆل class و مێتۆد methodەکانی بۆ زیاد کراوە. هەروەها لە ئاستی زمانەکەشدا پشتیوانی لە ڕێکخستنی گراف زیادکراوە زۆرێک کرداری تر کە لە سیدا لە کاتی کۆمپایڵکردندا ئەنجام ئەدران پشتگوێخراوە بۆ کاتی خستنەگەڕ.

جۆرەکانی داتا datatypes

پەڕگە فەرمیەکانی ئەپڵ دووپاتی ئەکاتەوە کەوا جۆرەکانی نرخی گۆڕاو، ئەوەی بە scalar variable type لە زمانی سی لە ئ.سی'یشدا هەیە:

int someInteger = 42;
float someFloatingPointNumber = 3.1415;
double someDoublePrecisionFloatingPointNumber = 6.02214199e23;

ئەوەی لە ئ.سی'دا تایبەتە بەم جۆرە داتا سادانە، ئەوەیە کە لە کاتێکدا لە ناو ڕیز Array یان کۆمەڵە collectionێکدا بەکاریان بهێنین ناچار ئەبین بیانکەین بە تەن Object بۆیە بۆ هەریەک لەمانە جۆرێک پۆل هەن کە بتوانن ئەو جۆرە داتا سەرەتاییانە لەخۆیان بگرن. بۆ نمونە int ئەکرێ لەناو NSInteger و float و doubleیش لەناو NSNumberدا هەڵبگیرێن کە بە لە قاوغنانی داتا ئەکرێ ناو بهێنرێن یان بە ئینگلیزی data encapsulation. ئەم نمونانەی خوارەوە ببینە:

NSNumber *magicNumber = [[NSNumber alloc] initWithInt:42];
NSNumber *unsignedNumber = [[NSNumber alloc] initWithUnsignedInt:42u];
NSNumber *longNumber = [[NSNumber alloc] initWithLong:42l];
 
NSNumber *boolNumber = [[NSNumber alloc] initWithBOOL:YES];
 
NSNumber *simpleFloat = [NSNumber numberWithFloat:3.14f];
NSNumber *betterDouble = [NSNumber numberWithDouble:3.1415926535];
 
NSNumber *someChar = [NSNumber numberWithChar:'T'];

ئەگەر بە وردی سەیر بکەین هەموو نمونەکانی سەرەوە بە دامەزرێنەر initializerی وەک initWith دروستکراون کە دواتر باسیان ئەکەین. بەڵام ئەوەی گرنگە لە ئ.سیدا گرنگیەکی یەکجار زۆر بەم دامەزرێنەرانە ئەدرێت جا چ لەو جۆرە یان لە جۆری کارگەکەدا بن وەک لە کاتی دروستکردنی نوسە Stringدا:

NSString *firstString = [[NSString alloc] initWithCString:"Hello World!"
                                                 encoding:NSUTF8StringEncoding];
NSString *secondString = [NSString stringWithCString:"Hello World!"
                                            encoding:NSUTF8StringEncoding];
NSString *thirdString = @"Hello World!";

لەسەرەوە هەمان نوسە بە سێ شێوە دروستکران:١. بە دامەزرێنەری پۆلەکە ٢. کردارێکی کارگە یان ٣. شێوازی دەقی پرۆگرام خۆی.

پێناسەکردنی پۆل (class)

پێناسەی زمانەکە درێژتر و بابەتەکە یەکجار فراوانە. مەبەست لەم فێرکاریە نیشاندانی سەرەتای نوسینی پرۆگرامی سادەیە بۆیە ئەچینە سەر نمونە. پۆل classێک بەناوی SimpleClass لە ئ.سی بەم شێوەیە دروست ئەکرێت:

@interface SimpleClass : NSObject
 
@end

لە ئ.سی لەبەر ئەوەی زۆربەی بەشەکانی پرۆگرام جۆرێکن لە پۆل، بۆیە هەموو پۆلێکیش بۆخۆی سەربە پۆلی سەروو هەموانن کە پۆلی NSObject خۆیەتی. بۆیە لە پێناسەکەی سەرەوە SimpleClass : NSObject نوسراوە. پۆلەکەش بە زاراوەی interface بە پێشگری ئەت @ دروست ئەکرێ و بە زاراوەی endیش کۆتایی دێت.

لە هەموو شتێک گرنگترە وەک لە زمانی C++دا ئەکرێ هەموو پۆلێک لە دوو پەڕگەی جیاوازدا هەڵگرین کە یەکێکیان سەرپەڕ و ئەویتریش کۆدەکە لەخۆی ئەگرێ. بۆ نمونە پۆلی Person ئەکرێ لە دوو پەڕگەی Person.h و پەڕگەی Person.mدا هەڵبگیرین. لە سەرپەڕەدا پێناسە گشتیەکان و لە ناوپەڕەشدا تەواوی پرۆگرامەکە ئەنوسینەوە. دواتر ئەمە ڕوونتر ئەکەینەوە.

تایبەتمەندیەکان properties

گەر بڕیاربێ پۆلێک دروست بکەین پێناسەی مرۆڤ بکات، ئەوا پێویستمان بە دوو نوسە String ئەبێ کە پێناسەی ناو و نازناوی پێ بکەین، ئەوکاتە ئەکرێ تۆ تایبەتمەندی property بۆ پۆلەکەمان پێناسە بکەین بەم شێوەیە. هێمای * لە زمانەکانی سی و سی++دا بۆ "هێماکەر" pointer بەکاردێ کە دیسان جێگای ڕوونکردنەوە لەم فێرکاریەدا نابێتەوە.

@interface Person : NSObject

@property NSString *firstName;
@property NSString *lastName;

@end

لە دوو دەستەواژە زیادکراوەکەدا: زاراوەی property پێناسەکردنی field یان بوارێکە بۆ پۆلەکە لە زمانێکی وەک جاڤادا، لە سیدا دیسان بە تایبەتمەندی ئەناسرێت, NSStringیش بۆخۆی پۆلێکی تایبەتی زمانی ئ.سی بۆ هەڵگرتنی نوسە String و هێمانی * وەک وتمان هێماکەرە کە هەموو پۆلێک لە ئ.سی دا ئەبێ لەپێشی دانرێت و دواجاریش ناوی تایبەتمەندیەکە دێ کە firstName یان lastNameە. هەردوو ناوەکە بۆخۆی جۆرێک لە ستانداردی نوسینی پرۆگرامکردن لە ئ.سی دا نیشان ئەدەن کە عادەتەن گۆڕاو variable ئەبێ بە پیتی بچووک دەست پێ بکات و دوای تەواوبوونی وشەیەک وشەی دوەم پیتی یەکەمی گەورەبێت واتە first+Name بەو شێوەیە.

تایبەتمەندیەکی گرنگ کە لە ئ.سی'دا هەیە دیاری کردنی جۆری 'تایبەتمەندی'ەکانە. واتە چۆن ئەکرێ کەسێک ناوی خۆی نەکرێ بگۆڕدرێ، ئەکرێ دیاری بکرێ کە propertyیەک چ جۆرە گۆڕانێکی بەسەردا بێت، هەروەها لەبەر ئەوەی ئ.سی لەبواری مۆبایلدا بەکاردێ گرنگی یەکجار ئەدرێ بە جۆری بیرگە. لێرەشدا ئەکرێ دیاری بکرێ کە ئایا 'تەن'ێک کامە بەشی لە بیرگەدا بۆ چەندە بمێنێتەوە. با نمونەیەک باس کەین:

@interface Person : NSObject
@property (readonly) NSString *firstName;
@property (readonly) NSString *lastName;
@end

لێرەدا هەمان نمونەی سەرەوە، بەڵام دیاریمان کردوە کە ناو و نازناو نەگۆڕدرێ و تەنها بخوێنرێتەوە. جۆرەکانی تری تایبەتمەندێتی لەجێگای خۆی باس ئەکەین. لە ئێستادا گرنگە بزانین کە هەندێ لە جۆرەکانی داتای سەرەتایی وەک بوڵ BOOL تەنها دەستنیشان assign ئەکرێ چونکە تەن نین بەم شێوەیە:

@interface Person : NSObject
@property (readonly) NSString *firstName;
@property (readonly) NSString *lastName;
@property (assign) BOOL alive;
@end

کردار function

لە زمانی سی و زمانەکانی دیدا پێناسەکردنی کردارێک ئاسانە و بەم جۆرەیە:

void SomeFunction();

لە ئ.سی دا جیاواز لە زمانەکانی تر گرنگیەکی تایبەت بە کردار دراوە. لە ئ.سی دا هەمان کردار زۆر هاوشێوەیە و ئاوا پێناسە ئەکرێت:

- (void)someMethod;

لەم ناساندنە ئاسانەشدا تێبینی ئەکەین کە نیشانەی کەم/داش هەیە لەپێش کردارەکە کە بە کۆمپایڵەر (وەرگێڕ)ەکەمان ئەڵێ کە ئاگاداربە ئەمە کردارێکی نمونەیەکەی تەنە object instance method. ئیتر ئەوانی تری ئەبێ ئاشکرابێت لای فێرخواز. زاراوەی void لە زۆربەی زمانەکاندا بەهەمان شێوە بەکاردێ و مانای بەتاڵی هەیە.

بۆماوەیی inheritance

وەک هەموو زمانە تەنخوازەکانی تر، ئ.سی'یش پشتیوانی تەواو ئەکات لە بۆماوەیی پۆلەکان. وەک لەسەرەوە نیشاندرا پۆلی Person تەواوی تایبەتمەندی propteryیەکانی NSObject بۆماوەتەوە و هەر پۆلێکشی کە سەر بە کەس Personبێت بۆ نمونە Teacher ئەوا تایبەتمەندیەکانی Personی بۆ ئەمێنێتەوە. لە وێنەکەی خوارەوەدا نیشانی ئەدەین کە چۆن دوگمەیەکی سەر ئایفۆنەکەت بریتیە لە چەن بۆمانەوەیەک تا ئەگاتەوە سەر سەرپۆل NSObjectی زمانی ئ.سی:

وێنەیەکی نیشاندانی بۆمانەوە، پۆلێکی UIButton چۆن ئەگەڕێتەوە سەر سەرپۆلی NSObject

لە نمونەی پۆلی Personدا ئەگەر مامۆستا دروست بکەین، ئاوا بۆمانەوەکە نیشان ئەدەین:

#import "Person.h"

@interface Teacher : Person
 
@end

ئەوکات ئەبێ لەناو پێناسەکەدا وەک لە C++دا دەستەواژەی import بەکار ئەهێنین تا وەرگێڕ compiler ئاگادار بێت باسی کام پۆل ئەکەین. لە نمونەکەی پێشتردا بۆخۆی NSObject ناسراوە لە بنەڕەتدا بۆیە پێویستی بە ناساندن نیە.

دابینکردنی ناوەڕۆکی پۆل

(ئەم بابەتە لەژێر دەستکاری دایە)