Inkapsling

Synnerligen intressant om Inkapsling


Inkapsling (Separation of Concerns)

Inkapsling i bemärkelsen Separation of Concerns (på svenska ungefär att hålla isär saker och ting, delegera) innebär inom datorprogrammering att man använder olika mekanismer för att separera sådant som på ett abstraktionsplan inte har med vartannat att göra. En av de mest uppenbara inkapslingarna man gör inom programmering enligt detta paradigm är att man alltid försöker hålla isär programkoden som opererar på data och själva data. Idealt ska den enda beröringspunkten mellan kod och data vara de operationer som koden utför på data. Ett exempel på detta är att man i moderna program nästan alltid håller isär den programkod som presenterar användargränssnittet mot användaren från de ledtexter och liknande som styr användningen - till exempel ledtexten "Spara som..." som kommer upp i en dialogruta när man begär att ett program ska spara det arbete man håller på med. På detta sätt blir det också enkelt att göra ett datorprogram multispråkligt - man byter språk på de data som innehåller programmets ledtexter, och vips har man skapat en ny språkversion av programmet. En annan vy på inkapsling enligt denna paradigm är att man i god programvarudesign alltid strävar efter att kapsla in den kod som ger ett program en viss egenskap - Separation of Features. Den kod som utför utskriftsarbeten kapslar man sålunda in och hanterar den som ett fristående block som man förser med ett API. Model - View - Controller-paradigmen (MVC, sv. Modell - Vy - Kontroll) är en inkapslingsmetod som tillhandahåller ett kraftfullt sätt att organisera komplexa applikationer. Angreppssättet är vanligt inom den objektorienterade världen. I detta fall utgår man från. I ett ordbehandlingsprogram är modellen det dokument som man arbetar med. Vyn är programmets presentation mot användaren av dokumentet. Kontrollen är de redigeringsuppgifter man utför på dokumentet. Modellen är i detta fall tämligen oförutsägbar, medan de operationer användaren vill utföra är väldigt förutsägbara. Det finns sällan behov av mer än ett fåtal vyer av modellen i ett sådant program. I en adressbok samlar man ofta på sig uppgifter om sin bekantskapskrets i form av. I detta fall bygger man upp sin modell med möjligheten att samla alla data om en viss person på ett sådant sätt att dessa bildar en ihopkopplad entitet - en datastruktur. Sedan identifierar man de vyer på denna modell som kan vara av intresse - exempelvis. I en välgjord design enligt MVC-paradigmet är det alltså en enkel sak att definiera nya vyer - dvs att sammanställa sina data på olika sätt och ur olika vyer. Anledningen till att detta blir enkelt är just att man har hållit isär saker som inte har med varandra att göra. Vilka data som ska bearbetas och hur dessa är organiserade: Modellen. Vilka delar av data som ska presenteras för användaren (som kan vara en mänsklig användare eller ett annat program) och hur de ska presenteras: Vyn. Vilka operationer som ska kunna utföras på data och hur: Kontrollen. Namn (förnamn, efternamn). Namn, adress, postadress, ort. Namn, arbetsplats och roll på arbetsplats.

Inkapsling (Datornätverk)

Inkapsling är en process inom datorkommunikation. I normalfallet infogas data från lager N i en protokollstack, i datapaket (Protocol Data Units), på lager N-1, eventuellt efter att ha delats upp i mindre datasegment eller paketfragment. Det nya paketet förses pakethuvud och eventuell en svans bestående av styrdata såsom adressinformation och felupptäckande kod. På mottagarsidan packar motsvarande lager upp paketet genom att ta bort kontrolldata och eventuellt sätta samman paketfragment eller datasegment till större paket, filer eller meddelanden. Varje lager kan på detta vis sköta en väldefinierad och strikt avgränsad uppgift. Man kan likna processen vid hur ett brev förses med detaljerat brevhuvud, läggs i ett kuvert med adressetikett, som läggs i och tas ut ur olika säckar, lådor och konteinrar med sina adressetiketter. Ansvariga på en viss nivå behöver inte bry sig om innehållet, utan enbart om adressetiketten på den nivån. Undantag från ovanstående är tunnling, som är en form av inkapsling som bryter mot kommunikationsstackens ordningningsföljd. Data från ett visst lager inkapslas i paket på samma eller högre nivå. Inkapsling och skiktade protokoll är inte optimalt ur alla synvinklar (lastens vikt blir större, och samma information upprepas på adressetiketterna), men ger flexibilitet. På samma sätt är skiktade protoll inom datakommunikation inte alltid optimala, utan kan fördröja kommunikationen och lägga till extra overhead, men ger flexibilitet så att ett lager kan förändras utan att hela systemet behöver anpassas. Inom forskning studeras ibland cross-layer-optimering. Detta innebär att man frångår protokollstackens strikta uppdelning för att effektivisera resursutnyttjandet, och utnyttja information från andra lager. Detta kan exempelvis utnyttjas i vissa routingprotokoll och paketschemaläggningsalgoritmer för att åstadkomma differentierad Quality of Service eller anpassa till tillfälliga störningar på en radiokanal. Eftersom den vanligaste protokollstacken för nätverk idag är TCP/IP-modellen, så exemplifieras processen här med HTTP-meddelanden som inkapslas i TCP-segment, som inkapslas i IP-datagram, som inkapslas i Ethernetramar. I TCP/IP-modellen förses ofta data som skall skickas med ett huvud med metainformation på applikationsnivån. Detta huvud varierar beroende på angivet protokoll. Så här kan ett utdrag se ut från en HTTP-överföring, när servern har svarat. Efter detta huvud följer de faktiska data som är överföringens syfte att förmedla. Protokollet TCP eller UDP delar vid behov upp applikationsdatan i mindre datagram, kallade segment på denna nivå. Applikationsnivåns eventuella huvud är som vilken data som helst i segmentet och behöver inte dupliceras i varje enstaka datagram. Segmenten förses med ett IP-huvud och blir då IP-paket. Segmenten kan vid behov också delas upp i mindre delar för att rymmas i dessa. IP-huvudet innehåller bland annat adress för mottagaren och avsändaren. Normalt är IP-paketen intakta hela vägen från sändare till mottagare. IP-paket som skickas på lokala nätverk som använder Ethernet eller Token Ring, men för det mesta också de som skickas på WAN, kapslas in i s.k. ramar. Vilket innebär att de förses med huvud och fot, också kallad svans. Vid behov kan IP-paketen behöva delas upp för att rymmas inuti Ethernet-ramen. Ethernetramen används bara för ett enda hopp mellan nätverksnoder. Ett IP-paket kan alltså komma att kapslas in i (och tas ut ur) åtskilliga ramar. På den fysiska nivån omvandlas ramarna till elektriska, optiska eller radiovågssignaler och överförs bit för bit eller symbol för symbol.

