31
Objective-C Quinton Palet

Objective-C Quinton Palet. Introduction Objective-C was developed to bring large scale software development the power of the object-oriented approach

Embed Size (px)

Citation preview

Page 1: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Objective-CQuinton Palet

Page 2: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Introduction

Objective-C was developed to bring large scale software development the power of the object-oriented approach

Comprised of C and Smalltalk

Strict superset of C

Page 3: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

History

Early 1980’s – Brad Cox and Tom Love develop Objective-C at Stepstone

1985 – Steve Jobs leaves Apple and starts NeXT

1986 – Stepstone releases Objective-C

1988 – Steve Jobs licensed Objective-C for NeXT

1996 – Apple buys NeXT

1999 – Apple releases OS X

2007 – Apple releases iOS and Objective-C 2.0

Page 4: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Growing Popularity

From 5th to 3rd on the TIOBE programming community index

Apple gaining more market share in PC market

iPhone, iPad, iPod Touch, and Apple TV

http://www.apple.com/ios/videos/#developers/

Page 5: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Environments

Windows GCC under Cygwin or MinGW

Linux GNU compiler

Mac Xcode

Page 6: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Frameworks

Collection of classes

Provide methods beyond the core methods

Frameworks often contain other Frameworks

Page 7: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Cocoa & Cocoatouch

Most popular frameworks

Cocoa Foundation framework

CoreData framework

AppKit framework

Cocoatouch Foundation framework

CoreData framework

UIKit framework

Page 8: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

File Declarations

Declared by file type .h Interface

.m Implementation

.nm Implementation with C++ code along with Objective-C and C code

Page 9: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Syntax

Strict superset of C

Can compile C code without any linkage

Commenting the same // single line

/* block */

Page 10: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Data types and Variable Objective-C by itself has

Int

Float

Double

Char

BOOL

With frameworks has access to much more

Objective-C 2.0 Added Int (signed/unsigned)

Short

Long

Long Long

Id

Page 11: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Data types and Variables cont.

Using Foundation.framework you can define a string:

NSString *someString = @”hello world”;

* represents that it is a pointer

NSString *SecondString = [[NSString alloc] initWithFormat:@”hello, %@”, self.name];

Page 12: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Syntax - Functions

Declare method in interface file or .h+ (return_type) classMethod1;

- (return_type) classMethod2: (param1_type) param1_name;

• + similar to a static function in Java

• - similar function called on instance of class

- (void)insertObject: (id)someObject atIndex: (int) index;

Page 13: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Syntax – Functions cont.

Implementation similar to C++ using the interface declaration

Done in the .m or .nm file

+ (return_type) classMethod: (paramType) paramName

{

Return (return_type) returnName;

}

Page 14: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Functions cont. Objective-C does not allow for Function overloads

This makes it so Objective-C isn’t able to easily implement polymorphism

Where as Java can implement constructors like:public initPerson(){

name = DEFAULTNAME;

}

Public initPerson(String inName){

name = inName;

}

Page 15: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Functions Cont. In order to do this in Objective-C you would have to implement different

method names like:-(void) initPerson {

name = [[NSString alloc] initWithString:DEFAULTNAME];

}

-(void) initPersonWithName: (NSString *) inName{

name = [[NSString alloc] initWithString: inName];

}

Page 16: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Functions Cont. Objective-C does not allow for Operator overloads

In turn Objective-C does not allow ad-hoc polymorphism

Example in C++ or C#:

Time Time::operator+(const Time& addTime)

{

Time temp = *this;

temp.seconds += addTime.seconds;

temp.minutes += temp.seconds / 60;

temp.seconds %= 60;

temp.minutes += addTime.minutes;

temp.hours += temp.minutes / 60;

temp.minutes %= 60;

temp.hours += addTime.hours;

return temp;

}

Allows you to do: sumTime = firstTime + secondTime;

Page 17: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Functions Cont. Simple Solution make a function that does what you would want the operator

overload to do.

-(void) addTime: (Time) inTime{

self.seconds += inTime.seconds;

self.minutes += self.seconds / 60;

self.seconds %= 60;

self.minutes += inTime.minutes;

self.hours += self.minutes / 60;

self.minutes %= 60;

self.hours += inTime.hours;

}

So can be called by [timeOne addTime: timeTwo];

Page 18: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Messages

Messages are similar to a method call in C++ or JavaObject *O = [Object messagePassed: Param];

Message passing allows dynamic typing Allows postponing a messages destination until runtime If class can’t handle the message it can forward it, hold onto it,

or silently ignore it- (void) setValue: (id) Obj;

Obj can be any class

Page 19: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Memory Management

No built in memory management Must allocate or alloc memory for objects

NSString str = [[NSString alloc] init]; Can retain memory to pass objects

NSString str = [[[NSString alloc] init] retain]; Developer responsible for releasing objects

