Ett distribuerat system för automatisk värdepappershandel arkitektur och modell

Storlek: px
Starta visningen från sidan:

Download "Ett distribuerat system för automatisk värdepappershandel arkitektur och modell"

Transkript

1 Ett distribuerat system för automatisk värdepappershandel arkitektur och modell Mattias Moltkesson TRITA-NA-E03152

2 NADA Numerisk analys och datalogi Department of Numerical Analysis KTH and Computer Science Stockholm Royal Institute of Technology SE Stockholm, Sweden Ett distribuerat system för automatisk värdepappershandel arkitektur och modell Mattias Moltkesson TRITA-NA-E03152 Examensarbete i datalogi om 20 poäng vid Programmet för datateknik, Kungliga Tekniska Högskolan år 2003 Handledare på Nada var Björn Eiderbäck Examinator var Stefan Arnborg

3 Sammanfattning Ett distribuerat system för automatisk värdepappershandel arkitektur och modell TradeLab är ett dotterbolag till E. Öhman J:or Fondkommission AB, som även äger NordNet, en av Sveriges största Internetmäklare. TradeLabs affärsidé är att utveckla ett system som kan användas av Internetmäklare för att automatiskt köpa och sälja värdepapper i vinstsyfte, s.k. trading. TradeLab har utvecklat en första version av ett sådant system. Systemet har dock flera brister som gör det svårt att vidareutveckla och olämpligt för installation hos externa användare. Man har därför beslutat utveckla ett nytt system som ger TradeLab större möjligheter att vidareutveckla verksamheten. I detta examensarbete presenteras en modell av de centrala delarna i det nya systemet. Det nya systemet ska vara objektorienterat och distribuerat och kommer därför att vara baserat på en arkitektur för distribuerade objektorienterade system. En del av examensarbetet är att avgöra vilken arkitektur som passar detta system bäst. Rapporten innehåller en utredning som jämför de tre arkitekturerna CORBA, Java RMI och Enterprise JavaBeans. Utredningens slutsats är att Java RMI är det bästa alternativet. Abstract A Distributed System for Automatic Trading Architecture and Model TradeLab is a subsidiary of E. Öhman J:or Fondkommission AB, a company that also owns NordNet, one of Sweden s largest Internet stockbrokers. TradeLab s mission is to create a system to be used by Internet stockbrokers for automatically buying and selling financial instruments for profit, known as trading. TradeLab has developed a first version of such a system. However, this system has several shortcomings that makes it difficult to improve and unsuitable for installation at other locations. It has been decided that this system shall be replaced by a new system that better suits TradeLab s needs. This thesis presents a model of the central components in the new system. The new system should be object oriented and distributed and will consequently be based on an architecture for object oriented distributed systems. Part of my master s project is to find the most suitable architecture for the new system. In this thesis I compare the three architectures CORBA, Java RMI, and Enterprise JavaBeans, concluding that Java RMI is the best alternative. 3

4 4

5 Förord Denna rapport redovisar mitt examensarbete i datalogi vid institutionen för numerisk analys och datalogi. Examensarbetet avslutar min civilingenjörsutbildning vid Kungliga Tekniska högskolan i Stockholm. Handledare på Nada var Björn Eiderbäck. Arbetet utfördes hos TradeLab AB. Handledare på TradeLab var Jon Malmsäter. Jag vill passa på att tacka mina handledare och alla andra som har hjälpt mig genomföra mitt examensarbete. Jag vill också tacka TradeLab för att ha givit mig förtroendet att designa ett nytt system åt dem, och jag hoppas att mitt system kommer att passa TradeLabs fortsatta verksamhet väl. Mattias Moltkesson Stockholm, januari

6 6

7 Innehållsförteckning KAPITEL 1 Inledning...9 KAPITEL 2 Bakgrund TradeLabs affärsidé Aktietrading Optionstrading Det befintliga systemet KAPITEL 3 Problembeskrivning...17 KAPITEL 4 Distribuerade objektorienterade system CORBA Remote Method Invocation Enterprise JavaBeans Sammanfattning Rekommendation KAPITEL 5 Det nya systemet Systemets komponenter Systemkonfigurationer Tekniska risker KAPITEL 6 Sammanfattning och utvärdering Utredningens resultat Uppfylls kraven? Källförteckning

8 8

9 KAPITEL 1 Inledning TradeLab är ett dotterbolag till E. Öhman J:or Fondkommission AB, som även äger NordNet, en av Sveriges största Internetmäklare. TradeLabs affärsidé är att utveckla ett system som automatiskt kan köpa och sälja värdepapper i vinstsyfte. Systemet är tänkt att användas av Internetmäklare och har därför tillgång till de order kunderna lägger via Internet. Det ger ökade möjligheter att tjäna pengar på kortsiktiga affärer. TradeLab har utvecklat en första version av ett sådant system. Genom ett samarbete med NordNet har man tillgång till order från NordNets kunder, och systemet används idag av TradeLab själva för handel i aktier och optioner. Systemet har dock flera brister som gör det svårt att vidareutveckla och olämpligt för installation hos externa användare. Man har därför beslutat utveckla ett nytt system som ger TradeLab större möjligheter att vidareutveckla verksamheten. Mitt uppdrag är att skapa en modell av de centrala delarna i detta system. Det befintliga systemet är baserat på CORBA, en arkitektur för distribuerade objektorienterade system. CORBA gör det möjligt för systemets komponenter att på ett enkelt sätt kommunicera med varandra trots att de befinner sig på olika datorer. Även det nya systemet ska använda en distribuerad arkitektur, men det är inte självklart att CORBA är det bästa alternativet. En viktig del av min uppgift är därför att utreda några olika arkitekturer och rekommendera en av dem för det nya systemet. Rapportens disposition Kapitel 2 ger en bakgrund till uppdraget. Här förklaras kort några strategier systemet kan använda för att uppnå vinst. Det befintliga systemet beskrivs också här. Kapitel 3 specificerar mitt uppdrag och de egenskaper det nya systemet ska ha. Kapitel 4 innehåller en utredning av ett antal distribuerade arkitekturer samt en rekommendation av ett av dem. Kapitel 5 presenterar min modell av det nya systemet. 9

10 10

11 KAPITEL 2 Bakgrund Handeln med aktier på Stockholmsbörsen har under de senaste tio åren genomgått en explosionsartad utveckling. Under perioden har antalet avslut ökat med i snitt 38 % årligen (se figur 2-1). Samtidigt har intresset för sparande i aktier ökat kraftigt bland privatpersoner. En anledning till detta är de nya möjligheter som Internet givit. Mäklartjänster som låter sina kunder lägga order via Internet har gjort handeln med aktier både enklare och billigare för privatpersoner. Internetmäklarna har idag över depåkunder [1] och de står för cirka 14 % av avsluten på Stockholmsbörsen [2]. Intresset för optioner har också ökat. Vid utgången av 1999 fanns omkring privatpersoner registrerade som derivatkunder hos OM Stockholmsbörsen, en ökning med 20 % från året innan [3]. 2.1 TradeLabs affärsidé Att köpa och sälja värdepapper i stor omfattning brukar kallas trading. För att verksamheten ska bli lönsam strävar man naturligtvis efter att sälja värdepapperen till ett högre pris än man köpte dem för. TradeLabs affärsidé är att utveckla ett system för högt automatiserad trading av aktier och optioner. Systemet ska i första hand användas av Internetmäklare, och kommer därför att ha tillgång till depåkundernas order innan de skickas till börsen. Man har då möjlighet att agera Figur 2-1 Antal avslut (miljoner) på Stockholmsbörsen [3]. 11

12 motpart till ordern (köpa de värdepapper kunden vill sälja eller vice versa). Affärerna görs normalt på mycket kort sikt, i storleksordningen minuter. Genom att systemet är automatiserat kan det genomföra ett stort antal affärer och sammanlagt skapa en betydande vinst trots att vinsten per affär är relativt liten. Systemet ska dels användas av TradeLab för att genom tradingen generera en vinst åt bolaget, dels säljas för att installeras hos andra Internetmäklare. För att illustrera hur systemet är tänkt att fungera ges i de följande två avsnitten några exempel på strategier som TradeLabs system kan använda för sin trading. Sannolikt kommer även andra strategier att användas, men dessa exempel räcker för att ge en uppfattning om vilka krav som ställs på systemet. 2.2 Aktietrading Syftet med handeln med aktier är som sagt att sälja aktierna till en högre kurs än man köpte dem för. Så långt fungerar TradeLabs system som en automatisk daytrader. Men eftersom systemet är installerat hos en Internetmäklare kan det få tillgång till de order kunderna lägger innan ordern skickas till börsen, och kan då agera motpart till ordern. För att förstå hur TradeLab kan utnyttja detta till sin fördel måste man veta hur aktiehandeln på börsen i stora drag fungerar. För varje instrument som handlas på börsen finns en orderbok. I orderboken registreras köp- och säljorder, rangordnade efter pris. Finns flera order med samma pris har de först registrerade företräde (se figur 2-2). Om det finns köp och säljorder med samma pris sker en matchning, och värdepapper och pengar byter ägare. Kunden får naturligtvis aldrig förlora på att avslutet sker mot TradeLab; det pris TradeLab ger får inte vara sämre än vad kunden kunnat få på börsen. Priset behöver å andra sidan inte heller vara bättre än marknadens. Studera exemplet i figur 2-2. Om en kund i detta läge lägger en säljorder med priset 543 kr, kan TradeLab agera motpart och köpa aktierna för 543 kr. Köper man aktierna på börsen måste man betala 544 kr för att vara säker på att affären omedelbart går igenom. I det här fallet kan man alltså säga att TradeLab har sparat en krona per aktie genom att slippa stå i den kö av köporder som finns i börsens orderbok. Kunden har däremot inte förlorat någonting, han skulle ju ha fått samma pris på börsen. Har man tur vill en annan kund strax därefter köpa aktier för 544 kr, men man kan också hoppas på att marknadspriset stiger och sälja aktierna på börsen. Helst ska systemet bara agera på kundernas order när sannolikheten för en gynnsam kursrörelse är stor. I figur 2-2 kan man t.ex. se att det bara finns 100 aktier till salu för 544 kr, men köporder på 700 aktier för 543 kr. Detta kan tyda på att kursen är på väg att stiga, och att det därför är lämpligt att köpa aktien nu. Köporder 300 st á 543 kr (kl 10.03) 400 st á 543 kr (kl 10.05) 200 st á 542 kr (kl 10.01) 500 st á 540 kr (kl 9.55) Säljorder 100 st á 544 kr (kl 10.04) 300 st á 545 kr (kl 10.02) 100 st á 545 kr (kl 10.03) 400 st á 546 kr (kl 10.06) Figur 2-2 Exempel på orderbok för en aktie. Klockslaget anger när ordern registrerades. 12

