Laboration nr 2. Objektorienterad programmering D2. Syfte. Redovisning. Testning. Uppgift 1



Relevanta dokument
Objektorienterad programmering D2

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

Malmö högskola 2008/2009 CTS

Malmö högskola 2007/2008 Teknik och samhälle

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

JAVA Mer om klasser och objektorientering

Objektsamlingar i Java

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Tentamen OOP

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Länkade listor och automatisk testning

Kort om klasser och objekt En introduktion till GUI-programmering i Java

OBJEKTORIENTERAD PROGRAMMERING för Z1 (TDA540) Ansvarig: Jan Skansholm, tel eller

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Föreläsnings 9 - Exceptions, I/O

ID1004 Laboration 4, November 2012

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

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Repetition av OOP- och Javabegrepp

Grundläggande programmering med C# 7,5 högskolepoäng

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

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

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

Repetition av OOP- och Javabegrepp

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

TENTAMEN OOP

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Föreläsning 5-6 Innehåll

Del A (obligatorisk för alla)

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

DD1342 Programkonstruktion för F1,

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

Laboration 1 - Grunderna för OOP i Java

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Tentamen, EDAA10 Programmering i Java

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

TENTAMEN OOP

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

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Malmö högskola 2007/2008 Teknik och samhälle

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Tentamen i Programmeringsteknik I,, KandMa/Fy,

Diagnostiskt Prov. Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas.

OOP Objekt-orienterad programmering

Objekt, Klasser, Paket m. m.

LÖSNINGSFÖRSLAG TENTAMEN

TENTAMEN OOP

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

Objektorienterad programmering i Java I

Typkonvertering. Java versus C

OOP Objekt-orienterad programmering

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

Kopiering av objekt i Java

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

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 11

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Del A (obligatorisk för alla)

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Laboration 1 Introduktion till Visual Basic 6.0

Java, klasser, objekt (Skansholm: Kapitel 2)

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen Datastrukturer, DAT037 (DAT036)

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Statistik över heltal

Att skriva till och läsa från terminalfönstret

Objektorienterad programmering Föreläsning 11. Copyright Mahmud Al Hakim

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

PROGRAMMERINGSTEKNIK TIN212

Objektorienterad programmering Föreläsning 9. Copyright Mahmud Al Hakim Agenda (halvdag)

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

DAT043 Objektorienterad Programmering

public boolean containskey(string key) { return search(key, head)!= null; }

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Transkript:

Laboration nr 2 Syfte Att få förståelse för de grundläggande objektorienterade begreppen. Redovisning Källkoden för uppgifterna skall skickas in via Fire. Testning I laborationen skall koden för uppgift 1 testas med JUnit. Det finns färdiga testklasser i filen filerlab2.zip på kursens hemsida. Samma tester kommer att tillämpas vid rättningen av laborationen. I en bilaga sist i detta PM beskrivs kortfattat hur testning utförs i utvecklingsmiljön BlueJ. Om du använder eclipse går det lika bra (bättre) att testa i den miljön. Be handledaren förklara hur man gör! Uppgift 1 Skriv ett klass Rational för att hantera rationella tal. Ett rationellt tal uttrycks som bekant som kvoten mellan två heltal. Vi skriver rationella tal på formen 1/3, -1/5. Steg1: Metod som beräknar största gemensamma delare När man representerar rationella tal i en klass är det bäst att förkorta bort alla gemensamma faktorer i täljaren och nämnare, d.v.s. normalisera talet. T.ex. representeras talet 15/20 som 3/4. För att kunna göra denna förkortning behöver vi en metod som beräknar den största gemensamma delaren (eng. greatest common divisor) till två heltal. Största gemensamma delaren är alltid positiv, t.ex. är 4 största gemensamma delare till 12 och -8. Observera att största gemensamma delaren till x och 0 är x för alla x 0, men att största gemensamma delaren till 0 och 0 är odefinierad, funktionen är alltså partiell eftersom den inte är definierad för alla argument. Börja med att skriva en metod som beräknar största gemensamma delaren till två tal. Kalla metoden gcd, gör den till en klassmetod och placera den i en klass med namnet Rational. Metoden skall ha signaturen public static int gcd(int m,int n) Om både m och n är 0 skall ett s.k. undantag (eng. exception) kastas (detta förklaras senare i kursen): throw new ArithmeticException( Rational.gcd(0,0) is undefined ) För att beräkna största gemensamma delaren är det lämpligt att använda Euclides algoritm som har följande utseende, under förutsättning att x > 0 och y > 0: 1. Dividera x med y och beteckna resten vid divisionen med r. 2. Om r = 0 så är beräkningen klar och resultatet finns i y. 3. Sätt annars x till y och y till r. Upprepa från punkt 1. Tips: Absolutbeloppet kan beräknas med metoden Math.abs. Testa! Importera testklassen RationalTest1 till projektet och kör testen med knappen Run Tests. Version 2012-09-11 1

