مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

جلسه سیزدهم آموزش iOS: شی گرایی - OOP در iOS چیست؟


اگر تا کنون آموزش های ما را دنبال کرده باشید ، شما باید در حال حاضر بتوانید، اپ آیفون با tab bar ، navigation controller و table view ، با کمک Storyboard ، بسازید.

آیا توانستید ایجاد detail view را برای اپ دستور پخت مدیریت کنید؟ ما ساختار آن اپ را ، مجدداً بررسی خواهیم کرد و به شما نشان خواهیم داد که چگونه می توانیم صفحه جزئیات را بهبود بخشیم. اما قبل از آن ، باید اصول برنامه نویسی شیء گرا را به شما ، معرفی کنیم. در آموزش جلسه بعد ، آن چه را که در این جلسه آموزش می دهیم، بر روی اپ پیاده سازی خواهیم کرد و صفحه detail view را ارتقاء خواهیم داد.

از عبارت “Object Oriented Programming” (برنامه نویسی شیء گرا) یا به اختصار OOP نترسید. این رویکرد، زبان برنامه نویسی جدیدی نیست، بلکه یک مفهوم/تکنیک برنامه نویسی می باشد. ما به عمد، تاکنون مفهوم OOP را ، کنار گذاشته و به آن نپرداخته ایم. رویکرد ما در آموزش ها، ساده نگه داشتن مفاهیم می باشد و به شما نحوه ایجاد اپ را (حتی اگر پیش زمینه برنامه نویسی هم نداشته باشید) نشان می دهیم و قصد نداریم شما را با عبارات فنی ، بترسانیم. با این حال، اکنون زمان آن رسیده است که مفاهیم فنی را تحت پوشش جلسات آموزشی خود ، قرار دهیم. اگر تا اینجا ما را دنبال کرده باشید، به این معناست که شما در یادگیری برنامه نویسی iOS ، مصمم هستید و می خواهید که اپ خود را تا سطوح بالاتر، ارتقاء دهید.

پس همراه باشید تا شروع کنیم!

برخی از تئوری های مربوط به Object Oriented Programming

Objective-C به عنوان زبان Object Oriented Programming  شناخته می شود. OOP روش ساخت نرم افزار کاربردی متشکل از اشیاء می باشد. به عبارت دیگر، بسیاری از کدهایی که ما در اپ نوشته ایم، به چندین طریق، با اشیائی از انواع مختلف، سروکار دارند.

UIViewController، UIButton، UINavigationController و UITableView برخی از اشیاءهایی هستند که با iOS SDK همراه هستند. ما نه تنها از اشیاء داخلی در اپ iOS، خود استفاده می کنیم، بلکه برخی از اشیاء ها را خودمان نیز ، می سازیم، مانند RecipeDetailViewController و SimpleTableCell.

پس چرا OOP؟ یکی از دلایل مهم این است که ما می خواهیم یک نرم افزار پیچیده را به تکه های کوچک تر (یا بلوک های ساختاری) تقسیم کنیم ، که کار توسعه و مدیریت نرم افزار، آسان تر انجام شود. در این جا، تکه های کوچک، اشیاء هستند. هر شیء، مسئولیت خود را دارد و اشیاء با هم همکاری می کنند تا نرم افزار به درستی ، کار کند. این موضوع، مفهوم پایه ای OOP می باشد.

اپ Hello World را ببینید. شیء UIViewController ، مسئول view اپ ، می باشد و به عنوان یک حفره (placeholder) برای کلید Hello World ، عمل می کند. شیء UIButton (یعنی کلید Hello World) ، مسئول نمایش دادن یک کلید استاندارد iOS در صفحه نمایش می باشد و به هر رویداد لمسی، گوش فرا می دهد. شیء UIAlertView، مسئول نمایش دادن پیام هشدار به کاربر می باشد. مهم تر از همه، این اشیاء، برای ایجاد اپ Hello World، باهم همکاری می کنند.

 

 