13 Systemet måste i hög grad vara automatiskt, eftersom kunderna inte skulle acceptera en lång fördröjning innan deras order når börsen. Därför är det inte möjligt att låta en människa fatta beslut i varje enskilt fall. Tanken är istället att systemet utifrån prisinformation från marknaden och generella parametrar från operatören, t.ex. om den förväntade prisutvecklingen, själv ska kunna fatta ett snabbt beslut när en kund har lagt en order. Blankning När man sparar i aktier brukar man först köpa aktier, för att vid en senare tidpunkt sälja dem. Detta förutsätter naturligtvis en stigande aktiekurs för att någon vinst ska uppstå. För en trader är det också möjligt att göra tvärtom, d.v.s. först sälja en aktie man inte äger för att sedan köpa tillbaka den. De aktier man säljer lånas av en annan aktieägare, som erhåller en viss ränta för besväret. Detta förfarande kallas blankning. Möjligheten till blankning är viktig för ett företag som livnär sig på trading, eftersom det blir möjligt att tjäna pengar även på aktier som sjunker i värde. Man är därför inte beroende av stigande börskurser för att kunna göra vinst. 2.3 Optionstrading Optioner är standardiserade kontrakt som ger innehavaren rätt att köpa eller sälja en underliggande vara till ett visst pris (lösenpriset). Utfärdaren av optionskontrakt påtar sig motsvarande skyldighet, och erhåller en premie för den risk det innebär. Eftersom innehavaren själv avgör om han vill utnyttja sin rättighet kommer det i praktiken bara att ske när det är gynnsammare än att köpa varan direkt på marknaden, d.v.s. när lösenpriset för en köpoption ligger under marknadspriset, eller när lösenpriset för en säljoption ligger över marknadspriset. Genom att kontrakten är standardiserade kan man bedriva handel i börsform, och det görs i Sverige av OM Stockholmsbörsen. Där handlas optioner där de underliggande varorna är aktier eller OMX-index, som i detta sammanhang betraktas som en fiktiv aktie. Kontrakten gäller under en viss löptid, och rättigheten att köpa eller sälja kan beroende på optionens typ utnyttjas under hela löptiden eller endast på sista dagen i löptiden, slutdagen. Optionskontrakt av den förra typen kallas amerikanska medan den senare typen kallas europeiska. Detta är dock bara benämningar, båda typerna handlas på båda sidor av Atlanten. I Sverige är aktieoptioner av amerikansk typ och indexoptioner av europeisk typ. Värdering Sex faktorer påverkar priset på en aktieoption [4]: Den nuvarande aktiekursen. Optionens lösenpris. Tid kvar till slutdagen. Aktiens volatilitet under löptiden. Ränteläget. Utdelningar under löptiden. Volatiliteten är ett mått på hur stora kursrörelserna är i en aktie. Eftersom det är den framtida volatiliteten som avgör optionens värde måste man göra en uppskattning, t.ex. genom att beräkna historisk volatilitet. Europeiska optioner kan värderas analytiskt med Black-Scholes formel. För amerikanska optioner måste däremot numeriska metoder 13

14 användas. Numeriska värderingsmetoder är mer beräkningsintensiva och ställer därför högre krav på ett systems prestanda. Handel Handeln med optioner skiljer sig något från aktiehandeln. Den mindre omsättningen och det relativt stora antalet optioner gör att skillnaden mellan köp- och säljkurs ofta är stor. Ibland saknas t.o.m. köpare eller säljare av en option. Här kan TradeLabs system hjälpa kunden genom att i vissa fall erbjuda ett bättre pris (närmare det teoretiska värdet) än marknaden. För att bestämma ett rimligt pris gör systemet en värdering av optionen, baserat på de faktorer som räknades upp ovan. Efter en sådan affär blir man ägare till eller utfärdare av ett antal optioner, som för tillfället inte kan handlas på marknaden till ett bra pris (det var ju anledningen till att affären gjordes). För att undvika att värdet på positionen förändras allt för mycket innan den kan avvecklas kan man använda en strategi som kallas hedging. Hedging innebär att man minskar positionens risk genom att göra kompletterande affärer. I detta fall kan man köpa eller sälja ett visst antal av den underliggande aktien för att få en portfölj av optioner och aktier vars totala värde är nästan konstant även om aktiekursen ändras. I figur 2-3 visas hur värdeförändringen i ett innehav av säljoptioner (som sjunker i värde när aktiekursen stiger) kan kompenseras genom att köpa en post i den underliggande aktien. Vid små kursförändringar ändras det sammanlagda värdet mycket lite, men eftersom värdet av optionerna inte är en linjär funktion av aktiekursen måste antalet aktier justeras vid större kursrörelser. Med denna metod elimineras bara de värdeförändringar som uppstår p.g.a. att den underliggande aktiens kurs förändras, man riskerar fortfarande att optionernas värde förändras av de övriga faktorer som styr optionspriset. I de flesta fall dominerar dock kursrisken varför denna metod oftast är tillräcklig. När systemet beräknar vilket pris det är villigt att handla vid måste det ta hänsyn till de kostnader, t.ex. avgifter för aktieaffärer, som hedgingen medför. Syftet är ju att det till slut ska bli en liten vinst över. 2.4 Det befintliga systemet Idag har TradeLab ett system som kan göra en del av det som beskriv- Optioner Värdeförändring Totalt Aktier Kursförändring Figur 2-3 Eliminering av kursrisk i ett optionsinnehav. 14

15 its ovan. Systemet har varit i drift i ungefär ett år. Det konstruerades från början för optionstrading, men har sedan byggts ut för att också klara aktietrading. Systemet tar emot optionskurser och kurser för underliggande aktier från Stockholmsbörsens optionshandelssystem, samt kundorder från NordNets Internettjänst. Baserat på kursinformationen och ett antal parametrar från operatören ställs kontinuerligt priser på optionerna. Om detta pris ligger inom kundens limit kommer systemet att agera motpart till ordern. Aktietradingen fungerar på ett liknande sätt. Teknik Systemet består av ett tiotal komponenter som körs i olika processer. För kommunikationen mellan komponenterna används CORBA. CORBA används också för att kommunicera med användargränssnittet och i gränssnittet till NordNet. För att skicka meddelanden asynkront mellan komponenterna används CORBAs Event Service. Gränssnittet till optionsmarknadens API OMnet (som är anpassat för C) är programmerat i C++, och körs på en UNIX-maskin. Denna komponent tar emot orderböcker och avslut från marknaden och översätter informationen till CORBA-strukturer som skickas vidare med Event Service. Övriga delar av systemet körs på NT-maskiner och är skrivna i Java. Enda undantaget är de numeriska optionsvärderingsrutinerna, som av prestandaskäl också implementerats med C++. Dessa rutiner anropas med Java Native Interface (JNI). Systemet kan närmast beskrivas som en prototyp, mest avsedd att visa hur automatisk trading kan fungera. Både design och dokumentation är bristfälliga, vilket gör systemet mycket svårt att förstå och att vidareutveckla. Det är också krångligt att installera och administrera, vilket gör det närmast omöjligt att sälja till externa användare. 15

16 16

17 KAPITEL 3 Problembeskrivning TradeLab står inför utmaningen att skapa en system som kan säljas som en produkt, och som därför måste kunna installeras och användas av andra än TradeLab själva. Man vill också införa nya och förbättrade funktioner i systemet. På grund av de brister som finns hos det befintliga systemet har man valt att utveckla ett nytt system som från grunden anpassats till de nya kraven. För att uppnå en högre grad av flexibilitet och skalbarhet ska det nya systemet, liksom det gamla, vara uppbyggt kring en distribuerad arkitektur. Det är dock inte självklart att den nuvarande arkitekturen, CORBA, passar bäst. Därför är det intressant att utreda ett antal distribuerade arkitekturer som kan komma ifråga. En given förutsättning är att det nya systemet så långt det är möjligt ska implementeras i Java, eftersom TradeLab anser att Java är det mest lämpliga språket med hänsyn till utvecklarnas produktivitet och slutresultatets kvalité. Dessutom ger det ett plattformsoberoende system som kan installeras på valfri server oavsett operativsystem. Kravspecifikation Det nya systemet ska ha följande egenskaper: Flexibilitet: Systemet måste kunna användas i olika konfigurationer, och nya funktioner ska lätt kunna införas. Händelsestyrt: Systemet måste kunna reagera på externa händelser, exempelvis kursförändringar och inkommande order från mäklarsystem. Det ska därför vara händelsestyrt: varje händelse startar en kedjereaktion i systemet som leder till att nödvändiga åtgärder vidtas. Korrekthet: Eftersom systemet helt självständigt gör aktie- och optionsaffärer är det mycket viktigt att de beslut som fattas är korrekta. Felaktigheter i systemet kan lätt orsaka stora förluster. Tillgänglighet: Om systemet är nere tjänar man naturligtvis inga pengar. Det är dock den enda konsekvensen, Internetmäklarnas kunder märker inte om detta system är i drift eller ej. Tillgängligheten behöver därför inte vara extremt hög, och det är acceptabelt att stänga av systemet tillfälligt om det skulle behövas. Prestanda: Att förutsäga vilka prestanda som krävs i systemet är mycket svårt eftersom belastningen kommer att variera beroende på var det är installerat och hur det används, men också från dag till dag beroende på hur aktiv marknaden är. Det är dock viktigt att hela tiden hålla fördröjningen i systemet nere, eftersom det krävs aktuella data för att kunna fatta korrekta beslut. Ett baskrav är därför att systemet själv kan upptäcka när det blir överbelastat och 17

