I allmänhet i objektorienterad programmering är en klass en abstrakt definition av både (1.) datatyper och (2.) handlingar som kan utföras på dessa data. De senare kallas vanligen för objekt metoder.
Medan klasser bara beskriver en objekttyp på ett abstrakt sätt, kallas objekten som verkligen existerar i ett program för instans av en särskild klass.
Tag ett Skrivbordsprogramobjekt, till exempel: varje programobjekt är en instans av klassen WPProgram definierad av Skrivbordet. Programobjektdata (1.) är bland annat den *.EXE som är associerad med den (t.ex."CMD.EXE") medan (2.) metoder (som kan utföras med dessa data) är att starta programmet (genom att dubbelklicka eller välja menyalternativet "Öppna") eller ändra programmet i inställningsblocket. Trots att du inte kan "se" metoder från din skärm, så används metoder alltid internt när Skrivbordet gör någonting. Om du är obekant med den termen, kan metoder vagt beskrivas som en Application Programmer's Interface (API) till ett objekt. Om du kan REXX; varje gång du använder en av objektinställningssträngarna, för att modifiera ett objekts data, så anropar du faktiskt en metod för ett objekt.
Eftersom metoder är definierade för varje klass, så beror metoderna som du kan anropa ett objekt på dess klass. Jag har inte räknat dem, men WPObjekt, den mest basala Skrivbordsklassen, definierar mer än 100 metoder.
Vad som gör objektorienterad programmering så flexibel (och populär) är att du kan definiera släktskap mellan klasser. För att förstå detta är följande två koncept till hjälp:
Till exempel för Skrivbordet, Skrivbordsklassen (kallad "WPDesktop") härör från mappklassen (kallad "WPFolder"), vilket gör Skrivbordet till bara en speciell sorts mapp.
Så egentligen har Skrivbordet en vanlig mapps alla möjligheter: du kan placera andra objekt i den, sortera innehållet, öppna träd- eller detaljvisningssätt etc. Men Skrivbordsklassen tillhandahåller dessutom några ytterligare handlingar: dess meny har fler alternativ (såsom "Stäng av..." och "Systemkonfiguration"), dess inställningsblock har fler sidor etc. Uppenbarligen ärver Skrivbordet mappars karaktäristika, men lägger till några extra. Å andra sidan, några mappkaraktäristika är undertryckta: till exempel, du kan inte stänga det aktiva Skrivbordet och det saknar namnfält.
Skrivbordet tillämpar en derivativ struktur så att alla objekt är logiskt grupperade och beroende av varandra. På abstrakt nivå är alla Skrivbordets objektklasser avkomlingar av en enda klass "WPObject", som tillhandahåller vissa funktioner som alla Skrivbordsobjekt behöver: huvudsakligen förmågan att visa menyer, inställningsblock och liknande. Det är typiskt för objektorienterad programmering; en sådan global förfader klass kallas ofta för "rotklass" av en "klasshierarki".
På WPObject bygger Skrivbordet ett komplett klassträd, som är känt som Skrivbordklass hierarki. Du kan använda "Skrivbordklass" sidan i XFolder's "Skrivbord" objekt för att studera detta.
En sådan klasshierarki har fördelen att karaktäristika
kan ändras för denna rotklass enbart och alla klasser som härstammar
från den kommer också att ändras. (Nackdelen är --
från en programmeraren synpunkt -- att skapandet av en sådan
klasshierarki kräver mycket planering om vilka data och metoder som
är vanliga för vissa klasser och många gånger visar
det sig att denna planering inte var riktigt optimal. Men när denna
hierarki har byggts in på ett genomtänkt sätt -- vilket,
tack vare IBM verkligen är fallet med Skrivbordet -- är fördelarna
enbart utsökta.)
Ett av många exempel på detta kan ses med "Hjälp" menyalternativet, som finns i varje objekts meny. Val av "Allmän hjälp" alternativet resulterar i att en objekts wpDisplayHelp metod anropas. Denna metod är introducerad av Skrivbordets rotklass, WPObject, så att alla Skrivbordsobjekt kan visa hjälp: OS/2 hjälphanterare är initierad, hjälpfönstret är visat, etc. Den faktiska hjälpsidan som skall visas är dock överskuggad (i enlighet med polymorfism konceptet) av nästan varje Skrivbordsklass. På detta sätt visar "Hjälp"i en mapps meny någonting annorlunda än från t.ex. en programobjekt meny.
Medan arv och polymorfism är koncept kända för varje objektorienterad programmiljö (och också för objektorienterade språk, som C++), kan Skrivbordet även tillhandahålla sina fördelar över åtskilliga applikationer. Skrivbordet består av många DLL:er som är delvis oberoende av varandra och programmerare utanför IBM kan utöka Skrivbordet genom att använda dessa funktioner utan att ha Skrivbordets källkod, vilket inte är möjligt med "normala" objektorienterade språk.
Det fungerar bara därför att Skrivbordet använder IBM∩s egen System Objekt Modell (SOM), ett komplext system som ger objekt-orienterad programmeringsgränssnitt även över åtskilliga kodmoduler och även oberoende av programmeringsspråk. SOM är så kraftfullt därför att klasser skapas direkt vid systemstart och finns kvar under körning istället för kompilering.
Det är här Skrivbordsklasslistan kommer in: när Skrivbordet uppstartas, skapar det alla klasser (vilka i SOM är objekt också, men det är en komplex fråga) och etablerar släktskapen mellan dem bara vid denna punkt. Enbart på grund av detta är det möjligt att modifiera klasser utan att IBM, som skapade originalen, ens känner till det.
Bara en kort personlig åsikt om det som gör OS/2 unikt i dagens datavärld. Medan de flesta av dess andra fördelar framför andra operativsystem, som dess pålitliga multikörning, inte är så unika längre (t.ex. Linux är också ganska bra på det), så är användargränssnittet fortfarande försprång över alla operativsystem jag känner till, speciellt då Windows 95.