Thread View: comp.lang.objective-c
3 messages
3 total messages
Started by Bill Shirley [CSC]
Sun, 13 Dec 1992 09:00
Objective-C Frequently Asked Questions
Author: Bill Shirley [CSC]
Date: Sun, 13 Dec 1992 09:00
Date: Sun, 13 Dec 1992 09:00
331 lines
12053 bytes
12053 bytes
Archive-name: Objective-C/faq
Last-modified: 1992/10/09
Version: 1.0
Answers to
FREQUENTLY ASKED QUESTIONS
concerning
Objective-C
Clarification: I have used the word `ObjC' for `Objective-C', the proper
and official name for the language discussed within, throughout
this file. Is is simply a time and space saver.
Questions & Answers
~~~~~~~~~~~~~~~~~~~
Q1. What is Objective-C?
A1. An object oriented (OO) computer language based on the C language and
influenced by SmallTalk. It was designed by The Stepstone Corp. (and
is a Trademark of Stepstone) and includes many of the OO things that
make Smalltalk the "language to learn OOP with", and many of the
great things about C that make it highly portable and very optimizable.
It is NOT C++.
Q2. Who makes an Objective-C compiler, what does it cost, how do I order?
A2.1 The Stepstone Corporation
(203) 426-1875 - (800) BUY-OBJEct voice / (203) 270-0106 fax
75 Glen Road
Sandy Hook, CT 06482
compilers and runtime
IBM RISC System/6000 w/ AIX
Sun 3, 4, SPARCstations w/ SunOS
HP9000/300,400,700,800 w/ HP-UX
DEC Stations w/ ULTRIX
Data General AViiON w/ DG/UX
SCO UNIX SYS V
PS/2 w/ AIX or OS/2
PC-AT w/ MS-DOS
VAX w/ VMS
MIPS
NeXT
Macs with MPW (Mac Programmers Workshop)
class libraries available for a subset of the above
A2.2 NeXT, Inc.
Comes bundled with the extended OS release.
(NeXTSTEP 3.0 - $295 on CD ROM) shipped Sept 92
(NeXTSTEP '486 - $995) intended Q4 92
A2.3 GNU Project
Freely available
GNU Experimental Tape
GCC 2 (the GNU C/C++/ObjC Compiler with many new
features - doesn't include runtime - yet)
prep.ai.mit.edu (18.71.0.38) pub/gnu/gcc-2.0.tar.Z
(See sites at end of file)
Q3. Does GNU's gcc `do' Objective-C?
A3. Didn't you read the above answer: It does as of release 2.0,
but does not initially include the runtime system required
to use ObjC. A runtime has been completed and donated to
the project. It is currently (Sept 92) undergoing testing
and some rewriting.
Reports are: On the NeXT, which has a runtime system, programs
compiled with gcc 2.0 (as available on the net) run when linked
to NeXT's runtime library.
A runtime has been completed and donated to the project. It is
currently (Sept 92) undergoing testing and some rewriting.
A group has formed to help develop a library of Objective-C
classes to be distributed freely by the GNU project.
Q4. What books concerning Objective-C are available?
A4.1
Object Oriented Programming: An Evolutionary Approach
Author: Brad J. Cox (, Andrew J. Novobilski second edition)
Publisher: Addison-Wesley
ISBN#: 0-201-10393-1 August, 1986
ISBN#: 0-201-54834-8 1991
two editions
A4.2
Objective-C: Object Oriented Programming Techniques
Authors: Lewis J. Pinson, Richard S. Wiener
Publisher: Addison-Wesley, 1991
ISBN#: 0-201-50828-1
Abstract: Includes many examples, discusses both Stepstone's
and NeXT's versions of Objective-C, and the (minor)
differences between the two.
A4.3
An Introduction to Object-Oriented Programming
Author: Timothy Budd
Publisher: Addison-Wesley
ISBN#: 0-201-54709-0
Abstract: An intro to the topic of OOP, as well as a comparison
of C++, Objective-C, Smalltalk, and Object Pascal
A4.4
NeXTSTEP Programming Step 1: Object-oriented applications
Availablility: Fall, 1992
Authors: Simson L. Garfinkel, Michael K. Mahoney
Publisher: Springer-Verlag, 1992 (800)SPR-INGE
Abstract: It's updated to discuss NeXTSTEP 3.0 features
(Project Builder, new development environment)
but doesn't discuss 3DKit or DBKit
Q5. What is the difference between Objective-C and C?
A5. ObjC is a superset of the ANSI C standard. It is an object oriented
language that has extensions similar to Smalltalk applied to C.
It includes a few more key words and constructs.
New Keywords:
@interface
@implementation
@public
@selector
Constructs:
[instance method: param]; <- sending a message to an instance
Types:
id - basically a generic pointer to an object
[****************]
Q6. What is the difference between Objective C and C++?
A6. C++ has operator overloading, ObjC doesn't. Some consider this
to be 'syntactic sugar', and it is, but it can be a quite
handy bit of syntactic sugar.
C++ has multiple inheritance, ObjC doesn't. There is much
debate over the desirability and value of this. There are
several ways to 'get around' this in ObjC.
The run-time binding mechanism differ quite a bit in their functionality.
(Details?? [***])
Q7. What is the difference between NeXT's, Stepstone's and GNU's
versions of Objective C?
A7. NeXT has defined and distributed its own class libraries, which
are very integral to the NeXTstep environment.
NeXT also extended Stepstones definition of the language to include
new constructs, such as protocols, which are touted to deal with
some aspects of multiple inheritance.
NeXT's implementation does *not* support static binding, Stepstone's
does, and GNU's (does?/doesn't?).
Stepstone has a standard set of class libraries that work across
all supported machines.
GNU gcc (C/C++/ObjC) does not have a runtime system for
resolving message passing, or include any classes. (yet)
The Object (root) class of NeXT's and Stepstone's are slightly
different; there are several Object methods and runtime C
functions that are not part of Stepstone's.
NeXT (and GNU?) supports Categories, Stepstone doesn't.
NeXT has a native language debugger, Stepstone and GNU don't.
NeXT (3.0) supports Protocols and forward declarations of classes,
Stepstone (does/n't?), GNU (does/n't?).
[****************]
Q8. What are some of the common problems of the language and how can
I work around them? (forward declarations of classes, class variables)
A8.1 There is no innate multiple inheritance (of course some see this as a
benefit).
To get around it you can create a compound class ( a class with
instance variables that are /id/s of other objects. They can
specifically redirect messages to any combination of the
objects they are compounded of. (It isn't *that* much of a
hassle and you have direct control over the inheritance
logistics)
Protocols address this to some extent. [***]
[** how does Delegation fit in here? **]
A8.2 ObjC has no class variables.
You can get around this by defining a static variable in the .m
file, and defining access methods for it. This is actually a
more desirable way of designing a class hierarchy, because it
allows subclasses shouldn't access superclass storage (this would
cause the subclass to break if the superclass was reimplemented),
and allows the subclass to override the storage (if the classes
access all their own variables via methods)
A8.3 problem X [****************]
Q9. What class libraries are available for Objective C?
A9. See the related FAQ file - _Objective C - a matter of Class_
Q10. Are there any FTP sites with Objective C code? Where?
A10. Yes.
There are NeXT related sites at
sonata.cc.purdue.edu
cs.orst.edu
And non-NeXT related sites at
?
Q11. I'm an emacs junkie. Are there any .el files somewhere to support
Objective-C?
A11. Yes. Try sonata.cc.purdue.edu /pub/next/misc/objc.tar.Z
Q12. So show me a program, a simple example.
A12. See the companion file "A S[ia]mple Objective-C Program" or get
all of the code from music.sie.arizona.edu:pub/ObjC/Sample.tar.Z
Q13. What are Protocols?
A13. Protocols are an addition to (currently only NeXT's 3.0+ version of)
ObjC that allow you to organize related methods into groups
that form high-level behaviors. This gives library builders
a tool to identify sets of standard protocols, independent of
the class hierarchy. Protocols provide language support for
the reuse of design, whereas classes support the reuse of code.
Well designed protocols can help users of an application
framework when learning or designing new classes. Here is a
simple protocol definition for archiving objects:
@protocol Archiving
- read:(NXTypedStream *)stream;
- write:(NXTypedStream *)stream;
@end
Once defined, protocols can be referenced in a class interface
as follows:
// MyClass inherits from Object and
// conforms to the Archiving protocol
@interface MyClass : Object <Archiving>
@end
Unlike copying methods to/from other class interfaces, any
incompatible change made to the protocol will immediately be
recognized by the compiler (the next time the class is
compiled). Protocols also provide better type checking without
compromising the flexibility of untyped, dynamically bound objects.
MyClass *obj1 = [MyClass new];
// legal, obj2 conforms to the Archiving protocol.
id <Archiving> obj2 = obj1;
// illegal, obj1 does not conform to the TargetAction
// protocol.
id <TargetAction> obj3 = obj1;
Terminology
~~~~~~~~~~~
C: A programming language.
FTP: File Transfer Protocol.
GNU: A project making freely available software.
message: A "call" to an implementation of a method
method: An implementation of an ObjC "function"
factory method: A method which creates a new instance of a class
class method: A method which acts on or with the whole of a class rather
than an instance of a class. Often used interchangeably
with _factory method_, but there is a subtle difference.
instance method:A method witch acts on or with a specific instance of a
class.
OOP: Object Oriented Programming
ObjC: An abbreviation of Objective-C
Object: The base {class} of Objective-C.
Objective-C: An Object Oriented programming language extended from
the C language, and what this whole file is about.
It is also a registered trademark of The Stepstone
Corporation.
---
All [**********] designate incompleteness of the FAQ. If you have any
questions, corrections, comment, suggestions pass them along. I can be
reached directly at <shirley@fdr.jsc.nasa.gov> or you can post to
the news group (comp.lang.objective-c).
Disclaimer: I am not related to any company or group mentioned above.
This file was created to provide information to interested people, and
not advertizing for anything listed above.
gnu ftp site, prep.ai.mit.edu:pub/gnu/etc/DISTRIB
(prep UK/Europe mirror) src.doc.ic.ac.uk (???)
(prep Netherlands mirror) ftp.win.tue.nl (131.155.70.100)
(prep UK mirror) src.doc.ic.ac.uk (146.169.3.7)
(prep Japan mirror) utsun.s.u-tokyo.ac.jp (133.11.11.11)
(Australian site) archie.au (IP number may change)
My list of thanks has gotten a bit long, so instead of leaving
anyone out, I'll just say thanks to all who have given feedback.
This information is what YOU make it.
---
--
Bill Shirley
shirley@fdr.jsc.nasa.gov
--
``One lonesome body, Bill Shirley
one lonesome song. shirley@fdr.jsc.nasa.gov
No lonesome body,
no lonesome song.'' - throwing muses
Objective-C Simple Sample Program - FAQ
Author: Bill Shirley [CSC]
Date: Sun, 13 Dec 1992 09:00
Date: Sun, 13 Dec 1992 09:00
200 lines
7763 bytes
7763 bytes
Archive-name: Objective-C/sample-program
Last-modified: 1992/11/01
Version: 1.0
A S[ia]mple Objective-C Program
(a companion to the comp.lang.Objective-C FAQ file)
// This is a comment. Everything to the right of a double slash
// is ignored (until an end of line is reached).
/*
* This is too, that's what superset of ANSI C means; You can do
* anything you can do in C in Objective-C. (not to suggest that
* you should, only that you could.)
*/
// The first thing we do is bring in some include files, as in
// C. However, we'll use the "import" statement which guarantees
// that the file isn't included more than once.
// <objc/Object.h> is not really needed, because it is #imported
// by the Queue and Stack headers, but we (as object users) don't
// necessarily know that, so it is good practice to #import it
// here. (When the processer reaches #import <objc/Object.h>
// in the Queue and Stack headers, it will not include it.)
#import <stdio.h>
#import <objc/Object.h>
#import "Queue.h"
#import "Stack.h"
// GNU gcc for some reason passes moral judgement on the useage
// of #import, but still allows it. They suggest you use #ifndefs
// in all of your header files to eliminate multiple includes.
// That brought in class definitions for Objects, Queues, and
// Stacks. Queue and Stack are classes of my own construction,
// and I'm not going to go into details here. You don't need
// to know how they work. The Object class is the basis for
// all other classes, which is why it gets brought in first.
// Classes are the one real extension which Objective C adds to
// C. A class is a description of a collection of data, like a
// C structure, and the methods by which that data may be accessed
// or manipulated. Instances of a class are called objects, and
// methods are invoked by sending messages to either the class itself,
// to produce objects, or to those objects. The recipient of a message
// is called a "receiver". The form of a message is:
//
// [receiver method andMaybeSomeArguments]
//
// the receiver and method components are mandatory, as are
// the square brackets surrounding the message. Additional
// arguments may or may not be present, depending upon the
// method definition. Messages may appear anywhere a statement
// is allowed in C.
// Two simple Class definitions follow. Both inherit
// directly from the base class "Object". This gives
// them lots of nice properties, not the least of which
// is the ability to be referenced by any pointer of the
// generic object type "id". All objects can be pointed
// to by any id variable, and the default return type from
// methods is id. This allows messages to be embedded in
// other messages, either as receivers or arguments.
// An Int object allocates space for a single integer.
// The "report" message causes it to report its value.
// Everything between the @implementation and the @end
// is part of the class definition...
@implementation Int: Object // Int is derived from Object
{
int value; // This is the data portion. Like a struct.
}
// The following are the method definitions. The "+" means this
// is a class method, i.e., a method that deals with classes instead
// on instances. In this case it is a factory method, or one which
// creates and returns a new instance of a class The body of the
// method is between braces, like a C function.
// Self is a special variable which may only be used within a method
// and means the receiver of the message which invoked this message.
// Super means that when searching for the method for this message
// start in the parent class of the present implementation. This
// does not, necessarily, have any relation to the value of self.
+ makeRoomFor: (int) i
{
id anInstance;
anInstance = [super new];
value = i;
return anInstance;
}
// It is standard for methods that do not need to return any
// special value to instead return self. This allows for a
// nested syntax of method calls.
// The "-" in front of report means that it's an instance method,
// i.e., how a particular object should respond.
- report
{
printf("%4d", value);
return self;
}
@end
// Same for a Float object, but for the obvious difference that
// it works with floats.
// Note polymorphism -- methods have same names as in the Int class.
@implementation Float: Object
{
float value;
}
// Sometimes a factory method is written in the following manner. This
// is not strictly correct, but since _self_ is a local variable, no
// harm is done. It is also quite common to see this in code from the
// net, so it is included here. In this case _self_, which is a class,
// is assigned to return a value from [super new], which is an instance.
// It may even help the compiler optimize if there is no assignment to
// self while in a class method.
+ makeRoomFor: (float) x
{
self = [super new];
value = x;
return self;
}
- report
{
printf("%4.1f", value);
return self;
}
@end
void main()
{
// First we create instances of "Stack" and "Queue" data structures
id queue = [Queue new];
id stack = [Stack new];
int i;
for (i = 5; i > -6; --i)
{
// We alternate putting Int's and Floats onto the queue and
// stack, based on whether "i" is odd or even. Whatever
// type goes on the queue, the opposite goes on the stack.
[queue put: (i & 1) ? [Int makeRoomFor: i] : [Float makeRoomFor: i]];
[stack put: (i & 1) ? [Float makeRoomFor: i] : [Int makeRoomFor: i]];
}
while ([queue size] && [stack size])
{
// The following illustrates run-time binding. Will report be
// invoked for a Float object or an Int object? We don't know
// ahead of time, but with run-time binding and polymorphism
// it works the way we like. The burden is on the class
// implementor rather than the class user. In fact, we
// could add another class (String? Complex?) and toss
// instances onto the Stack and Queue without having to
// change the following lines at all.
// Both classes, Int and Float, just happen to implement the
// method 'report'. They do not need to inherit from some
// object 'Reportable', only to implement the report method.
// If one did not implement the method, the message would
// not be sent.
printf("queue="); [[[queue get] report] free];
printf(", stack="); [[[stack get] report] free];
putchar('\n');
}
}
______
If you have any questions, corrections, comment, suggestions pass them
along. I can be reached directly at <shirley@krakatoa.jsc.nasa.gov> or you
can post to the news group (comp.lang.objective-c)
Thanks to Paul J. Sanchez, paul@music.sie.arizona.edu, for writing this
program.
--
Bill Shirley
shirley@fdr.jsc.nasa.gov
--
``One lonesome body, Bill Shirley
one lonesome song. shirley@fdr.jsc.nasa.gov
No lonesome body,
no lonesome song.'' - throwing muses
Objective-C Classes/Libraries Available - FAQ
Author: Bill Shirley [CSC]
Date: Sun, 13 Dec 1992 09:00
Date: Sun, 13 Dec 1992 09:00
519 lines
23128 bytes
23128 bytes
Archive-name: Objective-C/classes
Last-modified: 1992/08/18
Version: 1.0
Objective C
A matter of Class
A (very incomplete) listing of available Objective-C classes
Index:
Stepstone Classes/Libraries
GNU Distributed Classes
Public Domain Classes
NeXT Distributed Classes
NeXT 3rd Party Classes
*Class* == Not a part of that kit
===========================
Stepstone Classes/Libraries
===========================
Bundled with the compiler is ICpak 101 - Foundation Class Library
(20 classes, more than 300 methods)
Object object - the runtime 'root' object'
Array array - an abstract class
IdArray id array - array of objects
IntArray integer array
AsciiFiler ASCII filer - an automatic I/O object
Cltn collection - an abstract class
OrdCltn ordered collection
Stack LIFO collection
Set Set collection - no duplicate members
Dictionary associations - a la symbol tables
BalNode balanced node - support for binary trees
SortCltn sorted collection
String string - null terminated ASCII sequence
Point point - 2D coordinate
Rectangle rectangle - 2D region
Assoc association - key/value pairs support for dictionaries
IPSequence in-place sequence - for sequencing through cltn
Sequence sequence - same as above but uses copy of data
ObjGraph object graph - graph of objects reachable
Unknown unknown - support for AsciiFiler
available separately for most systems, ICpak 201 - Graphical User Interface
(58 classes, more than 1100 methods)
*Object*
IntCltn
IntOrdCltn
PtrCltn
PtrOrdCltn
TransCltr
OpaqCltr
*Array*
ColorArray
ColorMap
ShortArray
PtrArray
RubberLine
EventQ
CharString
Quad
RectList
DispObject
SolidColor
DispText
DispMedium
[****] ....
Pattern
Cursor
EchoBox
Font
Menu
DepMenu
AdHocMenu
Timer
DepObject
SharObject
available for several platforms, ICpak 301 - GRAPHpak
[****]
=======================
GNU distributed classes
=======================
[****]
=====================
Public Domain classes
=====================
Random Class (sonata.cc.purdue.edu:/pub/next/oop/classes/Random2.0.tar.Z)
- implements its own random number generator, supports Gaussian
variables, die rolling, etc.
Julian Date (sonata.cc.purdue.edu:/pub/next/oop/classes/Julian1.1.tar.Z)
- implements Julian dates, conversions, etc. (NeXTSTEP)
[****]
========================
NeXT distributed Classes
========================
+ == only in NeXTSTEP Release 3 (may follow kit name for all objects in kit)
Root Class
==========
Object the root class
Common Classes
==============
Some classes of general utility, that don't belong to any kit.
*Object*
Storage object that stores a list of items (various types)
List object that stores a list of other objects
HashTable key-based storage object
StreamTable used for writing sets of data to streams
NXStringTable stores a set of strings accessible by key
Application Kit (AppKit)
========================
The first kit, used for implementing the framework and user interface of
(nearly) every NeXTSTEP application. Provides an engine that handles
the event loop, connection to the Window Server, and handles many standard
services. Includes classes for user controls, font and color management, a
text editor, a dynamic data link system (release 3), inter-application
communication, and several standard panels.
*Object*
Responder abstract class for objects that respond to events
Application an application's "engine"; handles event loop & more
Window manages an independent drawing area on the screen
Panel special subclass of Window
Menu manages array of command items that can be picked
PopUpList pop-up list of items that can be picked
FontPanel std Panel for selecting Fonts
PrintPanel std printing Panel:choose printer, resolution, etc
PageLayout std page layout Panel
SavePanel std save Panel
OpenPanel std open Panel
NXColorPanel std color-picker Panel
NXHelpPanel + std help Panel
NXDataLinkPanel + std Panel for managing dynamic data links
View manages a drawing area within a Window
Control abstract class for UI objects (buttons, etc)
NXBrowser hierarchical browser of items (like a filesystem)
Matrix manages a group of Cells (eg, a set of radio buttons)
Form a Matrix of FormCells (text entry areas with titles)
Button your basic push-button doodad
TextField displays text or allows the user to edit it
Slider slide its knob to change its value
Scroller used for scrolling long documents
NXColorWell used for representing a color selection
Text std object for editing text (ascii or RTF)
Box used to group other Views in a box
NXSplitView used for a pair of Views that share screen space
ScrollView manages relation between a ClipView and Scrollers
ClipView used for View that's larger than its onscreen area
Cell rubber-stamp class for drawing in a View
NXBrowserCell used for the items in an NXBrowser
SelectionCell performs some of NXBrowserCell's functionality (obs)
ActionCell used with Controls (or a set with a Matrix)
FormCell displays a title and a text-entry area in a Form
ButtonCell used for drawing Buttons
MenuCell used for drawing Menu items
TextFieldCell used for drawing text-entry/display areas
SliderCell used for drawing a slider bar
Pasteboard used for cut/copy/paste and much, much, more
NXImage convenient image-drawer; handles much nitty detail
NXImageRep abstract class used with NXImage for specific images
NXBitmapImageRep NXImageRep for bitmaps (for example, TIFF)
NXEPSImageRep NXImageRep for PostScrip images
NXCustomImageRep NXImageRep for user-defined images
NXCachedImageRep NXImageRep for already-rendered images
NXDataLink + represents a dynamic data link in a document
NXDataLinkManager + manages all the data links in a document
NXSelection + represents the linked data in a source document
NXCursor std object for displaying various cursors
Font object representing a PostScript font
FontManager manages the Fonts in an application
NXColorPicker + for creating a custom color picker in the color Panel
NXColorList + manages a list of named colors (eg, Pantone(R))
PrintInfo contains information about a print job
NXSpellChecker + used to access spell-checking services
NXSpellServer + allows 3rd party to provide a custom spell-checker
Speaker sends inter-application messages
Listener receives inter-application messages
NXJournaler records and plays back events and sounds
Video Class +(was in AppKit for Release 2)
===========
Displays video input to a NeXTdimension board on screen.
*Object*
NXLiveVideoView displays video input to a NeXTdimension board
Sound Kit
=========
The Sound Kit is a set of classes for managing sound in a NeXTSTEP application.
*Object*
Sound represents a single sound
*Responder*
*View*
SoundView used to display and edit sounds
SoundMeter used to indicate sound volume as it plays
NXSoundStream + abstract class; manages a stream of sound data
NXPlayStream + plays sound data on an NXSoundOut object
NXRecordStream + records sound data from an NXSoundIn object
NXSoundDevice + abstract class; represents a device (mic, speaker)
NXSoundIn + represents sound input devices (microphones)
NXSoundOut + represents sound output devices (speakers etc)
Music Kit # (no longer maintained by NeXT)
==========================================
A large kit for music synthesis. <<Should be available by ftp from CCRMA>>
(ccrma-ftp.stanford.edu:pub/???)
*Object*
Note stores information about a musical event
Envelope control musical attributes of Notes
Part ordered set of Notes than can be performed
Score set of Parts that make up a musical piece
ScorePerformer plays each Part in a Score
ScoreRecorder records a Score, Part by Part and Note by Note
Orchestra manages a DSP to synthesize music
Conductor controls the timing of a group of objects
Instrument manages Notes in a performance
SynthInstrument synthesizes its Notes on the DSP
PartRecorder copies its notes onto a Part object
FileWriter writes its notes to a file on disk
NoteFilter modifies Notes and passes them on to other objects
Performer abstract class; sends a sequence of notes in time
FilePerformer performs music data from a file or stream
ScorefilePerformer performs music data from a scorefile
PartPerformer performs the Notes in a Part
NoteReceiver used by Instruments to realize Notes from Performers
NoteSender used by Performers to realize Notes on Instruments
TuningSystem represents a musical tuning system
SynthData represents DSP memory used in music synthesis
Midi provides and ObjC interfact to the MIDI driver
WaveTable represents a period of sound as a series of samples
Samples builds WaveTable of recorded samples
Partials builds WaveTable from sine wave components
PatchTemplate used as part of a SynthPatch
SynthPatch abstract class; represents a sound sythesis module
Pluck synthesizes the sound of a plucked string
Wave1 WaveTable synthesis; 1 table
Wave1v WaveTable synth; 1 table with vibrato
Wave1i WaveTable synth; 1 table with freq interpolation
Wave1vi WaveTable synth; 1 table with both
DBWave1v WaveTable synth; 1 table with vibrato
DBWave1i WaveTable synth; 1 table with interpolation
DBWave2vi WaveTable synth; 2 tables with both
Fm1 Freq modulation synth; simple fm
Fm1i Freq mod synth; simple fm with freq interpolation
Fm1v Freq mod synth; simple fm with vibrato
Fm1vi Freq mod synth; simple fm with both
Fm2cvi Freq mod synth; Cascade fm
Fm2cnvi Freq mod synth; Cascade fm with random mod. (noise)
Fm2pvi Freq mod synth; Parallel fm
Fm2pnvi Freq mod synth; Parallel fm with noise
UnitGenerator abstract class; building blocks of DSP synthesis
Add2UG Various types of UnitGenerators
AllPass1UG ...
AsympUG
ConstantUG
DelayUG
DswitchtUG
DswitchUG
InterpUG
Mul1add2UG
Mul2UG
OnepoleUG
OnezeroUG
OscgafUG
OscgafiUG
UscgUG
Out1aUG
Out1bUG
Out2sumUG
ScaleUG
Scl1add2UG
Scl2add2UG
SnoiseUG
UnoiseUG
Database Kit (DBKit) +
======================
Manages connections to entity-relationship database servers. The Database kit
includes these services: communication with client-server databases, modeling
properties (attributes and relationships) of each database, record management
and buffering, data flow between record managers and the application user
interface, and user interface objects for display and editing.
*Object*
DBDatabase represents a connection to a database server
DBExpression encapsulates a database expression as an object
DBQualifier represents cond. records must satisfy to be selected
DBValue stores a value of an arbitrary type
DBBinder connects database items to ObjC objects
DBModule maps database model entities to application objects
DBRecordStream represents a sequence of fetched database records
DBRecordList supports random access to a seq. of records
DBFetchGroup manages DBRecordList data with UI presentation
DBAssocation associates a property with a destination object
*Responder*
*View*
*Control*
DBImageView displays an NXImage object in a frame
*ScrollView*
DBTableView spreadsheet-like view for modifying tables of data
DBTableVector represents a field in a DBTableView
DBFormatter abstract class for formatting data
DBTextFormatter quickly formats read-only text data
DBEditableFormatter formats editable text data
DBImageFormatter formats, scales, and aligns image data
Indexing Kit (IXKit) +
======================
The Indexing Kit is a set of programmatic tools for managing data, especially
the large amounts of data characteristic of information-intensive applications.
Much as the Application Kit provides a framework for a graphical interface,
the Indexing Kit provides a framework for data management.
*Object*
IXStore relocatable storage allocator/manager
IXStoreFile disk-based IXStore
IXStoreBlock "wrapper" for a single block of storage in an IXStore
IXStoreDirectory allows access to objects in an IXStore by name
IXBTree associative (key-based) access to data in an IXStore
IXBTreeCursor a pointer to an item in an IXBTree
IXPostingCursor cursor that assumes data is sets of postings (below)
IXRecordManager manages large indexed collections of data
IXPostingSet manages a set of postings (refs to indexed records)
*List*
IXPostingList lazily retrieves objects from postings
IXFileFinder indexes and finds files with a general query language
IXFileRecord represents a file in the filesystem
IXAttributeParser parses text into lists of tokens
IXAttributeReader breaks text into tokens
IXLanguageReader abstract class; for tokenizing a specific language
IXWeightingDomain represents frequency information about a set of text
IXAttributeQuery processes a query against a conforming object
Mach Kit +
==========
The Mach Kit provides a number of classes for convenient use of Mach mutexes,
and a number of classes used by the Distributed Objects facility.
*Object*
NXData wrapper for (void *) data
NXLock object-oriented mutex lock
NXConditionLock as above, but waits on a condition
NXRecursiveLock as above, but same thread can acquire multiple times
NXSpinLock as above, for use with short critical sections
NXProtocolChecker restricts messaging access to remote objects
NXInvalidationNotifier notifies clients when a connection breaks
NXPort wrapper for a Mach port
NXNetNameServer provides ObjC interface to NeXT's NetNameServer
Distributed Objects Facility +
==============================
The Distributed Objects facility allows a process to send messages to objects
in the address space of a different process. For all practical purposes, the
remote object exists in the sending process. Nearly any message can be sent,
and many data types, including other objects can be sent and received
"across the wire."
NXProxy a "root" class that represents a remote object
*Object*
NXConnection manages a connection between remote objects
Phone Kit +
===========
The Phone Kit offers an easy way for a developer to connect an application to
a telephone line, to initiate and receive calls over the line, and to transmit
and receive data during a call. The phone line must be attached to the user's
computer, or to a computer on the user's network, through a Hayes ISDN
Extender(R) or an equivalent device.
*Object*
NXPhone represents a phone line connected to the computer
NXPhoneCall represents/manages a connection over a phone line
NXPhoneChannel represents a channel within a connection
3D Graphics Kit (3DKit) +
=========================
The 3D Kit uses RenderMan to create 3D scenes, much as the Application Kit
uses the PostScript language to draw 2D graphics. It also provides for
animation and real-time manipulation of rendered scenes.
*Object*
*NXImageRep*
N3DRIBImageRep NXImageRep for RenderMan RIB data
*Responder*
*Window*
*Panel*
N3DRenderPanel std Panel for selecting hosts to render scene on
*View*
N3DCamera renders a single 3D scene
N3DMovieCamera rederes a sequence of 3D scenes, providing animation
N3DShape abstract class representing a single 3D "object"
N3DLight represents a source of light in a scene
N3DShader handles surface shading/texturing/coloring
N3DRotator rotates/moves a 3D scene in various ways
N3DContextManager manages rendering contexts for an application
NetInfo Kit (NIKit) +
=====================
These are all standard panels for accessing NetInfo information. Strangely,
most aren't subclasses of Panel.
*Object*
NIDomain represents a NetInfo domain
NIDomainPanel std panel for selecting a NetInfo domain
NIOpenPanel std panel for opening an item in a domain
NISavePanel std panel for saving info for a domain
*Responder*
*Window*
*Panel*
NILoginPanel used, for example, to authorize root access to run an
app
Interface Builder Applicaton Classes (IB Classes) +
===================================================
These classes allow developers to expand the functionality of the
Interface Builder application, creating their own palettes of objects
that can be dragged into an interface, and inspectors to set and view
the attributes of those objects.
*Object*
IBInspector defines a custom Interface Builder inspector
IBPalette connects a loadable palette to Interface Builder
Preferences Application Classes +
=================================
These classes allow developers to add their own modules to the Preferences
application.
*Object*
Layout represents a Preferences module's layout view
Workspace Manager Application Classes +
=======================================
These classes allow developers to add their own file contents inspectors to
the Workspace Manager application.
*Object*
WMInspector represents a Workspace contents inspector
==============================
NeXT 3rd Party Class Libraries
==============================
[many others - NeXT now publishes an _Object Works_ Catalogue, which
tells of available classes]
BarCodeKit - an object library for creating bar codes in PostScript and
TIFF formats. (Hot Software, (617) 252-0088, info@hot.com)
SerialPortKit - generic serial port object, modem object, specific bar
code readers, magnetic stripe card readers and other serial
devices. (Hot Software, (617) 252 0088, info@hot.com)
GeoKit - objects that perform map rendering
(Deltos Fleet Computing, (214) 540-2301)
ChooserPalette - a selection list manager
(Objective Technologies, (212) 227 6767)
GraphPalette - tools for graphing data in custom apps
(Objective Technologies, (212) 227 6767)
MathPalette - tools for interfacing with Mathmatica
(Objective Technologies, (212) 227 6767)
SmartFieldPalette - supplies data input fields that restrict and format
input, report errors, and notify the user of field content
(Objective Technologies, (212) 227 6767)
Serial Solutions from BenaTong - Object wrappers for the UNIX ioctls, Modem
support and MagCard/BarCode reader support.
(BenaTong (614) 276-7850 benatong@count0.cmhnet.org)
--------------
This compendium is doomed to always be incomplete. If you would like
to add something to it that was left off, you can either contact me
directly (shirley@fdr.jsc.nasa.gov, Bill Shirley) or post to the group
comp.lang.objective-c. Contacting me directly will have better chances
of me making the change.
Again, thanks to all those who have helped, informed, and given feedback.
--
Bill Shirley
shirley@fdr.jsc.nasa.gov
--
``One lonesome body, Bill Shirley
one lonesome song. shirley@fdr.jsc.nasa.gov
No lonesome body,
no lonesome song.'' - throwing muses
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads