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.