ภาษาอ็อบเจกทีฟ-ซี (อังกฤษ: Objective-C หรือ ObjC) เป็นภาษาโปรแกรมเชิงวัตถุและมี โดยแรกเริ่ม ภาษาอ็อบเจกทีฟ-ซี พัฒนาขึ้นจากภาษาซีโดยยังคงคุณลักษณะของภาษาซีไว้ครบทุกประการเพียงแต่เพิ่มระบบส่งข้อความ (messaging) แบบเดียวกับภาษาสมอลล์ทอล์กเข้าไปเท่านั้น (Objective-C runtime) ปัจจุบันภาษาอ็อบเจกทีฟ-ซีมีคุณสมบัติอื่นๆเพิ่มเติมจากการพัฒนาภาษาอ็อบเจกทีฟ-ซี 2.0 โดยบริษัทแอปเปิล
กระบวนทัศน์ | , การเขียนโปรแกรมเชิงวัตถุ |
---|---|
Brad Cox และ | |
ผู้พัฒนา | ปัจจุบัน บริษัทแอปเปิล, มูลนิธิซอฟต์แวร์เสรี, |
เริ่มเมื่อ | พ.ศ. 2529 |
รุ่นเสถียร | |
ระบบชนิดตัวแปร | , , |
เว็บไซต์ | developer |
gcc, | |
ได้รับอิทธิพลจาก | |
ภาษาสมอลทอล์ค, ภาษาซี | |
ส่งอิทธิพลต่อ | |
, Java, Objective-J, |
ปัจจุบันภาษาอ็อบเจกทีฟ-ซีถูกใช้มากใน ใน Mac OS X, และ เป็นต้น ซึ่งระบบเหล่านี้ได้รับการพัฒนาขึ้นโดยมีพื้นฐานจากมาตรฐาน ใน โดยมีภาษาอ็อบเจกทีฟ-ซีเป็นภาษาหลัก ปัจจุบัน Mac OS Xใช้ Cocoa เป็นเฟรมเวิร์กสำหรับสร้างโปรแกรมประยุกต์ โดย ไลบรารีและ/หรือ API เหล่านี้เป็นเพียงส่วนเพิ่มขยาย () เท่านั้น โปรแกรมที่ใช้ภาษาอ็อบเจกทีฟ-ซีทั่วไปที่ไม่ได้ใช้ส่วนเพิ่มขยายเหล่านี้ก็ยังสามารถคอมไพล์ได้ เช่นอาจใช้แต่ gcc ซึ่งรองรับภาษาอ็อบเจกทีฟ-ซี
ประวัติ
ในช่วงต้นของปี 1980s วิศวกรรมซอฟต์แวร์นิยมออกแบบโปรแกรมแบบโครงสร้าง เรานิยามการออกแบบโปรแกรมแบบโครงสร้างขึ้นเพื่อแยกย่อยโปรแกรมขนาดใหญ่ลงเป็นส่วนเล็กๆ เพื่อให้ง่ายต่อการจัดการเมื่อโปรแกรมมีขนาดใหญ่ขึ้น อย่างไรก็ดี โปรแกรมแบบโครงสร้างก็มีประโยชน์น้อยลงเมื่อขนาดของปัญหาใหญ่ขึ้น เพราะต้องเขียน procedure จำนวนมากเพื่อรองรับปัญหาที่ใหญ่ขึ้น และทำให้รหัสคำสั่งมีความซับซ้อนและยุ่งเหยิง
ทางเลือกหนึ่งสำหรับแก้ปัญหาดังกล่าวคือการเขียนโปรแกรมเชิงวัตถุ ที่จริงแล้วภาษาสมอลล์ทอล์กก็ได้แก้ไขข้อบกพร่องในกระบวนการวิศวกรรมซอฟต์แวร์เหล่านี้ แต่ในอดีตสมอลทอล์คก็มีปัญหาในแง่ของความเร็วและการใช้หน่วยความจำมากเนื่องจากคอมพิวเตอร์ในสมัยก่อนมีข้อจำกัดมากกว่าในปัจจุบัน
ในต้นยุค 80 Brad Cox และ ได้ให้พัฒนาภาษาอ็อบเจ็กทีฟ-ซีขึ้นที่บริษัท ของพวกเขา โดยพวกเขาได้เรียนรู้ภาษาสมอลล์ทอล์กจาก Programming Technology Center ของบริษัท ITT Corporation ในปีค.ศ. 1981 Cox ให้ความสนใจกับปัญหาเรื่องการนำรหัสมาใช้ซ้ำ (reusability) ในกระบวนการวิศวกรรมซอฟต์แวร์ เขาคิดว่าภาษาสมอลล์ทอล์กไม่เหมาะจะใช้พัฒนา development environment สำหรับนักพัฒนาซอฟต์แวร์ระบบที่ ITT Cox เริ่มแก้ไขคอมไพเลอร์ภาษาซี โดยเพิ่มความสามารถด้านการจัดการเชิงวัตถุของภาษาสมอลล์ทอล์กเข้าไป โดยเขาเรียกมันว่า "OOPC" หมายถึง Object-Oriented Programming in C ในขณะนั้น Love ซึ่งทำงานให้กับ Schlumberger Research ในปี 1982 ก็ได้มีโอกาสใช้งาน Smalltalk-80 ซอฟต์แวร์ซึ่งส่งอิทธิพลต่อการพัฒนาภาษาอ็อบเจกทีฟ-ซีในเวลาต่อมา
และเพื่อแสดงประสิทธิภาพ Cox ได้แสดงให้เห็นว่าการปรับปรุงเครื่องมือที่มีอยู่แล้วเพียงเล็กน้อยก็สามารถทำ software component ให้ปรับเปลี่ยนได้ง่ายๆ โดยการทำ object ให้ยืดหยุ่นและสนับสนุนด้วยชุดไลบรารีซึ่งประกอบด้วยรหัสและรีซอร์ส ที่รวมกันอยู่ในรูปแบบที่สามารถนำไปใช้ข้าม platform ได้
Cox และ Love ได้ก่อตั้ง Productivity Products International (PPI) เพื่อขายคอมไพเลอร์ภาษาอ็อบเจกทีฟ-ซีและคลาสไลบรารีในเวลาต่อมา
ในปีค.ศ. 1986 Cox ได้ตีพิมพ์หนังสือที่อธิบายถึงภาษาอ็อบเจกทีฟ-ซีชื่อ Object-Oriented Programming, An Evolutionary Approach ซึ่งแม้ว่า Cox จะได้พยายามชี้ให้ว่าปัญหาหลักคือการนำรหัสมาใช้ซ้ำ (reusability) มากกว่าจะเป็นการแก้ปัญหาด้วยภาษา แต่กระนั้น Objective-C ก็ยังถูกนำไปเรียบเทียบแบบฟีเจอร์ต่อฟีเจอร์กับภาษาอื่นๆอยู่ดี
แพร่หลายเพราะ NeXT
ในปีค.ศ. 1988 บริษัท NeXT ซึ่งตั้งขึ้นโดย Steve Jobs ได้ลิขสิทธิ์จาก StepStone (เจ้าของเครื่องหมายการค้าภาษาอ็อบเจกทีฟ-ซีในขณะนั้น) โดยได้พัฒนาคอมไพเลอร์ภาษาอ็อบเจกทีฟ-ซีและชุดไลบรารี ของตัวเองโดยนำมาใช้พัฒนาระบบติดต่อผู้ใช้และระบบพัฒนาซอฟต์แวร์ชื่อ NEXTSTEP ถึงแม้ว่าเครื่อง NeXT จะขายไม่ดี แต่เครื่องมือพัฒนาของมันกลับได้รับความนิยมพอสมควร และในที่สุด NeXT ก็เลิกขายฮาร์ดแวร์ และหันมาขายซอฟต์แวร์แทน ภายใต้ชื่อ NeXTstep และ OpenStep
โครงการกนู ได้พัฒนาระบบพัฒนาซอฟต์แวร์หนึ่งตามมาตรฐาน OpenStep ในรูปแบบซอฟต์แวร์เสรี โดย Dennis Glatting ได้พัฒนา gnu-objc runtime ตัวหนึ่งขึ้นในปี 1992 โดย Richard Stallman ได้เขียนอีกตัวขึ้นแทนในเวลาไล่เลี่ยกัน ส่วน GNU Objective-C runtime ตัวที่ถูกใช้งานตั้งแต่ 1993 พัฒนาโดย Kresten Krab Thorup เมื่อเขาเป็นนักเรียนมหาวิทยาลัยในเดนมาร์ค
หลังจากที่ซื้อกิจการของ NeXT ในปี 1996 Apple ได้ใช้ OpenStep ในระบบปฏิบัติการของตนเองหรือ Mac OS X โดยได้รวมเอาภาษาอ็อบเจกทีฟ-ซีและระบบพัฒนาซอฟต์แวร์จาก NeXT ชื่อ Project Builder ซึ่งถูกแทนที่โดย Xcode ในเวลาต่อมา รวมถึงระบบออกแบบระบบการติดต่อผู้ใช้แบบ object ชื่อ Interface Builder และ Apple เรียกไลบรารีซึ่งพัฒนาต่อจาก OpenStep ว่า Cocoa
วากยสัมพันธ์
ภาษาอ็อบเจกทีฟ-ซี เป็นชั้นบางๆ บน C และเป็น สตริกต์ superset ของ C ดังนั้นคอมไพเลอร์ภาษาอ็อบเจกทีฟ-ซีจึงสามารถคอมไพล์โปรแกรมภาษา C ใดๆ ก็ได้ ภาษาอ็อบเจกทีฟ-ซี ได้รับรูปแบบการเขียนมาจากภาษาซีและภาษาสมอลล์ทอล์ก โดยรูปแบบส่วนใหญ่ (preprocessing, expressions, การประกาศฟังค์ชัน และการเรียกฟังค์ชัน) มาจากภาษาซี ขณะที่ส่วนที่เป็นการจัดการเชิงวัตถุมาจากสมอลทอล์ค
Messages
ภาษาอ็อบเจกทีฟ-ซีได้เพิ่มเติมรูปแบบการเขียนโปรแกรม เพื่อรองรับการออกแบบโปรแกรมเชิงวัตถุ โดยจะใช้การส่ง message ไปยัง object ต่างๆเช่นเดียวกับสมอลทอล์ค ซึ่งแตกต่างจากภาษาในตระกูล Simula (เช่น C++) ข้อแตกต่างมีมีความสำคัญ เพราะภาษาอ็อบเจกทีฟ-ซีจะไม่เรียก method แต่จะส่ง message
ในภาษาอ็อบเจกทีฟ-ซี ถ้ามี object หนึ่งชื่อ obj
โดย class มี method ชื่อ doSomething
หมายความว่า obj
respond หรือตอบสนองต่อ message doSomething
และถ้าเราต้องการจะส่ง message doSomething
ไปยัง obj
เราจะเขียนคำสั่งดังนี้
[obj doSomething];
ขณะที่ถ้าเป็น C++ เราจะเขียนว่า
obj.doSomething () ;
Forwarding
ในภาษาอ็อบเจกทีฟ-ซีจะยอมให้มีการส่ง message ไปยัง object ใดๆ แม้ว่าจะไม่มีการเตรียม method เอาไว้รองรับ (คือไม่ respond) ต่างจากภาษาอื่นๆ เช่น C++ หรือ Java ที่การเรียกใช้ method ต้องมีการระบุไว้ล่วงหน้า หาก object ได้รับ message ที่ไม่รู้จัก object จะผ่านต่อ message ที่ได้รับไปยัง method เหล่านี้
- (retval_t) forward:(SEL) sel :(arglist_t) args; // with GCC - (id) forward:(SEL) sel :(marg_list) args; // with NeXT/Apple systems
method เหล่านี้อาจแตกต่างกันไปตามชนิดของ runtime และมักนิยมผ่านต่อไปยัง method อื่นๆในระดับของ framework เช่น forwardInvocation: ใน OpenStep
อินเตอร์เฟซ และ อิมพลีเมนเทชัน
ในภาษาอ็อบเจกทีฟ-ซี ส่วนอินเตอร์เฟซ (@interface) และอิมพลีเมนเทชัน (@implementation) จะถูกแยกออกจากกัน ในทางปฏิบัติ เรามักเก็บส่วนอินเตอร์เฟซไว้ในแฟ้ม .h และส่วนอิมพลีเมนเทชันใน .m
@interface
เรามักนิยามส่วนอินเตอร์เฟซของคลาสในแฟ้ม .h โดยทั่วไปเรามักตั้งชื่อแฟ้มนี้ให้ตรงหรือสอดคล้องกับชื่อของคลาส เช่นถ้าคลาสเราชื่อ Thing
เราก็มักจะประกาศอินเตอร์เฟซของคลาส Thing
ในแฟ้ม Thing.h
รูปแบบของการประกาศอินเตอร์เฟซมีลักษณะดังนี้:
@interface classname : superclass name { instance variables } + classMethod1; +(return_type) classMethod2; +(return_type) classMethod3: (param1_type) parameter_varName; -(return_type) instanceMethod1: (param1_type) param1_varName : (param2_type) param2_varName; -(return_type) instanceMethod2WithParameter: (param1_type) param1_varName andOtherParameter: (param2_type) param2_varName; @end
method แบบ instance จะถูกนำหน้าด้วยเครื่องหมายลบ "-" ส่วน method แบบ class จะถูกนำหน้าโดยเครื่องหมายบวก "+" ตรงนี้จะแตกต่างจาก ซึ่งใช้ในแสดงว่า method เป็นแบบ private หรือ public
ค่าที่ถูก return จาก method มีลักษณะเช่นเดียวกับในภาษาซี เช่น void, int, ฯลฯ โดยจะมีการประกาศ type ชื่อ id ไว้แทน instance อ็อบเจกอะไรก็ได้
เราประกาศพารามิเตอร์ของ method ด้วยเครื่องหมายทวิภาคหรือโคลอน ":" ตามด้วย type ของพารามิเตอร์ในวงเล็บ แล้วตามด้วยชื่อของพารามิเตอร์ เรามักใส่ชื่อที่มีความสอดคล้องกับพารามิเตอร์หน้าเครื่องหมายทวิภาค เพื่อบอกว่าพารามิเตอร์แต่ละตัวมีบทบาทอย่างไร
-(void) setRange: (int) start : (int) end; -(void) importDocumentWithName: (NSString *) name withSpecifiedPreferences: (Preferences *) prefs beforePage: (int) insertPage;
@implementation
ส่วนอินเตอร์เฟซจะประกาศแต่ต้นแบบของ method เท่านั้น โดยไม่รวมถึงการกำหนดว่า method นั้นจะต้องทำอะไรบ้าง การกำหนดว่า method นั้นจะต้องทำอะไรจะทำในส่วนอิมพลีเมนเทชัน ตามปรกติ ส่วนอิมพลีเมนเทชันจะอยู่ในไฟล์นามสกุล .m ตัวอย่างเช่น Thing.m
ที่มีการกำหนดส่วนอิมพลีเมนเทชันไว้ดังนี้
@implementation classname + classMethod { // implementation } - instanceMethod { // implementation } @end
method มีหน้าตาแตกต่างจากฟังค์ชันในภาษา C เช่นถ้าในภาษาซีเป็นอย่างนี้
int do_something (int i) { return square_root (i) ; }
โดยมี int do_something (int)
เป็นต้นแบบ
เมื่อมาประกาศเป็น method ในภาษาอ็อบเจ็กทีฟ-ซี จะมีหน้าตาอย่างนี้
- (int) do_something: (int) i { return [self square_root: i]; }
ถ้าให้ถูกธรรมเนียมเราจะกำหนดชื่อ method ข้างต้นใหม่ โดยเราจะตั้งชื่อ method ให้สอดคล้องกับ argument ตัวแรกดังนี้
- (int) doSomethingWithInt: (int) i { return [self squareRootOfInt:i]; }
แม้ว่าอาจจะดูยุ่งยากแต่ก็ช่วยให้เราจำ argument ได้ง่ายขึ้น ตัวอย่างเช่น
- (int) changeColorWithRed: (int) r green: (int) g blue: (int) b
โดยเราจะเรียก method แบบนี้:
[myColor changeColorWithRed:5 green:2 blue:6];
คอมไพเลอร์ภาษาอ็อพเจ็กทีฟ-ซีแต่ละตัวก็จะกำหนดชื่อ method เป็นการภายในแตกต่างกันไป เช่นถ้า method -changeColorWithRed:green:blue:
เป็น method แบบ instance ของ class Color
คอมไพเลอร์ก็อาจจำ method นี้ในชื่อ _i_Color_changeColorWithRed_green_blue
เป็นต้น โดยตัว i
จะบอกว่าจุดนี้คืออิมพลีเมนเทชัน method แบบ instance และตามด้วยชื่อคลาสและชื่อ method และมีการเปลี่ยนเครื่องหมาย : เป็น _ ดังนี้แล้ว เมื่อพารามิเตอร์เป็นส่วนหนึ่งของชื่อ method ลำดับของพารามิเตอร์ในภาษาอ็อบเจ็กทีฟ-ซีจึงสลับที่กันไม่ได้
อย่างไรก็ตาม เราแทบไม่ได้ใช้ชื่อภายในของฟังชั่นโดยตรง โดยทั่วไป การส่ง message จะถูกเปลี่ยนให้อยู่ในรูปแบบของการเรียกฟังค์ชั่นที่กำหนดไว้ในไลบราลีส่วน run-time และปรกติเวลาเราส่ง message เราก็จะไม่คำนึงถึง class ที่แท้จริงของส่วน receiver (myColor
) อยู่แล้ว นั่นคือการจัดการหา method จะเป็นหน้าที่ของ run-time
Objective-C 2.0
เป็นส่วนเพิ่มเติมวากยสัมพันธ์จากภาษา Objective-C โดยบริษัท Apple เป็นผู้พัฒนาเพิ่มเช่น
- (ทั้งนี้ ใน Objective-C runtime ของ GNU สามารถใช้งาน Boehm-Demers-Weiser conservative garbage collector ได้ก่อนหน้า Objective-C 2.0 แล้ว)
- Properties (@property) ช่วยจัดการการประกาศ instance variable
- Fast enumeration การเพิ่มประสิทธิภาพในส่วน runtime
for (int i=0; i<[thePeople count]; i++) { Person *p = [thePeople objectAtIndex:i]; NSLog (@"%@ is %i years old.", [p getName], [p getAge]) ; } for (Person *p in thePeople) NSLog (@"%@ is %i years old.", [p getName], [p getAge]) ;
Objective-C++
เป็นส่วนเพิ่มภาษาที่ช่วยให้รวม code Objective-C และ เข้าด้วยกันง่ายขึ้น
คอมไพเลอร์
- gcc
- POC มีจุดเด่นเช่นการรองรับ block แบบ smalltalk
อ้างอิง
- Cox, Brad J. (1991). Object Oriented Programming: An Evolutionary Approach. Addison Wesley. ISBN .
- http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/doc/uid/20000050-forwardInvocation_
- . คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2009-06-18. สืบค้นเมื่อ 2009-01-01.
- http://www.gnustep.org/resources/documentation/Developer/Base/ProgrammingManual/manual_3.html
- Apple, Inc. (2007). "Fast Enumeration". สืบค้นเมื่อ 2008-06-09.
{{}}
: ไม่รู้จักพารามิเตอร์|=
ถูกละเว้น ((help)) - . คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2010-11-24. สืบค้นเมื่อ 2009-01-01.
- http://clang.llvm.org/
- . คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2008-08-02. สืบค้นเมื่อ 2008-12-30.
wikipedia, แบบไทย, วิกิพีเดีย, วิกิ หนังสือ, หนังสือ, ห้องสมุด, บทความ, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม, มือถือ, โทรศัพท์, Android, iOS, Apple, โทรศัพท์โมบิล, Samsung, iPhone, Xiomi, Xiaomi, Redmi, Honor, Oppo, Nokia, Sonya, MI, PC, พีซี, web, เว็บ, คอมพิวเตอร์
phasaxxbeckthif si xngkvs Objective C hrux ObjC epnphasaopraekrmechingwtthuaelami odyaerkerim phasaxxbeckthif si phthnakhuncakphasasiodyyngkhngkhunlksnakhxngphasasiiwkhrbthukprakarephiyngaetephimrabbsngkhxkhwam messaging aebbediywkbphasasmxllthxlkekhaipethann Objective C runtime pccubnphasaxxbeckthif simikhunsmbtixunephimetimcakkarphthnaphasaxxbeckthif si 2 0 odybristhaexpepilObjective Ckrabwnthsn karekhiynopraekrmechingwtthuBrad Cox aelaphuphthnapccubn bristhaexpepil mulnithisxftaewresri erimemuxph s 2529runesthiyrrabbchnidtwaepr ewbistdeveloper wbr apple wbr com wbr library wbr archive wbr documentation wbr Cocoa wbr Conceptual wbr ProgrammingWithObjectiveC wbr Introduction wbr Introduction wbr htmlgcc idrbxiththiphlcakphasasmxlthxlkh phasasisngxiththiphltx Java Objective J pccubnphasaxxbeckthif sithukichmakin in Mac OS X aela epntn sungrabbehlaniidrbkarphthnakhunodymiphunthancakmatrthan in odymiphasaxxbeckthif siepnphasahlk pccubn Mac OS Xich Cocoa epnefrmewirksahrbsrangopraekrmprayukt ody ilbrariaela hrux API ehlaniepnephiyngswnephimkhyay ethann opraekrmthiichphasaxxbeckthif sithwipthiimidichswnephimkhyayehlanikyngsamarthkhxmiphlid echnxacichaet gcc sungrxngrbphasaxxbeckthif siprawtiinchwngtnkhxngpi 1980s wiswkrrmsxftaewrniymxxkaebbopraekrmaebbokhrngsrang eraniyamkarxxkaebbopraekrmaebbokhrngsrangkhunephuxaeykyxyopraekrmkhnadihylngepnswnelk ephuxihngaytxkarcdkaremuxopraekrmmikhnadihykhun xyangirkdi opraekrmaebbokhrngsrangkmipraoychnnxylngemuxkhnadkhxngpyhaihykhun ephraatxngekhiyn procedure canwnmakephuxrxngrbpyhathiihykhun aelathaihrhskhasngmikhwamsbsxnaelayungehying thangeluxkhnungsahrbaekpyhadngklawkhuxkarekhiynopraekrmechingwtthu thicringaelwphasasmxllthxlkkidaekikhkhxbkphrxnginkrabwnkarwiswkrrmsxftaewrehlani aetinxditsmxlthxlkhkmipyhainaengkhxngkhwamerwaelakarichhnwykhwamcamakenuxngcakkhxmphiwetxrinsmykxnmikhxcakdmakkwainpccubn intnyukh 80 Brad Cox aela idihphthnaphasaxxbeckthif sikhunthibristh khxngphwkekha odyphwkekhaideriynruphasasmxllthxlkcak Programming Technology Center khxngbristh ITT Corporation inpikh s 1981 Cox ihkhwamsnickbpyhaeruxngkarnarhsmaichsa reusability inkrabwnkarwiswkrrmsxftaewr ekhakhidwaphasasmxllthxlkimehmaacaichphthna development environment sahrbnkphthnasxftaewrrabbthi ITT Cox erimaekikhkhxmiphelxrphasasi odyephimkhwamsamarthdankarcdkarechingwtthukhxngphasasmxllthxlkekhaip odyekhaeriykmnwa OOPC hmaythung Object Oriented Programming in C inkhnann Love sungthanganihkb Schlumberger Research inpi 1982 kidmioxkasichngan Smalltalk 80 sxftaewrsungsngxiththiphltxkarphthnaphasaxxbeckthif siinewlatxma aelaephuxaesdngprasiththiphaph Cox idaesdngihehnwakarprbprungekhruxngmuxthimixyuaelwephiyngelknxyksamarththa software component ihprbepliynidngay odykartha object ihyudhyunaelasnbsnundwychudilbrarisungprakxbdwyrhsaelarisxrs thirwmknxyuinrupaebbthisamarthnaipichkham platform id Cox aela Love idkxtng Productivity Products International PPI ephuxkhaykhxmiphelxrphasaxxbeckthif siaelakhlasilbrariinewlatxma inpikh s 1986 Cox idtiphimphhnngsuxthixthibaythungphasaxxbeckthif sichux Object Oriented Programming An Evolutionary Approach sungaemwa Cox caidphyayamchiihwapyhahlkkhuxkarnarhsmaichsa reusability makkwacaepnkaraekpyhadwyphasa aetkrann Objective C kyngthuknaiperiybethiybaebbfiecxrtxfiecxrkbphasaxunxyudi aephrhlayephraa NeXT inpikh s 1988 bristh NeXT sungtngkhunody Steve Jobs idlikhsiththicak StepStone ecakhxngekhruxnghmaykarkhaphasaxxbeckthif siinkhnann odyidphthnakhxmiphelxrphasaxxbeckthif siaelachudilbrari khxngtwexngodynamaichphthnarabbtidtxphuichaelarabbphthnasxftaewrchux NEXTSTEP thungaemwaekhruxng NeXT cakhayimdi aetekhruxngmuxphthnakhxngmnklbidrbkhwamniymphxsmkhwr aelainthisud NeXT kelikkhayhardaewr aelahnmakhaysxftaewraethn phayitchux NeXTstep aela OpenStep okhrngkarknu idphthnarabbphthnasxftaewrhnungtammatrthan OpenStep inrupaebbsxftaewresri ody Dennis Glatting idphthna gnu objc runtime twhnungkhuninpi 1992 ody Richard Stallman idekhiynxiktwkhunaethninewlaileliykn swn GNU Objective C runtime twthithukichngantngaet 1993 phthnaody Kresten Krab Thorup emuxekhaepnnkeriynmhawithyalyinednmarkh hlngcakthisuxkickarkhxng NeXT inpi 1996 Apple idich OpenStep inrabbptibtikarkhxngtnexnghrux Mac OS X odyidrwmexaphasaxxbeckthif siaelarabbphthnasxftaewrcak NeXT chux Project Builder sungthukaethnthiody Xcode inewlatxma rwmthungrabbxxkaebbrabbkartidtxphuichaebb object chux Interface Builder aela Apple eriykilbrarisungphthnatxcak OpenStep wa Cocoawakysmphnthphasaxxbeckthif si epnchnbang bn C aelaepn strikt superset khxng C dngnnkhxmiphelxrphasaxxbeckthif sicungsamarthkhxmiphlopraekrmphasa C id kid phasaxxbeckthif si idrbrupaebbkarekhiynmacakphasasiaelaphasasmxllthxlk odyrupaebbswnihy preprocessing expressions karprakasfngkhchn aelakareriykfngkhchn macakphasasi khnathiswnthiepnkarcdkarechingwtthumacaksmxlthxlkh Messages phasaxxbeckthif siidephimetimrupaebbkarekhiynopraekrm ephuxrxngrbkarxxkaebbopraekrmechingwtthu odycaichkarsng message ipyng object tangechnediywkbsmxlthxlkh sungaetktangcakphasaintrakul Simula echn C khxaetktangmimikhwamsakhy ephraaphasaxxbeckthif sicaimeriyk method aetcasng message inphasaxxbeckthif si thami object hnungchux obj ody class mi method chux doSomething hmaykhwamwa obj respond hruxtxbsnxngtx message doSomething aelathaeratxngkarcasng message doSomething ipyng obj eracaekhiynkhasngdngni obj doSomething khnathithaepn C eracaekhiynwa obj doSomething Forwarding inphasaxxbeckthif sicayxmihmikarsng message ipyng object id aemwacaimmikaretriym method exaiwrxngrb khuxim respond tangcakphasaxun echn C hrux Java thikareriykich method txngmikarrabuiwlwnghna hak object idrb message thiimruck object caphantx message thiidrbipyng method ehlani retval t forward SEL sel arglist t args with GCC id forward SEL sel marg list args with NeXT Apple systems method ehlanixacaetktangkniptamchnidkhxng runtime aelamkniymphantxipyng method xuninradbkhxng framework echn forwardInvocation in OpenStep xinetxrefs aela ximphliemnethchn inphasaxxbeckthif si swnxinetxrefs interface aelaximphliemnethchn implementation cathukaeykxxkcakkn inthangptibti eramkekbswnxinetxrefsiwinaefm h aelaswnximphliemnethchnin m interface eramkniyamswnxinetxrefskhxngkhlasinaefm h odythwiperamktngchuxaefmniihtrnghruxsxdkhlxngkbchuxkhxngkhlas echnthakhlaserachux Thing erakmkcaprakasxinetxrefskhxngkhlas Thing inaefm Thing h rupaebbkhxngkarprakasxinetxrefsmilksnadngni interface classname superclass name instance variables classMethod1 return type classMethod2 return type classMethod3 param1 type parameter varName return type instanceMethod1 param1 type param1 varName param2 type param2 varName return type instanceMethod2WithParameter param1 type param1 varName andOtherParameter param2 type param2 varName end method aebb instance cathuknahnadwyekhruxnghmaylb swn method aebb class cathuknahnaodyekhruxnghmaybwk trngnicaaetktangcak sungichinaesdngwa method epnaebb private hrux public khathithuk return cak method milksnaechnediywkbinphasasi echn void int l odycamikarprakas type chux id iwaethn instance xxbeckxairkid eraprakaspharamietxrkhxng method dwyekhruxnghmaythwiphakhhruxokhlxn tamdwy type khxngpharamietxrinwngelb aelwtamdwychuxkhxngpharamietxr eramkischuxthimikhwamsxdkhlxngkbpharamietxrhnaekhruxnghmaythwiphakh ephuxbxkwapharamietxraetlatwmibthbathxyangir void setRange int start int end void importDocumentWithName NSString name withSpecifiedPreferences Preferences prefs beforePage int insertPage implementation swnxinetxrefscaprakasaettnaebbkhxng method ethann odyimrwmthungkarkahndwa method nncatxngthaxairbang karkahndwa method nncatxngthaxaircathainswnximphliemnethchn tamprkti swnximphliemnethchncaxyuiniflnamskul m twxyangechn Thing m thimikarkahndswnximphliemnethchniwdngni implementation classname classMethod implementation instanceMethod implementation end method mihnataaetktangcakfngkhchninphasa C echnthainphasasiepnxyangni int do something int i return square root i odymi int do something int epntnaebb emuxmaprakasepn method inphasaxxbeckthif si camihnataxyangni int do something int i return self square root i thaihthukthrrmeniymeracakahndchux method khangtnihm odyeracatngchux method ihsxdkhlxngkb argument twaerkdngni int doSomethingWithInt int i return self squareRootOfInt i aemwaxaccaduyungyakaetkchwyiheraca argument idngaykhun twxyangechn int changeColorWithRed int r green int g blue int b odyeracaeriyk method aebbni myColor changeColorWithRed 5 green 2 blue 6 khxmiphelxrphasaxxpheckthif siaetlatwkcakahndchux method epnkarphayinaetktangknip echntha method changeColorWithRed green blue epn method aebb instance khxng class Color khxmiphelxrkxacca method niinchux i Color changeColorWithRed green blue epntn odytw i cabxkwacudnikhuxximphliemnethchn method aebb instance aelatamdwychuxkhlasaelachux method aelamikarepliynekhruxnghmay epn dngniaelw emuxpharamietxrepnswnhnungkhxngchux method ladbkhxngpharamietxrinphasaxxbeckthif sicungslbthiknimid xyangirktam eraaethbimidichchuxphayinkhxngfngchnodytrng odythwip karsng message cathukepliynihxyuinrupaebbkhxngkareriykfngkhchnthikahndiwinilbraliswn run time aelaprktiewlaerasng message erakcaimkhanungthung class thiaethcringkhxngswn receiver myColor xyuaelw nnkhuxkarcdkarha method caepnhnathikhxng run timeObjective C 2 0epnswnephimetimwakysmphnthcakphasa Objective C odybristh Apple epnphuphthnaephimechn thngni in Objective C runtime khxng GNU samarthichngan Boehm Demers Weiser conservative garbage collector idkxnhna Objective C 2 0 aelw Properties property chwycdkarkarprakas instance variable Fast enumeration karephimprasiththiphaphinswn runtimefor int i 0 i lt thePeople count i Person p thePeople objectAtIndex i NSLog is i years old p getName p getAge for Person p in thePeople NSLog is i years old p getName p getAge Objective C epnswnephimphasathichwyihrwm code Objective C aela C ekhadwyknngaykhunkhxmiphelxrgcc POC micudednechnkarrxngrb block aebb smalltalkxangxingCox Brad J 1991 Object Oriented Programming An Evolutionary Approach Addison Wesley ISBN 0 201 54834 8 http developer apple com documentation Cocoa Reference Foundation Classes NSObject Class Reference Reference html apple ref doc uid 20000050 forwardInvocation khlngkhxmulekaekbcakaehlngedimemux 2009 06 18 subkhnemux 2009 01 01 http www gnustep org resources documentation Developer Base ProgrammingManual manual 3 html Apple Inc 2007 Fast Enumeration subkhnemux 2008 06 09 a href wiki E0 B9 81 E0 B8 A1 E0 B9 88 E0 B9 81 E0 B8 9A E0 B8 9A Cite web title aemaebb Cite web cite web a imruckpharamietxr thuklaewn help khlngkhxmulekaekbcakaehlngedimemux 2010 11 24 subkhnemux 2009 01 01 http clang llvm org khlngkhxmulekaekbcakaehlngedimemux 2008 08 02 subkhnemux 2008 12 30