Klienten. import java.util.*;

Størrelse: px
Starte visningen fra side:

Download "Klienten. import java.util.*;"

Transkript

1 Klienten import java.util.*; * Aktiviteter er et model element, som indeholder blandt andet psimetiks beskrivleser. rling public class Aktivitet extends Beholder implements HarEOgA, HarTilknytning, HarB public static int antal = 0; public int id; /* B r ikke eksistere! public Aktivitet(String navn) super(navn); id = antal ++; aktiviteter = new ArrayList(); egenskaber = new ArrayList(); // public Aktivitet(String navn, Beholder beholder) super(navn, beholder); id = antal ++; aktiviteter = new ArrayList(); egenskaber = new ArrayList(); //trybeholder.tilknyt(this, -1); catch(internfejl i)system.out.println("fejl HG FEJL"); Psi-metikken. private Beskrivelse beskrivelse; Set metode for startaktiviteten. Start aktiviteten er den aktivitet, som starter simuleringen af modellen. public void start() funk.model.stataktivitet = this; * Get metode for beskrivelserne. *

2 Aktivitetens beksrivelserne. public Beskrivelse beskrivelse() return beskrivelse; * Set metode for beskrivelserne. beskrivelse Det beskrivelse der skal indsaettes. Den indsatte beskrivlese. public Beskrivelse beskrivelse(beskrivelse beskrivelse) throws InternFejl if(beskrivelse == null) throw new InternFejl("Programmet pr ver at indsêtte en ikke eksisternede beskrivelse i aktiviteten " + this, 10); beskrivelse.mor = this; return this.beskrivelse = beskrivelse; * Liste over egenskaberne! private ArrayList egenskaber; * Get-metode for egenskabslisten public ArrayList egenskaber() return egenskaber; * Set-metode for egenskabslisten public ArrayList egenskaber(arraylist egenskaber) return this.egenskaber = egenskaber; * Liste over aktiviteterne

3 private ArrayList aktiviteter; * Get-metode for aktivitetslisten public ArrayList aktiviteter() return aktiviteter; * Set-metode for aktivitetslisten public ArrayList aktiviteter(arraylist aktiviteter) return this.aktiviteter = aktiviteter; * Da Aktivitets klassen tilh re HarTilknytning interfacet, sâ skal aktiviteten have en tilknytning (til en beholder). private Beholder tilknytning; * Get metode for tilknytningen. public Beholder tilknytning() return tilknytning; * Set metode for tilknytningen. public Beholder tilknytning(beholder beholder) return tilknytning = beholder; public Objekt find_o() return ((HarTilknytning)tilknytning).find_o(); public Aktivitet find_ak()

4 return this; public void ukomplet() return; * Afpr vning af aktivitets klassen. Den testede aktivitet. public boolean test() // Test beholder // Test egenskaber // Test aktiviteter // Test beskrivlese // Test tilknytning return true; import java.util.*; /* * Created on * Beholder er en hjêlpe klasse, der beskriver de egenskaber, som modelelementer der indeholder andre modelelementer har. rling public class Beholder extends Element public Beholder()

5 super(); public Beholder(String navn) super(navn); public Beholder(String navn, Beholder beholder) super(navn, beholder); * Denne metode bruges til at tilknytte nye elementer til modellen med. Elementet bliver indsat i denne beholder! element Det element der skal indsêttes. Gik det godt? InternFejl Problemer med null objekter. public boolean tilknyt(hartilknytning element, int pos) throws InternFejl if(element == null) throw new InternFejl("Systemet pr ver at tilknytte et ikke eksisterende element til beholderen " + this, 0); if(funk.getlist(element, this) == null) throw new InternFejl("Systemet pr ver at tilknytte " + element + " til " + this + ", men " + this + " indeholder ikke en liste til elementer af type " + element.getclass().getname() + " (som er den type " + element + " er af).", 1); if(!funk.getlist(element, this).add(element)) throw new InternFejl(element + " kunne ikke indsêttes i " + this, 2); element.tilknytning(this); gui-trê. // TODO (nâr GUIen er fêrdig) opdater og gentegn if(pos == -1) pos = knude.getchildcount(); funk.tmodel.insertnodeinto(((element)element).knude, knude, pos); //knude.add(((element)element).knude); return true;

6 * Denne metode bruges til af fjerne modelelementer fra modellen med. Elementet bliver fjernet fra denne beholder! element Det element der skal fjernes. Gik det godt? public boolean fjern(hartilknytning element) throws InternFejl if(element == null) throw new InternFejl("Der manglede det element, der skulle fjernes fra beholderen " + navn(), 3); if(funk.getlist(element, this) == null) throw new InternFejl("Kunne ikke fjerne " + element + " fra " + this, 15); if(!funk.getlist(element, this).remove(element)) throw new InternFejl("Kunne ikke fjerne " + element + " fra " + this, 4); element.tilknytning(null); // TODO (GUI TING) funk.tmodel.removenodefromparent(((element)element).knude); return true; * Denne metode bruges til at flytte et element fra den beholder som den var tilknyttet over til denne beholder. element Det element der skal flyttes. Gik det godt? public boolean flyt(hartilknytning element) throws InternFejl if(element == null) throw new InternFejl("Der manglede det element, der skulle flyttes til beholderen " + navn(), 5);

7 boolean slet = true; if(element.tilknytning() == null) funk.fare(1, element + " er ikke tilknyttet nogen beholder", "Systemet tilknytter " + element + " til " + this, element + "som skulle flyttes til " + this + " er ikke tilknyttet en anden beholder i forvejen", "", 3, new Exception(), null, null); slet = false; if(slet) if(!fjern(element)) funk.fare(2, "Kunne ikke fjerne " + element, "Systemet tilknytter " + element + " til " +this, "", "", 3, new Exception(), null, null); return tilknyt(element, -1); // TODO TEST ER FJERNET(Snarest) Jeg skal undersoege hvem der bruger denne metode og til hvad??? Maaske kan jeg ikke bare fjerne switchen!? // Metoden bruges kun af funktions oversêt metod. public void indset(arraylist liste) throws InternFejl for(iterator i = liste.iterator(); i.hasnext();) tilknyt((hartilknytning)i.next(), -1); // * Denne metode bliver brugt til at test, om der er andre modelelementer, der har det samme navn navn Det navn der skal checkes! Det objekt der har dette navn, null hvis navnet ikke findes i forvejen. public Element indeholder(string navn) Element temp = null; if(navn().equals(navn)) return this; // TODO (Senere, nâr der er tid) Denne linje er mâske ikke n vêndig! for(iterator i = funk.getalllists(this).iterator(); i.hasnext();) if((temp = funk.indeholder(((arraylist)i.next()), navn))!= null) return temp;

8 return temp; public ArrayList find_e(arraylist liste) if(this instanceof HarO) for(iterator i = ((HarO)this).objekter().iterator(); i.hasnext();) liste = ((Objekt)i.next()).find_e(liste); if(this instanceof HarEOgA) for(iterator i = ((HarEOgA)this).aktiviteter().iterator(); i.hasnext();) liste = ((Aktivitet)i.next()).find_e(liste); liste.addall(((hareoga)this).egenskaber()); return liste; public ArrayList find_a(arraylist liste) if(this instanceof HarO) for(iterator i = ((HarO)this).objekter().iterator(); i.hasnext();) liste = ((Objekt)i.next()).find_a(liste); if(this instanceof HarEOgA) for(iterator i = ((HarEOgA)this).aktiviteter().iterator(); i.hasnext();) liste = ((Aktivitet)i.next()).find_a(liste);

9 if(this instanceof Aktivitet) liste.add(this); return liste; public ArrayList find_g(arraylist liste) if(this instanceof HarO) for(iterator i = ((HarO)this).objekter().iterator(); i.hasnext();) liste = ((Objekt)i.next()).find_g(liste); if(this instanceof Objekt) if(((objekt)this).objekter().size() > 0) liste.add(this); return liste; Tester intet. public boolean test() // Test element // Test tilknyt // Test fjern // Test flyt return true; import java.util.*; /* * Created on

10 // TODO (NÂr der er tid) Kommentare!!! * Denne klasse indeholder en beskrivlese af en aktivitet rling public class Beskrivelse implements Global, HarB public String navn; public HarB mor; * Bruges af GUIen til at formater beskrivelsen med. public String struktur; * Indeholder beskrivelserne af de andre underdele af aktiviteten private ArrayList parameter; * Indeholder den tekst som GUIen skal vise public ArrayList tekst; // TODO (nâr oversêttelsen er fêrdig) IndsÊt metoder, der checker og sêtter komplet vêrdien! * FortÊller om beskrivelsen er gjort fêrdi private boolean komplet = false; * Beskriver hvilken type element denne del af beskrivelsen beskriver public char type; * En specifikation af hvilket element, af den beskrevende typen, denne beskrivelse beskriver public String verdi;

11 * Peger pâ det element som beskrivelsen indeholder. Er tit null!! private Element element; * Peger pâ det objekt, som indeholder det element som beskrivlesen indeholder/beskriver. private Objekt objekt; * Den tomme konstrukt r public Beskrivelse() type = '#'; ukomplet(); * Konstrukt r der kun sêtter typen og aktiviteten. Intet andet! Konstrukt ren kan ikke andet, fordi elementet kun er specifiseret ved typen (ikke dens vêrdi). type aktivitet public Beskrivelse(char type, HarB harb) this.type = type; mor = harb; ukomplet(); navn = funk.beskrivelse(type); * Konstrukt r der indsêtter (via indset) beskrivelsen beskrevet med type og verdi (vêrdi), og underbeskrivelserne i den konkrete aktivitet. type verdi aktivitet public Beskrivelse(char type, String verdi, HarB harb) throws InternFejl

12 this.type = type; mor = harb; indset(verdi); // TODO (Snarest) mangler kommentar public void parameter(arraylist parameter) this.parameter = new ArrayList(); for(iterator i = parameter.iterator(); i.hasnext();) Beskrivelse beskrivelse = (Beskrivelse)i.next(); beskrivelse.mor = this; this.parameter.add(beskrivelse); // TODO (Snarest) mangler kommentar public ArrayList parameter() return parameter; // TODO (Snarest) mangler kommentar /*public void aktivitet(aktivitet aktivitet) this.aktivitet = aktivitet; if(parameter == null) return; for(iterator i = parameter.iterator(); i.hasnext();) ((Beskrivelse)i.next()).aktivitet(aktivitet); // TODO (Snarest) mangler kommentar public Aktivitet aktivitet() return aktivitet; * IndsÊtter en vêrdi (verdi) i beskrivelsen og opretter (via f.eks. indset_k til ind) de underbeskrivelser som denne beskrivelse skal bruge. * Mangler typecheck!!!

13 verdi public void indset(string verdi) throws InternFejl parameter = new ArrayList(); tekst = new ArrayList(); this.verdi = verdi; navn = funk.beskrivelse(type); switch (type) case 'A' : // Aktivitet indset_k(verdi.charat(0)); case 'B' : // Betingelse indset_b(verdi.charat(0)); case 'E' : // Egenskab //indset_e(verdi); TODO (#Snart) skal indsêtte ny egenskab med et unikt navn case 'F' : // Tal case 'G' : // Gruppe // indset_g(verdi); TODO (#Snart) skal indsêtte nyt objekt med et unikt navn case 'V' : // Variable indset_v(verdi); case 'W' : // Egenskabs variable indset_v(verdi); case 'X' : // Flere aktiviteter // TODO (#Snart) implementer en fler-aktivitets-indsêtter indset_x(verdi); case 'Z' : // Bruger konstrueret aktivitet //indset_e(verdi); TODO (#Snart) skal insêtte ny aktivitet med et unikt navn case '#' : // Tom betingelse default : // ukendt type! throw new InternFejl("Forsoeger at indsaette en beskrivelse af typen " + type + ". " + type + " er ikke en beskrivelses type", 11);

14 // TODO (?) Der skal maaske ogsaa laves en fjern metode har?! /*public boolean fjern() // public void indset_x(string verdi) switch(verdi.charat(0)) case 'X' : navn = "A, samt A"; ind("rtr", "AX"); ind(", samt "); case 'A' : navn = "A"; ind("rt", "A"); ind("."); * Opretter (via ind) de underbeskrivelser, der n dvêndigvis ogsâ skal laves. Dog uden vêrdi. Alle kommandoerne indeholder andre underbeskrivelser. Metoden indsêtter ogsâ vêrdier i struktur og tekst (til GUIen). private boolean indset_k(char kommando) throws InternFejl switch (kommando) case 'F' : // Find alle medlemmer af G, hvor B navn = "Find alle i G, hvor B"; ind("trtr", "GB"); ind("find alle medlemmer af "); ind(", hvor "); case 'X' : // Udf r A for alle medlemmer af G, hvor B navn ="Udf r A for alle i G, hvor B"; ind("trtrtr", "AGB");

15 "); st rre"; mindre"; case 'H' : case 'G' : case 'B' : case 'V' : case 'A' : case 'S' : case 'M' : case 'U' : ind("udf r "); ind(" for alle medlemmer af ind(", hvor "); // Hvis B sâ A navn = "Hvis B sâ A"; ind("trtr", "BA"); ind("hvis "); ind(", sâ "); // Gentag A indtil B navn = "Gentag A indtil B"; ind("trtr", "AB"); ind("gentag "); ind(" indtil "); // E bliver til V navn = "E bliver til V"; ind("rtr", "EV"); ind(" bliver til "); // E vokser med V navn = "E vokser med V"; ind("rtr", "EV"); ind(" voker med "); // E aftager med V navn ="E aftager med V"; ind("rtr", "EV"); ind(" aftager med "); // E bliver T gange st rre navn ="E bliver V gange ind("rtrt", "EV"); ind(" bliver "); ind(" gange st rre"); // E bliver T gange mindre navn = "E bliver V gange ind("rtrt", "EV"); ind(" bliver "); ind(" gange mindre"); // Udf r X

16 case 'R' : case 'D' : navn = "Udf r "; ind("tr", "X"); ind("udf r "); //ind(", samt "); // Returner E navn = "Returner V"; ind("tr", "V"); ind("returner"); // Udskriv E navn = "Udskriv V"; ind("tr", "V"); ind("udskriv "); default : // Fejl kommando findes ikke! throw new InternFejl("Pr ver at indsêtte kommandoen " + kommando + " i betingelsen " + verdi + ". Kommandoen findes ikke!", 12); if(parameter == null) throw new InternFejl("indsaet_k ikke Kunne lave kommandoen " + kommando, 13); return true; * Opretter (via ind) de underbeskrivelser, der n dvêndigvis skal vêre i denne beskrivelse, dog uden at give dem nogen vêrdi (verdi). Alle betingelserne indeholder underbeskrivelser. Metoden indsêtter ogsâ vêrdier i struktur og tekst (til GUIen). betingelse private boolean indset_b(char betingelse) switch(betingelse) case 'L' : // Lig med navn = "E lig med V"; ind("rtr", "EV"); ind(" er lig med "); case 'S' : // st rre end navn = "E st rre end V"; ind("rtr", "EV");

17 ind(" er st rre end "); case 'M' : // Mindre end navn = "E mindre end V"; ind("rtr", "EV"); ind(" er mindre end "); case 'O' : // Og navn = "B og B"; ind("rtr", "BB"); ind(" og "); case 'E' : // Eller navn = "B eller B"; ind("rtr", "BB"); ind(" eller "); case 'I' : // Ikke navn = "Ikke B"; ind("tr", "B"); ind(" ikke "); return true; * Chekker om egenskaben findes i forvejen. verdi Navnet paa egenskaben public void indset_e(hartilknytning e)//string verdi) //checker om egenskaben findes i det objekt, som beskrivelsens aktivitet er i! // TODO (naar jeg laver gemme og hent funktionerne) Skal ikke checkes naar jeg loader en ny model ind eller naar jeg tester modellen! // TODO (Snarest) Skal kun checkes, naar det er brugeren der opretter en ny beskrivelse. //if(funk.test) return; //Element e = ((Objekt)find_ak().tilknytning()).indeholder(verdi); //if (!(e instanceof Egenskab)) funk.fejl(2, "Proever at indsaette en egenskab (" + verdi + ") der ikke eksistere ind i en beskrivelse af aktiviteten " + find_ak(), "Kommandoen vil blive ingoreret", "System hasr ikke kunne finde en egenskab med navnet " + verdi, "Dette

18 er en intern fejl!!", 1, new Exception(), null, null); parameter = new ArrayList(); tekst = new ArrayList(); verdi = ((Element)e).navn(); navn = ((Element)e).navn(); struktur = "T"; tekst.add(verdi); // // Brugeren skal selv indsêtte egenskaben // element = (Element)e; objekt = e.find_o(); //navn = element.navn(); // Kan undvêres!! public Objekt objekt() return objekt; public void indset_v(string verdi) struktur = "T"; parameter = new ArrayList(); tekst = new ArrayList(); tekst.add(verdi); * IndsÊtter beskrivelsens struktur (til GUIen) og opretter og indsêtter underbeskrivelserne (paramenterne). struktur parameter private void ind(string struktur, String parameter) this.struktur = struktur;

19 int stop = parameter.length(); for(int tal = 0; tal < stop; tal++) //fejl("tal = " + tal); this.parameter.add(new Beskrivelse(parameter.charAt(tal), this)); * IndsÊtter beskrivelsens tekster (til GUIen) tekst private void ind(string tekst) // TODO (Fors g) de to f rste linier er fjernet! //ArrayList temp = new ArrayList(); //temp.add(tekst); this.tekst.add(tekst); public void ukomplet() komplet = false; mor.ukomplet(); // if(mor instanceof Beskrivelse) ((Beskrivelse)mor).ukomplet(); public boolean komplet() if(komplet) return true; for(iterator i = parameter.iterator(); i.hasnext();) if(!((beskrivelse)i.next()).komplet()) return false; return komplet = (type!= '#' && verdi!= null); public Aktivitet find_ak() //if(mor instanceof Aktivitet) return

20 (Aktivitet)mor; return mor.find_ak(); public boolean test() // Test struktur // Test parameter // Test tekst // Test komplet // Test type // Test verdi // Test aktivitet // Test indset (med k, b og e) return true; public class Dukke extends Element implements HarTilknytning private Beholder tilknytning; public Dukke() super(); // TODO Auto-generated constructor stub public Dukke(String navn) super(navn); // TODO Auto-generated constructor stub public Dukke(String navn, Beholder tilknytning) super(navn, tilknytning); this.tilknytning = tilknytning;

21 public Beholder tilknytning() return tilknytning; public Beholder tilknytning(beholder beholder) return tilknytning = beholder; public Objekt find_o() if(tilknytning!= null) return ((HarTilknytning)tilknytning).find_o(); else return null; * Dette er en af de tre modelelementer. Dette modelelement beskriver en egenenskab, ved et objekt eller en aktivitet. rling public class Egenskab extends Element implements HarTilknytning public static int antal = 0; "type" beskriver hvilken type vêrdien "vaerdi" er af. n = ingen (null), i = tal (integer) og s = tekst (String). Grund til at "type" er privat er, at man mâske kommer til at glemme at Êndre typen, naar man Êndre vaerdien, eller omvendt. private char type = 'n'; "vaerdi" indeholder vêrdien af egenskaben. Grund til at "type" er privat er, at man mâske kommer til at glemme at aendre typen, nâr man aendre vêrdien, eller omvendt. private String vaerdi = "tom"; // TODO (Til sidst): Husk at fjerne alle de konstruktoerer, som ikke bliver brugt! public Egenskab() id = antal ++;

22 public Egenskab(String vaerdi) super(); this.vaerdi = vaerdi; id = antal ++; public Egenskab(String vaerdi, String navn) super(navn); this.vaerdi = vaerdi; id = antal ++; public Egenskab(String navn, char type, String vaerdi) super(navn); this.type = type; this.vaerdi = vaerdi; id = antal ++; public Egenskab(String navn, char type, String vaerdi, Beholder beholder) super(navn, beholder); //trybeholder.tilknyt(this, -1); catch(internfejl i) // TODO (NÂr der er tid) Fejlbesked! this.type = type; this.vaerdi = vaerdi; id = antal ++; * Get metode for type. Egenskabens type. public char type() return type; * Get metode for vaerdi. Egenskabens vêrdi. public String vaerdi() return vaerdi;

23 * Set metode for vaerdi. Bruges til at give egenskaben en ny vêrdi. Det er den eneste mulighed, man har ude fra, da "type" og "vaerdi" er private. type er typen paa den nye vêrdi (n = null, i = integer, s = string). vaerdi er den vêrdi, som egenskaben fâr. Den vêrdi, som egenskaben fâr. public String verdi(char type, String vaerdi) this.type = type; this.vaerdi = vaerdi; return vaerdi; Da egenskabs klassen tilh re HarTilknytning interfacet, saa skal egenskaben have en tilknytning (til en beholder). private Beholder tilknytning; Get metode for tilknytningen. public Beholder tilknytning() return tilknytning; Set metode for tilknytningen. public Beholder tilknytning(beholder beholder) return tilknytning = beholder; public Objekt find_o() return ((HarTilknytning)tilknytning).find_o(); Tester intet! public boolean test() // Test element // Test type // Test vaerdi

24 // Test tilknytning return true; import javax.swing.tree.*; /* * Created on * Dette er den klasse som de fleste andre (alle undtagen beskrivelse) modelelementer nedarver fra. * Nogle af klassens metoder (kun test og indeholder), bliver overskrevet af modelelementerne! rling public class Element implements Global public int id; Navnet paa elementet. private String navn; Den knude der viser dette modelelement i GUIen. public DefaultMutableTreeNode knude = new DefaultMutableTreeNode (this); // TODO (Til sidst): Husk at fjern de konstruktor, der ikke bliver brugt! // Der skal vaere en grundkonstruktoer! Ogsaa selvom den kun bliver brugt af objekt klassen :-( Den tomme konstrukt r. Opretter et nyt element, med et unikt navn. public Element() // Giver elementet et unikt navn. Man kunne ogsâ bruge pêne nummer "private static int antal = 0; private final int nummer;". navn = "Element_" + hashcode();

25 * Opretter et element med navnet navn, med et unikt navn. navn Navnet pâ elementet. public Element(String navn) if(funk.model == null && this instanceof Model) this.navn = navn; return; Element temp; // Skal egentlig rettes til instanceof Model og Objekt if(this instanceof HarO) temp = funk.model.indeholder(navn); // Vil aldrig kunne blive checket! Den vil aldrig kunne lave find_o!!! //else temp = ((HarTilknytning)this).find_o().indeholder(navn); //Checker om navnet bliver brugt i forvejen. // DERFOR else funk.fejl(new Exception("Oprettelse af aktivitet/egenskab uden tilknytning!!!"), "FEJL!"); return; if(temp!= null &&!funk.hent) this.navn = (String)funk.fare(3, "Navnet " + navn + " bliver brugt i forvejen.", "Systemet vil ikke kunne kende forskel pâ de to elementer med samme navn.", "Et element af typen " + temp.getclass().getname() + " har navnet " + navn + " i forvejen.", "Husk at give elementerne unikke navne.", 3, new Exception(), new FejlRetter(2, navn + "_"+ hashcode()), navn); else this.navn = funk.check(navn); public Element(String navn, Beholder beholder)

26 if(funk.model == null && this instanceof Model) this.navn = funk.check(navn); return; Element temp; if(this instanceof HarO this instanceof Dukke) temp = funk.model.indeholder(navn); else temp = ((HarTilknytning)beholder).find_o().indeholder(navn); //Checker om navnet bliver brugt i forvejen. if(temp!= null &&!funk.hent) this.navn = (String)funk.fare(3, "Navnet " + navn + " bliver brugt i forvejen.", "Systemet vil ikke kunne kende forskel pâ de to elementer med samme navn.", "Et element af typen " + temp.getclass().getname() + " har navnet " + navn + " i forvejen.", "Husk at give elementerne unikke navne.", 3, new Exception(), new FejlRetter(2, navn + "_"+ hashcode()), navn); else this.navn = funk.check(navn); tryif(!(this instanceof Dukke)) beholder.tilknyt((hartilknytning)this, -1); catch(internfejl i)system.out.println("fejl HG FEJL"); * Get metode for elementets navn. Elementets navn. public String navn() return navn; * Set metode for elements navn. navn Det nye navn til elementet. Det nye navn. public String navn(string navn) Element temp; if(this instanceof HarO) temp = funk.model.indeholder(navn); else temp = ((HarTilknytning)this).find_o().indeholder(navn); //Checker om navnet bliver brugt i forvejen.

27 if(temp!= null &&!funk.hent) this.navn = (String)funk.fare(3, "Navnet " + navn + " bliver brugt i forvejen.", "Systemet vil ikke kunne kende forskel pâ de to elementer med samme navn.", "Et element af typen " + temp.getclass().getname() + " har navnet " + navn + " i forvejen.", "Husk at give elementerne unikke navne.", 3, new Exception(), new FejlRetter(2, navn + "-" + id), navn); else this.navn = funk.check(navn); return navn; * Tester om elementet indeholder navnet navn. navn Det navn der testes. Det objekt der har navnet navn, ellers null public Element indeholder(string navn) if(this.navn.equals(navn)) return this; return null; public String tostring() return navn; * Tester navn og indeholder funktionerne. Altid true. public boolean test() return true; import javax.swing.tree.*; /* * Created on

28 * Dette er den klasse som de fleste andre (alle undtagen beskrivelse) modelelementer nedarver fra. * Nogle af klassens metoder (kun test og indeholder), bliver overskrevet af modelelementerne! rling public class Element implements Global public int id; Navnet paa elementet. private String navn; Den knude der viser dette modelelement i GUIen. public DefaultMutableTreeNode knude = new DefaultMutableTreeNode (this); // TODO (Til sidst): Husk at fjern de konstruktor, der ikke bliver brugt! // Der skal vaere en grundkonstruktoer! Ogsaa selvom den kun bliver brugt af objekt klassen :-( Den tomme konstrukt r. Opretter et nyt element, med et unikt navn. public Element() // Giver elementet et unikt navn. Man kunne ogsâ bruge pêne nummer "private static int antal = 0; private final int nummer;". navn = "Element_" + hashcode(); * Opretter et element med navnet navn, med et unikt navn. navn Navnet pâ elementet. public Element(String navn) if(funk.model == null && this instanceof Model) this.navn = navn; return; Element temp;

29 // Skal egentlig rettes til instanceof Model og Objekt if(this instanceof HarO) temp = funk.model.indeholder(navn); // Vil aldrig kunne blive checket! Den vil aldrig kunne lave find_o!!! //else temp = ((HarTilknytning)this).find_o().indeholder(navn); //Checker om navnet bliver brugt i forvejen. // DERFOR else funk.fejl(new Exception("Oprettelse af aktivitet/egenskab uden tilknytning!!!"), "FEJL!"); return; if(temp!= null &&!funk.hent) this.navn = (String)funk.fare(3, "Navnet " + navn + " bliver brugt i forvejen.", "Systemet vil ikke kunne kende forskel pâ de to elementer med samme navn.", "Et element af typen " + temp.getclass().getname() + " har navnet " + navn + " i forvejen.", "Husk at give elementerne unikke navne.", 3, new Exception(), new FejlRetter(2, navn + "_"+ hashcode()), navn); else this.navn = funk.check(navn); public Element(String navn, Beholder beholder) if(funk.model == null && this instanceof Model) this.navn = funk.check(navn); return; Element temp; if(this instanceof HarO this instanceof Dukke) temp = funk.model.indeholder(navn); else temp = ((HarTilknytning)beholder).find_o().indeholder(navn); //Checker om navnet bliver brugt i forvejen. if(temp!= null &&!funk.hent) this.navn = (String)funk.fare(3, "Navnet " + navn + " bliver brugt i forvejen.", "Systemet vil ikke kunne kende forskel pâ de to elementer med samme navn.", "Et element af typen " +

30 temp.getclass().getname() + " har navnet " + navn + " i forvejen.", "Husk at give elementerne unikke navne.", 3, new Exception(), new FejlRetter(2, navn + "_"+ hashcode()), navn); else this.navn = funk.check(navn); tryif(!(this instanceof Dukke)) beholder.tilknyt((hartilknytning)this, -1); catch(internfejl i)system.out.println("fejl HG FEJL"); * Get metode for elementets navn. Elementets navn. public String navn() return navn; * Set metode for elements navn. navn Det nye navn til elementet. Det nye navn. public String navn(string navn) Element temp; if(this instanceof HarO) temp = funk.model.indeholder(navn); else temp = ((HarTilknytning)this).find_o().indeholder(navn); //Checker om navnet bliver brugt i forvejen. if(temp!= null &&!funk.hent) this.navn = (String)funk.fare(3, "Navnet " + navn + " bliver brugt i forvejen.", "Systemet vil ikke kunne kende forskel pâ de to elementer med samme navn.", "Et element af typen " + temp.getclass().getname() + " har navnet " + navn + " i forvejen.", "Husk at give elementerne unikke navne.", 3, new Exception(), new FejlRetter(2, navn + "-" + id), navn); else this.navn = funk.check(navn); return navn; * Tester om elementet indeholder navnet navn. navn Det navn der testes. Det objekt der har navnet navn, ellers null

31 public Element indeholder(string navn) if(this.navn.equals(navn)) return this; return null; public String tostring() return navn; * Tester navn og indeholder funktionerne. Altid true. public boolean test() return true; import java.util.*; import javax.swing.tree.*; rling public class FejlRetter implements Global int id = 0; Object ting; public FejlRetter(int nummer) id = nummer; public FejlRetter(int nummer, Object ting) id = nummer; this.ting = ting;

32 public Object ret() if(id == 1) // Hele modellen fors ges fjernet for(int tal = funk.model.knude.getchildcount(); tal > 0; tal --) DefaultMutableTreeNode t = (DefaultMutableTreeNode)funk.model.knude.getChildAt(tal - 1); try import java.util.*; import java.net.*; import javax.swing.*; import javax.swing.tree.defaulttreemodel; import java.io.*; import java.io.writer.*;; // TODO (Snarest) Skal kommenteres! (med ) // TODO (Fejl nummer (f rste ledige nummer)) 17 public class Funktion int log10_max = 4; int Xmax = 500; int Ymax = 300; int temp_int = 0; int Yoffset = 35; int port = 4444; String ip = " "; Start start; GBK grafikken; JTree tree; Model model; DefaultTreeModel tmodel; Socket forbindelse = null; PrintWriter skriver = null; Lytter lytter = null; // Knapperne

33 boolean test = false; // T boolean fejl = false; // L boolean gogo = false; // F boolean fare = false; // A boolean info = false; // I boolean byt = false; boolean graf = false; boolean hent = false; String testen = "Fejl!"; public Funktion() /* * OversÊtter til string * /* * Format: * size * navn size * data * (Egenskab) vêrdi size * data * (Model og Objekt) underobjekterne size * 1. underobjekt *... * sidste underobjekt * (Aktivitet) undeaktiviteter size * 1. underaktivitet *... * sidste underaktivitet

34 * underegenskaber size * 1. underegenskaber *... * sidste underegenskaber * Beskrivelse navn size * data * Objekt (navn) size * data * under Beskrivelseer size * 1. under beskrivelse *... * sidste under beskrivelse public String element(element element) String retur = struktur(element.navn()); if(element instanceof Egenskab) retur += struktur(((egenskab)element).vaerdi()); if(element instanceof HarO) retur += liste(((haro)element).objekter()); if(element instanceof HarEOgA) retur += liste(((hareoga)element).aktiviteter()); retur += liste(((hareoga)element).egenskaber()); if(element instanceof Aktivitet) retur += overset(((aktivitet)element).beskrivelse()); return struktur(retur); /* Format: * log10_max

35 * Start aktivitet (navn) size * data (hvis size > 0) * size * navn size * data * underobjekterne size * 1. underobjekt *... * sidste underobjekt public String overset(model model) String retur = ""; if(model.stataktivitet == null) retur += struktur(""); else retur += struktur(model.stataktivitet.navn()); retur += element(model); retur = formater(log10_max + "", 2) + retur; return retur; /* Format: * navn size * data * Objekt (navn) size * data * under Beskrivelseer size * 1. under beskrivelse *... * sidste under beskrivelse public String overset(beskrivelse beskrivelse) String retur = struktur(beskrivelse.navn); if(beskrivelse.objekt() == null) retur += struktur(""); else retur += struktur(beskrivelse.objekt().navn()); retur += liste(beskrivelse.parameter()); return struktur(retur);

36 public String overset(object object) if(object instanceof Element) if(object instanceof Model) return overset((model)object); else return element((element)object); else return overset((beskrivelse)object); /* * * OversÊtter fra string * /* Format: * log10_max * Start aktivitet (navn) size * data (hvis size > 0) * size * navn size * data * * LISTE_O * * underobjekterne size * 1. underobjekt *... * sidste underobjekt public Model overset_m(string tekst) Model retur = new Model();

37 Object[] buff = tal(tekst, 2); // Log10_max log10_max = tal(buff[0]); tekst = tex(buff[1]); // Startaktivitet String startaktivitet = tex((buff = overset(tekst))[0]); tekst = tex(buff[1]); // Check! if((tal(((buff = tal(tekst))[0]))!= (tekst = tex(buff[1])).length())) fejl(new Exception("St rrelsene passer ikke"), "FEJL!!!"); // Navn retur = new Model(tex(buff = overset(tekst))[0]); tekst = tex(buff[1]); // ObjektListe retur.objekter(liste_o(tekst, retur)); retur.stataktivitet = (Aktivitet)retur.indeholder(startAktivitet); return retur; /* * Format: * size * navn size * data * (Model og Objekt) underobjekterne size * 1. underobjekt *... * sidste underobjekt public Objekt overset_o(string tekst, Beholder far) Objekt retur; Object[] buff = tal(tekst);

38 brugt!!! //int size = tal(buff[0]); //tekst = tex(buff[1]); // Bliver ikke // Navn tryretur = new Objekt(tex(buff = overset(tekst))[0], far);catch(internfejl i)retur = null; tekst = tex(buff[1]); retur.objekter(liste_o(tekst, retur)); retur.aktiviteter(liste_a(tekst, retur)); retur.egenskaber(liste_e(tekst, retur)); return retur; public Aktivitet overset_a(string tekst, Beholder far) Aktivitet retur; Object[] buff = tal(tekst); brugt!!! //int size = tal(buff[0]); //tekst = tex(buff[1]); // Bliver ikke // Navn retur = new Aktivitet(tex(buff = overset(tekst))[0], far); tekst = tex(buff[1]); retur.aktiviteter(liste_a(tekst, retur)); retur.egenskaber(liste_e(tekst, retur)); return retur; public Egenskab overset_e(string tekst, Beholder far) Egenskab retur; Object[] buff = tal(tekst); brugt!!! //int size = tal(buff[0]); // Bliver ikke

39 //tekst = tex(buff[1]); // Navn String navn = tex(buff = overset(tekst))[0]; tekst = tex(buff[1]); // vêrdi retur = new Egenskab(navn, 's', tex((buff = overset(tekst))[0]), far); return retur; /* * * HjÊlpe funktioner * // Formater en tekst. public String struktur(string tekst) return formater(tekst.length() + "") + tekst; // Formater et tal, med log10_max public String formater(string string) int stop = string.length(); // TODO (Snarest) skal laves om til en internfejl if(stop > log10_max) return fejl(new Exception("Oversaettelses fejl"), "Tallet " + string + " fylder mere end " + log10_max + " cifre. SÊt log10-max (som styre antallet af cifre) i menuen til " + stop + " eller mere!")+""; stop = log10_max - stop; for(int tal = 0; tal < stop; tal ++) string = "0" + string; return string;

40 // Formater et tal. public String formater(string string, int size) int stop = string.length(); // TODO (Snarest) skal laves om til en internfejl if(stop > size) return fejl(new Exception("Oversaettelses fejl"), "Tallet " + string + " fylder mere end " + size + " cifre.") + ""; stop = size - stop; for(int tal = 0; tal < stop; tal ++) string = "0" + string; return string; // OversÊtter en liste til en tekst public String liste(arraylist liste) String string = ""; if(liste == null) return "000"; string += formater(liste.size() + ""); for(iterator i = liste.iterator(); i.hasnext();) string += overset(i.next()); return string; // OversÊtter en tekst til en liste public ArrayList liste(string tekst) ArrayList retur = new ArrayList(); Object[] buff = tal(tekst); tekst = tex(buff[1]); for(int tal = 0; tal < tal(buff[0]); tal ++) retur.add(tex(buff = overset(tekst))[0]); tekst = tex(buff[1]); return retur; // OversÊtter tekst til tal public Object[] tal(string string) Object[] retur = tal(0), string;

41 if(string.equals("")) return retur; try retur[0] = Integer.decode(nullfri(string.substring(0, log10_max))); catch(numberformatexception e) // TODO (Snarest) skal laves om til en internfejl fejl(e, "Pr ver at oversêtte teksten " + string.substring(0, log10_max) + " til et tal"); retur[0] = tal(-1); retur[1] = string.substring(log10_max); return retur; // OversÊtter tekst til tal public Object[] tal(string string, int log) Object[] retur = tal(0), string; if(string.equals("")) return retur; try retur[0] = Integer.decode(nullfri(string.substring(0, log))); catch(numberformatexception e) // TODO (Snarest) skal laves om til en internfejl fejl(e, "Pr ver at oversêtte teksten " + string.substring(0, log) + " til et tal"); retur[0] = tal(-1); retur[1] = string.substring(log); return retur; // OversÊtter formateret tekst til "normal" tekst. public String[] overset(string string) if(string.equals("")) return (String[])hjelp("",

42 ""); int pos = log10_max + tal(tal(string)[0]); // TODO (Snarest) skal laves om til en internfejl if(pos > string.length()) fejl(new Exception("Teskt manipulering"), "Programmet proever at fjerne " + pos + " tegn fra teksten '" + string + "', som kun indeholder " + string.length() + " tegn."); return tex(hjelp(string.substring(log10_max, pos), cut(string, pos))); //* // Fjerner "lang" tegn fra teksten "string" public String cut(string string, int lang) if(string.equals("")) return string; if(lang > string.length()) //TODO (NÂr der skal laves fejlhândtering) kast en fejl return string.substring(lang); // /* public String cut(string string, String lang) // TODO (TEST)!!! if(string.equals("")) return string; return cut(string, lang.length() + log10_max); // //* Fjerner nuller fra tal i teksten "tal" public String nullfri(string tal) while (tal.startswith("0") && tal.length() > 1) tal = cut(tal, 1); return tal; // private int tal(object tal) return ((Integer)tal).intValue();

43 private Object tal(int tal) return new Integer(tal); private String tex(object tekst) return (String)tekst; private String[] tex(object[] o) int stop = o.length; String[] retur = new String[stop]; for(int tal = 0; tal < stop; tal ++) retur[tal] = (String)o[tal]; return retur; private Object[] hjelp(object o1, Object o2) Object[] retur = o1, o2; return retur; /* * underobjekterne size * 1. underobjekt *... * sidste underobjekt private ArrayList liste_o(string tekst, Beholder far) ArrayList retur = new ArrayList(); Object[] buff = tal(tekst); int stop = tal(buff[0]); tekst = tex(buff[1]); if(stop > 0) for(int tal = 0; tal < stop; tal ++) //System.out.println("Objekt = " + tekst);

44 retur.add(overset_o((tex(buff = overset(tekst))[0]),far)); tekst = tex(buff[1]); return retur; private ArrayList liste_a(string tekst, Beholder far) ArrayList retur = new ArrayList(); Object[] buff = tal(tekst); int stop = tal(buff[0]); tekst = tex(buff[1]); if(stop > 0) for(int tal = 0; tal < stop; tal ++) retur.add(overset_a((tex(buff = overset(tekst))[0]),far)); tekst = tex(buff[1]); return retur; private ArrayList liste_e(string tekst, Beholder far) ArrayList retur = new ArrayList(); Object[] buff = tal(tekst); int stop = tal(buff[0]); tekst = tex(buff[1]); if(stop > 0) for(int tal = 0; tal < stop; tal ++) retur.add(overset_e((tex(buff = overset(tekst))[0]),far)); tekst = tex(buff[1]); return retur; /* private String fyld(int stop)

45 String retur = ""; for(int tal = 0; tal < stop; tal ++) retur += "X"; return retur; // * Tester om listen af elementer indeholder et element med navnet "navn". public Element indeholder(arraylist liste, String navn) if(liste == null) return null; for(iterator i = liste.iterator(); i.hasnext();) Element temp = (Element) i.next(); if(temp.navn()!= null) if(temp.navn().equals(navn)) return temp; if(temp instanceof Beholder && ((Beholder)temp).indeholder(navn)!= null) return temp; return null; * Tester og retter navnene! public String check(string navn) return navn; * element beholder InternFejl public ArrayList getlist(object element, Beholder beholder) throws InternFejl

46 switch(skift(element)) case 'O' : if(beholder instanceof HarO) if(((haro)beholder).objekter() == null) System.out.println("FEJL FEJL"); //System.out.println("Objekt listen" + " fra " + beholder); return ((HarO)beholder).objekter(); else throw new InternFejl("Beholder " + beholder + " pr vede at arbejde med objektet " + element + ", men beholderne mâ ikke arbejde med objekter", 6); case 'A' : if(beholder instanceof HarEOgA) //System.out.println("Aktivitet listen" + " fra " + beholder); return ((HarEOgA)beholder).aktiviteter(); else throw new InternFejl("Beholder " + beholder + " pr vede at arbejde med aktiviteten " + element + ", men beholderne mâ ikke arbejde med aktiviteter", 7); case 'E' : if(beholder instanceof HarEOgA) //System.out.println("Egenskabs listen" + " fra " + beholder); return ((HarEOgA)beholder).egenskaber(); else throw new InternFejl("Beholder " + beholder + " pr vede at arbejde med egenskaben " + element + ", men beholderne mâ ikke arbejde med egenskaber", 8); default : throw new InternFejl("Beholder " + beholder + " pr vede at arbejde med " + element, 9);

47 public ArrayList getalllists(beholder beholder) ArrayList retur = new ArrayList(); if(beholder instanceof HarEOgA) retur.add(((hareoga)beholder).egenskaber()); retur.add(((hareoga)beholder).aktiviteter()); if(beholder instanceof HarO) retur.add(((haro)beholder).objekter()); return retur; * En lille oversaettelses metode, saa jeg kan bruge switch! element Forbogstavet paa klassenavnet. public char skift(object element) if(element instanceof Model) return 'M'; if(element instanceof Objekt) return 'O'; if(element instanceof Aktivitet) return 'A'; if(element instanceof Egenskab) return 'E'; if(element instanceof Beskrivelse) return 'B'; return 'F'; public void i(string tekst) if(info) System.out.println(tekst); // TODO den dovne udskrives-metode. public void u(string tekst) System.out.println(tekst); // IndsÊtter linjeskift, sâ teksten "tekst", ikke indeholder linjer der lêngere end "lang"

48 public String rettil(string tekst, int lang) int mod = 0; int offset = 0; ArrayList her = new ArrayList(); for(stringtokenizer token = new StringTokenizer(tekst, "\n"); token.hasmoretokens();) String temp = token.nexttoken(); for(int tal = 1; tal <= (temp.length() / lang); tal ++) her.add(new Integer((tal * lang) + mod + offset)); mod ++; offset += temp.length(); mod ++; int pos; for(iterator i = her.iterator(); i.hasnext();) pos = ((Integer)i.next()).intValue(); pos = tekst.substring(0, pos).lastindexof(" ") + 1; if(pos < tekst.length()) tekst = tekst.substring(0, pos) + "\n" + tekst.substring(pos); return tekst; // "oversêtter" beskrivelses typen "type" til en tekst public String beskrivelse(char type) switch (type) case 'A' : return "Aktivitet"; case 'B' : return "Betingelse"; case 'E' : return "Egenskab"; case 'F' : return "Tal"; case 'G' : return "Gruppe"; case 'V' : return "Variabel"; case 'X' : return "Flere aktiviteter"; case '#' : return "Tom betingelse";

49 default : return "Ukendt type"; /* * * NetvÊrks funktioner * * Opretter en forbindelse public boolean kontakt() try forbindelse = new Socket(ip, port); skriver = new PrintWriter(forbindelse.getOutputStream(), true); // Autoflush! Vigtig! lytter = new Lytter(new InputStreamReader(forbindelse.getInputStream())); catch(connectexception e)return (forbindelse = (Socket)fEjl(3, "Kunne ikke oprette forbindelse til serveren", "Fors get pâ at oprette en forbindelse vil blive ignoreret", "Der er ingen server der lytter til port " + port, "Pr ve at Êndre port-nummeret i System-menuen", 1, e, null, null))!= null; catch(portunreachableexception e)return (forbindelse = (Socket)fEjl(3, "Kunne ikke oprette forbindelse til serveren", "Fors get pâ at oprette en forbindelse vil blive ignoreret", "Port " + port + " kan ikke anvendes", "Pr ve at Êndre port-nummeret i Systemmenuen", 1, e, null, null))!= null; catch(noroutetohostexception e)return (forbindelse = (Socket)fEjl(3, "Kunne ikke oprette forbindelse til serveren", "Fors get pâ at oprette en forbindelse vil blive ignoreret", "Kunne ikke fâ kontakt til serveren", "Pr ve igen senere", 1, e, null, null))!= null;

50 catch(securityexception e)return (forbindelse = (Socket)fEjl(3, "Kunne ikke oprette forbindelse til serveren", "Fors get pâ at oprette en forbindelse vil blive ignoreret", "Adgangen til serveren nêgtet!", "", 1, e, null, null))!= null; catch(ioexception e)return (forbindelse = (Socket)fEjl(3, "Kunne ikke oprette forbindelse til serveren", "Fors get pâ at oprette en forbindelse vil blive ignoreret", "", "Pr ve at Êndre port-nummeret i Systemmenuen", 1, e, null, null))!= null; catch(exception e)return (forbindelse = (Socket)fEjl(3, "Kunne ikke oprette forbindelse til serveren", "Fors get pâ at oprette en forbindelse vil blive ignoreret", "", "Pr ve at Êndre port-nummeret i Systemmenuen", 1, e, null, null))!= null; return true; public void afbryd() try skriver.close(); lytter.close(); forbindelse.close(); forbindelse = null; catch(exception e)this.fare(18, "Kunne ikke lukke forbindelsen til serveren", "Fejlen vil blive ignoreret", "", "", 3, e, null, null); public void send(string tekst) skriver.println(tekst); /* * * Fejl og advarsels funktioner *

51 * Til haandtering af eksterne fejl error sket sker fejlretning undgaa alvor Object public Object fejl(int id, String sket, String sker, String hvorfor, String undgaa, int alvor, Exception error, Object fejlretning, Object fortset) i("der er opstâet en fejl!"); if(gogo) if(fejlretning instanceof FejlRetter) return ((FejlRetter)fejlRetning).ret(); else return fejlretning; if(graf) i("pr ver at vise fejlbeskeden med den grafiske brugerkommunikation"); return grafikken.fejl(id, sket, sker, hvorfor, undgaa, alvor, error, fejlretning, fortset); i("pr ver at udskrive fejlbeskeden"); if(fejl) System.err.println(sket + "\n" + sker + "\n" + hvorfor + undgaa); else error.printstacktrace(); if(alvor < 2) System.exit(0); i("proever af rette fejlen"); if(fejlretning instanceof FejlRetter) return ((FejlRetter)fejlRetning).ret(); else return fejlretning; * Til haandtering af interne fejl

52 e tekst InternFejl public Object fejl(exception e, String tekst) e.printstacktrace(); StackTraceElement tree[] = e.getstacktrace(); int tal = 0; while(tree[tal].getclassname().startswith("java") tree[tal].getclassname().startswith("sun")) tal++; System.out.println(" "); System.out.print("Fejlen er her ---> "); System.err.print(tree[tal] + " "); System.out.println((e.getMessage()!=null)?e.getMessage():(e.toString().substring(e.toString().lastIndexOf(".") + 1))); return null; public Object fare(int id, String sket, String sker, String hvorfor, String undgaa, int alvor, Exception error, Object fejlretning, Object fortset) i("advarsel " + sket); if(!fare) if(fejlretning instanceof FejlRetter) return ((FejlRetter)fejlRetning).ret(); else return fejlretning; if(graf) i("pr ver at vise advarselen med den grafiske brugerkommunikation"); return grafikken.fare(id, sket, sker, hvorfor, undgaa, alvor, error, fejlretning, fortset); i("pr ver at udskrive fejlbeskeden"); if(fejl) System.err.println(sket + "\n" + sker + "\n" + hvorfor + "\n" + undgaa); else error.printstacktrace();

53 if(alvor < 2) return null; i("pr ver af rette fejlen"); if(fejlretning instanceof FejlRetter) return ((FejlRetter)fejlRetning).ret(); else return fejlretning; /* * Funktioner til at hândter start argumenterne * public boolean knapper(string[] knap) boolean end = false; int stop = knap.length; for(int tal = 0; tal < stop; tal ++) if(knap[tal].charat(0) == '-') switch(knap[tal].charat(1)) case 'h' : // HjÊlp case 'H' : udskriv(); end = true; case 't' : // Test case 'T' : test = true; case 'a' : // Udskriver advarseler case 'A' : fare = true; case 'l' : // Lang fejl beskrivelse! case 'L' : fejl = true; case 'f' : // Fortsaet udfoerselen, selv om der er fejl case 'F' : gogo = true; case 'i' : // Inforamtioner om problemomraader! case 'I' : info = true;

54 default : System.out.println("Funktionen " + knap[tal] + " er ukendt"); else System.out.println("Funktionen " + knap[tal] + " er ukendt"); if(end) return end; return end; private void udskriv() System.out.println("HjÊlpe funktioner"); System.out.println(" "); System.out.println(" h / H HjÊlp (denne side)"); System.out.println(" t / T Test systemets funktioner"); System.out.println(" f / F Fortsaet udfoerselen"); System.out.println(" l / L Udf rlige beskrivelser af fejlen"); System.out.println(" a / A Advare brugeren om farlige situationer"); System.out.println(" i / I Informer om status for afviklingen i kritiske omraader"); System.out.println(""); public boolean test() // Test overset til string // Test liste til string // Test overset fra string // Test list // Test navn // Test type_vaerdi

55 // Test standard // Test liste fra string // Test hjaelpefunktionerne // Test struktur // Test format // Test lang // Test under // Test cut med int // Test cut med string // Test nullfri // Test indeholder // Test getlist // Test getalllists ArrayList temp_liste = getalllists(new Model()); // TODO (Snarest) skal laves om til en internfejl if(temp_liste == null) fejl(new Exception(""), "getalllists metoden"); // Test skift // TODO (Snarest) skal laves om til en internfejl if(skift(new Model())!= 'M') fejl(new Exception("Genkendelse af klasser"), "Metoden skift kunne ikke genkende beskriveler"); char temp_type = skift(new Object()); // TODO (Snarest) skal laves om til en internfejl if(temp_type!= 'F') fejl(new Exception("Genkendele af klasser"), "Metoden skift kunne genkende et object, som vaerende af type " + temp_type); // Test Fejlfunktionerne

56 // Test fare // Test fejl // Test fejl_oversetning return true; // if(!=) fejl(new Exception(""), this, ""); funk.model.fjern((hartilknytning)t.getuserobject()); catch(internfejl i)/*todo (NÂr der er tid) lav en fejl ting if(id == 2) // Navnet findes i forvejen! String svar = funk.grafikken.sporg("skriv nyt navn", (String)ting); if(svar == null) return ting; return svar; return null; import javax.swing.*; import java.awt.*; import javax.swing.tree.*; // TODO (til sidst) Skal muligvis fjernes import java.awt.event.*; import java.util.*; import javax.swing.event.*; //import java.awt.event.actionlistener; /* * Created on

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11 DM01 DM01 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 18/3-2003 Side 1 af 11 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DILEMMA:...4 2.1.1 METODER:...4

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Grafiske komponenter

Læs mere

Civilingeniøreksamen 49104 12. januar 2001. Skriftelig prøve den 12. januar 2001 Kursusnummer 49104

Civilingeniøreksamen 49104 12. januar 2001. Skriftelig prøve den 12. januar 2001 Kursusnummer 49104 Skriftelig prøve den 12. januar 2001 Kursusnummer 49104 Kursusnavn: Programmering. Tilladte hjælpemidler: Alle skriftlige hjælpemidler Opgavesættet består af fire opgaver, der har følgende vægtning: Opgave

Læs mere

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004 Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2

Læs mere

Kursus navn: Indledende programmering Kursus nr. 02101

Kursus navn: Indledende programmering Kursus nr. 02101 Danmarks Tekniske Universitet Side 1 af 8 sider Skriftlig prøve, den 15. december 2007 Kursus navn: Indledende programmering Kursus nr. 02101 Tilladte hjælpemidler: Alle skriftlige hjælpemidler Vægtning

Læs mere

9.8 Kildekode. side 88. Pakke Klasse Sidenummer. fortsætter..

9.8 Kildekode. side 88. Pakke Klasse Sidenummer. fortsætter.. 9.8 Kildekode Pakke Klasse Sidenummer db Aktivitetstype 91 Behandler 91 ConnectDB 92 DagensKommentar 93 Helligdag 94 IkkePrimaerTid 94 Patient 96 Patientaftale 96 PatientAktivitet 97 Patientgruppe 98 PatientgruppeItem

Læs mere

PROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections;

PROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections; PROGRAM using System; using System.Collections.Generic; using System.Text; using System.Collections; namespace EventManager class Program static void Main(string[] args) string hovedmenu = ""; string svar;

Læs mere

Vejledende løsninger

Vejledende løsninger Roskilde Universitetscenter side 1 af 8 sider Vejledende løsninger Opgave 1 Spørgsmål 1.1 a = b - a; b = b - a; a = b + a; Opgaven har flere løsninger. En anden løsning er: a = b + a; b = a - b; a = a

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4 DM502 Forelæsning 4 Flere kontrolstrukturer for-løkke switch-case Metoder Indhold Arrays og sortering af arrays String-funktioner for-løkke Ofte har man brug for at udføre det samme kode, for en sekvens

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

public Set(int size) { this.listelement = new LinkedList<Integer>(); }

public Set(int size) { this.listelement = new LinkedList<Integer>(); } // Henri AYCARD import java.util.linkedlist; public class Set { private LinkedList listelement; public Set(int size) { this.listelement = new LinkedList(); public boolean contains(int

Læs mere

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning Datalogi OB, Efterår 2002 OH er, forelæsning 10/9-2002 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Eftermiddagens opgave:

Læs mere

Offset til terminalskærm i Java

Offset til terminalskærm i Java Denne guide er oprindeligt udgivet på Eksperten.dk Offset til terminalskærm i Java Ikke en atikkel - men en Classe til java der gør det nemt at skrive ud på avancerede måder når man kun opererer i dosvindue.

Læs mere

Java Klasse nedarvninger

Java Klasse nedarvninger Denne guide er oprindeligt udgivet på Eksperten.dk Java Klasse nedarvninger Et let lille overblik i hvordan klasse nedarvning virker i java Skrevet den 07. dec 2011 af mochners I kategorien Programmering

Læs mere

Dag 10 Flertrådet programmering

Dag 10 Flertrådet programmering Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument,

Læs mere

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering Skriftlig eksamen i Grundlæggende Programmering ITU, 20. januar 2000 Alle hjælpemidler tilladt, dog ikke datamat. Eksamen er skriftlig, fire timer, og bedømmes efter 13-skalaen. Opgavesættet består af

Læs mere

Tree klassen fra sidste forelæsning

Tree klassen fra sidste forelæsning Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years

Læs mere

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004 Genbrugelige komponenter og designmønstre i Java Jacob Nordfalk Ingeniørhøjskolen i København Nykøbing F itvisioncenter 24. februar 2004 Program Om Jacob Nordfalk introduktion (ikke-teknisk del) Komponentbaseret

Læs mere

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

//Udskriver System.out.println(Hej  + ditfornavn +   + ditefternavn + .); System.out.println(Du er  + dinalder +  aar gammel! Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal

Læs mere

Ugeseddel 4 1. marts - 8. marts

Ugeseddel 4 1. marts - 8. marts Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 11 sider Skriftlig eksamen i Datalogi Modul 1 Sommer 2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 10% Opgave 2 10%

Læs mere

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

Software Construction 1 semester (SWC) Spørgsmål 1

Software Construction 1 semester (SWC) Spørgsmål 1 Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /

Læs mere

Klasser og nedarvning

Klasser og nedarvning Datalogi C, Efterår 2004 OH er, forelæsning 21/9-2004 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Opgaven til senere: Generalisere

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3 DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget

Læs mere

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11 DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void

Læs mere

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation). Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer

Læs mere

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree. Programmering 1999 Forelæsning 11, tirsdag 5. oktober 1999 Oversigt Klasse-hierarkier: superklasser og subklasser Nedarvning Polymorfi Programmering 1999 KVL Side 11-1 Hierarkier En klasse repræsenterer

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 9 Andre designmønstre Andre designmønstre: Uforanderlig, Fluevægt, Lagdelt Initialisering, Komposit/Rekursiv Komposition, Kommando/Ændring Fremlæggelse af programmering/status

Læs mere

Eksempel: Skat i år 2000

Eksempel: Skat i år 2000 Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)

Læs mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

Læs mere

Serialization i Java

Serialization i Java Serialization i Java Tutorial lavet af Jákup W. Hansen TSU 2006 1.semester 06.novemter 2006 Hvad er Serialization? I vores tekstbog Objects First with Java bliver denne del af Java ikke gennemgået. Men

Læs mere

BRP 6.9.2006 Kursusintroduktion og Java-oversigt

BRP 6.9.2006 Kursusintroduktion og Java-oversigt BRP 6.9.2006 Kursusintroduktion og Java-oversigt 1. Kursusintroduktion 2. Java-oversigt (A): Opgave P4.4 3. Java-oversigt (B): Ny omvendings -opgave 4. Introduktion til næste kursusgang Kursusintroduktion:

Læs mere

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller Upload fil Upload fil skal ses som et alternativ til at indsende tællefiler vedhæftet til mails Upload fil kan være en hurtigere og mere håndholdt måde at få data ind i Mastra på. Man starter med via Gennemse

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Opfølgning på Skildpadde

Læs mere

Opgaven fortsat. Opfølgning på Opgave 2 og Use Cases. Opgaven. Trin 1: Væsentlige begreber. Resultatliste: 100 bryst, herrer

Opgaven fortsat. Opfølgning på Opgave 2 og Use Cases. Opgaven. Trin 1: Væsentlige begreber. Resultatliste: 100 bryst, herrer Opfølgning på Opgave 2 og Use Cases originally by Michael R. Hansen modified/extended by Anne E. Haxthausen Informatics and Mathematical Modelling Technical University of Denmark Opgaven fortsat Efter

Læs mere

Bilag 1 Rige billeder Ordremodtagelse

Bilag 1 Rige billeder Ordremodtagelse Bilag1 Rigebilleder Ordremodtagelse Tværfagligtprojektpå2.Semester Bilag afchristian,kennetogmartin 71 Overordnet Tværfagligtprojektpå2.Semester Bilag afchristian,kennetogmartin 72 Produktionsgulvet Tværfagligtprojektpå2.Semester

Læs mere

Introduction til.net remoting i C#

Introduction til.net remoting i C# Denne guide er oprindeligt udgivet på Eksperten.dk Introduction til.net remoting i C# Denne artikel beskriver teorien bag.net remoting og viser nogle simple kode eksempler i C#. Den forudsætter kendskab

Læs mere

DM34-1. Obligatorisk opgave Dilemma spillet. Jacob Aae Mikkelsen 191076 kok04

DM34-1. Obligatorisk opgave Dilemma spillet. Jacob Aae Mikkelsen 191076 kok04 DM34-1. Obligatorisk opgave Dilemma spillet Jacob Aae Mikkelsen 191076 kok04 April 2005 Kapitel 1 Resumé Denne rapport dokumenterer udviklingsforløbet og afprøvningen af et spil Dilemma. Spillet går ud

Læs mere

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne. Exercise 1: Opgave 9.1 på CodeJudge. a) Lav klasserne Cirkel, Rektangel og Kvadrat, som implementerer vedhæftede interface From.java (se CodeJudge). Lav Rektangel før du laver Kvadrat. Kan du bruge nedarvning

Læs mere

Tredjepart webservices

Tredjepart webservices Tredjepart webservices 4. juni 2015 USS Dok. Klik her for at angive tekst. 1/12 Indholdsfortegnelse Introduktion... 3 Miljøer... 3 Adgang... 3 API kald... 4 GET: /authorizations... 4 Input 4 Output 4 Output

Læs mere

RMI avanceret. Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer.

RMI avanceret. Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer. Denne guide er oprindeligt udgivet på Eksperten.dk RMI avanceret Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer. Den forudsætter

Læs mere

Objektorienterede metoder

Objektorienterede metoder Objektorienterede metoder Denne gang: Designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Singleton eksempel: Forskellige slags

Læs mere

DM01 DM01. 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 13/5-2003. Side 1 af 7

DM01 DM01. 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 13/5-2003. Side 1 af 7 DM01 DM01 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 13/5-2003 Side 1 af 7 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DNA2:...4 2.1.1 METODER:...4

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag ArrayList klassen Gør det let at lave en objektsamling (collection) med et variabelt antal elementer Der er mange andre slags objektsamlinger (se Collection interfacet i JavaDoc)

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2 DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet

Læs mere

Webserverprogrammering

Webserverprogrammering Webserverprogrammering WSP fortsat - dag 11 Behandling af XML (StAX) Syndikering og RSS med XML JAXB - XML Java-objekter Projekthjælp Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 7 Swing og MVC Swing: MVC, Datamodeller, JTable, evt. JTree Evt.: Swing: Præsentations og kontroldel Læsning: VP 6 Dette materiale er under Åben Dokumentlicens, se

Læs mere

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations Tabelbegrebet Klassediagrammer (III) Tabeller og qualified associations originally by Michael R. Hansen modified/extended by Anne E. Haxthausen Informatics and Mathematical Modelling Technical University

Læs mere

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Denne guide er oprindeligt udgivet på Eksperten.dk Threads i Java Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Den forudsætter

Læs mere

DATALOGI 0GB. Skriftlig eksamen tirsdag den 6. januar 2004

DATALOGI 0GB. Skriftlig eksamen tirsdag den 6. januar 2004 Københavns Universitet bacheloruddannelsen i datalogi side 1 af 6 DATALOGI 0GB Skriftlig eksamen tirsdag den 6. januar 2004 Dette opgavesæt består af 6 nummererede sider. Eksamensdeltagerne bør straks

Læs mere

Dag 10 Flertrådet programmering

Dag 10 Flertrådet programmering Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument,

Læs mere

Databaseadgang fra Java

Databaseadgang fra Java Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,

Læs mere

DM01 DM01. 2. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 9

DM01 DM01. 2. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 9 DM01 2. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 18/3-2003 Side 1 af 9 Indhold 1. Formål... s. 3 2. Klasser... s. 3 2.1. Player... s. 3 2.1.1. Metoder... s. 3 2.1.1.1.

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (i mandags) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag ArrayList Collection (samling af objekter) med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet i JavaDoc) MusicOrganizer projektet Eksempel

Læs mere

Kursus i OOP og Java

Kursus i OOP og Java Kursus i OOP og Java Sidst opdateret 24. november 2001 kun afpudset t.o.m lektion 12 Indholdsfortegnelse Kursus i OOP og Java 1 Til underviseren 5 Om transparenterne 5 Om ugesedlerne 5 Lektion 1 6 Mål

Læs mere

Hvordan vælger jeg dokumentprofilen?

Hvordan vælger jeg dokumentprofilen? Hvordan vælger jeg dokumentprofilen? Valget af OIOUBL profil i en konkret dokumentudveksling vil bl.a. afhænge af, hvilke OIOUBL profiler den anden part i udvekslingen understøtter. Et konkret eksempel

Læs mere

A Profile for Safety Critical Java

A Profile for Safety Critical Java A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren

Læs mere

import java.awt.event.*; import java.awt.*; Container <- Panel <- Applet Component <- Button <- Checkbox <- ScrollPane <- Label

import java.awt.event.*; import java.awt.*; Container <- Panel <- Applet Component <- Button <- Checkbox <- ScrollPane <- Label Programmering 1999 Forelæsning 13, tirsdag 12. oktober 1999 Oversigt Grafiske brugergrænseflader. Komponenter: Knapper, tekstfelter, checkbokse... Vinduer (containere). Hændelser, hændelsesstyret programmering.

Læs mere

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag Forelæsning Uge 5 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Brug af klassen Collections og interfacet Comparable BlueJ s Debugger Nyttig til at inspicere

Læs mere

SAX Simple API for XML.

SAX Simple API for XML. SAX Simple API for XML. En API (Application Programming Interface) et bibliotek eller et sæt af funktioner eller metoder. SAX er et sådant bibliotek af abstrakte metoder som f. eks. startdocument() eller

Læs mere

Hvad er et distribueret objekt? Plan 12.3. Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation

Hvad er et distribueret objekt? Plan 12.3. Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation Plan 12.3. Oversigt over grundlæggende begreber Java: eksempel på applikation, programmering og oversættelse Uddybning af grundlæggende begreber Java RMI implementation Forklaring af øvelsen Hvad er et

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2013 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 5. marts, 2013 Dette projekt udleveres i to dele. Hver del har sin deadline, således

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgave:

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4 dintprog Manual Revision: 1241 August 24, 2010 Indhold I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4 3 Grundbegreber om modellering 4 III Sprogkonstruktioner 5 4 Klasser

Læs mere

dmasark Aflevering - Uge 50

dmasark Aflevering - Uge 50 dmasark Aflevering - Uge 50 Michael Lind Mortensen, 20071202, DAT4 Michael Dahl, 20073943, DAT4 Katalog: http://www.daimi.au.dk/ u073943/dmasark/uge6/ 13. december 2007 Indhold 1 PingClient implementation

Læs mere

Løsning af skyline-problemet

Løsning af skyline-problemet Løsning af skyline-problemet Keld Helsgaun RUC, oktober 1999 Efter at have overvejet problemet en stund er min første indskydelse, at jeg kan opnå en løsning ved at tilføje en bygning til den aktuelle

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet i JavaDoc) MusicOrganizer projektet Eksempel på brug af ArrayList

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Tabeller (I) Tabeller

Tabeller (I) Tabeller Tabeller (I) Klassediagrammer (III) Tabeller og qualified associations Michael R. Hansen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark En tabel fra en mængde A til

Læs mere

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen. Indledning...2 Variabler...13 Eksempel: 1...13 Eksempel 2:...13 Eksempel 3:...15 Eksempel 4:...16 Metoder...17 Metode (intet ind og intet ud)...17 Metode (tekst ind)...18 Metode (tekst ind og tekst ud)...19

Læs mere

Løsning af møntproblemet

Løsning af møntproblemet Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet

Læs mere

Programmering i C. Lektion 4. 5. december 2008

Programmering i C. Lektion 4. 5. december 2008 Programmering i C Lektion 4 5. december 2008 Funktioner Eksempel Fra sidst 1 Funktioner 2 Eksempel Funktioner Eksempel Eksempel: 1 / f u n k t i o n s p r o t o t y p e r / i n t i n d l a e s ( void )

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

SigmaT.

SigmaT. Java + Groovy Disposition Om SigmaT Eksempel på indlejring af Groovy Overvågning af PEM Ønske om dynamisk loaded Java uden at fifle med classloaderen Groovy til hjælp Opsamling hvad jeg ikke har fortalt

Læs mere

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1. Programmering 1999 Forelæsning 4, fredag 10. september 1999 Klasser og objekter Felter, konstruktorer, this Eksempler på klasser: Time, Appointment Eksempler på metoder i Time og Appointment Klassefelter:

Læs mere

Spil Master Mind. Indledning.

Spil Master Mind. Indledning. side 1 af 16 Indledning. Spillet som denne rapport beskriver, indgår i et større program, der er lavet som projekt i valgfaget programmering C på HTX i perioden 9/11-98 til 12/1-99. Spillet skal give de

Læs mere

Prepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC.

Prepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC. Denne guide er oprindeligt udgivet på Eksperten.dk Prepared Statements Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC. Skrevet den 18. Feb 2010

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

Om binære søgetræer i Java

Om binære søgetræer i Java Om binære søgetræer i Java Mads Rosendahl 7. november 2002 Resumé En fix måde at gemme data på er i en træstruktur. Måden er nyttig hvis man får noget data ind og man gerne vil have at det gemt i en sorteret

Læs mere

Kursusarbejde 3 Grundlæggende Programmering

Kursusarbejde 3 Grundlæggende Programmering Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................

Læs mere

Program Dokumentation PC Software Skrevet af. Gruppen. Version 1.0

Program Dokumentation PC Software Skrevet af. Gruppen. Version 1.0 Program Dokumentation PC Software Skrevet af Gruppen. Version 1.0 Indholds fortegnelse 1. INDLEDNING...3 1.1. FORMÅL...3 1.2. REFERENCER...3 1.3. VERSIONSHISTORIE...3 1.4. DEFINITIONER...3 1.5. DOKUMENTATIONENS

Læs mere

Brugermanual. Tripple Track Fleet

Brugermanual. Tripple Track Fleet Brugermanual Tripple Track Fleet Version 3.15 Side 1 af 19 Indholdsfortegnelse Installation:... 3 Login:... 3 Se alle biler:... 4 Status skift:... 5 Historie:... 7 Punkt information:... 9 Find adresse:...

Læs mere

Singleton pattern i C#

Singleton pattern i C# Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i C# Denne artikel beskriver Singleton pattern og implementation i C#. Den forudsætter kendskab til C# men ikke til Singleton. Der er

Læs mere

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API.

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API. Denne guide er oprindeligt udgivet på Eksperten.dk Brug af MySQL i C++ Denne artikel bygger ovenpå artiklen "MySQL C API" og forklarer hvordan man kan programmere mere objekt orienteret. Den forudsætter

Læs mere

Specifikation Abstrakt OO OS-API Rev. 1.7. Specifikation. Abstrakt, objektorienteret operativsystem-api

Specifikation Abstrakt OO OS-API Rev. 1.7. Specifikation. Abstrakt, objektorienteret operativsystem-api Specifikation Abstrakt, objektorienteret operativsystem-api Indhold 1 Indledning... 3 1.1 Introduktion... 3 1.2 Formål... 3 1.3 Overordnede krav... 3 2 Ressourcer i OS-API et... 4 2.1 Tråde... 4 2.2 Timere...

Læs mere

Linguistic support for unit testing

Linguistic support for unit testing Linguistic support for unit testing Af K. E. Gray & M. Felleisen Mads Bach-Sørensen mbs@cs.aau.dk 1. november 2007 1 Indhold Forfatterne TestJava Traditionel Unit-testing Sproglige Konstruktioner i TestJava

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere

RMI med BlueJ. Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 11. desember 2007

RMI med BlueJ. Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 11. desember 2007 RMI med BlueJ Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 11. desember 2007 Hvad er RMI? Når man arbejder med Distribuerede Systemer, som igen vil sige at man ønsker at flere end én komputer

Læs mere

Geografisk lokalisering i JSP

Geografisk lokalisering i JSP Denne guide er oprindeligt udgivet på Eksperten.dk Geografisk lokalisering i JSP Denne artikel forklarer lidt om hvorfor og hvordan man laver geografisk lokalisering og viser noget kode. Der er andre artikler

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Sommer 1999 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 15% Opgave 2 15% Opgave 3 8% Opgave

Læs mere

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner Java Programmering En bog for begyndere Skrevet af Henrik Kressner Indholdsfortegnelse Introduktion...3 1 Introduktion til Java...4 1.1 Javakoden...4 1.2 Det første program...6 1.2 Skriv til skærmen...6

Læs mere

Web- og serverprogrammering

Web- og serverprogrammering Web- og serverprogrammering Arkitekturer i webprogrammer - dag 6 Model-View-Controller-arkitukturen Flerlags-arkitekturer Læsning: WJSP 10 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html

Læs mere