18 då åtgärdar detta, om inte annat så genom att stänga av sig själv för att undvika att göra dåliga affärer. Mina uppgifter Min första uppgift var att utreda ett antal distribuerade arkitekturer och försöka avgöra vilken som passar det nya systemet bäst. Systemet har i huvudsak tre olika kommunikationsbehov: Mellan de olika komponenterna i systemet. Mellan systemets komponenter och användargränssnitten. Mellan systemet och externa system, t.ex. börser och mäklares datasystem. I det sistnämnda fallet är det ofta inte möjligt att välja hur kommunikationen ska gå till. Till exempel brukar börserna erbjuda ett eller flera gränssnitt som man måste anpassa sig till. Min utredning gäller därför främst vilken arkitektur som ska användas i de två första fallen. Utredningen redovisas i kapitel 4. Min andra uppgift var att skapa en modell av de centrala komponenterna i det nya systemet. För modellen ska Unified Modeling Language (UML) användas. Modellen presenteras i kapitel 5. 18

19 KAPITEL 4 Distribuerade objektorienterade system Objektorienterade system är uppbyggda kring objekt, en programkonstruktion som innehåller både data och programkod. Detta sätt att konstruera datasystem har blivit mycket populärt under det senaste decenniet, och det används nästan alltid i nya system. Ett distribuerat datasystem kan definieras som ett system av flera självständiga processorer som inte delar primärminne, men som samarbetar genom att skicka meddelande över ett nätverk [5]. Distribuerade objektorienterade system kombinerar dessa två tekniker, och låter objekt spridda över flera datorer kommunicera med varandra för att tillsammans lösa en uppgift. Anledningarna till att flera datorer används istället för en enda varierar. Ofta är det för att en ensam dator inte har tillräcklig kapacitet. I vissa fall beror det på att system som använder olika hårdvaruplattformar ska integreras. Man kan också uppnå högre driftsäkerhet genom att ha flera datorer som utför samma uppgifter, då systemet som helhet kan fortsätta fungera även om någon dator skulle haverera. Men distribuerade system medför också många problem [6]: Anrop till objekt över ett nätverk tar mycket längre tid än anrop till lokala objekt. Därför är det önskvärt att begränsa antalet anrop till objekt på andra datorer. Minneshanteringen blir svårare när flera datorer är inblandade. Klienter kan ha referenser till objekt på andra datorer. Om klienten avslutas normalt kan den tala om att den inte behöver det aktuella objektet längre, men skulle klientdatorn krascha fungerar inte denna metod. Att avgöra vilka objekt som kan tas bort är därför mer komplicerat i distribuerade system [7]. Om någon dator slutar fungera, eller det uppstår fel i kommunikationen mellan datorerna, hamnar systemet i ett svårdefinierat tillstånd där vissa delar av det blir otillgängliga. Därför krävs en mer omfattande felhantering i distribuerade system. Gränssnitt och implementationer En viktig del i den objektorienterade paradigmen är separationen av gränssnitt och implementationer. Ett gränssnitt är en överenskommelse mellan klient och objekt om hur objektet fungerar och ska användas. Syntaktiskt består gränssnittet av ett antal metoder med specificerade parametertyper och resultattyper. Denna del av gränssnittet skrivs i något programmeringsspråk och blir därför exakt definierad på ett sätt som även datorer kan förstå. En programmerare kan därför inte bryta denna del av överenskommelsen utan protester från systemet. Gräns- 19

