&os2;'s Workplace Shell (WPS) beskrivs v„ldigt ofta som "objekt-orienterat". Den termen p†st†r att -- till skillnad fr†n anv„ndarinterfacen hos andra operativsystem -- „r allting Workplace Shell g”r f”rst betraktat som ett "objekt": det g„ller, till exempel, f”r &link_folders;, &link_datafiles;, skrivare, enhetsobjekt etc. Alla dessa objekt har vissa gemensamma karakt„ristika (som en &popmenu; och en notbok med egenskaper), men skiljer sig i vissa andra: till exempel, vad du ser i en &popmenu; beror p† det valda objektet.

F”r att b„ttre kunna hantera dessa gemensamma och olika karakt„ristika, anv„nder WPS "klasser". Den termen kommer fr†n objekt-orienterad programmering; en klass „r, s†-att-s„ga, ett abstrakt koncept, eller mall, f”r ett objekt. En klass „r d„rf”r inte synlig p† Skrivbordet, f”ljaktligen "existerar" den inte p† samma s„tt som objekt g”r, men den inneh†ller all information om egenskaper och m”jligheter hos ett objekt och den exekverbara koden f”r att f† ett objekt att utr„tta n†got.

Alla WPS klasser finns i dynamic link libraries (DLL'er). Till exempel, de flesta standard WPS klasserna finns i den stora PMWP.DLL filen i \OS2\DLL katalogen. Alla &xwp; klasser finns i XFLDR.DLL i &xwp;'s installationskatalog.

Nu „r varje objekt p† Skrivbordet en s†-kallad "instans" av n†gon klass. Namnen p† de flesta WPS klasser b”rjar med "WP": till exempel, en skrivare „r en instans av "WPPrinter" klassen, en mapp „r en av klassen "WPFolder", en datafil av "WPDataFile" och s† vidare.

Orsaken till kraften och flexibiliteten hos klasskonceptet „r att de olika klasserna kan vara nedstigande fr†n varandra. En s†dan avkomlingsklass kommer att „rva alla egenskaper och m”jligheter fr†n sin f”r„ldraklass. Det „r d„rmed m”jligt att g”ra vissa funktioner hos anv„ndarinterfacet mera abstrakt, i enlighet med den gamla principen: det b„sta s„ttet att hantera komplexitet „r abstraktion.

WPS inneh†ller m†nga klasser, vilken utg”r en v„ldigt t„nkv„rd hierarki ”ver arv. F”ljande utdrag fr†n WPS klasslista kanske kan g”ra den allm„nna strukturen mera ”versk†dlig (d„r linjerna representerar f”r„ldraskap):

 WPObject
   ÃÄÄ WPAbstract
   ³     ÃÄÄ WPPrinter
   ³     ÃÄÄ WPProgram
   ³     ÀÄÄ WPShadow
   ÃÄÄ WPFileSystem
   ³     ÃÄÄ WPDataFile
   ³     ³      ÃÄÄ WPIcon
   ³     ³      ÀÄÄ WPProgramFile
   ³     ÀÄÄ WPFolder
   ³            ÃÄÄ WPDesktop
   ³            ÀÄÄ WPStartup
   ÀÄÄ WPTransient
Du kan se att alla klasser „r arvingar till WPObject, vilken d„rf”r kallas "rotklassen" f”r alla WPS klasser. Denna implementerar alla de funktioner som „r vanliga i Skrivbordsobjekt: som n„mnts tidigare, t.ex. &popmenu;er och notb”cker med egenskaper. D„remot, „r WPObject klassen alldeles f”r abstrakt f”r att f”rekomma som instanser: den h„r klassen implementerades endast f”r att ha andra „rvande klasser. Objekt av den h„r klassen skulle inte fungera.

WPObject har endast tre arvingeklasser. Alla dessa klasser „r -- som WPObject -- endast avsedda att vara abstrakta f”r„ldraklasser, av vilka inga objekt skulle existera direkt.

  1. WPAbstract „r en allm„n f”r„ldraklass f”r s†-kallade "abstrakta" objekt, m.a.o. de objekt som inte existerar fysiskt p† disk, utan endast lagrar sina data i OS2.INI. De mest v„lk„nda exemplen f”r detta „r klasserna WPPrinter f”r skrivarobjekt, WPProgram f”r programobjekt, och WPShadow f”r skuggor. Alla dessa objekt kan f”rekomma i mappar, men „r inte synliga om du skriver DIR vid en kommandoprompt, till exempel.

  2. Som kontrast, WPFileSystem „r en allm„n superklass f”r objekt vilka existerar fysiskt i ett filsystem p† en enhet. Det finns tv† subtyper: mappar (WPFolder klass) och datafiler (WPDataFile). I sin tur, finns det †tskilliga subklasser av WPDataFile, som WPIcon f”r ikonfiler och WPProgramFile f”r programfiler (exekverbara, vanligtvis med .EXE „ndelsen). Alla datafiler f”r vilka det inte existerar n†gra fler specifika subklasser „r instanser av WPDataFile.

  3. Slutligen, WPTransient anv„nds av WPS f”r objekt vilka inte beh”ver spara sina data alls, utan existerar endast tempor„rt f”r att representera n†got. Exempel p† det „r utskriftsjobb i ett skrivarobjekt och alla devicer i H†rdvaruhanteraren.
WPS erbjuder ocks† en undantagsmekanism kallad klassutbyten. Den h„r funktionen anv„nds omfattande av &xwp; f”r att l„gga in alla sina funktioner i WPS genom att byta ut ett antal standard WPS klasser. Till exempel, XFolder klassen sj„lv byter ut WPFolder klassen f”r att implementera alla nya mappfunktioner.

En s†dan utbytesklass m†ste alltid vara arvinge till den klass som den skall byta ut; "utbyte" av klassen betyder d† att WPS alltid kommer att anv„nda utbytesklassen n„r originalklassen normalt skulle ha anv„nds. Som ett resultat, om &xwp; „r installerad, blir alla mappar p† ditt system inte l„ngre instanser av WPFolder, utan av XFolder. Men eftersom XFolder „r en arvinge hos WPFolder, „rvs standardmapparnas karakt„ristik och existerar fortfarande p† ditt system.

Genom att anv„nda klassutbyten kan programmerare implementera nya funktioner f”r en klass utan att i detalj beh”va k„nna till hur en klass fungerar internt. Detta „r ett enast†ende och kraftfullt koncept, vilket „r o”vertr„ffat av andra operativsystem.

Om du ”ppnar &xwp;'s "WPS Klasslista" objektet, kommer alla de installerade klasserna p† ditt system att visas. Regelm„ssigt, kommer detta att vara mer „n 100 klasser, vilka kommer att upptr„da i en tr„dstruktur. Genom att anv„nda &popmenu;er, kan du registrera och byta ut klasser h„r och „ven avregistrera klasser och †ngra klassutbyten. Dessutom, kan du f”rs”ka skapa ett objekt (vilket betyder: en instans) av m†nga klasser p† ditt Skrivbord.

Var v„nlig och notera att du m†ste vara mycket f”rsiktig n„r du manipulerar WPS klasslista. Genom att utf”ra en felaktig „ndring, kan du g”ra ditt system oanv„ndbart!