در برنامه نویسی شیء گرا، یک شیء دو ویژگی را به اشتراک می گذارد: خواص و عملکردها. اجازه دهید ، برای مثال ، یک شیء را در دنیای واقعی در نظر بگیریم- ماشین. یک ماشین، دارای رنگ، مدل، حداکثر سرعت، تولید کننده و غیره است. این موارد ، جزء خصیصه های یک ماشین می باشد. از لحاظ عملکرد ، یک ماشین عملکردهای اصلی مانند شتاب گرفتن ، ترمز زدن ، راندن  و غیره را فراهم کند.

دوباره به دنیای iOS باز می گردیم. بیایید نگاهی هم به خواص و عملکردهای شیء UIButton ، در اپ Hello World ، بیاندازیم:

  • خواص Background ، اندازه، رنگ و فونت، مثالهایی از خواص شیء UIButton می باشند.
  • عملکرد (Functionalities): وقتی که به این کلید ضربه زده می شود، کلید، رویداد ضربه (tap) را سازماندهی کرده و یک پیام هشدار را روی صفحه، نمایش می دهد. از این رو، “ShowMessage”، عملکردی از این  کلید ، می باشد.

در آموزش های ما ، شما همیشه با عبارت “method” (متد)  مواجه هستید. در Objective-C، ما متد را ، برای فراهم کردن عملکردهای یک شیء، ایجاد می کنیم. معمولاً، یک متد ، به یک عملکرد خاصی از یک شیء ، مربوط می شود.

 

Class، Object و Instance

به غیر از متد و شیء ، عبارات دیگری که ممکن است شما با آن مواجه شوید ، instance و class در OOP می باشند.

یک class (کلاس)، به عنوان یک blueprint (طرح) یا prototype (نمونه اولیه) ، برای ایجاد کردن اشیاء ، محسوب می شود. اساساً ، یک کلاس متشکل از خواص و متدها می باشد. بیایید یک کلاس Course را تعریف کنیم. کلاس Course حاوی خواصی مانند نام ، کد درس ، حداکثر تعداد دانش آموزان است. این کلاس ، نشان دهنده طرح یک درس می باشد. ما می توانیم از این کلاس برای ایجاد درس های مختلف، مانند درس برنامه نویسی iOS، با کد درس IPC101 ، درس دوره آشپزی، با کد درس CC101 و غیره ایجاد کنیم. اینجا، درس برنامه نویسی iOS و درس دوره آشپزی، اشیاء مربوط به کلاس Course ، می باشند. برخی اوقات، ما، آنها را به عنوان instance ها (نمونه هایی) از کلاس Course نیز معرفی می کنیم. برای حفظ سادگی ، شما می توانید کلمه نمونه را به عنوان عبارت معادل برای کلمه شیء، در نظر بگیرید.

بررسی مجدد آموزش سفارشی سازی Table Cell

هیچ راه بهتری از استفاده از مثال های کاربردی، برای یادگیری برنامه نویسی، وجود ندارد. پس بیایید آموزش "سفارشی سازی TableCell" را برای آشنایی با مفاهیم OOP ، مجدداً بررسی کنیم.

در متد viewDidLoad ، از آموزش Table Cell، ما سه آرایه را برای ذخیره سازی انواع مختلف داده ها، ایجاد کردیم: نام دستور پخت (recipe name) ، تصاویر بندانگشتی (thumbnail) ، دستور پخت ها (recipe) و مدت زمان پخت (preparation time). اگر مفهوم OOP را متوجه شده باشید، می دانید که این داده ها ، می توانند به عنوان خواص دستور پخت، تعیین شوند.

