TweetFollow Us on Twitter

Apr 97 Getting Started

Volume Number: 13 (1997)
Issue Number: 4
Column Tag: Getting Started

A First Look at Objective-C

By Dave Mark, ©1997, All Rights Reserved. http://www.spiderworks.com

Well, it finally happened. Apple made their OS decision, catching many of us by surprise. Personally, I am very excited by Apple's move. As was clear from the energy at Macworld Expo, things are finally moving. Apple has made a bold move. Now we have to retool and rethink our programming strategies.

As Apple made clear, the System 7.5 version of the Mac Toolbox still has some significant legs and will likely be part of our lives for some time to come. As I write this, the announced release schedule for Rhapsody (code name for the new OS) does not show a significant beta in our hands until January of next year. Nothing to complain about there. Of course, it will take time for Apple to marry their technology to that of NeXT and we all want this job done right.

My point is that there are some important decisions we all have to make, but the current schedule gives us the luxury of continuing down the current path (System 7.5 apps) without penalty, while giving us the time to plan for the new order.

What About Be?

Before we move on to the main focus of this column, I'd like to take a second to talk about the apparent loser in the OS wars: Be, Inc. You might think that because Be was not able to work out a deal with Apple, they have become damaged goods. Not so! As anyone who attended the first ever Be developer's conference will tell you, the BeOS is cool, the commitment from developers is there, and there's an excitement in the air, a feeling of being in on the ground floor of something big.

Bottom line, we now have two technological evolutions to follow. Things are about to get very interesting.

Java, C, C++, and Pascal vs. Objective-C

There are a number of questions raised by Apple's acquisition of NeXT. (See this month's Factory Floor interview with Avie Tevanian, Apple's new OS boss.) Among them, in what programming language will Rhapsody development be done? Is Objective-C the new sheriff in town? Will we be able to continue our C/C++ and Pascal efforts? And what about Java?

As we go to press, these issues are still not finalized. The story so far seems to be "all of the above." Objective-C is the language for NEXTSTEP, and should provide the most intimate access to Rhapsody. So far, it looks like C, C++, Pascal, etc. will all be supported, though in a slightly more distant relationship. Objective-C and Java support dynamic binding. C and Pascal support static binding, and C++ supports late binding.

In a nutshell, binding connects a called function to the function caller. Static binding means that the function being called is determined as the program is compiled. Though you can use function pointers to delay binding decisions in C, typically your binding decisions are made when you compile.

Dynamic binding is the opposite of static binding. The binding decision is delayed until runtime. This allows you to add components to your program while it is still running. If the runtime environment is designed to support this (and Rhapsody should be), it opens up a lot of interesting possibilities.

The C++ language supports a limited version of dynamic binding called late binding. In C++, a function call must type-match exactly the called function (called static typing) or else type-match exactly an inherited function. Though C++ virtual functions allow you to delay the binding until runtime, the type constraints still apply. Late binding is still restricted. Dynamic binding is unconstrained.

Java uses the same binding mechanism as Objective-C. Java offers the advantage of being a cross-platform solution, as well as tightly integrated with the Internet. It seems likely that Java will continue to grow and is likely to play a large role in Rhapsody.

What does all this mean for you? If you've been following this column over the past few months, you've already gotten a handle on Java. Over the next few months, we'll dig into Objective-C, starting with a review of some object programming terminology and a first look at the language syntax.

Finally, you can call the NeXT order desk at 800-TRY-NEXT (800-879-6398) to order books, manuals and software directly from NeXT, including "OpenStep Object-Oriented Programming and the Objective-C Language", "Enterprise Objects Framework Developer's Guide (for EOF 2.0)", "Working with Interface Builder (for Enterprise Objects Framework)", and "Discovering OPENSTEP: A Developer Tutorial (for Windows NT)."

Some Object Programming Terminology

Before we move on to the basics of Objective-C syntax, let's review a bit of object programming terminology, just to make sure we are all on the same page. We've already talked about dynamic, static, and late binding. Here are a few more.

Instances, methods, and instance variables. Just as in C++, an Objective-C class definition is a template for the creation of individual objects, also known as instances. The functions within a class (member functions) are known as methods, and the variables (data members) are known as instance variables.

Messages

In C++, an object's member function gets called. In Objective-C, a message is sent to an instance, known as the receiver. At runtime, the appropriate receiver method capable of handling the message is determined and the method is called.

Interface, implementation, and encapsulation

The interface to a class is the set of external methods defined for that class. The implementation is the internal workings of the class. The idea here is to keep the inner workings hidden from the user of a class, forcing them to access an instance via its interface. This mechanism is known as encapsulation. In Objective-C, all instance variables are encapsulated and access to them is limited to methods defined for the class.

Inheritance

Inheritance in Objective-C works pretty much as it does in C++. The parent class is known as a superclass and derived classes are known as subclasses.

A First Look at the Objective-C Language

Objective-C starts off with all the standard syntax of C. Objective-C source code files use the extension ".m", while header files stick with the extension ".h".

Objective-C features a generic object pointer type called id.

id myObject;

An id is designed as a generic pointer to an object's instance variables. The previous line of code didn't actually allocate an object. It created a pointer which will eventually be used to allocate the object. nil is defined as an id with a value of 0.

By using a generic object pointer type, Objective-C delays the type binding decisions until run time. This is a good thing, but it also puts a bit of extra overhead on the run-time system. Basically, in the NeXT world, all objects are derived from the root class Object. Object features an isa variable which is inherited by all Object subclasses (which should be all classes in your program). The isa instance variable specifies the class to which the object belongs.

Earlier, we talked about the separation of interface and implementation. In Objective-C, you declare the classes interface like this

 MySuperClass
{
 instance variable declarations
}
method declarations

Objective-C supports the standard C compiler directives that start with "#". In addition, Objective-C adds Objective-C specific compiler directives which start with "@". As you might expect, class names start with an upper case letter and variable names with a lower case letter. By convention, all identifiers are named using intercaps, yielding names like myVariable and MyClass.

Instance variable declarations are done just as they are in C and C++, though the type "id" is used pretty frequently in Objective-C and, obviously, is not built in to C or C++.

Method declarations are pretty funky. Here's a sample:

- (int)getX:(int)x andY:(int)y;