Objektorienterad programmering

Ett attribut är en variabel eller konstant som beskriver en egenskap hos ett objekt. Ett attribut ges ett namn så att det kan anropas/användas i programmet. Beroende på programmeringsspråk så kan man också behöva ange typ för attributet (heltal, flyttal, en pekare eller en textsträng till exempel) och det är ofta också möjligt att ange olika sekretessnivåer för attribut. Detta för att hindra eller öppna upp för åtkomst av andra delar av programmet som vill veta vad attributet har för värde eller namn. En metod är en funktion som kan hämta information från ett objekt eller manipulera objektets attribut. En metod som hämtar information benämns ofta getter (efter engelskans get, hämta) och en metod som ändrar ett attribut kallas setter (efter engelskans set, ställa in). Objektorienterad programmering betonar följande begrepp. OOP-konceptet tillkom på slutet av 1960-talet genom norrmännen Kristen Nygaard och Ole-Johan Dahls arbete med programspråket Simula. För detta fick de båda Turingpriset 2001. Delvis har OOP inneburit ett paradigmskifte inom programmering, och kan på så sätt jämföras med till exempel strukturerad programmering, som lanserades i slutet av 1970-talet. Väsentligen innebär OOP ett ökat fokus på de data och begrepp som används, snarare än de processer som ska genomföras med dessa data. OOP har tidvis använts, och missbrukats, som ett marknadsföringsbegrepp, och har då fått täcka flera olika metoder att modularisera och dela upp program. Beroende på vilket programmeringsspråk som har använts, har olika detaljer i och tolkningar av de grundläggande begreppen betonats och hävdats vara väsentliga. Det har till exempel förekommit diskussioner huruvida multipelt arv är nödvändigt för OOP, och om så kallad "dynamisk bindning" eller "sen binding" krävs för att uppnå de eftersträvade fördelarna med OOP. Begreppet Object-Based Programming (istället för Object-Oriented Programming, OOP) har myntats för programmeringsspråk som inte stöder alla delar i OOP-paradigmen t.ex. 1983 ISO-standarden av Ada (1995 blev Ada världens första ISO-standardiserade objektorienterade programmeringsspråk). Det går att programmera objektorienterat i en mängd olika programmeringsspråk. Nedan listas de mest välkända programmeringsspråken som stödjer objektorientering. Klass – Programmet byggs upp av delar, klasser, efter de begrepp som hanteras. Varje klass är en abstraktion av ett sådant begrepp, och innehåller både information och funktionalitet. Programmet kan ses som en uppsättning samverkande och interagerande objekt som vart och ett är av en viss typ/sort, de tillhör en viss klass. Inkapsling - Ett objekts exakta beteende och funktion är dold för omvärlden. Varje klass är en abstraktion och visar ett gränssnitt mot omvärlden som specificerar hur andra klasser får interagera med den. Detta garanterar att alla förändringar av ett objekt sker genom programkod som tillhör objektets klass. Ett visst objekt kan inte påverka ett annat objekt på annat sätt än genom detta objekts gränssnitt. Arv – Klasserna och begreppen är inte oberoende av varandra, utan kan i många fall ses som en kedja av sammanhängande begrepp, där vissa begrepp är allmänna och generella, medan andra är specialfall av de allmänna begreppen. Till exempel kan ett programsystem inom bankvärlden hantera det allmänna begreppet/klassen konto, men även specialfall som inlåningskonto, lönekonto, konto med kreditmöjlighet o.s.v. På så sätt tillhör ett visst objekt inte bara en klass utan en hierarki av klasser med ökande abstraktionsgrad. Funktionalitet som är gemensam för alla specialfallen, programmeras i den gemensamma "överklassen" och endast det som särskiljer specialfallet programmeras i den specialiserade "underklassen". En underklass ärver egenskaper och funktionalitet av den överklass den tillhör.

Roterdörr

Roterdörr eller karuselldörr är en typ av dörr som typiskt består av roterande dörrblad som hänger på en roterbar vertikalaxel, vanligtvis med en rund inkapsling.


Inkapsling