מבוא לשפת Objective C בעברית
![](https://static.wixstatic.com/media/89f8ddf1ff65bd5086123b8856cf9d71.jpg/v1/fill/w_980,h_653,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/89f8ddf1ff65bd5086123b8856cf9d71.jpg)
שפה זו היא שפת שפותחה על ידי אפל, עד שהוחלפה על ידי שפת swift שאגב היא גם מבוססת עליה. שפה זו מגיעה בהמשך לשפת c אך מרחיבה אותה ונונת אפשרות לפיתוח oop עם אובייקטים, ומזה נובע שמה.
זוהי שורה אשר מייבאת בפריית קוד של אפל, לכן זה מקבל < > שעוטף את שם הספריה.
#import <Foundation/Foundation.h>
כל אובייקט בשפה זו, מקבל שתי שלבים, שלב ההדר ושל המימוש.
לפעמים מפרידים את זה לשתי קבצים נפרדים, אחד בסיומת h להדר ו-m לאיפלמנטיישן.
דוגמה ליצירת אובייקט dog:
כאן זה ההדר (interface).
יש לו מתודה bark שמחזירה void (לא מחזירה ערך) וכן אינה סטטית (לכן זה - ולא + בתחילתה).
אח״כ יש מתודה ששמה ערך מספרי בתוך משתנה age.
אח״כ יש הכרזה על המשתנה age, כדי שיהיה ציבורי (במידה ולא נצהיר עליו בהדר, הוא יהיה פרטי ולא נוכל לגשת אליו מחוץ למחלקה).
.@interface Dog: NSObject
-(void) bark;
-(void) setAge: (int) age;
-(int) age;
@end
כאן זה המימוש (implementation) של האובייקט:
הכרזה על המשתנה גיל, מסוג מספר שלם.
הכרזה על המשתנה שם, שהוא מסוג מיוחד, כי מחרוזת אינה טיפוס פרימטיבי.
הכוכבית מסמן שזה מצביא למקום בזיכרון שבוא יש את הערך של התחלת המחרוזת.
נשים לב שהמחרוזת היא משתנה פרטי כיוון שלא הוכרז בהדר.
בהמשך: קבענו שהמתודה bark תדפיס מחרוזת + שם הכלב.
כמו כן קבענו מימוש לפונקציה set.
אח״כ קבענו שהגיל יחזיר את הגיל (בדומה לקופיוטר פרופרטי בשפת swift).
@implementation Dog
{
int age;
NSString *name;
}
-(void) bark
{
NSLog(@"waf waf %@", name);
}
-(void) setAge:(int)a{
age = a;
}
-(int) age{
return age;
}
-(void) setName: (NSString*) n{
name = n;
}
@end
כאן זה הרצה של התוכנית הראשית (main) ויצירת מופע של האובייקט בפועל:
בדומה לשפת c, התוכנית מחזירה 0 כהתוכנית הסתיימה בהצלחה.
הכרזה על משתנה סוג מחלקת הכלב.
הקצאת מקום בזיכרון לאובייקט החדש.
יצירת האובייקט למקום בזיכרון.
בהערה שלאחר מכן, ניתן לראות איך שלושת השלבים האלו נשעים בשורה אחת.
לאחר מכן שמנו מחרוזת לשם הכלב, הפעלנו את המתודה נביחה, שמנו גיל והדפסנו אותו למסך.
אגב על מנת לפנות למשתנה שמצביע לאובייקט, במקום להשתמש בנקודה (dog.age), כמו בשפות אחרות, נשתמש בעטיפה שלהם בסוגרים מרובעות ( [dog age] ) .
int main(int argc, const char * argv[]) {
@autoreleasepool {
Dog *dog;
dog = [Dog alloc];
dog = [dog init];
/*Dog *dog = [[Dog alloc] init];*/
[dog setName:@"snoopy"];
[dog bark];
[dog setAge:40];
NSLog(@"age is %i", [dog age]);
}
return 0;
}