- (void)viewDidLoad
{
    [super viewDidLoad];
 // Initialize table data
    tableData = [NSArray arrayWithObjects:@"Egg Benedict", @"Mushroom Risotto", @"Full Breakfast", @"Hamburger", @"Ham and Egg Sandwich", @"Creme Brelee", @"White Chocolate Donut", @"Starbucks Coffee", @"Vegetable Curry", @"Instant Noodle with Egg", @"Noodle with BBQ Pork", @"Japanese Noodle with Pork", @"Green Tea", @"Thai Shrimp Cake", @"Angry Birds Cake", @"Ham and Cheese Panini", nil];
    
    // Initialize thumbnails
    thumbnails = [NSArray arrayWithObjects:@"egg_benedict.jpg", @"mushroom_risotto.jpg", @"full_breakfast.jpg", @"hamburger.jpg", @"ham_and_egg_sandwich.jpg", @"creme_brelee.jpg", @"white_chocolate_donut.jpg", @"starbucks_coffee.jpg", @"vegetable_curry.jpg", @"instant_noodle_with_egg.jpg", @"noodle_with_bbq_pork.jpg", @"japanese_noodle_with_pork.jpg", @"green_tea.jpg", @"thai_shrimp_cake.jpg", @"angry_birds_cake.jpg", @"ham_and_cheese_panini.jpg", nil];
    
    // Initialize Preparation Time
    prepTime = [NSArray arrayWithObjects:@"30 min", @"30 min", @"20 min", @"30 min", @"10 min", @"1 hour", @"45 min", @"5 min", @"30 min", @"8 min", @"20 min", @"20 min", @"5 min", @"1.5 hour", @"4 hours", @"10 min", nil];
}

 

خواص نام (یعنی tableData)، تصویر بند انگشتی (یعنی recipe image) و مدت زمان پخت (یعنی prepTime) که همه به دستور پخت مربوط می شوند؛ به جای این که در آرایه های جداگانه ذخیره شوند، بهتر است که یک کلاس Recipe برای مدل سازی یک recipe، ایجاد کرده و همه اطلاعات را در این آرایه ذخیره نماییم.

 

پروژه “Customize Table Cell” را مجدداً بررسی خواهیم کرد و آن را برای استفاده از Recipe class جدید، تغییر خواهیم داد. اگر این آموزش را هنوز مطالعه نکرده اید، به مقالات قبل مراجعه کنید.

ایجاد کلاس Recipe

ابتدا، ما کلاس Recipe را ایجاد خواهیم کرد. روی پوشه SimpleTable کلیک راست کرده و گزینه “New File…” را انتخاب می کنیم. تمپلت “Objective-C class” ، (در بخش Cocoa Touch) را انتخاب کرده و روی کلید “Next” کلیک می کنیم. نام کلاس را “Recipe” قرار می دهیم، که یک زیرکلاس از “NSObject” می باشد. روی کلید “Next” کلیک کرده و فایل را در پوشه پروژه Xcode خود ، ذخیره می کنیم.

هنگامی که کار تمام شد ، Xcode فایل های Recipe.h و Recipe.m را ایجاد خواهد کرد. در فایل header ، خواص کلاس Recipe را اضافه می کنیم:

@interface Recipe : NSObject
 
@property (nonatomic, strong) NSString *name; // name of recipe
@property (nonatomic, strong) NSString *prepTime; // preparation time
@property (nonatomic, strong) NSString *imageFile; // image filename of recipe
 
@end

در فایل پیاده سازی (یعنی Recipe.m)، دستور @synthesis را اضافه می کنیم. دستور @synthesis به کامپایلر می گوید که setter و getter ها را برای دسترسی به خواصی که ما در فایل header ، تعریف کرده ایم ، ایجاد کند.

@implementation Recipe
 
@synthesize name;
@synthesize prepTime;
@synthesize imageFile;
 
@end

اکنون ، ما کلاس Recipe را با سه خصیصه ، ایجاد کرده ایم. بعداً ما از آن ، برای تعریف اشیاء recipe مختلف، استفاده خواهیم کرد. اکنون سؤالی که در ذهن شکل می گیرد، این است: ما چگونه می توانیم آرایه ها را به یک آرایه از اشیاء Recipe ، تبدیل کنیم؟ سه آرایه داده ها را می توان به صورت زیر نشان داد:

