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
$467.36
Apple Inc.
+0.00
MSFT
$32.87
Microsoft Corpora
+0.00
GOOG
$885.51
Google Inc.
+0.00

MacTech Search:
Community Search:

Software Updates via MacUpdate

Acorn 4.1 - Bitmap image editor. (Demo)
Acorn is a new image editor built with one goal in mind - simplicity. Fast, easy, and fluid, Acorn provides the options you'll need without any overhead. Acorn feels right, and won't drain your bank... Read more
Mellel 3.2.3 - Powerful word processor w...
Mellel is the leading word processor for OS X, and has been widely considered the industry standard since its inception. Mellel focuses on writers and scholars for technical writing and multilingual... Read more
Iridient Developer 2.2 - Powerful image...
Iridient Developer (was RAW Developer) is a powerful image conversion application designed specifically for OS X. Iridient Developer gives advanced photographers total control over every aspect of... Read more
Delicious Library 3.1.2 - Import, browse...
Delicious Library allows you to import, browse, and share all your books, movies, music, and video games with Delicious Library. Run your very own library from your home or office using our... Read more
Epson Printer Drivers for OS X 2.15 - Fo...
Epson Printer Drivers includes the latest printing and scanning software for OS X 10.6, 10.7, and 10.8. Click here for a list of supported Epson printers and scanners.OS X 10.6 or laterDownload Now Read more
Freeway Pro 6.1.0 - Drag-and-drop Web de...
Freeway Pro lets you build websites with speed and precision... without writing a line of code! With it's user-oriented drag-and-drop interface, Freeway Pro helps you piece together the website of... Read more
Transmission 2.82 - Popular BitTorrent c...
Transmission is a fast, easy and free multi-platform BitTorrent client. Transmission sets initial preferences so things "Just Work", while advanced features like watch directories, bad peer blocking... Read more
Google Earth Web Plug-in 7.1.1.1888 - Em...
Google Earth Plug-in and its JavaScript API let you embed Google Earth, a true 3D digital globe, into your Web pages. Using the API you can draw markers and lines, drape images over the terrain, add... Read more
Google Earth 7.1.1.1888 - View and contr...
Google Earth gives you a wealth of imagery and geographic information. Explore destinations like Maui and Paris, or browse content from Wikipedia, National Geographic, and more. Google Earth... Read more
SMARTReporter 3.1.1 - Hard drive pre-fai...
SMARTReporter is an application that can warn you of some hard disk drive failures before they actually happen! It does so by periodically polling the S.M.A.R.T. status of your hard disk drive. S.M.... Read more

Strategy & Tactics: World War II Upd...
Strategy & Tactics: World War II Update Adds Two New Scenarios Posted by Andrew Stevens on August 12th, 2013 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Expenses Planner Review
Expenses Planner Review By Angela LaFollette on August 12th, 2013 Our Rating: :: PLAIN AND SIMPLEUniversal App - Designed for iPhone and iPad Expenses Planner keeps track of future bills through due date reminders, and it also... | Read more »
Kinesis: Strategy in Motion Brings An Ad...
Kinesis: Strategy in Motion Brings An Adaptation Of The Classic Strategic Board Game To iOS Posted by Andrew Stevens on August 12th, 2013 [ | Read more »
Z-Man Games Creates New Studio, Will Bri...
Z-Man Games Creates New Studio, Will Bring A Digital Version of Pandemic! | Read more »
Minutely Review
Minutely Review By Jennifer Allen on August 12th, 2013 Our Rating: :: CROWDSOURCING WEATHERiPhone App - Designed for the iPhone, compatible with the iPad Work together to track proper weather conditions no matter what area of the... | Read more »
10tons Discuss Publishing Fantasy Hack n...
Recently announced, Trouserheart looks like quite the quirky, DeathSpank-style fantasy action game. Notably, it’s a game that is being published by established Finnish games studio, 10tons and developed by similarly established and Finnish firm,... | Read more »
Boat Watch Lets You Track Ships From Por...
Boat Watch Lets You Track Ships From Port To Port Posted by Andrew Stevens on August 12th, 2013 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Expenses Review
Expenses Review By Ruairi O'Gallchoir on August 12th, 2013 Our Rating: :: STUNNINGiPhone App - Designed for the iPhone, compatible with the iPad Although focussing primarily on expenses, Expenses still manages to make tracking... | Read more »
teggle is Gameplay Made Simple, has Play...
teggle is Gameplay Made Simple, has Players Swiping for High Scores Posted by Andrew Stevens on August 12th, 2013 [ permalink ] | Read more »
How To: Manage iCloud Settings
iCloud, much like life, is a scary and often unknowable thing that doesn’t always work the way it should. But much like life, if you know the little things and tweaks, you can make it work much better for you. I think that’s how life works, anyway.... | Read more »

Price Scanner via MacPrices.net

13″ 2.5GHz MacBook Pro on sale for $150 off M...
B&H Photo has the 13″ 2.5GHz MacBook Pro on sale for $1049.95 including free shipping. Their price is $150 off MSRP plus NY sales tax only. B&H will include free copies of Parallels Desktop... Read more
iPod touch (refurbished) available for up to...
The Apple Store is now offering a full line of Apple Certified Refurbished 2012 iPod touches for up to $70 off MSRP. Apple’s one-year warranty is included with each model, and shipping is free: -... Read more
27″ Apple Display (refurbished) available for...
The Apple Store has Apple Certified Refurbished 27″ Thunderbolt Displays available for $799 including free shipping. That’s $200 off the cost of new models. Read more
Apple TV (refurbished) now available for only...
The Apple Store has Apple Certified Refurbished 2012 Apple TVs now available for $75 including free shipping. That’s $24 off the cost of new models. Apple’s one-year warranty is standard. Read more
AnandTech Reviews 2013 MacBook Air (11-inch)...
AnandTech is never the first out with Apple new product reviews, but I’m always interested in reading their detailed, in-depth analyses of Macs and iDevices. AnandTech’s Vivek Gowri bought and tried... Read more
iPad, Tab, Nexus, Surface, And Kindle Fire: W...
VentureBeat’s John Koetsier says: The iPad may have lost the tablet wars to an army of Android tabs, but its still first in peoples hearts. Second place, however, belongs to a somewhat unlikely... Read more
Should You Buy An iPad mini Or An iPad 4?
Macworld UK’s David Price addresses the conundrum of which iPAd to buy? Apple iPad 4, iPad 2, iPad mini? Or hold out for the iPad mini 2 or the iPad 5? Price notes that potential Apple iPad... Read more
iDraw 2.3 A More Economical Alternative To Ad...
If you’re a working graphics pro, you can probably justify paying the stiff monthly rental fee to use Adobe’s Creative Cloud, including the paradigm-setting vector drawing app. Adobe Illustrator. If... Read more
New Documentary By Director Werner Herzog Sho...
Injuring or even killing someone because you were texting while driving is a life-changing experience. There are countless stories of people who took their eyes off the road for a second and ended up... Read more
AppleCare Protection Plans on sale for up to...
B&H Photo has 3-Year AppleCare Warranties on sale for up to $105 off MSRP including free shipping plus NY sales tax only: - Mac Laptops 15″ and Above: $244 $105 off MSRP - Mac Laptops 13″ and... Read more

Jobs Board

Sales Representative - *Apple* Honda - Appl...
APPLE HONDA AUTOMOTIVE CAREER FAIR! NOW HIRING AUTO SALES REPS, AUTO SERVICE BDC REPS & AUTOMOTIVE BILLER! NO EXPERIENCE NEEDED! Apple Honda is offering YOU a Read more
*Apple* Developer Support Advisor - Portugue...
Changing the world is all in a day's work at Apple . If you love innovation, here's your chance to make a career of it. You'll work hard. But the job comes with more than Read more
RBB - *Apple* OS X Platform Engineer - Barc...
RBB - Apple OS X Platform Engineer Ref 63198 Country USA…protected by law. Main Function | The engineering of Apple OS X based solutions, in line with customer and Read more
RBB - Core Software Engineer - Mac Platform (...
RBB - Core Software Engineer - Mac Platform ( Apple OS X) Ref 63199 Country USA City Dallas Business Area Global Technology Contract Type Permanent Estimated publish end Read more
*Apple* Desktop Analyst - Infinity Consultin...
Job Title: Apple Desktop Analyst Location: Yonkers, NY Job Type: Contract to hire Ref No: 13-02843 Date: 2013-07-30 Find other jobs in Yonkers Desktop Analyst The Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.