Innehåll
1 Inledning
*2 Klasser
*2.1 Mapp
*2.2 Adress
*2.3 Fil I/O
*2.4 Rådata
*2.5 Regelhanterare
*2.6 Regel
*2.7 Kodningshanterare
*2.8 Avkodare
*2.9 Kodare
*2.10 Postkontor
*2.11 Brevlåda
*2.12 Attachment
*2.13 Brev
*2.14 Header
*3 GUI
*3.1 Gränssnittets uppbyggnad
*3.2 Anropssekvenser
*4 Användningsfall
*4.1 Visa brev
*4.2 Skriva brev
*4.3 Editera brev
*4.4 Skicka brev
*4.5 Ta emot brev
*
Vi har så långt det är möjligt försökt skapa ett system i analogi med ett verkligt postsystem. I analysen av brevsystemet har vi utgått från brevet och mappen som grund. Vi har slagit sönder brevet i dels huvud som innehåller adressater och annan statusinfo och dels rådata som är en binärreprestantion av brevet i lämpligt format. För att kapsla in alla I/O har vi lagt alla sådana metoder i ett Fil I/O objekt som kan vara dels ex. ett filsystem men lika gärna en databas.
Huvudobjektet i systemet är postkontoret som tillhandahåller tjänster för kommunikation med det grafiska gränssnittet. Det objekt som sköter kommunikation med servrar av olika slag, både in- och utgående post kallas brevlådan.
Vi har två sorters moduler som handhar regler och kodning. Kodningshanteraren hanterar generering och extraktion av rådata. Regelhanteraren handhar sysslor som kan definieras fritt (inom gränser) av användaren exempelvis flytta brev till en viss mapp. Både dessa ligger som underobjekt till postkontoret.
Adressboken vi tänkt använda är redan inbyggd i vår plattform varför vi inte i detalj analyserat denna.
Här följer klassbeskrivningar av de ingående klasserna.
MappSyfte:
Att "lagra" brev uppdelat i olika mappar.Tjänster:
LaddaMapp() . Laddar mapp. Anropar Fil I/O.
SparaMapp() . Sparar alla brev och mappar i den aktuella mappen. Tar hänsyn till "modified-bit" hos breven. Anropar Fil I/O-objektet.
BytNamn() . Byter namn på mappen, men ändrar inte på disken.
LäggTillBrev(Brev) . Lägger till brev i mapp och sätter brevets mappID om brevet inte redan finns. Finns brevet genereras "exception".
TaBortBrev() . Tar bort breven ur mappen. Anropar Fil I/O så att brevet tas bort från disk.
ListaMappar() .Ger en lista på alla barnmappar, men bara en nivå ned.
ListaBrev() . Ger en lista på alla brev i mappen, ej rekursivt.
LäggTillMapp(Mapp) .Lägger till en barnmapp.
TaBortMapp(Mapp) . Tar bort mappen och innehåll rekursivt. Anropar Fil I/O.
SkapaMapp(Namn) . Skapar en ny barnmapp.
ListaAllaBrev() . Listar alla brev i delträdet.
HämtaFörälder() . Ger föräldermappen.
FlyttaBrev(Mapp [från],Mapp [till]) . Flyttar brev från en mapp till en annan.
FlyttaMapp(Mapp [från],Mapp [till]) . Flyttar mapp från en mapp till en annan.
Kunskaper:
Namn
Mappar
Brev
ID
Förälder
Syfte: Att tillhandahålla information om addressat samt mallinformation.
Tjänster:
HämtaAdress() . Ger adressen som en sträng.
SkapaAdress(email,[namn]) . Konstruktor.
HämtaNamn() . Ger namnet som en sträng.
Kunskaper:
Mailadress
Fullständigt namn
Syfte:
Att abstrahera bort filsystemet/filhanteringen.Tjänster:
LaddaRådata(ID) . Ger rådata
LaddaHeader(ID) . Ger en Header
SparaBrev (brev) . Hela brevet
LaddaMapp (mapp) . Laddar allt som ligger i mappen
LaddaBrevhuvud (ID) . Hämtar brevhuvud från disk.
TaBortBrev (ID)
SparaMapp (ID)
TaBortMapp
SparaAttachment (rådata, filnamn)
LaddaMappar (ID) . Ger en lista av oladdade, men skapade mappar
Kunskaper:
Implementationsberoende.
Syfte: Att kapsla in filhantering av data.
Tjänster:
SättRådata()
LämnaRådata()
Kunskaper:
Textmassa
ID
Syfte:
Att hantera och applicera regler på brev.Tjänster:
AppliceraAllaRegler(Brev)
AppliceraRegel(Brev,Regel)
ListaRegler()
AdderaRegel(Regel)
TaBortRegel(Regel)
Kunskaper:
Regler
Syfte: Att utföra "något" på ett brev eller lista av brev (överlagring).
Tjänster:
Applicera (brev)
Lämna beskrivning ()
Syfte:
Att hantera kodning/avkodning av innehållet I brevet, samt sköta "utplockning" av attachments och header.Tjänster:
AvkodaRådata(rådata) ® läsbar text
AvkodaHeader (rådata) ® läsbar header {tar fram Headern ur brevet som är representerst I rådata}
FullHeaderTillText(rådata) ® läsbar text {tar fram Bla bla mm}
KodaSkrivetBrev(Text,Header) ® rådata{kodar av ett skrivet brev till rådata }
LämnaAttachment(Attachment,rådata)
Kunskaper:
Avkodare/kodare
Syfte: Att avkoda t.ex. MIME-kodning till Header/Text
Tjänster:
Avkoda(rådata) ® returnerar läsbar text
LämnaAttachment(Attachment,rådata) ® attachment I binärform
Beskrivning() ® textuell beskrivning
Syfte
: Att koda text + övrig data till t.ex. MIMETjänster:
Koda(text,header) ® rådata
Beskrivning() ® textuell beskrivning
Syfte
: Huvudobjekt som hanterar alla in/utgående brev och mappsystemetTjänster:
LaddaRotmapp()
LämnaRotmapp()
Initiera()
ListaBrevAttSkicka() . Används av brevlådan.
LämnaUtmapp() . Det mapp som utgående brev läggs in.
TaEmotBrev() . Används när man vill skicka ett brev.
TaEmotRådata() . Används när ett nytt brev har kommit in från brevlådan.
TaHandOmUtmappsBrev() . ??
LämnaRegelhanterare()
LämnaKodningshanterare()
HittaMapp(ID) . Leta reda på en mapp.
Kunskaper:
Regelhanterare
Brevlåda
Rotmapp
Utmapp
Fil I/O
Kodningshanterare
Inmapp
Syfte: Ta emot/skicka brev. Kontrollerar om ny post finns att hämta på servern med jämna mellanrum.
Tjänster:
HanteraUtgåendeBrev()
SkapaBrevlåda()
ÄndraInställning()
HämtaIngåendeBrev()
Syfte:
Att Representera information om attachment.Kunskaper:
Filnamn
Position i rådata
Syfte: Att representera innehållet i ett elektroniskt brev: Avsändare, mottagare, brödtext, attachments mm.
Tjänster:
Lämna och sätta övergripande mapp.
Lämna brödtext, blablabla i läsbar form
Lämna Header, rådata, attachments
Skapa en kopia av sig själv
Spara ner till sekundärminne
Kunskaper:
Header (med avsändare, mottagare osv)
Rådata (dvs den datan som direkt kan skickas ut på nätet)
Kodningshanterare (ett objekt som kan använda kodningsstandarder, typ MIME)
Fil-I/O-objekt (som sköter sekundärminneshanteringen)
ID (som ger en koppling till sekundärminnet)
Ägarmapp (Den mapp som brevet ligger i)
Objektet sköter själv hantering om när den behöver anropa sekundärminnet för att få sin information. Däremot är det upp till användaren att se till att brevet sparas.
blablabla betyder den kompletta headern som följer enligt sendmail-standarden, där bl.a. information om vilka datorer som brevet har passerat genom finns med.
Syfte: Att representera kortfattad information om ett brevs adressat och avsändare mm
Tjänster:
Lämna Avsändare, mottagare osv
Ändra statusflaggor
Kunskaper:
Mottagare (kan vara flera)
Avsändare
CC (carbon copy, dvs mottagare som skall få en kopia av brevet)
Statusflaggor (Som håller reda på ifall brevet är läst/besvarat/vidarebefodrat osv)
Attachment (de filer som är bifogade)
Objektet är ett aggregat till brev
Vi har valt att skapa systemet på ett sådant sätt att grundfunktionerna ska vara så lite beroende av gränssnittet som möjligt. Detta är dock svårt med tanke på den utvecklingsmiljö som använts. Vi har valt att kapsla in vårt email-system och låta GUIn sedan anropa våra öppna funktioner. Det är alltså upp till programmeraren av gränssnittet att känna till hur de interna objekten fungerar och att själva mail-programmet vet så lite som möjligt om gränssnittet.
På så sätt gör vi det någorlunda möjligt att porta applikationen, även om det betyder att hela GUI-biten måste programmeras om. Vi slipper i alla fall göra några större ändringar i brevhanteringen.
Sammanfattningsvis kan sägas att gränssnittet anropar de interna objekten, men helst inte tvärtom!
Gränssnittets uppbyggnad
Vi har tänkt oss ett fönster indelat i fyra delar.
Dessutom kan man få upp en redigeringsruta som man skriver sina brev i.
Nedan följer ett exempel på hur det ev. kommer att se ut.
Nedan följer några exempel på när GUIn och det interna systemet kommunicerar:
De få gånger då informationen måste gå åt andra hållet är då ett brev kommer in från mailservern. Detta bör ju användaren bli informerad om, t.ex. genom att en ikon tänds eller liknande.
Här följer några användningsfall för programmet vilka i stora drag beskriver dialogen mellan användaren och systemet, men även hur objekten i systemet samverkar.
Visa brevFöljande förlopp beskriver när ett brev ska öppnas och visas i editeringsfönstret.
Följande förlopp beskriver när ett brev ska öppnas och visas i editeringsfönstret.
Men om man i stället trycker på "Avbryt"- eller "Spara"-knappen blir förloppet följande
Följande förlopp beskriver låsningen av ett brev när det editeras.
När ett brev ska skickas i väg sker följande förlopp
Vid lyckad uppkoppling:
Vid misslyckad uppkoppling:
När programmet kopplat upp sig mot en server och sker följande