با کلاس Recipe جدید ، ما می توانیم ، آرایه ها را به یک آرایه از اشیاء Recipe ، تغییر دهیم؛ به طوری که ، هر شیء، داده recipe را ذخیره کند.

مقداردهی آرایه Recipe Objects

به بخش کد باز می گردیم. به جای این که سه آرایه (tableData, thumbnails, prepTime) ، تعریف کنیم، یک متغیر برای آرایه recipe objects ، تعریف خواهیم کرد.


	@implementation SimpleTableViewController
{
    NSArray *recipes;
}

در متد viewDidLoad از فایل SimpleTableViewController.m ، اشیاء Recipe ( در مجموع 16 اشیاء Recipe) را مقداردهی کرده و آنها را در آرایه “recipes” قرار می دهیم.

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    Recipe *recipe1 = [Recipe new];
    recipe1.name = @"Egg Benedict";
    recipe1.prepTime = @"30 min";
    recipe1.imageFile = @"egg_benedict.jpg";
    
    Recipe *recipe2 = [Recipe new];
    recipe2.name = @"Mushroom Risotto";
    recipe2.prepTime = @"30 min";
    recipe2.imageFile = @"mushroom_risotto.jpg";
    
    Recipe *recipe3 = [Recipe new];
    recipe3.name = @"Full Breakfast";
    recipe3.prepTime = @"20 min";
    recipe3.imageFile = @"full_breakfast.jpg";
    
    Recipe *recipe4 = [Recipe new];
    recipe4.name = @"Hamburger";
    recipe4.prepTime = @"30 min";
    recipe4.imageFile = @"hamburger.jpg";
    
    Recipe *recipe5 = [Recipe new];
    recipe5.name = @"Ham and Egg Sandwich";
    recipe5.prepTime = @"10 min";
    recipe5.imageFile = @"ham_and_egg_sandwich.jpg";
    
    Recipe *recipe6 = [Recipe new];
    recipe6.name = @"Creme Brelee";
    recipe6.prepTime = @"1 hour";
    recipe6.imageFile = @"creme_brelee.jpg";
    
    Recipe *recipe7 = [Recipe new];
    recipe7.name = @"White Chocolate Donut";
    recipe7.prepTime = @"45 min";
    recipe7.imageFile = @"white_chocolate_donut.jpg";
    
    Recipe *recipe8 = [Recipe new];
    recipe8.name = @"Starbucks Coffee";
    recipe8.prepTime = @"5 min";
    recipe8.imageFile = @"starbucks_coffee.jpg";
    
    Recipe *recipe9 = [Recipe new];
    recipe9.name = @"Vegetable Curry";
    recipe9.prepTime = @"30 min";
    recipe9.imageFile = @"vegetable_curry.jpg";
    
    Recipe *recipe10 = [Recipe new];
    recipe10.name = @"Instant Noodle with Egg";
    recipe10.prepTime = @"8 min";
    recipe10.imageFile = @"instant_noodle_with_egg.jpg";
    
    Recipe *recipe11 = [Recipe new];
    recipe11.name = @"Noodle with BBQ Pork";
    recipe11.prepTime = @"20 min";
    recipe11.imageFile = @"noodle_with_bbq_pork.jpg";
    
    Recipe *recipe12 = [Recipe new];
    recipe12.name = @"Japanese Noodle with Pork";
    recipe12.prepTime = @"20 min";
    recipe12.imageFile = @"japanese_noodle_with_pork.jpg";
    
    Recipe *recipe13 = [Recipe new];
    recipe13.name = @"Green Tea";
    recipe13.prepTime = @"5 min";
    recipe13.imageFile = @"green_tea.jpg";
    
    Recipe *recipe14 = [Recipe new];
    recipe14.name = @"Thai Shrimp Cake";
    recipe14.prepTime = @"1.5 hours";
    recipe14.imageFile = @"thai_shrimp_cake.jpg";
    
    Recipe *recipe15 = [Recipe new];
    recipe15.name = @"Angry Birds Cake";
    recipe15.prepTime = @"4 hours";
    recipe15.imageFile = @"angry_birds_cake.jpg";
    
    Recipe *recipe16 = [Recipe new];
    recipe16.name = @"Ham and Cheese Panini";
    recipe16.prepTime = @"10 min";
    recipe16.imageFile = @"ham_and_cheese_panini.jpg";
    
    recipes = [NSArray arrayWithObjects:recipe1, recipe2, recipe3, recipe4, recipe5, recipe5, recipe6, recipe7, recipe8, recipe9, recipe10, recipe11, recipe12, recipe13, recipe14, recipe15, recipe16, nil];
 
}