20 public interface SimpleMath { Semantik // Returns the sum of two integers public int add(int term_a, int term_b); } Syntax Figur 4-1 Syntax och semantik i ett gränssnitt. snitt består också av en semantisk del, som beskriver vad metoderna gör och vilka regler som gäller för att använda objektet. Denna del av gränssnittet beskrivs med naturliga språk, t.ex. svenska eller engelska (se figur 4-1). För att kunna använda ett objekt måste man ha tillgång till en korrekt och fullständig beskrivning av det semantiska gränssnittet. Naturliga språk innehåller dock tvetydigheter, och därför finns det alltid en risk för misstolkningar. En implementation av ett gränssnitt består av programkod som motsvarar gränssnittets syntaktiska del (annars går den inte att kompilera) och förhoppningsvis också den semantiska delen. För ett givet gränssnitt kan det finnas flera implementationer. De olika implementationerna kan var och en välja en egen metod för att uppfylla den överenskommelse som gränssnittet innebär (se figur 4-2). Klienter använder gränssnitt och programmeras inte för att utnyttja en viss implementation. Det innebär att vilken implementation som helst kan användas, utan att klienten behöver ändras. Därför kan man när som helst ersätta en implementation med en annan som löser de uppgifter som gränssnittet ålägger den på ett annat sätt. Denna flexibilitet är en viktig anledning till att objektorienterad programmering blivit så populär. class Implementation1 implements SimpleMath { // Returns the sum of two integers public int add(int term_a, int term_b) { int sum = 0; while (term_a!= 0 term_b!= 0) { if (term_a > 0) { sum++; term_a--; } if (term_a < 0) { sum--; term_a++; } if (term_b > 0) { sum++; term_b--; } if (term_b < 0) { sum--; term_b++; } } return sum; } } class Implementation2 implements SimpleMath { // Returns the sum of two integers public int add(int term_a, int term_b) { return term_a + term_b; } } class Implementation3 implements SimpleMath { // Returns the sum of two integers public int add(int term_a, int term_b) { return 2 + 2; } } Den här implementationen är korrekt men ineffektiv. En effektivare implementation. Här har programmeraren gjort en möjlig, men sannolikt felaktig, tolkning av gränssnittets semantik. Figur 4-2 Tre olika implementationer av samma gränssnitt. 20

21 Det distribuerade dilemmat Normalt kan objekt bara anropa varandra om de ligger i samma adressrymd. En adressrymd är det minne som är tillgängligt för ett exekverande program. Program som körs på olika datorer kan inte dela en adressrymd eftersom datorerna inte har tillgång till varandras minneskretsar. I moderna operativsystem har av säkerhetsskäl ofta varje process en egen adressrymd. Därför kan objekt som ligger i samma dators minne ändå tillhöra olika adressrymder. I detta kapitel används ofta uttrycket objekt i annan dator, men det kunde alltså lika gärna stå objekt i annan adressrymd. Att anropa ett objekt som ligger inom samma adressrymd är enkelt. Parametrar och returvärde läggs på en överenskommen plats i minnet och själva anropet är en enkel hoppinstruktion. När ett objekt i en annan adressrymd ska anropas kan denna metod inte användas. Den viktigaste uppgiften för en arkitektur för distribuerade system är att göra det möjligt för objekt att anropa varandra även om de inte finns inom samma adressrymd, helst på ett sätt som ur programmerarens synvinkel liknar lokala anrop så mycket som möjligt. Objektkataloger Innan en klient kan anropa ett objekt i en annan dator måste den hitta objektet. Därför finns i alla distribuerade arkitekturer något sätt att registrera objekt i en gemensam katalog. I katalogen är varje objekt förknippat med ett namn. Om klienten känner till objektets namn kan den med katalogens hjälp få en referens till objektet. En objektreferens i ett distribuerat system är en lokal representant för ett objekt i en annan adressrymd. Oftast är det ett lokalt objekt med samma gränssnitt som det objekt det representerar, men med en implementation som vidarebefordrar anrop till moderobjektet. Tack vare separationen mellan gränssnitt och implementation kan alltså objekt i en annan adressrymd ersätta ett lokalt objekt, i princip utan att klientkoden måste ändras alls. I distribuerade arkitekturer är denna separation därför särskilt viktig. Protokoll För att vidarebefordra anrop över nätverket används något protokoll som specificerar hur parametrar, returvärde etc. ska överföras. Protokollet sätter gränserna för vad som är möjligt att göra i en arkitektur och är därför en central del i varje arkitektur. Det är en fördel om protokollet är standardiserat, eftersom system från olika tillverkare då kan fungera tillsammas. Objektöverföring I stället för att skicka en objektreferens till en annan dator kan vissa arkitekturer kopiera objekt från en dator till en annan. Det innebär att ett objekts tillstånd (dess instansvariabler) överförs och ett nytt objekt med samma tillstånd skapas på den mottagande datorn. En förutsättning för att detta ska fungera är att binärkoden för objektets implementation är tillgänglig och körbar på den dator som tar emot objektet. Det nya objektet är oberoende av sitt moderobjekt; ändringar i endera objektets tillstånd kommer inte att avspeglas i det andra. Fördelen med metoden är att det överförda objektet är ett lokalt objekt. Anrop till lokala objekt går mycket snabbare än anrop som måste skickas till en annan dator. Man behöver heller inte ta hänsyn till de fel som kan uppstå vid anrop till distribuerade objekt. Alla objekt kan dock inte utan vidare överföras till en annan dator. Objekt som på något sätt 21

22 representerar eller har referenser till lokala resurser, t.ex. en fil, en databasanslutning eller liknande, kan inte återskapas på den mottagande datorn. Avancerade middleware-funktioner I de flesta större distribuerade system räcker det inte att bara kunna anropa objekt på andra datorer, det behövs också mer avancerade funktioner, t.ex.: Transaktionshantering. Ändringar av objekts tillstånd ska kunna ingå i transaktioner. Transaktionen ska helst kunna omfatta flera objekt, på flera datorer. Persistens. Vissa objekt ska finnas kvar även om systemet stängs av och åter finnas tillgängliga när systemet startas igen. Säkerhet. Endast auktoriserade klienter ska ha rätt att utföra vissa åtgärder. Många arkitekturer försöker därför tillhandahålla sådana här tjänster på ett mer eller mindre integrerat sätt. Utredning I min uppgift ingick att undersöka ett antal arkitekturer för att konstruera distribuerade objektorienterade system. Jag valde att titta närmare på tre arkitekturer: CORBA Java RMI Enterprise JavaBeans I detta kapitel ges en kort beskrivning av var och en av dem. En av dem kommer jag att rekommendera för implementationen av TradeLabs nya system. Någon kanske saknar Microsofts DCOM i listan. Tradelab valde tidigt bort DCOM för sitt system, främst för att implementationer saknas till andra operativsystem än Microsofts egna. 4.1 CORBA CORBA (Common Object Request Broker Architecture) [8] är en standard för distribuerade objektorienterade system. Standarden definierar en objektbuss som, oberoende av plattform och språk, låter objekt anropa andra objekt [5]. Dessa objekt kan vara lokala men också finnas på en annan dator än det anropande objektet. Standarden fastställs av Object Management Group (OMG), en organisation med både mjukvaruföretag och slutanvändare som medlemmar. Antalet medlemmar är idag över 700 och inkluderar alla ledande företag i branschen utom Microsoft, som istället marknadsför sin egen standard DCOM. CORBA är därför en öppen standard, och CORBA-system levereras av många olika tillverkare. Idag finns CORBA-implementationer för de flesta operativsystem och programmeringsspråk. Historik Object Management Group (OMG) bildades 1989 av åtta stora företag med uppgiften provide a common architectural framework for objectoriented applications based on widely available interface specifications [9]. För att nå detta mål har OMG skapat Object Management Architecture (OMA). CORBA är den centrala delen i OMA. Den första versionen, CORBA 1.0, fastställdes i december I början av 1991 kom nästa version, CORBA 1.1, som bl.a. introducerade Interface Definition Language och ett API för att kommunicera med en Object 22

23 Request Broker (ORB), den komponent i CORBA som sköter kommunikationen mellan objekt i distribuerade system. Den största begränsningen i de tidiga versionerna av CORBA var att de inte innehöll något standardprotokoll för kommunikationen från en ORB till en annan. Därför kunde inte ORB-implementationer från olika företag kommunicera med varandra, vilket allvarligt begränsade användbarheten av CORBA-standarden. CORBA 2.0, som introducerades i december 1994, rättade till detta genom att införa protokollet Internet Inter-ORB Protocol (IIOP). För att kunna kalla sig CORBA 2.0- kompatibel måste alla ORB-implementationer använda sig av detta protokoll, och därmed kan ORB:ar från olika tillverkare samarbeta. Som namnet antyder använder detta protokoll TCP/IP, det nätverksprotokoll som används på Internet. Därför kan CORBA-anrop också göras över Internet. Gränssnitt CORBA är en objektorienterad arkitektur. Det innebär att objekt i CORBA har många likheter med objekt i objektorienterade språk, t.ex. polymorfism och gränssnittsarv. Dessa egenskaper kan användas även när CORBA används tillsammans med icke objektorienterade språk, men CORBA passar bäst tillsammans med objektorienterade språk som C++ och Java. En central del i CORBA-standarden är dess Interface Definition Language (IDL). CORBA IDL är ett C++-liknande språk för att definiera objekts gränssnitt, d.v.s. vilka metoder som finns och deras parametrar och resultattyper (se figur 4-3). IDL kan bara användas för att definiera gränssnitt, objekten måste implementeras i ett annat språk, t.ex. C++ eller Java, eller vilket språk som helst som någon har utvecklat CORBA-stöd för. Genom att ha ett eget språk för att definiera gränssnitt blir CORBA inte beroende av ett visst implementationsspråk. Nackdelen är förstås att alla programmerare som använder CORBA måste lära sig CORBA IDL. OMG definierar exakt hur IDL ska översättas till olika implementationsspråk. Själva översättningen görs automatiskt av utvecklingsverktygen. Eftersom översättningen är standardiserad går det att byta utvecklingsverktyg utan att behöva skriva om sin kod. Objekt i CORBA En objektreferens i CORBA kallas Interoperable Object Reference (IOR). En klient som vill anropa ett CORBA-objekt måste ha objektets IOR. Den kan t.ex. hämtas från CORBAs egen Naming Service, som beskrivs nedan. CORBA kan bara skicka referenser till objekt, aldrig objektet självt. Det innebär att alla anrop som görs med hjälp av en IOR måste skickas tillbaka till det ursprungliga objektet. Detta beror främst på CORBAs oberoende av språk, operativsystem och maskinvara. Om ett objekt ska skickas till en annan programmiljö måste det finnas en implementation interface SimpleMath { }; // Returns the sum of two integers long add(in long term_a, in long term_b); Figur 4-3 Exempel på gränssnitt definierat med CORBA IDL. 23

24 av objektet (d.v.s. körbar programkod) i den mottagande miljön, något som CORBA inte generellt kan garantera. Eftersom alla anrop till ett objekt på en annan dator måste skickas över nätverket bör man vara försiktig när systemet designas så att inte alltför många anrop görs till icke-lokala objekt, då detta kan ge dåliga prestanda. Vill man överföra strukturerade data till en annan dator har man möjlighet att istället för objekt använda C-konstruktionen struct. Eftersom en struct till skillnad från objekt inte har någon tillhörande programkod är de oberoende av språk och hårdvara och kan lätt kopieras till en annan dator. Man går dock miste om de fördelar som objektorienterad programmering ger. Object Request Broker I CORBA ansvarar en Object Request Broker (ORB) för kommunikationen med andra datorer (se figur 4-4). Ett anrop till ett objekt på annan dator går via en lokal ORB, som kontaktar den ORB som sköter det anropade objektet. Information om vilken ORB som ska kontaktas finns i objektens IOR. Normalt göms objektets IOR i en stub. En stub är ett objekt som har samma gränssnitt som det objekt som ska anropas, men där implementationen innehåller kod för att anropa det riktiga serverobjektet med hjälp av en ORB (se figur 4-5). På så vis kan ett anrop till ett CORBA-objekt göras på samma sätt som till ett lokalt objekt. Stub-filer skapas av utvecklingsverktyget utifrån informationen i serverobjektets IDL-fil. CORBA Services CORBA erbjuder en begränsad basfunktionalitet, som relativt lätt kan implementeras även på mindre kraftfull hårdvara. I större system krävs dock ofta fler funktioner. OMG har försökt standardisera ett antal sådana funktioner, så att de kan erbjudas som tilläggstjänster i ett Figur 4-4 Schematisk skiss över ett distribuerat CORBA-system. 24

25 CORBA-system. De kallas tillsammans CORBA Services. Idag har 15 tjänster standardiserats [5]. För varje tjänst gäller att den löser en specifik uppgift, och gör det väl, samt att tjänsten är generellt användbar i datasystem. Precis som med övriga delar av CORBA har OMG bara specificerat hur tjänsterna ska fungera, men inte implementerat dem. Det är valfritt för leverantörer av CORBA-system att tillhandahålla implementationer av dessa tjänster, och även om det knappast finns någon som implementerat alla tjänster brukar de viktigaste finnas med i varje CORBA-system. Eftersom tjänsternas gränssnitt definierats med CORBAs IDL kan de anropas på samma sätt som andra CORBA-objekt, och de kan användas av alla klienter oavsett programmeringsspråk. Standardiseringen gör även att implementationer från olika tillverkare kan kombineras. Några av de viktigaste tjänsterna är: Naming Service, som gör det möjligt att associera objekt med logiska namn, vilket underlättar konfigurationen av stora distribuerade system. Naming Service arbetar med naming contexts, som kan betraktas som listor med namn och tillhörande objekt. Ett namn kan också associeras med ett annat naming context, för att på så vis bygga upp ett hierarkiskt system av namn, på samma sätt som i ett filsystem. Transaction Service hanterar transaktioner i vilka flera CORBAobjekt deltar. Tjänsten stödjer både nästlade och onästlade transaktioner, och kan koordinera transaktioner även mellan objekt som använder olika tillverkares ORB:ar. Security Service kan identifiera användare och kontrollera att de bara använder objekt de har rätt att använda. Tjänsten kan bl.a. också kryptera kommunikationen mellan objekt. Figur 4-5 Anrop till ett objekt i CORBA. 25

26 Event Service ger tillgång till asynkrona meddelandeköer. Tjänsten är uppbyggd kring händelsekanaler. Till en kanal hör ett antal producenter, som sänder händelser, och konsumenter, som tar emot dem. Event Service är en enkel meddelandetjänst utan stöd för t.ex. persistenta köer (d.v.s. köer där meddelanden finns kvar efter systemkrasch) och transaktioner, men är trots det ofta användbar. För- och nackdelar Den avgjort största fördelen med CORBA är dess oberoende av programmeringsspråk och operativsystem. Detta kommer bäst till sin rätt i stora, heterogena system, men innebär också att man inte blir bunden till en viss utvecklingsmiljö om man använder CORBA i sitt system. CORBA har också med tiden hunnit bli en relativt etablerad och mogen standard, och de flesta barnsjukdomar är avhjälpta. Genom CORBA Services kan CORBA erbjuda även avancerade middlewaretjänster. Att skriva program som utnyttjar dessa tjänster kräver dock mycket av utvecklaren, som måste lära sig ett antal komplicerade programmeringsgränssnitt. Till nackdelarna hör att stöd för att skicka objekt saknas. Detta innebär att ett objekt aldrig kan flyttas från en dator till en annan. Därför går det inte att använda objekt för att på ett effektivt sätt flytta strukturerade data i systemet. För den som utvecklar ett system i ett enda språk innebär anpassningen till CORBA och dess IDL en del extra arbete, samt att en del kompromisser sannolikt måste göras för att gränssnitten ska passa både CORBA och implementationsspråket. 4.2 Remote Method Invocation Java Remote Method Invocation (RMI) [10] är Javas egen teknik för enkel, men ändå kraftfull, nätverkskommunikation. Det ingår som standard i Java fr.o.m. version 1.02, och kostar därför inget extra. RMI gör det möjligt att skriva distribuerade objekt i Java och låter objekt kommunicera även om de befinner sig i olika virtuella maskiner [11]. Arkitektur Inom RMI kallas ett objekt som kan anropas från en annan virtuell maskin remote object. Ett remote object implementerar minst ett gränssnitt för distribuerade objekt, som i RMI kallas remote interface. Eftersom RMI till skillnad från CORBA bara stödjer Java behövs inget speciellt språk för att beskriva objektens gränssnitt. Istället används den befintliga språkkonstruktionen för gränssnitt, interface (se figur 4-6). Ett remote interface måste implementera gränssnittet java.rmi.remote. Detta gränssnitt definierar inga metoder; dess enda syfte är att markimport java.rmi.*; public interface SimpleMath extends Remote { } // Returns the sum of two integers public int add(int term_a, int term_b) throws RemoteException; Figur 4-6 Exempel på gränssnitt i Java RMI. 26

27 era att ett gränssnitt är ett remote interface. Dessutom måste varje metod som ska kunna fjärranropas kasta undantaget java.rmi.remote- Exception. Detta undantag kastas av RMI-systemet om något problem uppstår vid ett anrop. Anrop till distribuerade objekt görs på nästan exakt samma sätt som vanliga anrop. För att åstadkomma detta använder RMI en stub, ett lokalt objekt som ansvarar för att lokala anrop tas emot och skickas vidare till det faktiska objektet. Den enda skillnaden mot vanliga anrop är att man på något sätt måste hantera java.rmi.remoteexception. Varje gränssnitt måste ha sin egen stub-klass eftersom en stub måste ha samma metoder som de objekt den representerar. Därför finns ett program, rmic (RMI Compiler), som skapar stub-klasser för de gränssnitt man vill använda med RMI. På den mottagande sidan finns ett skeleton som tar emot anrop över nätverket (från en stub) och i sin tur anropar det avsedda objektet lokalt. Även här blir effekten att nätverket blir osynligt för objekten. Serialisering För att skicka metodparametrar och resultat över nätet använder RMI Javas serialiseringsteknik. Serialisering innebär att objekt omvandlas till en vektor av bytes som lätt kan överföras till en annan dator. Om objektet innehåller referenser till andra objekt måste de också serialiseras och skickas till den mottagande datorn. Processen upprepas rekursivt tills hela objektgrafen serialiserats. På den mottagande datorn sker en omvänd process som återskapar objektgrafen i dess adressrymd. Detta innebär att metodanrop med RMI skapar kopior av objektparametrarna på den mottagande datorn; om objekten ändras där kommer orginalobjekten förbli oförändrade. Vid lokala anrop skickar Java referenser till objekt, och de ändringar som görs av den anropade metoden påverkar samma objektinstans som skickades. I vissa situationer är denna skillnad av avgörande betydelse och man måste ha den i åtanke när man använder RMI. Man bör också tänka på att en objektgraf kan vara mycket stor i serialiserad form, och därför ta lång tid att överföra. Objekt som implementerar gränssnittet java.rmi.remote, och alltså är ett remote object, särbehandlas av RMI. Istället för att serialisera objektet själv serialiseras en stub för objektet, som överförs till den mottagande datorn. Eftersom alla anrop till en stub skickas vidare till dess moderobjekt simuleras Javas normala beteende. Det går också relativt snabbt att överföra en stub, oavsett hur stort objektet det representerar är i serialiserad form. Å andra sidan måste varje anrop till objektet från den mottagande datorn skickas tillbaka över nätet, något som också kan ta oacceptabelt lång tid. Vilken metod som passar bäst måste alltså avgöras från fall till fall. Distribuerad skräpsamling En viktig finess i Java är dess system för automatisk skräpsamling. Skräpsamlingen innebär att objekt som det inte längre finns några referenser till kastas bort ur minnet. Därmed slipper programmeraren, som i t.ex. C++, själv hålla reda på när ett objekt ska tas bort, något som är besvärligt och ofta blir fel. När det, som när man använder RMI, kan finnas referenser till objekt på andra datorer blir en automatisk skräpsamling mycket svårare att implementera. Till exempel kan datorer som har referenser till objekt krascha när som helst, och nätverket kan oväntat sluta fungera. På något sätt måste man ändå hålla reda på om det finns referenser till ett objekt på andra datorer, eftersom objektet då 27

28 måste finnas kvar. I RMI har problemet lösts genom att varje stub med jämna mellanrum skickar ett meddelande till orginalobjektet för att tala om att det fortfarande finns någon som kan vilja använda det. Om inget meddelande mottagits på ett tag (exakt hur länge kan ställas in), kan man anta att inga referenser finns kvar och att objektet kan tas bort, förutsatt att det inte finns några lokala referenser givetvis. Med denna metod spelar det ingen roll varför referenserna försvinner, förr eller senare kommer man i alla fall att upptäcka att objektet inte längre behövs. Överföring av implementationer Tack vare att Java använder en gemensam s.k. bytekod som tolkas av en virtuell maskin vid exekvering kan samma programkod köras av alla datorer, oavsett vilken hårdvara och operativsystem som används. Detta gör det möjligt för RMI att inte bara överföra objekts data till en annan dator utan också den kod som implementerar objekten. Därför kan RMI skicka objekt till en annan dator även om inte klassens programkod har installeras där på förhand. Ett system som använder RMI kan därför uppdateras mycket enkelt: den nya koden behöver bara installeras på en server och kan därefter hämtas automatiskt av de klienter som behöver den. RMI over IIOP RMI:s eget protokoll för metodanrop över nätverk heter Java Remote Method Protocol (JRMP). Detta protokoll är utvecklat speciellt för RMI och stödjer alla dess funktioner. Istället för JRMP kan man i senare versioner av RMI använda CORBAs nätverksprotokoll, IIOP [11]. Det gör det möjligt för CORBA-klienter att anropa RMI-objekt och vice versa. Alltså blir det möjligt att, med hjälp av CORBA, blanda olika programmeringsspråk i ett system trots att man använder RMI för de delar som skrivs i Java. Priset för detta är att inte alla funktioner i RMI kan användas, eftersom IIOP inte är anpassat för Java på samma sätt som JRMP. Bland annat fungerar inte den distribuerade skräpsamlingen, utan man måste själv hålla reda på när objekt inte längre används av någon klient [11]. För- och nackdelar RMIs största fördel är att det är så väl integrerat med Java. Man behöver inte lära sig ett nytt språk för att definiera gränssnitt, och man måste inte kompromissa för anpassa sina program till begränsningar i gränssnittsspråket. Att RMI kan överföra hela objekt i ett distribuerat system gör att programmen kan utnyttja den objektorienterade paradigmen fullt ut. Att även objektens implementationer kan överföras är en stor fördel eftersom det kan förenkla administrationen i ett distribuerat system avsevärt. Eftersom RMI ingår som standard i Java krävs inte heller att extra programvara köps in och installeras. Man måste dock komma ihåg att RMI är ett enkelt system, och att avancerade middleware-funktioner saknas. Vill man använda t.ex. transaktioner med RMI måste man implementera dem själv, vilket blir mycket komplicerat om transaktionerna involverar flera distribuerade objekt. 4.3 Enterprise JavaBeans Enterprise JavaBeans är en del av Java 2 Enterprise Edition (J2EE), Suns plattform för att utveckla serverapplikationer i Java-miljö. Syftet 28

29 med J2EE är att erbjuda en miljö för serverapplikationer som är plattformsoberoende, portabel, säker och standardiserad. J2EE är en utvidgning av Java 2 Standard Edition (J2SE), och består av J2SE tillsammans med en samling av tekniker som är användbara i serverapplikationer. I J2EE version 1.2 ingår förutom J2SE dessa komponenter [12]: Java Database Connectivity (JDBC) 2.0. JDBC är ett standardiserat gränssnitt till relationsdatabaser. RMI-IIOP 1.0. En utvidgning av RMI som ger interoperabilitet med CORBA och dess protokoll IIOP. Enterprise JavaBeans (EJB) 1.1. Den komponentarkitektur för distribuerade system som beskrivs i detta avsnitt. Servlets 2.2. En komponentarkitektur speciellt anpassad för request/response-protokoll, t.ex. HTTP. Java Server Pages (JSP) 1.1. En standard för att skriva java-kod i HTML-sidor. Java Messaging Service (JMS) 1.0. JMS ger tillgång till asynkrona meddelandetjänster. Java Naming and Directory Interface (JNDI) 1.2. Ett standardiserat gränssnitt till katalogtjänster. Används t.ex. för att hitta EJBkomponenter. Java Transaction API (JTA) 1.0. Ett gränssnitt för transaktionshantering. JavaMail 1.1. Ett gränssnitt för att skicka e-post. JavaBeans Activation Framework (JAF) 1.0. Används av JavaMail. Precis som CORBA är J2EE är en specifikation, inte en produkt. Implementationer av J2EE levereras av en mängd olika tillverkare. Sun tillhandahåller en referensimplementation, men den ska ses mer som ett sätt att undanröja tvetydigheter i specifikationen snarare än en riktig produkt, och dess funktioner och prestanda duger knappast för verkliga system. Sun har också en uppsättning testprogram som ska garantera att en implementation är felfri och följer specifikationen. Enterprise JavaBeans Enterprise JavaBeans är den viktigaste delen av J2EE. Det är en komponentarkitektur som låter utvecklare enkelt skapa skalbara distribuerade affärssystem med Java [13]. En Enterprise JavaBean (kallas nedan bean eller EJB-komponent) är en återanvändbar programvarukomponent som kan användas som en del i ett större system. Programmerare som använder EJB ska inte själva behöva implementera komplexa middleware-funktioner som transaktioner och hantering av persistenta objekt. Precis som andra Java-tekniker är EJB plattformsoberoende. Det ska också vara möjligt för komponenter som utvecklats med verktyg från olika leverantörer att fungera tillsammans. Roller EJB-specifikationen utgår från en definition av sex olika roller i utvecklingen av ett system [13]. Varje roll kan utföras av olika aktörer. EJBarkitekturen säkerställer att varje aktörs produkt ändå fungerar tillsammans med de andras. Ofta antar en aktör flera roller, t.ex. kan en programmerare vara både bean-leverantör och applikationsutvecklare. Bean-leverantören skapar återanvändbara mjukvarukomponenter (beans) som kan användas som delar i ett system. Server-leverantören och Container-leverantören tillhandahåller den exekveringsmiljö som behövs för att köra applikationerna och 29

Distribuerade affärssystem

Distribuerade affärssystem Distribuerade affärssystem Kursens mål Bygga upp, strukturera och programmera distribuerade system med en flerskiktsarkitektur Beskriva och förklara teorier och uttryck som används inom affärskritiska

Läs mer

Förra föreläsningen: Olika nivåer av meddelanden. Från oblockad sändning till. RPC: Parameterpassning, registrering, felhantering, säkerhet, kompilering ONC RPC: XDR, portmapper Brandväggar, dynamisk brandväggskonfigurering,

Läs mer

VAD ÄR EN AKTIEOPTION? OPTIONSTYPER AN OTC TRANSACTION WITH DANSKE BANK AS COUNTERPARTY.

VAD ÄR EN AKTIEOPTION? OPTIONSTYPER AN OTC TRANSACTION WITH DANSKE BANK AS COUNTERPARTY. Information om Aktieoptioner Här kan du läsa om aktieoptioner, som kan handlas i Danske Bank. Aktieoptioner är upptagna till handel på en reglerad marknad, men kan även ingås OTC med oss motpart. AN OTC

Läs mer

Kopiering av objekt i Java

Kopiering av objekt i Java 1 (6) Kopiering av objekt i Java Först När du läser detta papper bör du samtidigt studera dokumentationen för klasserna Object, Cloneable (java.lang) och ArrayList (java.util). Mycket blir klarare genom

Läs mer

Turbowarranter. För dig som är. helt säker på hur. vägen ser ut. Handelsbanken Capital Markets

Turbowarranter. För dig som är. helt säker på hur. vägen ser ut. Handelsbanken Capital Markets Turbowarranter För dig som är helt säker på hur vägen ser ut Handelsbanken Capital Markets Hög avkastning med liten kapitalinsats Turbowarranter är ett nytt finansiellt instrument som ger dig möjlighet

Läs mer

Web Services. Cognitude 1

Web Services. Cognitude 1 Web Services 1 Web Services Hur ska tillämpningar integreras? Hur ska tillämpningar integreras (via nätet ) för att erbjuda tjänster åtkomliga på nätet? SVAR: Web Services (Enligt Microsoft, Sun, IBM etc.)

Läs mer

Enterprise Java Beans Assignment 1

Enterprise Java Beans Assignment 1 Enterprise Java Beans Assignment 1 Distribuerade System HT 02 Fredrik Lundgren Andreas Nyberg fredrikbjurefors@hotmail.com goca8363@student.uu.se frlu4469@student.uu.se andreas.nyberg@hushmail.com Innehållsförteckning

Läs mer

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl Högskolan Dalarna sid 1 av 6 DI-institutionen Hans-Edy Mårtensson Sten Sundin FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY2 2001-03-16, kl 14.00-18.00 1. Grunderna i

Läs mer

Distribuerade system. CORBA eller RMI

Distribuerade system. CORBA eller RMI Distribuerade system Java XII - 1 CORBA eller RMI Java XII - 2 Några motiv till distribuerade system kan vara att: Utjämna belastningen mellan olika maskiner i ett nätverk Utnyttja kapaciteten i en större

Läs mer

Del 16 Kapitalskyddade. placeringar

Del 16 Kapitalskyddade. placeringar Del 16 Kapitalskyddade placeringar Innehåll Kapitalskyddade placeringar... 3 Obligationer... 3 Prissättning av obligationer... 3 Optioner... 4 De fyra positionerna... 4 Konstruktion av en kapitalskyddad

Läs mer

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA för SY2 1999-03-17, kl 14.00-18.00 Hjälpmedel: En lärobok i Java programmering Återlämningstillfälle:

Läs mer

Hedging och Försäkring (prisskydd/prisförsäkring)

Hedging och Försäkring (prisskydd/prisförsäkring) Hedging och Försäkring (prisskydd/prisförsäkring) Hedging En hedge kan översättas med ett skydd eller en säkring ; till exempel ett valutaskydd eller en valutasäkring i en transaktion som ska ske i framtiden.

Läs mer

Datalagringsmetodik och arkitektur i Java. Projektdefinition. Projektdefinition. Björn Brenander. 7 maj 2001

Datalagringsmetodik och arkitektur i Java. Projektdefinition. Projektdefinition. Björn Brenander. 7 maj 2001 Datalagringsmetodik och arkitektur i Java Projektdefinition Dokumenttitel Projektdefinition Dokumentansvarig Dokumentförfattare Björn Brenander Dokumentnamn Projektdefinition.doc Version 16 Ref. nr. Skapades

Läs mer

Repetition DK2 Middleware, P2P, Multimediatransport. Stefan Alfredsson 18 Mars 2005

Repetition DK2 Middleware, P2P, Multimediatransport. Stefan Alfredsson 18 Mars 2005 Repetition DK2 Middleware, P2P, Multimediatransport Stefan Alfredsson 18 Mars 2005 Några definitioner på middleware Klistret som gör det möjligt för en klient att få betjäning av en server / i klient/server

Läs mer

Del 3 Utdelningar. Strukturakademin

Del 3 Utdelningar. Strukturakademin Del 3 Utdelningar Strukturakademin Innehåll 1. Implicita tillgångar 2. Vad är utdelningar? 3. Hur påverkar utdelningar optioner? 4. Utdelningar och Forwards 5. Prognostisera utdelningar 6. Implicita utdelningar

Läs mer

Godkännande av kundapplikationer

Godkännande av kundapplikationer samhällsskydd och beredskap 1 (9) Godkännande av kundapplikationer MSB-50.2 samhällsskydd och beredskap 2 (9) Innehållsförteckning 1 Alla applikationer måste godkännas... 3 1.1 Hur går ansökan om godkännande

Läs mer

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA, 5p för SY2 2001-03-16, kl 14.00-18.00 Hjälpmedel: Inga hjälpmedel är tillåtna

Läs mer

Johan.Sall.2535 Thomas.Wahlsten Distribuerade System HT 2002

Johan.Sall.2535 Thomas.Wahlsten Distribuerade System HT 2002 Johan.Sall.2535 Thomas.Wahlsten.1711 Distribuerade System HT 2002 Sammanfattning Vår uppgift har varit att skriva en rapport om CORBA, en av de tidigaste och mest använda arkitekturerna för distribuerade

Läs mer

I n f o r m a t i o n o m a k t i e o p t i o n e r

I n f o r m a t i o n o m a k t i e o p t i o n e r I n f o r m a t i o n o m a k t i e o p t i o n e r Här kan du läsa om aktieoptioner, och hur de kan användas. Du hittar också exempel på investeringsstrategier. Aktieoptioner kan vara upptagna till handel

Läs mer

Del 7 Barriäroptioner

Del 7 Barriäroptioner Del 7 Barriäroptioner Innehåll Barriäroptioner... 3 Exotisk option... 3 Barriäroptioner med knock-in eller knock-out... 3 Varför barriäroptioner?... 3 Fyra huvudtyper av barriäroptioner... 4 Avläsning

Läs mer

Webbtjänster med API er

Webbtjänster med API er Webbtjänster med API er Mål med lektionen! Veta kursmålen. Lite grunder om WCF Vem är jag? Mitt namn är Björn Jönsson och jobbar på Tahoe Solutions, ni når mig via mail: bjorn.jonsson@tahoesolutions.se

Läs mer

Strukturakademin Strukturinvest Fondkommission FIGUR 1. Utdelning. Återinvesterade utdelningar Ej återinvesterade utdelningar

Strukturakademin Strukturinvest Fondkommission FIGUR 1. Utdelning. Återinvesterade utdelningar Ej återinvesterade utdelningar Del 3 Utdelningar Innehåll Implicita tillgångar... 3 Vad är utdelningar?... 3 Hur påverkar utdelningar optioner?... 3 Utdelningar och forwards... 3 Prognostisera utdelningar... 4 Implicita utdelningar...

Läs mer

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

PROGRAMMERING. Ämnets syfte. Kurser i ämnet PROGRAMMERING Ämnet programmering behandlar programmeringens roll i informationstekniska sammanhang som datorsimulering, animerad grafik, praktisk datoriserad problemlösning och användaranpassad konfiguration

Läs mer

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta

Läs mer

Komponenter med COM (och COM+/VC++ 7.0)

Komponenter med COM (och COM+/VC++ 7.0) MÄLARDALENS HÖGSKOLA Komponenter med COM (och COM+/VC++ 7.0) Med Visual C++ 7.0 COM-komponent EI0230 Komponentbaserad applikationsutveckling oktober 2003 Om denna sammanfattning Denna sammanfattning innehåller

Läs mer

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

PROGRAMMERING. Ämnets syfte. Kurser i ämnet PROGRAMMERING Ämnet programmering behandlar programmeringens roll i informationstekniska sammanhang som datorsimulering, animerad grafik, praktisk datoriserad problemlösning och användaranpassad konfiguration

Läs mer

Webservice & ERP-Integration Rapport

Webservice & ERP-Integration Rapport Webservice & ERP-Integration Rapport Hardwood AB Mustafa Lazem 930916-9713 Jonas Ahrne 920325-0379 Hasan Nerjovaj 940130-7195 Stefan Liden 920628-0639 2014-05-18 Innehåll Bakgrund... 2 Syfte... 2 Projektbeskrivning...

Läs mer

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14.

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14. Tentamen 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14.00, sal D31 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel

Läs mer

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det

Läs mer

Creo Customization. Lars Björs 2014-10-16

Creo Customization. Lars Björs 2014-10-16 Creo Customization Lars Björs 2014-10-16 Norra Europas största partner och återförsäljare av PTC relaterad programvara (Windchill, Creo, Arbortext, MathCad, Relex) 70 anställda Egen utvecklingsavdelning

Läs mer

HQ AB sakframställan. Del 5 Prissättning av optioner

HQ AB sakframställan. Del 5 Prissättning av optioner HQ AB sakframställan Del 5 Prissättning av optioner 1 Disposition 1 Vad bestämmer optionspriset? 4 Volatility skew 2 Teoretiska modeller och implicit volatilitet 5 Kursinformation 3 Närmare om volatiliteten

Läs mer

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Arv Fundamental objekt-orienterad teknik arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Programmeringsmetodik -Java 165 Grafisk respresentation: Arv

Läs mer

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

PROGRAMMERING. Ämnets syfte. Kurser i ämnet PROGRAMMERING Ämnet programmering behandlar programmeringens roll i informationstekniska sammanhang som datorsimulering, animerad grafik, praktisk datoriserad problemlösning och användaranpassad konfiguration

Läs mer

Del 7 Barriäroptioner. Strukturakademin

Del 7 Barriäroptioner. Strukturakademin Del 7 Barriäroptioner Strukturakademin Innehåll 1. Barriäroptioner 2. Exotisk option 3. Barriäroptioner med knock-in eller knock-out 4. Varför barriäroptioner? 5. Fyra huvudtyper av barriäroptioner 6.

Läs mer

Classes och Interfaces, Objects och References, Initialization

Classes och Interfaces, Objects och References, Initialization Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class

Läs mer

ÖverUnder När du tror aktien ska sluta över eller under en viss kurs

ÖverUnder När du tror aktien ska sluta över eller under en viss kurs UnderÖver ÖverUnder När du tror aktien ska sluta över eller under en viss kurs Med ÖVER och UNDER kan du på ett nytt och enkelt sätt agera på vad du tror kommer att hända på börsen. När du köper en ÖVER

Läs mer

PM 01 En jämförelse av två analysmodeller för val av komponentteknik

PM 01 En jämförelse av två analysmodeller för val av komponentteknik MÄLARDALENS HÖGSKOLA Institutionen för Ekonomi och Informatik v PM 01 En jämförelse av två analysmodeller för val av komponentteknik Eskilstuna, 2002-12-12 EI0230 Komponentbaserad applikationsutveckling

Läs mer

Imperativ programmering. Föreläsning 4

Imperativ programmering. Föreläsning 4 Imperativ programmering 1DL126 3p Föreläsning 4 Imperativa paradigmer Ostrukturerad programmering Strukturerad programmering Procedurell programmering Objektorienterad programmering Klassbaserad programmering

Läs mer

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem). 1 (11) TENTAMEN: Objektorienterade applikationer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv ditt idnummer på varje blad (så att

Läs mer

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Abstract class En abstract class är en class som inte kan skapa några objekt. Syfte:

Läs mer

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer. Informationsinfrastruktur 7.5 hp Mattias Nordlindh Inledning Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer. Dokumentet består av

Läs mer

Warranter En investering med hävstångseffekt

Warranter En investering med hävstångseffekt Warranter En investering med hävstångseffekt Investerarprofil ÄR WARRANTER RÄTT TYP AV INVESTERING FÖR DIG? Innan du bestämmer dig för att investera i warranter bör du fundera över vilken risk du är beredd

Läs mer

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Objektorienterad Programkonstruktion. Föreläsning jan 2016 Objektorienterad Programkonstruktion Föreläsning 13 19 jan 2016 Tentamen Del I, E del Flervalsfrågor 20/25 krävs för godkänt, ger betyg E Upp till 7 möjliga bonuspoäng Del II, Högrebetygsdel Problemfrågor

Läs mer

SKOLFS. beslutade den XXX 2017.

SKOLFS. beslutade den XXX 2017. 1 (11) Föreskrifter om ändring i Skolverkets föreskrifter (SKOLFS 2010:247) om ämnesplan för ämnet programmering i gymnasieskolan, inom kommunal vuxenutbildning på gymnasial nivå och inom vidareutbildning

Läs mer

F4. programmeringsteknik och Matlab

F4. programmeringsteknik och Matlab Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner

Läs mer

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen ID1004 Objektorienterad programmering October 29, 2013 Tentamen för ID1004 Objektorienterad programmering (vilande kurs), 29 oktober 2013, 9-13 Denna tentamen examinerar 3.5 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av tre sektioner.

Läs mer

I n f o r m a t i o n o m r å v a r u o p t i o n e r

I n f o r m a t i o n o m r å v a r u o p t i o n e r I n f o r m a t i o n o m r å v a r u o p t i o n e r Här finner du allmän information om råvaruoptioner som handlas genom Danske Bank. Råvaror är obearbetade eller delvis bearbetade varor som handlas

Läs mer

Laboration 2: Ett kommunikationssystem

Laboration 2: Ett kommunikationssystem Laboration 2: Ett kommunikationssystem 1 Syfte Att arbeta ännu mer med OO-design och programmering, framför allt programmering mot gränssnitt. Undantag och felhantering. Parallellism 2 Uppgift Ni skall

Läs mer

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

PROGRAMMERING. Ämnets syfte. Kurser i ämnet PROGRAMMERING Ämnet programmering behandlar hur mjukvaror skapas, anpassas och utvecklas samt programmeringens roll i informationstekniska sammanhang som datorsimulering och praktisk datoriserad problemlösning.

Läs mer

PROGRAMMERINGSTEKNIK TIN212

PROGRAMMERINGSTEKNIK TIN212 Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Robin Adams Göteborg 8 June 2018 PROGRAMMERINGSTEKNIK TIN212 Dag: Fredag Datum:

Läs mer

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock Inledning Vad är ett datorprogram, egentligen? Olika språk Problemlösning och algoritmer 1 (14) Varför använda en dator? Genom att variera de program som styr datorn kan den användas för olika uppgifter.

Läs mer

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas. Eclipse Avsikt Att bekanta dig med Eclipse programmeringsmiljö, dvs att med hjälp av Eclipse 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till byte-kod

Läs mer

Del 18 Autocalls fördjupning

Del 18 Autocalls fördjupning Del 18 Autocalls fördjupning Innehåll Autocalls... 3 Autocallens beståndsdelar... 3 Priset på en autocall... 4 Känslighet för olika parameterar... 5 Avkastning och risk... 5 del 8 handlade om autocalls.

Läs mer

Inledande programmering med C# (1DV402) Introduktion till C#

Inledande programmering med C# (1DV402) Introduktion till C# Introduktion till C# Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så här: Allt innehåll i

Läs mer

Utveckling av ett grafiskt användargränssnitt

Utveckling av ett grafiskt användargränssnitt Datavetenskap Opponenter: Daniel Melani och Therese Axelsson Respondenter: Christoffer Karlsson och Jonas Östlund Utveckling av ett grafiskt användargränssnitt Oppositionsrapport, C-nivå 2010-06-08 1 Sammanfattat

Läs mer

Gränslös kommunikation

Gränslös kommunikation Ericsson enterprise multimedia server Gränslös kommunikation Den nya generationen multimedielösningar för företagskommunikation Kunnig personal och högeffektiva arbetssätt är viktiga faktorer om ett företag

Läs mer

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten? Programmeringsteknik och Matlab Övning 4 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312

Läs mer

Uppgradering till DentalEye 3.2

Uppgradering till DentalEye 3.2 1 (5) 2015-11-02 Uppgradering till DentalEye 3.2 Denna information riktar sig till tandläkarpraktiker som använder DentalEye 3.1 samt till IT-tekniker och distributörer som installerar DentalEye. Informationen

Läs mer

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID Vad gör vi här? Programmeringsteknik fördjupningskurs (EDAA01; 7,5hp) Valfri för F, N & BME (kan läsas från åk 2 eller i sommar!) Avancerad

Läs mer

SKOLFS. beslutade den -- maj 2015.

SKOLFS. beslutade den -- maj 2015. SKOLFS Föreskrifter om ändring i Skolverkets föreskrifter (SKOLFS 2010:247) om ämnesplan för ämnet programmering i gymnasieskolan och inom kommunal vuxenutbildning på gymnasial nivå; beslutade den -- maj

Läs mer

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt. (7) Objektinteraktion Objektorienterad programmering 2 Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt. Mål Efter övningen skall du kunna konstruera ett program med

Läs mer

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14. Tentamen 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.00, sal E33 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel

Läs mer

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer. Översikt Klasshierarkier UML klassdiagram Relation mellan klasser mellan klasser och objekt Association ning ing andling Programmering tillämpningar och datastrukturer 2 UML UML Unified Modeling Language

Läs mer

PARALLELLISERING AV ALGORITMER PROCESSORER FÖR FLERKÄRNIGA

PARALLELLISERING AV ALGORITMER PROCESSORER FÖR FLERKÄRNIGA PARALLELLISERING AV ALGORITMER FÖR FLERKÄRNIGA PROCESSORER 870928 3017 Johan Gustafsson 870303 4952 Gustaf David Hallberg 880525 8210 Per Hallgren 801117 0597 Wuilbert Lopez 1/7 Innehållsförteckning Table

Läs mer

Föreläsning 2. Operativsystem och programmering

Föreläsning 2. Operativsystem och programmering Föreläsning 2 Operativsystem och programmering Behov av operativsystem En dator så som beskriven i förra föreläsningen är nästan oanvändbar. Processorn kan bara ges enkla instruktioner såsom hämta data

Läs mer

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng TENTAMEN I PROGRAMMERING Ansvarig: Jan Skansholm, tel 7721012 Betygsgränser: Hjälpmedel: Sammanlagt maximalt 60 poäng. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng Skansholm,

Läs mer

Behörighetssystem. Ska kontrollera att ingen läser, skriver, ändrar och/eller på annat sätt använder data utan rätt att göra det

Behörighetssystem. Ska kontrollera att ingen läser, skriver, ändrar och/eller på annat sätt använder data utan rätt att göra det Behörighetssystem Ska kontrollera att ingen läser, skriver, ändrar och/eller på annat sätt använder data utan rätt att göra det Systemet måste kunna registrera vilka resurser, d v s data och databärande

Läs mer

Del 17 Optionens lösenpris

Del 17 Optionens lösenpris Del 17 Optionens lösenpris Innehåll Optioner... 3 Optionens lösenkurs... 3 At the money... 3 In the money... 3 Out of the money... 4 Priset... 4 Kapitalskyddet... 5 Sammanfattning... 6 Strukturerade placeringar

Läs mer

HANDLA MED OPTIONER I N T R O D U K T I O N S A M M A N F AT T N I N G S T E G 1 - W E B B I N A R I U M D E N 6 D E C E M B E R 2018

HANDLA MED OPTIONER I N T R O D U K T I O N S A M M A N F AT T N I N G S T E G 1 - W E B B I N A R I U M D E N 6 D E C E M B E R 2018 HANDLA MED OPTIONER I N T R O D U K T I O N S A M M A N F AT T N I N G S T E G 1 - W E B B I N A R I U M D E N 6 D E C E M B E R 2018 DISCLAIMER Detta informationsmaterial är riktat till de deltagare som

Läs mer

Programutvecklingsprojekt Projektgrupp Elvin. Detailed Design Document

Programutvecklingsprojekt Projektgrupp Elvin. Detailed Design Document Programutvecklingsprojekt 2003-04-24 Projektgrupp Elvin Detailed Design Document Björn Engdahl Fredrik Dahlström Mats Eriksson Staffan Friberg Thomas Glod Tom Eriksson engdahl@kth.se fd@kth.se d94-mae@nada.kth.se

Läs mer

Del 1 Volatilitet. Strukturakademin

Del 1 Volatilitet. Strukturakademin Del 1 Volatilitet Strukturakademin Innehåll 1. Implicita tillgångar 2. Vad är volatilitet? 3. Volatility trading 4. Historisk volatilitet 5. Hur beräknas volatiliteten? 6. Implicit volatilitet 7. Smile

Läs mer

Hogias Ekonomisystem. Systemkrav för enanvändarinstallation fr o m version 2015.1 av GENERELLA KRAV

Hogias Ekonomisystem. Systemkrav för enanvändarinstallation fr o m version 2015.1 av GENERELLA KRAV Systemkrav för enanvändarinstallation fr o m version 2015.1 av Hogias Ekonomisystem Systemkraven specificerar de miljöer och förutsättningar som programvaran är testad i och som vi rekommenderar för att

Läs mer

Föreläsning 1, vecka 6: Abstraktion genom objektorientering

Föreläsning 1, vecka 6: Abstraktion genom objektorientering TDA 548: Grundläggande Programvaruutveckling Föreläsning 1, vecka 6: Abstraktion genom objektorientering Magnus Myréen Chalmers, läsperiod 1, 2016-2017 Hur skulle ni implementera detta? (3D demo) Vi återkommer

Läs mer

Three Monkeys Trading. Tärningar och risk-reward

Three Monkeys Trading. Tärningar och risk-reward Three Monkeys Trading Tärningar och risk-reward I en bok vid namn A random walk down Wall Street tar Burton Malkiel upp det omtalade exemplet på hur en apa som kastar pil på en tavla genererar lika bra

Läs mer

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1 Algoritmer Lars Larsson VT 2007 Lars Larsson Algoritmer 1 1 2 3 4 5 Lars Larsson Algoritmer 2 Ni som går denna kurs är framtidens projektledare inom mjukvaruutveckling. Som ledare måste ni göra svåra beslut

Läs mer

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera först talet 37 med 2. Använd heltalsdivision. Det ger kvoten

Läs mer

warranter ett placeringsalternativ med hävstång

warranter ett placeringsalternativ med hävstång warranter ett placeringsalternativ med hävstång /// www.warrants.commerzbank.com ////////////////////////////////////////////////////////////////// Warranter en definition En warrant är ett finansiellt

Läs mer

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal Tentamen DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl 14.00 17.00 Hjälpmedel: penna, suddgummi, linjal Tentan har två delar om vardera 30 poäng Maximala betygsgränser (gränserna

Läs mer

Distribuerade System, HT03

Distribuerade System, HT03 UMEÅ UNIVERSITET 21 oktober 2003 Institutionen för Datavetenskap Laborationsrapport Laboration Middleware Distribuerade System, HT03 Jini Namn: Anders Holm, c00asm@cs.umu.se Kjell Johansson, c00kjn@cs.umu.se

Läs mer

RIKTLINJER FÖR UTFÖRANDE AV ORDER SAMT SAMMANLÄGGNING OCH FÖRDELNING AV ORDER

RIKTLINJER FÖR UTFÖRANDE AV ORDER SAMT SAMMANLÄGGNING OCH FÖRDELNING AV ORDER RIKTLINJER FÖR UTFÖRANDE AV ORDER SAMT SAMMANLÄGGNING OCH FÖRDELNING AV ORDER December 2013 1 INLEDNING För att uppnå bästa möjliga resultat när Carnegie Investment Bank AB (Carnegie) utför eller vidarebefordrar

Läs mer

Programmering A. Johan Eliasson johane@cs.umu.se

Programmering A. Johan Eliasson johane@cs.umu.se Programmering A Johan Eliasson johane@cs.umu.se 1 Jag Undervisar mest grundläggande programmering på Institutionen för datavetensakap Applikationsutveckling för iphone Applikationsutveckling i Java Datastrukturer

Läs mer

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen 20150613, kl. 9.00-12.00

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen 20150613, kl. 9.00-12.00 Skolan för datavetenskap och kommunikation Objektorienterad Programkonstruktion, DD1346 FACIT Tentamen 20150613, kl. 9.00-12.00 Tillåtna hjälpmedel: Papper, penna och radergummi. Notera: Frågorna i del

Läs mer

Kurskatalog 2010 INNEHÅLLSFÖRTECKNING

Kurskatalog 2010 INNEHÅLLSFÖRTECKNING SFÖRTECKNING 1. RFID-Kurser... 2 1.1. RFID Grundkurs... 2 1.2. RFID Fortsättningskurs... 3 1.3. RFID dator programmering... 4 1.4. RFID Systemadministration... 5 1.5. RFID Aktiv Systemadministration...

Läs mer

Systemkrav 2014 för enanvändarinstallation fr o m version 2014.2 av

Systemkrav 2014 för enanvändarinstallation fr o m version 2014.2 av Systemkrav 2014 för enanvändarinstallation fr o m version 2014.2 av Hogias ekonomisystem Systemkraven specificerar de miljöer och förutsättningar som programvaran är testad i och som vi rekommenderar för

Läs mer

Elisabet Stöök Konsult SAS Institute AB Copyright 2003, SAS Institute Inc. All rights reserved.

Elisabet Stöök Konsult SAS Institute AB Copyright 2003, SAS Institute Inc. All rights reserved. Administrera din SAS miljö med SAS Metadata Server och SAS Management Console. Elisabet Stöök Konsult SAS Institute AB Copyright 2003, SAS Institute Inc. All rights reserved. SAS Intelligence Value Chain

Läs mer

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till

Läs mer

Objektorienterad programmering

Objektorienterad programmering Objektorienterad programmering Emil Ahlqvist (c10eat@cs.umu.se) Didrik Püschel (dv11dpl@cs.umu.se) Johan Hammarström (c08jhm@cs.umu.se) Hannes Frimmel Moström (c10hml@cs.umu.se) 1 1. Introduktion 1.1 Objektorienterad

Läs mer

Java, klasser, objekt (Skansholm: Kapitel 2)

Java, klasser, objekt (Skansholm: Kapitel 2) Java, klasser, objekt (Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Objectorienterad programmering Sida 1 Vad är en klass? En klass är ett sätt att beskriva en mängd objekt och deras gemensamma

Läs mer

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning. Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java

Läs mer

Webbserverprogrammering

Webbserverprogrammering Webbserverprogrammering WES Webbserverprogrammering Ämnet webbserverprogrammering behandlar funktionalitet för webblösningar och samspelet mellan beställare, användare, formgivare och utvecklare. Ämnets

Läs mer

WEBBSERVERPROGRAMMERING

WEBBSERVERPROGRAMMERING WEBBSERVERPROGRAMMERING Ämnet webbserverprogrammering behandlar funktionalitet för webblösningar och samspelet mellan beställare, användare, formgivare och utvecklare. Ämnets syfte Undervisningen i ämnet

Läs mer

NetBeans 7. Avsikt. Projektfönster

NetBeans 7. Avsikt. Projektfönster NetBeans 7 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till

Läs mer

TUTORIAL: KLASSER & OBJEKT

TUTORIAL: KLASSER & OBJEKT TUTORIAL: KLASSER & OBJEKT I denna tutorial lär vi oss att använda klasser och objekt samt hur vi bygger en enkel applikation kring dessa. I tutorialen kommer det finnas en mängd kod som du antingen kan

Läs mer

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur Objekt-orienterad utveckling Saker man vill uppnå: Objektorienterad analys och design Sven-Olof Nyström Uppsala Universitet 16 mars 2005 en systematisk metod för att gå från problembeskrivning till färdigt

Läs mer

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning 2I1049 Föreläsning 5 Objektorienterad programmering i Java KTH-MI Peter Mozelius Objektorientering Världar uppbyggda av objekt Inte helt olikt vår egen värld Ett sätt att modularisera våra system Objekten

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Designmönster Adapter, Factory, Iterator,

Läs mer

Lösningar till tentamen i EDAF25

Lösningar till tentamen i EDAF25 Lösningar till tentamen i EDAF25 21 aug 2017 Lösning 1 Javaklasser (många varianter finns naturligtvis): class Client { private Invoker invoker; public void newcommand(string cmdtext) { Command cmd; if

Läs mer