The leading minus sign marks this function as an instance method. A leading plus sign ("+") marks the method as a class method. (A class method is sort of like a static method in C++. We'll talk about class objects and class methods in a future column.)

The return type is specified in parentheses, just as if it were a typecast. If you leave off the return type, it defaults to the type id (just as a C function defaults to int if you leave off the return type). Note that a function that is not a method still defaults to a return type of int.

The name of the method specified above is getX:andY: and includes the colons in the name. Weird, eh? The idea is to have each chunk of the method end with a colon and correspond to a parameter. In this case, there are two parameters, x and y. The type of each parameter is also specified by a typecasting-like mechanism. Both x and y are ints.

Here's another example:

- getObj1:object1 andObj2:object2;

Note that this time all the type information was left out of the declaration. The return type and type of both arguments are the same, the default type "id".

Here's a sample class interface:

#import "Object.h"

 Object
{
 idmyVar;
}
- init;
- getLastObject:lastObject;

This interface declares a class named MyClass derived from the class Object. MyClass features a single variable, an id named myVar, and two methods, one named init and one named getLastObject, both of which return an id.

Note that the interface, which lives in a ".h" file, starts off with a #import compiler directive. #import replaces the #ifdef business you use in C++ to make sure you don't include an include file twice. Use #import to include any header files you need to include. Alternatively, you can just declare the classes you reference using the @class directive.


This directive tells the compiler that Object is a class. That's it. This delays any type analysis until run-time and can solve some knotty cross-dependancy problems where classes refer to each other. Bottom line, use the @class directive if you can get away with it, otherwise #import the classes' header file.

The implementation of a class looks like this:

 MySuperClass
{
 instance variable declarations
}
method definitions

Gee, doesn't this look familiar? Yup, the implementation looks almost identical to the interface. The differences? The implementation lives in a ".m" file instead of in a ".h" file and the method definitions replace the method declarations in the interface. Also, you are required to #import your classes' interface file in the implementation file. One nice benefit of this last fact is that you can leave the superclass and the instance variable declarations out of the implementation.

Here's another look:

#import "MyClass.h"

Till Next Month...

Hopefully, you've got a feel for the basic structure of an Objective-C program. Next month, we'll talk about message receivers and message syntax, and present our first Objective-C program. To get a head start, check out the Objective-C specification on the NeXT web site. (See the URL earlier in the column.) You can buy the NEXTSTEP environment running under NeXT, WinNT, and on top of Mach. Also, you might want to check out CodeBuilder from Tenon InterSystems. CodeBuilder runs on a Mac and comes with (among a LOT of other stuff) an Objective-C compiler. You might also want to check out Apple's web site to find out the current release schedule for Rhapsody tool betas and the Metrowerks web site to find the status of their Rhapsody tools.

 
AAPL
$100.75
Apple Inc.
+0.64
MSFT
$46.36
Microsoft Corpora
-0.08
GOOG
$577.36
Google Inc.
+1.00

MacTech Search:
Community Search:

Software Updates via MacUpdate

QuickBooks 2015 16.0.0.1352 R1 - Financi...
QuickBooks 2015 helps you manage your business easily and efficiently. Organize your finances all in one place, track money going in and out of your business, and spot areas where you can save.... Read more
Mac DVDRipper Pro 5.0.1 - Copy, backup,...
Mac DVDRipper Pro is the DVD backup solution that lets you protect your DVDs from scratches, save your batteries by reading your movies from your hard disk, manage your collection with just a few... Read more
Apple OS X bash Update 1.0 - Fix for sec...
The OS X bash Update fixes a security flaw in the bash UNIX shell on OS X 10.9.5 (also on OS X 10.8 and 10.7 [see Related Links below]). OS X 10.9.5 or later Downloads for OS X 10.8 and OS X 10.7 in... Read more
SyncTwoFolders 2.0.5 - Syncs two user-sp...
SyncTwoFolders simply synchronizes two folders. It supports synchronization across mounted network drives and it is a possibility to run a simulation showing in a log what will be done. Please visit... Read more
FinderPop 2.5.7 - Classic Mac utility, n...
FinderPop is a Universal preference pane that extends OS X's contextual menus using a FinderPop Items folder much as the Apple Menu Items folder used to do for the Apple menu. It has other features... Read more
VueScan 9.4.45 - Scanner software with a...
VueScan is a scanning program that works with most high-quality flatbed and film scanners to produce scans that have excellent color fidelity and color balance. VueScan is easy to use, and has... Read more
LibreOffice 4.3.2.2 - Free Open Source o...
LibreOffice is an office suite (word processor, spreadsheet, presentations, drawing tool) compatible with other major office suites. The Document Foundation is coordinating development and... Read more
calibre 2.4 - Complete e-library managem...
Calibre is a complete e-book library manager. Organize your collection, convert your books to multiple formats, and sync with all of your devices. Let Calibre be your multi-tasking digital... Read more
Default Folder X 4.6.9b1 - Enhances Open...
Default Folder X attaches a toolbar to the right side of the Open and Save dialogs in any OS X-native application. The toolbar gives you fast access to various folders and commands. You just click... Read more
Beamer 2.0.4 - Stream any movie file fro...
Beamer streams to your Apple TV.... Plays any movie file - Just like the popular desktop movie players, Beamer accepts all common formats, codecs and resolutions. AVI, MKV, MOV, MP4, WMV, FLV. To... Read more

Latest Forum Discussions

See All

WW2: Sandbox. Strategy & Tactics (G...
WW2: Sandbox. Strategy & Tactics 1.0.0 Device: iOS Universal Category: Games Price: $9.99, Version: 1.0.0 (iTunes) Description: Sandbox is the unlimited sequel to our Strategy & Tactics: World War II. We've abandoned... | Read more »
apeFilter (Music)
apeFilter 1.0 Device: iOS Universal Category: Music Price: $6.99, Version: 1.0 (iTunes) Description: | Read more »
Shred It! Review
Shred It! Review By Jennifer Allen on September 30th, 2014 Our Rating: :: GORGEOUS BUT BASICUniversal App - Designed for iPhone and iPad It might look lovely, but Shred It! is a pretty shallow endless runner/snowboarding game.   | Read more »
It Came From Canada: Angry Birds: Transf...
Anyone afraid that throwing Transformers into the Angry Birds mix would result in a Michael Bay-level of childhood pillaging can rest easy. While Rovio’s famous fowls may be a 21st century staple, Angry Birds: Transformers wears its affection for... | Read more »
Galaxy Trucker Review
Galaxy Trucker Review By Rob Thomas on September 30th, 2014 Our Rating: :: IN FOR THE LONG HAULiPad Only App - Designed for the iPad We got a great big convoy, rockin’ through the night… the endless night of outer space, that is.... | Read more »
Moon and Sun – children’s book Review
Moon and Sun – children’s book Review By Amy Solomon on September 30th, 2014 Our Rating: Moon and Sun is a fable-like children’s book with lush illustrations.   Developer: Marcio Monteiro Price: $3.99 Version: 1.0 App Reviewed on... | Read more »
Kairosoft Finally Brings The Pyraplex to...
Kairosoft Finally Brings The Pyraplex to iOS Posted by Jessica Fisher on September 30th, 2014 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Yeti’s Parole Officer Review
Yeti’s Parole Officer Review By Jennifer Allen on September 30th, 2014 Our Rating: Universal App - Designed for iPhone and iPad Yeti’s Parole Officer proves that looks aren’t everything in this entertaining, if plain, piece of... | Read more »
Record Keeper and World Wide Words – Two...
Record Keeper and World Wide Words – Two New Final Fantasy Games Arrive on iOS in Japan Posted by Ellis Spice on September 30th, 2014 [ permalink ] | Read more »
iPollute Review
iPollute Review By Nadia Oxford on September 30th, 2014 Our Rating: :: iPOLLUTE, uPOLLUTEUniversal App - Designed for iPhone and iPad iPollute is a delightful-looking pollution simulator, though it’s a bit light on “game” content... | Read more »

Price Scanner via MacPrices.net

MacBook Airs on sale for $100 off MSRP, start...
Best Buy has the new 2014 MacBook Airs on sale for $100 off MSRP on their online store. Choose free home shipping or free local store pickup (if available). Prices valid for online orders only, in-... Read more
Apple Releases OS X Mavericks bash Update 1.0...
Apple has released a patch update for OS X Mavericks users to address the recently-detected “Shellshock” security bug in BSD UNIX’s bash shell. Apple says only a few Mac users who had manually... Read more
Pivotal Payments Ready for Apple Pay – FlexPo...
Pivotal Payments, a provider of merchant services and global payment processing solutions, has announced its proprietary FlexPoint platform will support credit and debit transactions through Apple’s... Read more
iStabilizer Announces Tabarm — First Friction...
iStabilizer, a specialist in universal lightweight compact tripods, steady cams, dollies, mounts, and remotes for smartphones, tablets, and cameras, announced today the iStabilizer tabArm, the first... Read more
IStabilizer Flex Smartphone Tripod Wins Usa T...
iStabilizer, a specialist in universal lightweight compact tripods, steady cams, and other products for smartphones, tablets, and cameras, has announced today that its iStabilizer Flex smartphone... Read more
13-inch 2.8GHz Retina MacBook Pro on sale for...
B&H Photo has the new 2014 13″ 2.8GHz Retina MacBook Pro on sale for $1699.99 including free shipping plus NY sales tax only. They’ll also include free copies of Parallels Desktop and LoJack for... Read more
15-inch Retina MacBook Pros on sale for up to...
B&H Photo has the new 2014 15″ Retina MacBook Pros on sale for up to $150 off MSRP. Shipping is free, and B&H charges NY sales tax only. They’ll also include free copies of Parallels Desktop... Read more
Get Down to Business On Your iPad With Free N...
Utah based Poem LLC has introduced Nexticy 1.0, a full-featured, affordable (Free) forms application for iPad. Nexticy makes it ‘way easy’ to create, store, retrieve and analyze paper-like forms of... Read more
13-inch Retina MacBook Pros on sale for $100...
Best Buy has 13-inch 2.6GHz Retina MacBook Pros on sale for $100 off MSRP on their online store. Choose free shipping or free local store pickup (if available). Prices are for online orders only, in-... Read more
Reports Outline Claimed 12-Inch Macbook Air D...
Blogger Jack March says that according to information he’s received from an anonymous “source familiar with Apple’s plans,” the next-generation MacBook Air will launch in mid-2015 and be available... Read more

Jobs Board

*Apple* Retail - Multiple Positions (US) - A...
Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, you're also the Read more
*Apple* Retail - Multiple Positions (US) - A...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Senior Event Manager, *Apple* Retail Market...
…This senior level position is responsible for leading and imagining the Apple Retail Team's global event strategy. Delivering an overarching brand story; in-store, Read more
*Apple* Solutions Consultant (ASC) - Apple (...
**Job Summary** The ASC is an Apple employee who serves as an Apple brand ambassador and influencer in a Reseller's store. The ASC's role is to grow Apple Read more
Project Manager / Business Analyst, WW *Appl...
…a senior project manager / business analyst to work within our Worldwide Apple Fulfillment Operations and the Business Process Re-engineering team. This role will work Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.