diff --git a/doc/answers.md b/doc/answers.md index e69de29..0112616 100644 --- a/doc/answers.md +++ b/doc/answers.md @@ -0,0 +1,15 @@ +1. En interface som alla typer av instruktioner kan ha gemensam borde inte vara helt fel. Vilket i sin tur betyder en klass för varje instruktion där ett instruktions interface implementeras. + +2. Man ärver lämplig collection, ex arraylist. Detta är kass design, då komposition är tydligare. + +3. "Program" och självaste "datorn" borde vara olika paket, paketet "program" rör program som skall köra på datorn, "datorn" har de klasser som är datorn som t.ex. memory och programCounter osv. + +4. Varje instruktion skulle kunna representeras som ett kommando, och datorn skulle utföra dessa kommandon utan att behöva veta exakt vad varje instruktion innebär. På så sätt separeras ansvar, och det blir enklare att lägga till eller ändra instruktioner i framtiden. + +5. Designmönstret Template Method kan vara användbart för att undvika duplicerad kod i likartade klasser, särskilt för de instruktionsklasser som ingår i programmet (t.ex. Copy, JumpEq, Mul, Add, Print, Halt). Eftersom dessa instruktionsklasser kan ha vissa gemensamma delar i hur de utför sin uppgift, kan ett template method-mönster användas för att abstrahera och återanvända gemensam kod. + +6. För att hantera olika sorters operander på ett enhetligt sätt med hjälp av Strategy-mönstret i en datormodell skulle man kunna implementera olika strategier för hur operander ska hanteras. Operander kan vara antingen konstanter eller adresser, och olika instruktioner kräver olika typer av operander. + +7. Additionen bör nog utföras i LongWord. + +8. \ No newline at end of file diff --git a/doc/mermaid-diagram-2024-04-22-010342.svg b/doc/mermaid-diagram-2024-04-22-010342.svg new file mode 100644 index 0000000..024943f --- /dev/null +++ b/doc/mermaid-diagram-2024-04-22-010342.svg @@ -0,0 +1 @@ +
Computer
- Memory memory
- Program program
+Computer(Memory Memory)
+void load(Program program)
+void run()
Memory
+Word read(Address address)
+int size()
+void write(Address address, Word data)
+void dump()
ProgramCounter
- int PC
- int SysTick
- boolean haltFlag
+ProgramCounter()
+ProgramCounter(int PC)
+int getPC()
+int getSysTicks()
+int incPC()
+int setPC(int PC)
+boolean halted()
+void halt()
Program
+toString()
ArrayList
Word
+T getValue()
+Word add(Word other)
+Word subtract(Word other)
+Word multiply(Word other)
+Word divide(Word other)
+String toString()
+boolean equals(Object other)
Address
- int address
+Address(int address)
+int getAddress()
+String toString()
LongMemory
LongWord
\ No newline at end of file diff --git a/doc/mermaid-diagram-2024-04-22-010404.svg b/doc/mermaid-diagram-2024-04-22-010404.svg new file mode 100644 index 0000000..e604ecd --- /dev/null +++ b/doc/mermaid-diagram-2024-04-22-010404.svg @@ -0,0 +1 @@ +
Instruction
+void execute(Memory memory, ProgramCounter pc)
#String opcode()
#Object[] operands()
+String toString()
Add
Copy
Halt
Jump
JumpEq
Mul
Print
Word
Address
\ No newline at end of file diff --git a/doc/mermaid-diagram-2024-04-22-010422.svg b/doc/mermaid-diagram-2024-04-22-010422.svg new file mode 100644 index 0000000..10b1d86 --- /dev/null +++ b/doc/mermaid-diagram-2024-04-22-010422.svg @@ -0,0 +1 @@ +InstructionProgramCounterMemoryProgramComputerInstructionProgramCounterMemoryProgramComputerloop[Instructions Execution]loop[Program Execution]load(program)run()incPC()getPC()executeInstruction()execute(memory, PC)read/write(address)incPC() \ No newline at end of file