Steg 2: Konstruktorer och accessmetoder I objekt av klassen Rational skall täljaren och nämnaren lagras som heltal i två instansvariabler i klassen. Täljaren och nämnaren skall alltid sakna gemensamma faktorer, dvs. vara avkortade (normaliserade) så långt det går. Nämnaren måste alltid vara större än noll. Negativa rationella tal representeras med en negativ täljare. Tabellen nedan sammanfattar de olika fallen. Rationellt tal Representation i klassen Rational a/b Täljare (numerator) Nämnare (denominator) a > 0, b > 0 a b a < 0, b > 0 a b a > 0, b < 0 - a - b a < 0, b < 0 - a - b a = 0, b 0 0 1 a (utan nämnare) a 1 b = 0 o d e f i n i e r a t I detta steg skall du förse klassen Rational med nedanstående konstruktorer och metoder. En konstruktor med två parametrar, m och n vilka betecknar täljaren och nämnaren. public Rational(int m,int n) I denna måste du kontrollera att nämnaren n inte är lika med noll. I så fall skall ett undantag kastas (detta förklarassenare i kursen): throw new IllegalStateException( Rational.Rational(int,int): zero denominator ); Dividera annars de båda parametrarna m och n med deras största gemensamma delare. Denna finner du genom att använda klassmetoden gcd från steg 1. En liten komplikation är att någon eller båda av m och n kan vara mindre än noll. Om båda är negativa betecknar m/n ett positivt tal och man kan därför ersätta m och n med sina absolutbelopp. Om den ena parametern är positiv och den andra negativ betecknar ett m/n negativt tal. Man skall då låta täljaren vara negativ och nämnaren positiv. Allt enligt tabellen ovan. En konstruktor utan parametrar som initierar det aktuella talet till 0/1. (Täljaren blir alltså 0 och nämnaren 1.) public Rational() En konstruktor med en parameter m, vilken betecknar täljaren. Det aktuella talet initieras till m/1. public Rational(int m) Tips: Vid närmare eftertanke inser du säkert att den andra och tredje konstruktorn är specialfall av den första. I en konstruktor kan man anropa en annan konstruktor och Java har en speciell syntax för detta. Man använder det reserverade ordet this. Ex. public Rational(int m) { this(m,1); // den första konstruktorn anropas } Med denna teknik kan man bygga sina konstruktorer hierarkiskt. Version 2012-09-11 2

En s.k. kopieringskonstruktor som har ett annat rationellt tal r som parameter. Det aktuella objektet initieras så att det innehåller samma täljare och nämnare som r. public Rational(Rational r) Anm. Instansvariablerna i r är synliga i konstruktorns kropp { } även om de deklarerats som privata. Konstruktorer och metoder i en klass har access till instansvariablerna i alla objekt av klassen, inte bara i det aktuella objektet. Metoderna iszero, getnumerator och getdenominator blir mycket enkla och bör inte vålla dig några problem: Metoden iszero returnerar true om det aktuella talet är noll och false annars. public boolean iszero () Metoden getnumerator avläser och returnerar det aktuella talets täljare. public int getnumerator () Metoden getdenominator avläser och returnerar det aktuella talets nämnare. public int getdenominator () Testa! Importera testklassen RationalTest2 till projektet och kör testen med knappen Run Tests. Steg 3: Kopiering, likhet och olikhet En parameterlös metod clone som skapar en kopia av det aktuella talet. Som returvärde ger metoden en referens till kopian: public Rational clone() En metod equals som har ett annat rationellt tal obj som parameter vilket jämförs med det aktuella talet. Om de två talen är lika returneras true annars false. Metoden skall ha signaturen public boolean equals(object obj) Observera att parametern skall ha typen Object för att följa Java-standarden. I metoden behöver man göra en s.k. osäker typomvandling till Rational vilket kan se ut på följande sätt (mer om typomvandlingar senare i kursen): Rational arg = (Rational)obj; if ( arg.something == somethingelse ) En metod lessthan som har ett annat rationellt tal r som parameter vilket jämförs med det aktuella talet. Om det aktuella talet är mindre än r returneras true annars false. public boolean lessthan(rational r) Testa! Importera testklassen RationalTest3 till projektet och kör testen med knappen Run Tests. Steg 4: Konvertering mellan rationella tal och deras textrepresentation Klassen skall nu utökas med några metoder, vilka förenklar inläsning och utskrift av rationella tal: En metod tostring som returnerar det aktuella talets textrepresentation på formen "a/b". public String tostring() (Som frivillig extrauppgift kan du senare, när resten av klassen är klar, utöka metoden tostring så att den presenterar resultatet med formen k r/b, där k är kvoten i heltalsdivisionen a/b och r resten. Om det Version 2012-09-11 3

är fråga om ett negativt tal skall man i detta fall presentera resultatet med formen k r/b. Ex. 11/4 skall presenteras som 2 3/4. Om du gör denna utökning måste även parse nedan klara att tolka sådana uttryck.) En klassmetod parse som har en parameter s av typen String. public static Rational parse(string s) Parametern skall undersökas och om den innehåller en text som på ett korrekt sätt beskriver ett rationellt tal skall parse skapa ett nytt rationellt tal med det angivna värdet och returnera en referens till det nya talet. (Jämför med metoden parseint i standardklassen java.lang.integer.) Texten i parametern s får ha någon av fyra följande former, där a och b betecknar heltalskonstanter: "a / b", " a / b ", " a/ -b" eller "a". Det får alltså finnas blanka tecken mellan talen och divisionstecknet. Den sista formen visar att det är tillåtet att bara ange täljaren. I så fall skall nämnaren antas vara lika med 1. Ex. (Rational.parse( 2 / 6 )).tostring() returnerar strängen 1/3 I metoden parse har du stor nytta av några metoder i standardklassen java.lang.string, t.ex. substring och trim. Använd metoden Integer.parseInt för att avkoda täljaren respektive nämnaren. När Integer.parseInt får en parameter som inte kan översättas till ett heltal kastar den ett undantag av typen NumberFormatException. Vi fångar inte upp detta i parse utan låter det propagera till koden som anropat parse. Eftersom en komponent i talet är felformatterad är ju även hela det avsedda rationella talet det. Ex. Rational.parse( tjoho/27 )) kastar NumberFormatException eftersom Integer.parseInt( tjoho ) gör det. Testa! Importera testklassen RationalTest4 till projektet och kör testen med knappen Run Tests. Steg 5: Aritmetiska operationer I detta steg skall du skriva några grundläggande aritmetiska operationer: En metod add som har ett annat rationellt tal r som parameter. Som resultat ges ett nytt rationell tal som innehåller summan av det aktuella talet och r. public Rational add(rational r) En metod sub som har ett annat rationellt tal r som parameter. Som resultat ges ett nytt rationell tal som innehåller skillnaden mellan det aktuella talet och r. public Rational sub(rational r) En metod mul som har ett annat rationellt tal r som parameter. Som resultat ges ett nytt rationell tal som innehåller produkten av det aktuella talet och r. public Rational mul(rational r) En metod div som har ett annat rationellt tal rsom parameter. Som resultat ges ett nytt rationell tal som innehåller kvoten mellan det aktuella talet och r. public Rational div(rational r) Om r är noll skall ett undantag kastas: throw new ArithmeticException("Rational.div: division by zero"); Tips: I metoderna add, sub, mul och div använder du förstås dina matematiska kunskaper. Uttrycket a/b+c/d kan t.ex. skrivas om som (ad+bc)/bd. Använd en lämplig konstruktor när du skapar det tal som skall innehålla resultatet av den matematiska operationen. Då normaliseras talet automatiskt. (Det är förstås inte tillåtet att använda flyttal vid uträkningarna!) Testa! Importera testklassen RationalTest5 till projektet och kör testen med knappen Run Tests. Version 2012-09-11 4

