En inblick i koden



Fordonshierarki

En abstrakt klass "Fordon" med en float-variabel "vikt" där endast en metod visaVikt() finns deklarerad.

Två klasser utökar sedan "Fordon", dessa klasser är "Cykel" och "Moped" de överskuggar metoden visaVikt() och satserna är något annorlunda i denna metod i "Cykel" gentemot i "Moped".

En klass kör sedan en vanlig utskrift med System.out där ett antal cyklar och mopeders vikt visas med hjälp av visaVikt(). Cyklarna och mopederna är samlade i en LinkedBlockingQueue och resultatet av utskriften formateras med två decimalers noggrannhet.

Uppgiften har alltså gått ut på att se hur en abstrakt klass kan tjäna som ett bra sätt att inte behöva upprepa kod genom att utnyttja Javas dynamiska bindning i subklasser.

Zoo Administrator

Ett grafiskt gränssnitt bestående av en JFrame med meny och en layout baserad på olika paneler med BoxLayout. I programmet ska man kunna lista ett antal djur i en djurpark enligt en sortering efter namn, art eller ålder. För övrigt ska man kunna lägga till, ta bort, ändra namn på befintligt djur och avmaska befintligt djur.

Jag har löst uppgiften genom att skapa två övriga klasser förutom GUI-klassen. En av klasserna innehåller sedan internt tre anonyma sorteringsklasser som implementerar interfacet Comparator. Dels är det en klass "Animal" med några passande instansvariabler och en mängd set- och get-metoder och slutligen en klass "Zoo" där logiken och alla metoder finns för att hantera alla djurobjekt. Den klassen utgörs i huvudsak av en HashMap och en ArrayList .

I HashMap-objektet läggs en mängd djurobjekt till från början och nyckeln sätts till deras namn medan värdena utgörs av själva djurobjekten. Sedan finns olika metoder som tar bort med remove("nyckelvärde") och lägger till med put("nyckelvärde", Animal).

ArrayList-objektet skapas lokalt inne i en metod och där läggs djurobjekten till i denna med add genom att iterera värdena i HashMap:en med en Iterator. Därefter listas djuren i GUI:t enligt den sortering som ges som argument av enum-typen Sortering som jag skapat. Sorteringen sker efter antingen namn, art eller ålder.

Multitrådad bollstuds

En liten grafisk applikation där fyra bollar studsar omkring i en subklass till JPanel med fyra knappar (JButtons) för start och fyra för stopp. Dessa är grupperade i ButtonsGroups, så att t ex start och stopp av blå boll tillhör samma grupp. Effekten blir att stoppknappen blir valbar när startknappen trycks in och vice versa.

Klassen "Ball" implementerar interfacet Runnable. Varje boll är sedan kopplad till en egen tråd, javas Thread. Klasstrukturen är uppdelad på tre klasser. En av klasserna utökar JFrame, en utökar JPanel, en tar hand om bollar dvs sätter x- och y koordinater och diameter plus färg etc. I dess run()-metod används en evig while-loop där en boolesk variabel i en if-sats får tjäna som "pausknapp". Tråden sövs med sleep i 8 millisekunder innan bolls koordinater ändras och den ritas ut. Den klass som utökar JPanel ges som argument till konstruktorn och i och med det så har bollarna det som behövs för att räkna x- och y-koordinater och "studsa".

Utöver detta finns en meny för att spara och öppna bollarnas placering. En ObjectOutPutStream sparar bollarnas aktuella koordinater till en fil med en FileOutputStream plus ett FileFilter kopplat. Den omvända proceduren med en ObjectInputStream kopplad till en FileInputStream kan sedan återskapa positionerna.

Servlet som presenterar en XHTML-tabell

Först presenteras en html-sida med en knapp med texten "Visa xhtml-tabell". När användaren trycker på knappen anropas metoden GET och en servlet. I servlet:en finns metoden doGet() definierad. Den använder en ström av typen PrintWriter och med hjälp av den skrivs en mängd XHTML-element, vilket resulterar i att en tabell skrivs ut. Tabellens utseende är formaterat med en CSS-fil och koden är validerande.

SQL-servlet

Denna servlet hämtar data från en mySQL-tabell. Tabellen innehåller data om personer som tillhör de rikaste i Sverige.

En html-sida efterfrågar användarens årsinkomst i ett inmatningsfält. Siffran skickas sedan vidare till en servlet med POST.

I servlet:en finns metoden doPost() definierad. En variabel av klassen String kallad "functionQuery" används för att formulera en fråga till databasen. Frågan är en SQL-funktion av typen AVG, som räknar ut medelinkomsten hos tabellens personer och tilldelar detta värde till ett objekt av typen ResultSet. Denna jämförs sedan med den årsinkomst som användaren matat in och resultatet presenteras.

Hangman

Ett klassiskt Hangman-spel. Du får välja bland tre kategorier av frågor eller skapa en egen frågekategori. Applikationen använder ett flertal swing-komponenter. Det finns en panel som bara visas när ett eget spel ska skapas. Du kan mata in orden dolt eller synligt. Det finns en rullgardinsmeny med snabbkommandon s k accelerators. Om man gissar rätt bokstav, så får man ett peppande meddelande, men om man gissar fel så får man ett häcklande meddelande. Dessa visas slumpvis. Även ordens inbördes ordning slumpas fram.

Jag har använt mönstret Model View Controller (MVC). Detta mönster separerar den bakomliggande modellen från det grafiska gränsnittet.

E-Telegrafen

En nyhetsklient med ett ganska avancerat grafiskt gränssnitt. Jag gjorde den som ett gesällprov på en kurs i internetprogrammering. Sun ger inget stöd för NNTP i sitt Javamail-API. Det som finns att tillgå är en open source- variant från GNU. Nackdelen är att det inte fungerar helt problemfritt. Det som jag har stött på problem med är att spara undan meddelanden från nyhetsgrupper man prenumererar på och sedan enbart hämta nya meddelanden. Detta blir i och för sig mest kännbart då stora mängder meddelanden finns på nyhetsgruppen (några hundra). Tekniker som används är trådning, reguljära uttryck, sparande och öppnande av filer, avancerade GUI-komponenter samt återigen MVC-mönstret.

Jag har gjort applikationen helt själv och det var ganska betungande, men oerhört lärorikt.


© Marcus Nyberg