[str release];

Page 20: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Memory Management Autoreleasepool allows you to group objects and release them all at once or

“drain” the pool

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

// create autoreleased objects

NSString str = [[[NSString alloc] init] autorelease];

[pool release];

Page 21: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Objective-C 2.0 Added in

Garbage collection Modern runtime Fast enumeration

Replaced:NSEnumerator *enumerator = [someCollection objectEnumerator];

someObject *O

While ((O = [enumerator nextObject]) != nil) {

NSLog(@”%@”, [O name];

}

With:for( someObject *O in someCollection) {

NSLog(@”%@”,[O name];

}

dot syntaxWithout dot syntax: [someClass objectAt: 0 setName: @”John”];

With dot syntax: someClass[0].name = @”John”

Page 22: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Objective-C 2.0 cont. Added in Property variables

• Can be implemented with @synthesize or @dynamic

@property (nonatomic) propertyType * propertyName;

@property (nonatomic, readonly, getter = timestamp) propertyType * propertyName2;

@synthesize propertyName;

@synthesize propertyName2;

Page 23: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Objective-C 2.0 cont.So this:

@property (nonatomic) propertyType * propertyName;

@property (nonatomic, readonly, getter = propertyName) propertyType * propertyName2;

@synthesize propertyName;

@synthesize propertyName2;

Turns into this:@interface Event{

propertyType * propertyName;

propertyType * propertyName2; }

@implementation Event{

-(propertyType) propertyName{

return propertyName; }

-(void) setPropertyName: (propertyType) in {

_propertyName = in; }

-(propertyType)propertyName2{

return [self propertyName]; }

}@end

Page 24: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Objective-C 2.0 cont. You can choose to dynamically do your properties getter and setter methods

also, for example:@interface Event{

@property (nonatomic) propertyType propertyName;

}

@implementation Event{

@dynamic propertyName; // need this because it lets the compiler know you will implement

// your own getter and setter methods for the property

-(propertyType) propertyName {

return propertyName;

}

-(void) setPropertyName: (propertyType) inValue {

propertyName += inValue;

}

}@end

Page 25: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Automatic Reference Counting

Garbage collection was deprecated

Developer no longer needs to manually manage retain and release

Retain and release added in by compiler at compile time

Removed the overhead of a separate process managing retain counts

Page 26: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Objective-C or Java Both have benefits to learning them, and are the two of the most popular

languages for mobile development.

Both are in the top 4 of the TIOBE index

Java has a written standard

Objective-C has no written standard but is heavily documented by Apple

Java is supported on more devices where as Objective-C is primarily Apple devices.

Java has IDEs for all major operating systems where as Objective-C is only on Mac OS X

Page 27: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Objective-C or Java cont. Objective-C can be more readable than Java

Objective-C is a more dynamic language Allows you to easily add onto programs due to dynamic typing

Objective-C programs tend to be larger due to compiler not being able to strip methods or make them inline because of the dynamic typing you wont know what methods are needed until runtime.

Objective-C does not allow operator overloading, function overloading, and multiple inheritance.

Objective-C doesn’t waste resources on a garbage collector

In order to add an Objective-C app to their marketplace it must go through a screening and you need a developers license, Java has open marketplaces and also requires no developers license

Page 28: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Objective-C or Java cont. Overall I would say Java is a more useful language to learn rather than

Objective-C

Doesn’t mean there’s no benefit to learning Objective-C Apple has a large market share in PC, mobile phones, and tablets.

You can use other languages to develop for OS X and iOs Such as C++ and Ruby

Many times still need to use the Cocoa framework to add the necessary functionality

Makes it so you’re still developing in Objective-C and only adding another layer in below the application making it less efficient

http://www.youtube.com/watch?v=OpNBbdA3jq0

Page 29: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

For more Information on Objective-C

https://developer.apple.com/

Page 30: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

Questions ?

Page 31: Objective-C Quinton Palet. Introduction  Objective-C was developed to bring large scale software development the power of the object-oriented approach

References [1] Kaul, Vivek. (2009, May 11). What Jobs did when he was fired from Apple. Retrieved from

http://www.dnaindia.com/money/report_what-steve-jobs-did-when-he-was-fired-from-apple_1254757

[2] Biancuzzi, F., & Warden, S. (2009). Masterminds of programming: Conversations with the creators of major programming languages . Sepastopol, CA: O'Reilly Media.

[3] Apple. (2010, December 13). Cocoa fundamentals guide. Retrieved from https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/Introduction/Introduction.html

[4] Apple. (2011, October 12). The objective-c programming language. Retrieved from https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html

[5] LLVM. (2012). Automatic Reference Counting. Retrieved from http://clang.llvm.org/docs/AutomaticReferenceCounting.html

[6] TIOBE Software. (2012, November). TIOBE programming community index for November 2012. Retrieved from http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html