Uppgift 2 En fotbollstabell har följande utseende: Kalmar FF 16 11 2 3 37-16 35 Elfsborg 16 10 4 2 22-5 24 Helsingborg 16 9 4 3 29-18 31 IFK Göteborg 16 8 5 3 24-14 29 Kolumnerna i tabeller innehåller i tur och ordning följande information: lagets namn, antal spelade matcher, antal vunna matcher, antal oavgjorda matcher, antal förlorade matcher, gjorda respektive insläppta mål samt antal poäng. Några engelska fotbollstermer Fotbollslag football team Fotbollsserie football league Vinst win Oavgjort draw Förlust defeat Göra mål score a goal Släppa in mål concede a goal Målskillnad goal difference I denna uppgift skall du skapa klasser för att handha en fotbollsserie. Använd konsekvent engelska vid namngivning av klasser, variabler och metoder! Steg 1: Börja med att skriva en klass FootballTeam som beskriver ett fotbollslag med den information som är nödvändig för att skapa en tabell enligt ovan. Definiera nödvändiga instansvariabler i klassen. Skriv en konstruktor för att skapa ett fotbollslag. Inga matcher är spelade när laget skapas. public FootballTeam() Skriv accessmetoder (int getsomething() ) för att avläsa aktuell information om laget, dvs lagets namn, antal spelade matcher, antal vunna matcher, antal förlorade matcher, antal oavgjorda matcher, antalet gjorda mål, antalet insläppta mål och antalet poäng. Skriv en metod public void registermatch(int scoredgoals, int concededgoals) som uppdaterar berörda instansvariabler. Vid vinst erhålls 3 poäng, vid oavgjort 1 poäng och vid förlust 0 poäng. Skriv en metod tostring för att kunna få en utskrift på formen: Kalmar FF 16 11 2 3 37-16 35 Skriv en metod public int goaldifference() som returnerar differansen mellan gjorda och insläppta mål. Skriv en en metod public int compareto(footballteam otherteam) som jämför det aktuella lagets resultat med resultatet för laget otherteam. Metoden skall returnera värdet 1 om det aktuella laget har bättre resultat än det andra laget, värdet 0 om resultaten är lika och värdet -1 om det andra laget har bättre resultat. Vid jämförelsen är i första hand lagens poäng avgörande, i andra hand lagens målskillnad och i tredje hand flest gjorda mål. Version 2012-09-11 5

