Presentation is loading. Please wait.

Presentation is loading. Please wait.

Objective-C First Part adapted from a presentation by Kevin Layer.

Similar presentations


Presentation on theme: "Objective-C First Part adapted from a presentation by Kevin Layer."— Presentation transcript:

1

2 Objective-C First Part adapted from a presentation by Kevin Layer

3 Main Points  A Bit of History  Main Features  Some Examples

4 Overview  Objective-C is an object oriented language.  follows ANSI C style coding with methods from Smalltalk  There is no formal written standard – Relies mostly on libraries written by others  Flexible almost everything is done at runtime. – Dynamic Binding – Dynamic Typing – Dynamic Linking

5 Inventors  Objective-C was invented by two men, Brad Cox and Tom Love.  Both were introduced to Smalltalk at ITT in 1981  Cox thought something like Smalltalk would be very useful to application developers  Cox modified a C compiler and by 1983 he had a working Object-oriented extension to C called OOPC.

6 Development  Tom Love acquired a commercial copy of Smalltalk-80 while working for Schlumberger Research  With direct access Smalltalk, Love added more to OOPC making the final product, Objective-C.  In 1986 they release Objective-C through their company “Stepstone”

7 NeXT and NeXTSTEP  In 1988 Steve Jobs acquires Objective-C license for NeXT  Used Objective-C to build the NeXTSTEP Operating System  Objective-C made interface design for NeXTSTEP much easier  NeXTSTEP was derived from BSD Unix  In 1995 NeXT gets full rights to Objective- C from Stepstone

8 OPENSTEP API  Developed in 1993 by NeXT and Sun  An effort to make NeXTSTEP-like Objective-C implementation available to other platforms.  In order to be OS independent – Removed dependency on Mach Kernel – Made low-level data into classes  Paved the way for Mac OS X, GNUstep

9 Apple and Mac OS X  NeXT is taken over by Apple in 1996 and put Steve Jobs and his Objective-C libraries to work  Redesigned Mac OS to use objective-C similar to that of NeXTSTEP  Developed a collection of libraries named “Cocoa” to aid GUI development  Release Mac OS X (ten), which was radically different than OS 9, in March 2001

10 The Cocoa API  Primarily the most frequently used frameworks nowadays.  Developed by Apple from NeXTSTEP and OPENSTEP  Has a set of predefined classes and types such as NSnumber, NSstring, Nsdate, etc.  NS stands for NeXT-sun  Includes a root class NSObject where words like alloc, retain, and release come from

11 Dynamic Language  Almost everything is done at runtime  Uses dynamic typing, linking, and binding  This allows for greater flexibility  Minimizes RAM and CPU usage

12 To Import or Include?  C/C++’s #include will insert head.h into the code even if its been added before.  Obj-C’s #import checks if head.h has been imported beforehand. #import head.h

13 Messages  Almost every object manipulation is done by sending objects a message  Two words within a set of brackets, the object identifier and the message to send.  Because of dynamic binding, the message and receiver are joined at runtime [Identifier message ]

14 Basic syntax structure C++ syntax Objective-C syntax void function(int x, int y, char z); Object.function(x, y, z); -(void) function:(int)x, (int)y, (char)z; [Object function:x, y, z];

15 Keyword: id  The word ‘id’ indicates an identifier for an object much like a pointer in c++  This uses dynamic typing  For example, if Pen is a class… id myPen; myPen = [Pen new ];

16 Memory Allocation  Objects are created dynamically through the keyword, “alloc”  Objects are dynamically deallocated using the words “release” and “autorelease”  autorelease dealocates the object once it goes out of scope.  NOTE: None of these words are built-in

17 Ownership  Objects are initially owned by the id that created them.  Like C++ pointers, multiple IDs can use the same object.  However, like in C++ if one ID releases the object, then any remaining pointers will be referencing invalid memory.  A method like “retain” can allow the object to stay if one ID releases it.

18 Prototyping functions  When declaring or implementing functions for a class, they must begin with a + or -  + indicates a “class method” that can only be used by the class itself. In other words, they’re for private functions.  - indicates “instance methods” to be used by the client program (public functions).

19 Class Declaration (Interface) #import @interface Node : NSObject { Node *link; int contents; } +(id)new; -(void)setContent:(int)number; -(void)setLink:(Node*)next; -(int)getContent; -(Node*)getLink; @end node.h

20 Class Definition (Implementation) #import "node.h” @implementation Node +(id)new { return [Node alloc];} -(void)setContent:(int)number {contents = number;} -(void)setLink:(Node*)next { [link autorelease]; link = [next retain]; } -(int)getContent {return contents;} -(Node*)getLink {return link;} @end node.m

21 C++VS. Objective-C  Adds OOP, metaprogramming and generic programming to C  Comes with a std library  Has numerous uses  Large and complex code for OOP  Only adds OOP to C  Has no standard library; is dependant on other libraries  Mostly used for application building  Simpler way of handling classes and objects

22 Objective-C 2.0  In October 2007, Apple Inc. releases Objective-C 2.0 for Mac OS 10.5 (Leopard)  Adds automatic garbage collection  Instance Methods (public functions) are defined differently using @property

23 linkList class #import "linkList.h" @implementation linkList +(id)new {return [linkList alloc];} -(void)insert:(int)value { id temp = [Node new]; [temp setContent:value]; [temp setLink:head]; head = [temp retain]; [temp release]; } -(void)append:(int)value { id last = [head getLink]; while ([last getLink] != nil) {last = [last getLink];} id temp = [Node new]; [temp setContent:value]; [last setLink:temp]; [temp release]; } -(void)remove { id temp = head; head = [head getLink]; [temp release]; } -(int)getValue { return [head getContent];} @end linkList.m

24 Stack class #import "linkList.h” @interface Stack : linkList {} +(id)new; -(void)push:(int)value; -(int)pop; @end #import "stack.h” @implementation Stack +(id)new {return [Stack alloc];} -(void)push:(int)value {[self insert:value];} -(int)pop { int ret = [self getValue]; [self remove]; return ret; } @end stack.h stack.m

25 Example: main.c #import "stack.h” int main(){ Stack *s = [Stack new]; [s push:1]; [s push:2]; printf("%d\t", [s pop]); [s push:3]; printf("%d\t", [s pop]); [s release]; return 0; } main.c

26 Example 1 #import int main (int argc, const char * argv[]) { NSString *testString; testString = [[NSString alloc] init]; testString = @"Here's a test string in testString!"; NSLog(@"testString: %@", testString); return 0; }

27 The Interface @interface SimpleCar : NSObject { NSString* make; NSString* model; NSNumber* vin; } // set methods - (void) setVin: (NSNumber*) newVin; - (void) setMake: (NSString*) newMake; - (void) setModel: (NSString*) setModel; - (void) setMake: (NSString*) newMake Model: (NSString*) newModel; // get methods - (NSString*) make; - (NSString*) model; - (NSNumber*) vin; @end

28 Implementation @implementation SimpleCar // set methods - (void) setVin: (NSNumber*) newVin { [vin release]; vin = [[NSNumber alloc] init]; vin = newVin; } - (void) setMake: (NSString*) newMake { [make release]; make = [[NSString alloc] initWithString:newMake]; } - (void) setModel: (NSString*) newModel { [model release]; model = [[NSString alloc] initWithString:newModel]; }

29 Implementation Continued - (void) setMake: (NSString*) newMake Model: (NSString*) newModel { // Reuse our methods from earlier [self setMake:newMake]; [self setModel:newModel];

30 Implementation continued … // get methods - (NSString*) make { return make; } - (NSString*) model { return model; } - (NSNumber*) vin { return vin; } @end


Download ppt "Objective-C First Part adapted from a presentation by Kevin Layer."

Similar presentations


Ads by Google