• Teaser Home

    Clean Code Developer School

    Saubere Softwareentwicklung üben – regelmäßig, fokussiert, individuell, angeleitet

Ringbuffer

Class Kata „Ringbuffer“

Entwickle eine Klasse, die einen Ringbuffer [1, 2] implementiert.

An einen Ringbuffer können Werte „hinten“ angehängt werden wie an eine Queue (Add()). Und sie können „vorne“ entnommen werden wie aus einer Queue (Take()). Allerdings hat der Ringbuffer eine begrenzte Kapazität (Size()). Wenn die ausgeschöpft ist, werden Werte „am Anfang“ „überschrieben“, d.h. dann haben neue Werte Vorrang vor alten.

Das Interface der Klasse soll so aussehen:

Beispiel:

Variationen

Zunächst kann der Fall, dass alte Werte zugunsten von neuen überschrieben werden, ohne spezielle Behandlung bleiben. Es kann still überschrieben werden.

Als Weiterentwicklung kann der Ringbuffer jedoch so ausgelegt sein, dass sein Nutzer bestimmen kann, ob still überschrieben oder eine Exception geworfen werden soll. Überlege, wie die Wahl einer Option am besten im Interface der Klasse abgebildet werden kann.

Ressourcen

[1] Ringpuffer, http://de.wikipedia.org/wiki/Warteschlange_(Datenstruktur)#Ringpuffer

[2] Circular buffer, http://en.wikipedia.org/wiki/Circular_buffer