Ich bin gerade dabei ein älteres Projekt nochmal völlig neu zu schreiben und diesmal an die OOP anzupassen.
Es geht um einen Simulator der einen vereinfachten PC simuliert (insbesondere den Von-Neumann Zyklus hervorheben soll).
Bestehend aus RAM, CPU und ALU. Jedes der Komponenten werden weitere Komponenten untergeordnet wie z.b. Register (Instruction Register) und
Program Counter. Verbunden werden alle Komponenten durch ein vereinfachtes Bus-System (Adressbus, Datenbus usw).
Würde dann in etwa so aussehen:
MfG Tim
Es geht um einen Simulator der einen vereinfachten PC simuliert (insbesondere den Von-Neumann Zyklus hervorheben soll).
Bestehend aus RAM, CPU und ALU. Jedes der Komponenten werden weitere Komponenten untergeordnet wie z.b. Register (Instruction Register) und
Program Counter. Verbunden werden alle Komponenten durch ein vereinfachtes Bus-System (Adressbus, Datenbus usw).
- Wie realisiere ich das Bus-System am besten? Der Einfachheit halber verhält sich im Simulator jeder Bus, wie eine Art Register. Er nimmt also Werte auf und kann sie auch wieder abgeben.
- Das die Komponenten (über den Bus) miteinander "kommunizieren" können, muss ich im Konstruktor jeder Klasse ein Parent mitliefern oder eine Simulator Instanz(oder?). Was wäre stylistisch schöner? Ich hätte jetzt eine abstrakte Klasse (TComponent) angelegt, welche als Eigenschaft Parent mitliefert (vom Typ TComponent). Jede untergeordnete Klasse erbt dann davon.
Würde dann in etwa so aussehen:
C#-Quellcode
- abstract class TComponent {
- public TComponent Parent { get; set; }
- public TComponent(TComponent parentComponent) { Parent = parentComponent; }
- }
- abstract class TRegister {
- public int _value;
- public TRegister(TComponent parent) : base(parent) {
- _value = 0;
- }
- public int Value { get { return _value; } set { /*value im wertebereich halten*/ }
- public event EventHandler ValueChanged() //Alles nur skizziert
- }
- class Simulator : TComponent {
- public Simulator() : base (null) {
- Cpu = new TCpu(this);
- Memory = new TMemory(this);
- Alu = new TAlu(this);
- }
- public TCpu Cpu ...
- public TMemory Memory ...
- public TAlu Alu ...
- }
- // und so weiter..
MfG Tim