Documentation Set for Swarm 2.2
Prev | Swarm Changes and Compatibility | Next

# 5. Porting from 1.1 to 1.2

## 5.1. Major changes

There are really only two main changes which are likely to affect existing users, and all other changes required in user's applications mostly flow from these two changes:

- All Swarm functionality is now exported through a single, well-defined interface: Objective C protocols. Essentially this means that all creatable or subclass-able protocols now follow the same conventions as those in the defobj, activity and collections libraries. This means that static typing of Swarm protocols is now obsolete across the whole package.

- Library header files no longer include any of their individual class header files.

- The `XPixmap` protocol has now been changed to `Pixmap` to divorce itself from it's association with X-Windows.

## 5.2. Porting Guide

- Any subclass of a class defined as a Swarm protocol now requires the *specific* importation of that protocol's header file. Previously, only a warning was raised. This particularly affects `Swarm` and `SwarmObject`. If you define something like:

        @interface MyObject: SwarmObject

  then you need to include:

        #import <objectbase/SwarmObject.h>

  Similarly, if you subclass from Swarm, you will require `objectbase/Swarm.h`

- All references to objects conforming to Swarm protocols should either be defined to conform to the appropriate Swarm protocol, or be left untyped. In no circumstance should it be statically typed. In practice, this means that you can write, either:

         id <Grid2d> world;  OR
         id world;

  but NOT

         Grid2d *world;

  Note that this only applies to protocols defined by Swarm proper, not to your own classes, although it is good practice to adopt a convention and stick to it.

## 5.3. Porting example: heatbugs

`HeatSpace.h`

- Include header file for `space/Diffuse2d` (x)

`Heatbug.h`

- Make instance variable world conform to protocol: `id <Grid2d> world` NOT `id Grid2d *;` (x)

`Heatbug.m`

- In `[Heatbug -setWorld:]` method: make cast to protocol not static (x)

`HeatbugModelSwarm.h`

- HeatbugObserverSwarm.h

  - Make instance variable `id <Grid2d> world` NOT `Grid2d *world` (x)

  - Change static cast of `[HeatbugObserverSwarm -getWorld:]` method to protocol version (x)

  - Change all the below to conform to their respective protocols (x)

                          EZGraph *unhappyGraph;
                          Value2dDisplay *heatDisplay;
                          Object2dDisplay *heatbugDisplay;

## 5.4. Porting example: mousetrap

`MousetrapModelSwarm.h`

- Import `<objectbase/Swarm.h>` for subclassing from Swarm (*)

- Remove imports of `<activity.h> <collections.h> <simtools.h> <objectbase.h>` irrelevant, as not used in the interface. (x)

- Make instance of `Grid2d` conform to protocol, not static typed. (x)

`MousetrapObserverSwarm.h`

- Make instances of `EZGraph, Object2dDisplay` conform to protocol, rather than be statically typed. (x)

`Mousetrap.h`

- Remove import of `<objectbase.h>` (x)

Prev | Home | Next
Porting from 1.2 to 1.3 | Up | Porting from 1.0.5 to 1.1