Object Oriented Programming: Objective-C
Object Oriented Programming: Objective-C
Objective-C
CS 331
21 April 2008
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
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.
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”
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
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
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
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
Dynamic Language
Almost everything is done at runtime
Uses dynamic typing, linking, and
binding
This allows for greater flexibility
Minimizes RAM and CPU usage
To Import or Include?
#import head.h
C++ syntax
void function(int x, int y, char z);
Object.function(x, y, z);
Objective-C syntax
-(void) function:(int)x, (int)y, (char)z;
[Object function:x, y, z];
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…
extern id Pen;
id myPen;
myPen = [Pen new ];
(Cox, 59)
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
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.
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).
Class Declaration (Interface)
#import <Cocoa/Cocoa.h>
@interface Node : NSObject { node.h
Node *link;
int contents;
}
+(id)new;
-(void)setContent:(int)number;
-(void)setLink:(Node*)next;
-(int)getContent;
-(Node*)getLink;
@end
Class Definition (Implementation)
#import "node.h”
@implementation Node
+(id)new
node.m
{ 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
C++ VS. Objective-C
Adds OOP, Only adds OOP to C
metaprogramming Has no standard
and generic library; is dependant
programming to C on other libraries
Comes with a std Mostly used for
library application building
Has numerous uses Simpler way of
Large and complex handling classes
code for OOP and objects
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
linkList class linkList.m
-(int)pop {
int ret = [self getValue];
[self remove];
return ret;
}
stack.h stack.m
@end
Example: main.c
#import "stack.h”
int main(){
Stack *s = [Stack new]; main.c
[s push:1];
[s push:2];
printf("%d\t", [s pop]);
[s push:3];
printf("%d\t", [s pop]);
printf("%d\t", [s pop]);
[s release];
return 0;
}