Steg 2: Skriv ett program för att testa klassen. Skriv en klass FootballLeague som representerar en fotbollsserie. För varje fotbollsserie skall följande uppgifter lagras: - namn (t.ex Allsvenskan, Premier League, Div 4 Västra Götaland) - en lista av lagen som ingår i serien, dvs en lista med referenser till objekt av klassen FootballTeam Listan med lagen implementeras lämpligen som ett fält. Klassen FootballLeague skall innehålla en konstruktor med två parametrar; namnet på serien och ett fält med namnen på lagen som ingår i serien. public FootballLeague(String leaguename, String[] teamnames) public FootballTeam getteam(string name) som returnerar en referens till det angivna laget om detta lag finns i serien, annars returneras null. public boolean registermatch(string name1, String name2, int scored1, int scored2) som uppdaterar serietabellen med resultatet från en match. Parametrarna name1 och name2 anger vilka lag som spelat matchen och parametrarna scored1 och scored2 anger hur många mål respektive lag gjort. Metoden returnerar true om resultatet av matchen kan registreras, dvs. att båda lagen spelar i serien, annars returnerar metoden false. public void inputresult() som läser matchresultat från en dialogruta och registrerar dessa i serietabellen. Ge matchresultatet t på formen: Djurgården;IFK Göteborg;0;5 Vid avkodningen används lämpligen metoden String.split som returnerar ett fält av strängar. Ex: a+b + c.split( + ) ger fältet { a, b, c }. public void sorttable() som sorterar lagen i serien efter hur de ligger till i serien för tillfället. Utnyttja metoden java.util.arrays.sort för att utföra sorteringen. public String tostring() som returnerar den aktuella (sorterade) serietabellen i textform. public void printtable() som skriver ut den aktuella (sorterade) serietabellen på skärmen. en main-metod som testar klassen. Version 2012-09-11 6

Steg 3: (Frivillig utvidgning. Innehåller bl.a. filhantering som ännu inte tagits upp i kursen) Utöka klassen med: public int readresultfile(string filename) som läser en textfil med matchresultat och registrerar dessa i serietabellen. Filen innehåller ett okänt antal rader på formen: IFK Göteborg;Djurgården;5;0 AIK;GAIS;0;4 IFK Norrköping;Helsingborg;1;3 Filen kan innehålla matchresultat från olika serier. Endast matchresultat som tillhör den aktuella serien, dvs båda lagen spelar i serien, registreras. Metoden returnerar antalet matcher som blivit registrerade. Skriv två metoder public static boolean saveleague(footballleague league, String filename) public static FootballLeague loadleague(string filename) som lagrar ner den angivna serien till en fil, respektive läser in en serie från en fil. För att kunna göra detta måste klasserna FootballLeague och FootballTeam implementera gränssnittet Serializable. Metoderna skall hantera undantag på lämpligt sätt. Version 2012-09-11 7

Enhetstestning med JUnit i BlueJ Så här skall BlueJ-fönstret se ut till slut när du importerat samtliga testklasser: 1. Visa knapparna för testverktygen till vänster i fönstret: Tools/Preferences/Miscellaneous/Optional tool settings/show unit testing tools. 2. Placera källkodsfilen för önskad testklass i projektets filkatalog (t.ex. Rationaltest1.java). 3. Importera klassen i projektet: Project/Import En fildialog visas. Leta upp projektfilen uppg1_rational och klicka på Import. Testresultat visas i ett separat fönster: Version 2012-09-11 8