Salstentamen torsdag 20 mars OOP14
Uppgiften består i att skriva ett grafiskt javaprogram som konverterar till och från Morse-alfabetet. Programmet ska fungera och inte krascha men i övrigt ställs inte höga krav på programmet. Datastrukturer och algoritmval är valfria. Vid redovisning ska du kunna redogöra för hur programmet skulle kunna förbättras och utökas för att t.ex. avkoda/dekoda fler saker.
Uppgift 1
Skriv ett program som läser in Morse-alfabetet till en datastruktur. Du får själv välja filformat. Du får alltså själv välja hur morsekoden (lång och kort signal) ska representeras men välj något intuitivt så att assistenten kan verifiera vid redovisning (tips kopiera raderna nedan och spara på fil, använd Scanner för att läsa in).
A ·–
B –···
C –·–·
D –··
E ·
F ··–·
G ––·
H ····
I ··
J ·–––
K –·–
L ·–··
M ––
N –·
O –––
P ·––·
Q ––·–
R ·–·
S ···
T –
U ··–
V ···–
W ·––
X –··–
Y –·––
Z ––··
Skriv en funktion som givet din datastruktur och en mening översätter meningen till morsekod. Testa din funktion med t.ex. HOKUS POKUS.
Uppgift 2
- Utöka ditt program med en datastruktur där man kan slå upp vilken bokstav en viss morsekod har.
- Skriv en funktion som givet denna datastruktur och en morsekodsmening översätter till vanliga alfabetet. Man ska alltså kunna ta output från uppgift1 som input till uppgift2 och få tillbaka den ursprungliga texten.
- Testa din funktion t.ex. med morsekoden för HOKUS POKUS som returnerades i uppgift 1.
Tips, du bestämmer själv formatet på input och output. Gör skillnad på mellanrum mellan morsetecken och ord. Använd t.ex. ett mellanslag mellan varje morsetecken men kanske fem mellanslag mellan ord. Du kan sedan t.ex. använda String-funktionen split(" ") för att dela upp morsemeningen i ord.
Uppgift 3
Skriv ett grafiskt gränssnitt till programmet. Så här skulle det kunna se ut:
Man skriver in texten som ska översättas till morsekod och trycker sedan på knappen.
Till din hjälp får du källkoden till programmet ovan. Du får naturligtvis skriva egen bättre grafikkod. Vid redovisningen ska du redogöra för hur din kod kan förbättras.
Uppgift 4
Utöka ditt grafiska program så att man konvertera från morse till vanligt alfabet. Så här skulle det kunna se ut:
Precis som i uppgift 2 så ska output från textkonverteringen kunna bli input till morsekonverteringen. Man ska kunna kopiera output från övre högra fönstret och klistra in i nedre vänstra.
Uppgift 5 (behöver endast implementeras för de som är klara före kl 11)
Utöka ditt program så att man läsa in även grekiskt alfabet. Du kan lösa det med fler inmatningsfält eller genom att programmet "gissar" alfabetet. Det är också OK att programmet hanterar det vid uppstart t.ex. genom att använda ett kommandoradsargument för att en specifik fil med morsetecken ska läsas in. Prova ditt program med ΜΟΛΩΝ ΛΑΒΕ
Α •-
Β -•••
Γ --•
Δ -••
Ε •
Ζ --••
Η ••••
Θ -•-•
Ι ••
Κ -•-
Λ •-••
Μ --
Ν -•
Ξ -••-
Ο ---
Π •--•
Ρ •-•
Σ •••
Τ -
Υ -•--
Φ ••-•
Χ ----
Ψ --•-
Ω •--
Redovisning
Vid redovisning ska du reflektera över vad som kan göras bättre. Går det att organisera koden på något bra sätt? Hur kan programmet utökas för att koda fler typer av Morse? Kan man tänka sig fler typer av kodning/dekodning ditt program t.ex. huffman, zip ...? Är det tydligt för användaren vad programmet gör, hur kan man förbättra användargränssnittet?
Efter redovisningen muntas du på nedanstående begrepp som gåtts igenom på föreläsningar samt finns beskrivna i anteckningar/länkar/bok. Det är tillåtet att använda sig av medhavda anteckningar vid muntan. De muntliga frågorna ska besvaras relativt kort och med självförtroende.
Munta
Objektorienterad design
Arv
Klassdiagram
Aggregat
Arv (är en slags, is a)
Association (har en)
Aggregat (har/består av)
Komposition/aggregat (består av)
Åtkomst (private/public ...)
Medlemsvariabel/attribut
Paket (package)
Abstrakt datatyp, Interface
Problemställning: för små, för stora?
Överlagra (överladda/överskriva i anteckningarna)
Dynamisk bindning
Polymorfi
Programmeringsteknik
Typkonvertera
Typparametrisering
Undantag (exceptions)
Trådar
Enhetstestning
Algoritmer och datastrukturer
Vektor vs länkad lista
Associative array
Hashning
Binärt sökträd
Binär sökning
Sorteringsalgoritmer
Quicksort
Mergesort
Räknesortering (distribution sort)
Valfri enkel kvadratisk sortering
Designprinciper
Single Responsibility
Abstraction (luta sig mot)
Liskov's Substitution Principle
MVC – model, view, controller
Observer pattern
Singleton
Open/Closed Principle (utökning vs modifiering)
Dependency Inversion Principle