در Objective-C، ما از متد “new” ( که در واقع متدی است که توسط NSObjects ارائه شده است) برای معرفی یک شیء ، استفاده می کنیم. دو روش برای تنظیم مقدار property ، داریم. در کد بالا، ما از dot-syntax برای تخصیص مقدار ، استفاده می کنیم. برای مثال :

recipe1.name = @"Egg Benedict";

به طور جایگزین، می توانیم، متد setName را با استفاده از علامت براکت ([])، به کار ببریم. کد معادل به این ترتیب است:

[recipe1 setName:@"Egg Benedict"];

هر دو ساختار ، دقیقاً یکسان عمل می کنند. اما، ما از ساختار dot، در طی دوره آموزشی خود، استفاده خواهیم کرد.

جایگزین کردن TableData با آرایه Recipe

چند مورد وجود دارند که ، ما باید آنها را به منظور استفاده از آرایه recipes ، تغییر دهیم. در متد numberOfRowsInSection ، ما ‘tableData” را با “recipes” جایگزین می کنیم:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// DELETE THIS LINE   return [tableData count];
    return [recipes count];
}

در متد “cellForRowAtIndexPath” ، مقادیر  “tableData”، “thumbnails” و “prepTime” را با آرایه Recipe، جایگزین می کنیم:


	- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"SimpleTableCell";
 
    SimpleTableCell *cell = (SimpleTableCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil) 
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    } 
    
    /* DELETE THIS SECTION 
    cell.nameLabel.text = [tableData objectAtIndex:indexPath.row];
    cell.thumbnailImageView.image = [UIImage imageNamed:[thumbnails objectAtIndex:indexPath.row]];
    cell.prepTimeLabel.text = [prepTime objectAtIndex:indexPath.row];
     */
 
    // Locate the current recipe object and assign the label, image & prepTime
    Recipe *recipe = [recipes objectAtIndex:indexPath.row];
    cell.nameLabel.text = recipe.name;
    cell.thumbnailImageView.image = [UIImage imageNamed:recipe.imageFile];
    cell.prepTimeLabel.text = recipe.prepTime;
 
    return cell;
}

همان طور که در کد بالا می بینیم، با تغییر سه آرایه های داده، به آرایه Recipe، خوانایی کد افزایش یافته و قابل فهم تر شده است. اکنون می توانیم اپ خود را اجرا کنیم. خواهید دید که اپ مشابه آن چیزی است که در آموزش “Custom Table Cell” ، ساخته ایم. با این حال، به طور داخلی، کدهای خود را با استفاده از شیء Recipe ، زیبا و تمیزتر کرده ایم.

 

موضوع جلسه بعد چیست؟

امیدواریم که از جلسه امروز خسته نشده باشید. مطالب فوق ، فقط مفاهیم اصلی OOP می باشند. برای کسب مهارت در این زمینه ، باید تمرین و مطالعه بیشتری داشته باشید. در آموزش جلسه بعد ، ما نحوه بهبود صفحه detail view را بر اساس چیزهایی که قبلاً یاد گرفته ایم، نشان خواهیم داد.

فصلِ: 3 , تعداد قسمت ها: 179 , سطح: صفر تا صد

این فصل در یک نگاه:

در این دوره آموزشی ، برنامه نویسی اندروید و ios را با استفاده از زامارین خواهیم آموخت. همچنین به صورت کاملا پروژه محور ، اپلیکیشن فروشگاهی مشابه دیجی کالا را پیاده سازی خواهیم کرد. در انته…
فصلِ: 5 , تعداد قسمت ها: 221 , سطح: صفر تا صد
موضوعات: آموزش IOS

این فصل در یک نگاه:

در این فصل:-نمایش notification به کاربر زمانی که اتفاقاتی از قبیل لایک کردن پست و ... میافتد(این مبحث مبحثی مهم بوده و ج…

  توضیحات کلی دوره: با سلام خوش اومدین به حرفه ای ترین دوره ی Swift ابتدای کار ممکن است سوالی برای شما پیش آید: -من نیازی به ساخت اپلیکیشن اجتماعی ندارم چرا باید این دوره را ببینم؟ ج…
فصلِ: 7 , تعداد قسمت ها: 159 , سطح: صفر تا صد
موضوعات: آموزش IOS

این فصل در یک نگاه:

اپل نویس حرفه ای شوید... با این پکیج کسب درآمد میلیونی کنید....   در این پکیج به نکات ریز و درشت زیادی پرداختیم که خیلی خیلی میتونه به شما کمک کنه که تبدیل به برنامه نویس حرفه ای شوید... …
فصلِ: 12 , تعداد قسمت ها: 126 , سطح: صفر تا صد
موضوعات: آموزش IOS

این فصل در یک نگاه:

فصل 16 فصل آخرمون هست و میایم توی این فصل یه سری مباحث کوچیکی که جامونده و کارهای نهایی برای انتشار برنامه توی مایکت های…

با سلام نکته:هیچ نیازی به mac و یا iphone نیست... نکته:هیچ نیازی به بلد بودن برنامه نویسی از قبل نیست... مباحثی که توی این دوره مرور میکنیم میتونه ما رو از سطح صفر برنامه نویسی ios به صد …
فصلِ: 6 , تعداد قسمت ها: 194 , سطح: صفر تا صد

این فصل در یک نگاه:

در این فصل آپدیت های مربوط به دوره را قرار میدهیم…

با سلام و خسته نباشد خدمت کلیک سایتی های عزیز در ادامه با توضیحات مختصری درمورد دوره ی react native با ما همراه باشید: React Native چیست؟ قطعا یکی از آرزوهای برنامه نویسان این میباشد که ب…
فصلِ: 5 , تعداد قسمت ها: 51 , سطح: صفر تا صد

این فصل در یک نگاه:

اموزش پرداخت درون برنامه ای بازار در یونیتی-اموزش خرید سکه در بازی-اموزش خرید مصرفی و غیر مصرفی…

توضیحات کلی مجموعه: آموزش مقدماتی تا پیشرفته یونیتی(ساخت بازی توپ چرخنده-اموزش بازی دوبعدی-اموزش بازی سه بعدی اول شخص شوتر-اموزش بازی سه بعدی رالی (ماشین سواری))   سرفصلهای دوره: نصب ی…
فصلِ: 2 , تعداد قسمت ها: 68 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ساخت یک فروشگاه کوچک-آموزش کار با bottom navigation -آموزش کار با تب بار-آموزش کار با scrollview - آموزش کار با ان…

توضیحات کلی مجموعه: آموزش دوره فلاتر از پایه تا پیشرفته(این دوره به دوره متخصص فلاتر تغییر پیدا کرد) درسال های گذشته تعدا زیادی فریمورک معرفی شد که هرکدام تجربه خاص خودش رو داشت،اما فلاتر …
فصلِ: 5 , تعداد قسمت ها: 25 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل پنجم…

توضیحات کلی مجموعه: درباره گیت: لذت پیش بردن پروژه های برنامه نویسی خود را با بهترین ورژن کنترل سیستم جهان تجربه کنید کامل ترین دوره ی آموزشی گیت و گیت هاب به همراه مثال های کاربردی گی…

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید