Dieser Optimierungsansatz ist die Antwort auf den zweiten Kritikpunkt an der ersten Version des Objektmodells. Durch vorhandene Typvariablen ist es zwar möglich, Objekte verschiedener Typen einer Klasse zu instantiieren. Dies steht jedoch in klarem Widerspruch zum objektorientierten Klassenkonzept, wonach alle Instanzen einer Objektklasse dieselben Eigenschaften aufweisen sollten. Insbesondere ist es innerhalb des vorliegenden Objektmodells also nicht möglich, verschiedenen Typen einer Objektklasse unterschiedliche Eigenschaften (Attribute, Operationen etc.) zuzuweisen, da jedes Objekt der Klasse (gleich welchen Typs) denselben Aufbau hat. So kann man zwar Objekte verschiedenen Typs der Klasse Device erzeugen (durch entsprechendes Belegen der Variablen Type); für jede dieser Komponenten stünden dann jedoch nur drei Variablen (Index, Description und State) zur Verfügung, die, separat betrachtet, nur über beschränkte Aussagekraft verfügen. Dies ist ein weiterer Grund, weshalb die virtuelle, also nicht instantiierbare Klasse Generic_Device zur Wurzel des Vererbungsbaumes wird. Soll nun ein Objekt für eine Systemkomponente erzeugt werden, so wird nicht etwa die Generic_Device-Klasse instantiiert, die nun als Containerklasse für allgemeingültige Attribute dient, sondern eine entsprechende Subklasse.
Ähnlich verhält es sich mit der Storage-Klasse. Hier können
zwar die Typen Ram, VirtualMemory, FLCache und
SLCache erzeugt
werden; es ist jedoch nicht möglich, den einzelnen Typen auch
unterschiedliche Eigenschaften zuzuordnen. Deshalb werden die neuen
Klassen permanentStorageDevice und volatileStorageDevice
eingeführt. Dabei fallen unter die erste Subklasse Komponenten wie
Festplatten, Magnetbänder oder Wechselfestplatten. Die zweite
Subklasse umfaßt diejenigen Komponenten, die ursprünglich über die
Storage-Klasse instantiiert wurden. Als Folge davon werden die
Subklassen Ram, VirtualMemory, FLCache und
SLCache eingeführt.