Verständnisfrage zur Modellierung einer HDD

DagobertDuck

Bekanntes Mitglied
Guten Morgen,

ich studiere seit diesem Semester Informatik und habe bei der jetzigen Aufgabenstellung des Übungsblattes eine Verständnisfrage.
Aufgabe ist es, ein vereinfachtes Modell eines Speichermediums zu erstellen. Im Prinzip bin ich mit der Aufgabe fertig, allerdings fehlen mir zwei essentielle Dinge, bei denen ich mir unsicher bin, wie ich sie am geschicktesten implementieren kann.

1. "Eine HDD kann über eine Hardware-Schnittstelle angesprochen werden. Eine Hardware-Schnittstelle kann in diesem Fall nur ATA, SATA, SCSI oder SAS sein. Welcher Datentyp ist zur Modellierung dieser Schnittstelle am besten geeignet?"
-> Leider habe ich keine Idee, wie ich diese Hardware-Schnittstelle implementieren sollen, geschweige denn, welchen Datentyp ich verwenden soll. (oder wird einfach ein Attribut bzw. ein enum erwartet?)

2. "Ein weiteres Merkmal einer Festplatte ist Input/Output operations Per Second (IOPS) zur Darstellung der Geschwindigkeit einer Festplatte bei Ein und Ausgaben. Eine HDD beinhaltet mehrere Scheiben zur Speicherung von Daten (auch Platter genannt)."
-> Wie habe ich IOPS zu verstehen und wie implementiere ich dies?

Den Rest der Aufgabenstellung habe ich schon implementiert. Meine bisherigen Klassen: HDD, Platter, Main.

Hoffentlich könnt ihr mir weiterhelfen.

Viele Grüße
 
K

kneitzel

Gast
Das ist etwas gekürzt, aber auf Grund von 2. "Ein weiteres Merkmal von..." gehe ich davon aus, dass bei 1. um ein Merkmal der Festplatte geht und nicht um den Entwurf einer Schnittstelle selbst.

Was für einen Datentyp kennst Du denn, der dann nur die Werte ATA, SATA, SCSI und SAS zulassen würde. Was für ein Datentyp fällt dir da ein?

Und hast Du einmal irgendwo die Angabe IOPS gesehen? Also wenn Du z.B. https://www.thomas-krenn.com/de/wik...d_Fusion-io_ioDrive#WDC_WD5002ABYS_Festplatte anschaust - da werden zu einer Festplatte auch IOPS Werte gegeben. Was für Werte sind das und was könnte sich da dann für ein Datentyp anbieten?
 

DagobertDuck

Bekanntes Mitglied
Danke für die Antwort. Als Datentyp für die Werte ATA, SATA, usw. eignet sich wahrscheinlich ein Aufzählungstyp, also ein enum am besten, oder? Soll man für IOPS einfach ein Attribut „double IOPS“ anlegen?
 
K

kneitzel

Gast
Danke für die Antwort. Als Datentyp für die Werte ATA, SATA, usw. eignet sich wahrscheinlich ein Aufzählungstyp, also ein enum am besten, oder? Soll man für IOPS einfach ein Attribut „double IOPS“ anlegen?
Ja, mit dem enum liegst Du aus meiner Sicht richtig.

Was die IOPS angeht: Da geht es um ganze Zahlen, daher wäre da aus meiner Sicht eher ein int oder long Wert als ein double sinnvoll.
Hier sind maximal noch weitere Dinge denkbar:
a) statt int ein Integer, um n/a Werte abzubilden (Das wäre dann der null Wert). Aber da IOPS Werte immer > 0 sind, kann hier auch 0 oder -1 als "n/a" gewertet werden.
b) IOPS sind selten nur ein Wert. So wie in dem Beispiel gibt es da unterschiedliche Werte, denn es wird zwischen Lesen und Schreiben als auch zwischen Sequenziell und Random Zugriff unterschieden. Somit könnte man IOPS auch als eigene Klasse modellieren mit Werten für IOPS Sequenziell Lesen, IOPS Random Lesen, IOPS Sequenziell Schreiben und zuletzt noch IOPS Random Schreiben.

Ob die Aufgabe da IOPS nur als einfachen Wert modelliert haben will oder als komplexe Struktur kann ich nicht sagen. Im Text wird auf jeden Fall schon Lesen und Schreiben erwähnt ("Geschwindigkeit einer Festplatte bei Ein und Ausgaben"), aber die Absicht, die hinter der Aufgabe steckt, kann ich da nicht mit dem kurzen Auszug der Aufgabe nicht sagen.
 

DagobertDuck

Bekanntes Mitglied
Vielen Dank. Die Hardware-Schnitstelle habe ich jetzt erfolgreich implementiert. Eine Frage habe ich allerdings doch noch:

"Ein Platter wird wie folgt modelliert:
Ein Platter besteht aus mehreren Sektoren identischer Größe zur Speicherung von Daten. Die Sektoren im Kontext eines Platters werden im Platter vereinfachend durch zwei Attribute modelliert: Die Größe eines Sektors in Bytes und die Anzahl an Sektoren des Platters. Beachten Sie zudem, dass ein Sektor in dieser Aufgabe stets 512 Byte groß ist. Da ein Sektor entweder intakt oder defekt sein kann, bezieht sich die Anzahl an Sektoren eines Platters lediglich auf intakte Sektoren. Diese beiden Zustände eines Sektors brauchen Sie in dieser Aufgabe nicht explizit modellieren."

Bisher habe ich folgende Attribute verwendet.
private byte sectorSize;
private int sectorAmount;
Mir ist unklar, wie ich sicherstellen kann, dass ein Sektor stets 512 Byte groß ist. Meine Idee ist es, ein byte Array mit 512 Elementen zu erstellen, oder ist das keine kluge Umsetzung? Falls es doch mit Hilfe eines Arrays implementiert werden soll, frage ich mich, wie ich dann folgenden Aufgabenteil umsetzen soll?
"Schreiben Sie eine Methode, die die Größe eines Platters in Byte als das Produkt der Größe seiner Sektoren und der Anzahl seiner Sektoren berechnet." Einfach 512 * Anzahl seiner Sektoren?

Vielen Dank im Voraus!
 
K

kneitzel

Gast
Also meine Fragen:
- Was ist der Wertebereich von byte?
- Wie kannst Du eine Variable unveränderbar machen?

Der letzte Punkt ist soweit richtig, nur eben die 512 sollte man so nicht schreiben. Die Größe eines Sektors hast Du wo drin?
 

DagobertDuck

Bekanntes Mitglied
Der Wertebereich von Byte ist -128 bis 127. Da in der Aufgabe allerdings steht: "die größe eines Sektors in Byte" habe ich mich etwas gewundert. Ist meine Vermutung mit dem byte Array also richtig? Unveränderbar kann man sie machen, indem sie final gesetzt wird. Wie sollte man die 512 denn am besten schreiben? Die Größe eines Sektors habe ich in dem Attribut "int sectorAmount" gespeichert.
 
K

kneitzel

Gast
Es soll doch lediglich die Größe in der Einheit Byte angegeben werden,

Gib die Länge eines Seiles in m an. Dann ist die Länge eine Zahl wie 15, wenn das Seil 15m lang ist.
 
K

kneitzel

Gast
Gerne. Schön, dass meine kleinen Hinweise schon ausgereicht haben. Evtl. willst Du noch zur Kontrolle einmal angeben, wie Du es jetzt gelöst hast?
 

DagobertDuck

Bekanntes Mitglied
Für die Hardware-Schnittstelle habe ich mir eine eigene Klasse mit einem enum erstellt. Funktioniert auch alles super. Die Größe eines Sektors habe ich jetzt als "private final int sectorSize = 512" angegeben. Bei dem Produkt verwende ich nun direkt das Attribut sectorSize anstelle der 512. Trotzdem bin ich mir bei der Umsetzung der IOPS noch unsicher... Eventuell kannst du mir weiterhelfen, wenn du folgenden Ausschnitt der Aufgabe siehst:

"Schreiben Sie für geeignete Attribute getter- und/oder setter-Methoden. Beachten Sie dabei die folgenden Bedingungen: IOPS können nach der Initialisierung einer HDD nicht wieder geändert werden. Außerdem sind IOPS stets ein Vielfaches von 10. Weicht eine übergebene IOPS von dieser Spezifizierung ab, wird IOPS auf das nächsthöhere Vielfache von 10 gesetzt. Beispiel: Versucht der Benutzer IOPS auf 5321 Byte zu setzen, wird IOPS durch diese Methode auf 5330 gesetzt. [...]. Schreiben Sie nun einen Konstruktor, der die Anzahl der enthaltenen Platter, die Hardware-Schnittstelle, die IOPS, sowie einen Beispielplatter entgegennimmt und geeignete Attribute einer HDD initialisiert."

Wie soll ich z. B. im Konstruktor IOPS angeben? Ist es lediglich ein Attribut oder ein eigener Datentyp (Klasse)?
 
K

kneitzel

Gast
Initialisierung meint bei einer Klasse den Konstruktor Aufruf. Also darf IOPS nur da gesetzt werden. Hat damit eine Bedeutung bezüglich Setter, die Du beachten musst.

Und es ist hier nur als Attribut zu sehen (also stark vereinfachte Darstellung. Es gibt genau einen IOPS Wert.)

Ach ja: bezüglich erstem Abschnitt von Dir: so sehe ich es auch mit der sectorSize.
 

DagobertDuck

Bekanntes Mitglied
Alles klar, danke. Dann haben sich (hoffentlich) alle meine Fragen geklärt. Um auf Nummer sicher zu gehen:
Funktioniert dies so mit dem final Modifikator im Konsturktor?

Java:
private int iops;

public HDD([...], final int iops, [...]) {
    this.iops = iops;
    [...]
}

------------------------------------------------
/* Andere Klasse */
/* und ist es so in Ordnung oder sollte man sectorSize erst im Konstruktor auf 512 setzen.
Dann hätte ich nämlich keine Idee wie ich das mit dem final umsetzen soll. */

    private final int sectorSize = 512;
    private int sectorAmount;

    public Platter(int sectorAmount) {
        this.sectorAmount = sectorAmount;
    }
 
K

kneitzel

Gast
Das final bei Parametern sagt nur, dass dem Parameter kein neuer Wert zugewiesen werden kann. (Bei mir ist per default jeder Parameter final, das kann durchaus helfen, Fehler zu vermeiden.)

Was hier aus meiner Sicht gefragt sein dürfte, ist schlicht das weglassen des Setters. So kann man die IOPS beim Konstruktor mit angeben und dann kann man nur noch die IOPS per Getter auslesen. Ohne Setter ist ein neu Setzen aber nicht mehr möglich.

Und die Konstante sectorSize ist so auch in Ordnung und sollte die Aufgabe erfüllen.
 

DagobertDuck

Bekanntes Mitglied
Ach so und sehe ich es richtig, dass es keinen Sinn macht, für eine Hardware Schnittstelle ein setter zu implementieren? Oder lässt sich dies im Allgemeinen später noch ändern..?
 

mihe7

Top Contributor
Da du gerade Konstante erwähnst: sollte ich am besten noch den Modifikator static hinzufügen?
Ohne static kommt es m.E. besser zum Ausdruck, dass es grundsätzlich auch Platter mit anderen Sektorgrößen geben kann. Und die 512 Byte gelten "in dieser Aufgabe".

Ach so und sehe ich es richtig, dass es keinen Sinn macht, für eine Hardware Schnittstelle ein setter zu implementieren?
Würde ich auch so sehen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
A Verständnisfrage Java Basics - Anfänger-Themen 12
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
P Verständnisfrage: PageFactory.initElements Java Basics - Anfänger-Themen 2
R do while Schleife Verständnisfrage Java Basics - Anfänger-Themen 2
G while.next() Verständnisfrage Java Basics - Anfänger-Themen 16
Vivien Kurze Verständnisfrage zu Java Point aus java.awt.* Java Basics - Anfänger-Themen 5
C Erste Schritte Anfänger Verständnisfrage zum Compiler Java Basics - Anfänger-Themen 31
T Verständnisfrage Objekt Getter Setter Java Basics - Anfänger-Themen 102
K Verständnisfrage Server/Client BufferedReader, PrintWriter Java Basics - Anfänger-Themen 2
Der Grütz Verständnisfrage zu Übung aus Java Kurs - Schaltjahr bestimmen Java Basics - Anfänger-Themen 2
J Verständnisfrage zu throws neben Funktionen Java Basics - Anfänger-Themen 2
TimoN11 Verständnisfrage bei Aufgabe Java Basics - Anfänger-Themen 2
P Verständnisfrage zum Mapping Java Basics - Anfänger-Themen 3
M Java Version Verständnisfrage Java Basics - Anfänger-Themen 16
M Verständnisfrage zu eine Online Aufgabe Java Basics - Anfänger-Themen 7
T Verständnisfrage zur Konsolenausgabe Java Basics - Anfänger-Themen 2
M Verständnisfrage zu Generics Java Basics - Anfänger-Themen 7
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
S Verständnisfrage lokale Ordnerpfade Java Basics - Anfänger-Themen 1
T Verständnisfrage zu Interfaces Java Basics - Anfänger-Themen 7
J Java Starthilfe Verständnisfrage Aufgabe Java Basics - Anfänger-Themen 2
O Anfänger, Verständnisfrage Java Basics - Anfänger-Themen 3
C Verständnisfrage zu Modulo Java Basics - Anfänger-Themen 6
C Verständnisfrage bezüglich der Do-While Schleife Java Basics - Anfänger-Themen 9
L Verständnisfrage - Speicherabbild Java Basics - Anfänger-Themen 4
melly_ Verständnisfrage zu args Java Basics - Anfänger-Themen 3
A Variablen Verständnisfrage bzgl. Variablen/Referenzen Java Basics - Anfänger-Themen 3
K Verständnisfrage eines Abschnitts Java Basics - Anfänger-Themen 6
K Rekursion Verständnisfrage Java Basics - Anfänger-Themen 19
S Modell View Controller Verständnisfrage Java Basics - Anfänger-Themen 24
J Superklassen Konstruktor Verständnisfrage Java Basics - Anfänger-Themen 1
JavaTalksToMe Erste Schritte Println-Frage (Verständnisfrage) Java Basics - Anfänger-Themen 1
R Verständnisfrage zu Objekten u. Übergabeparameter Java Basics - Anfänger-Themen 8
G Collections Verständnisfrage zur For-Each-Schleife Java Basics - Anfänger-Themen 7
b1ck Interface Verständnisfrage zum GUI mit "swing" Java Basics - Anfänger-Themen 1
kilopack15 Verständnisfrage zur Verwendung von notify() bei Threads Java Basics - Anfänger-Themen 2
G Verständnisfrage zu for-each Java Basics - Anfänger-Themen 4
DontFeedTheTroll Erste Schritte Verständnisfrage zu If-Anweisung Java Basics - Anfänger-Themen 7
K Rekursion-Verständnisfrage Java Basics - Anfänger-Themen 4
J Java Server Pages - Verständnisfrage Java Basics - Anfänger-Themen 2
Z Verständnisfrage Anfängerprogramm Java Basics - Anfänger-Themen 0
T Verständnisfrage Zuweisungs-/arithmet. Operatoren Java Basics - Anfänger-Themen 2
G Methoden Verständnisfrage zur Methoden Java Basics - Anfänger-Themen 7
LionAge Kapselung, Verständnisfrage zur Objekterzeugung Java Basics - Anfänger-Themen 4
Z Verständnisfrage zum Multithreading Java Basics - Anfänger-Themen 3
R OOP / Verständnisfrage zum Konstuktor (siehe code) Java Basics - Anfänger-Themen 7
gamebreiti Verständnisfrage zu contains() Java Basics - Anfänger-Themen 10
A Verständnisfrage - Koordinatenumrechnung Java Basics - Anfänger-Themen 9
J Erste Schritte Verständnisfrage im Bezug auf das (richtige) Programmieren Java Basics - Anfänger-Themen 5
M Verständnisfrage zu JUnit Tests und private Methoden Java Basics - Anfänger-Themen 3
H Verständnisfrage Array Java Basics - Anfänger-Themen 2
I Interface Verständnisfrage Interfaces (Bsp.: Enumeration) Java Basics - Anfänger-Themen 2
I Verständnisfrage zu BridgePattern, Verwedung von super() Java Basics - Anfänger-Themen 4
P Verständnisfrage Java Basics - Anfänger-Themen 3
kaoZ Best Practice Verständnisfrage Listener bei lokalen Objekten Java Basics - Anfänger-Themen 8
D Input/Output Verständnisfrage Verzeichnis-/Dateiliste erstellen & Dateikonvertierung Java Basics - Anfänger-Themen 1
S Verständnisfrage zu Anweisungen und deren Wirkung Java Basics - Anfänger-Themen 7
H Verständnisfrage für oder Anweisung Java Basics - Anfänger-Themen 8
E Threads Verständnisfrage bzgl. Threads und Sleep Java Basics - Anfänger-Themen 2
T Erste Schritte Verständnisfrage: Getter und Setter Methoden Java Basics - Anfänger-Themen 3
H Verständnisfrage zu Java-Ausgabe Java Basics - Anfänger-Themen 3
S Verständnisfrage Java Basics - Anfänger-Themen 2
N Verständnisfrage Code Java Basics - Anfänger-Themen 8
B Verständnisfrage Java Basics - Anfänger-Themen 2
H Interface Comparable Verständnisfrage Java Basics - Anfänger-Themen 6
B Verständnisfrage Codezeile Java Basics - Anfänger-Themen 7
B Verständnisfrage:Beispielprogramm BlueJ Java Basics - Anfänger-Themen 3
M Kurze Verständnisfrage zu einer Java Aufgabe Java Basics - Anfänger-Themen 12
K Erste Schritte Kleine Verständnisfrage Java Basics - Anfänger-Themen 12
R Verständnisfrage Referenzvariablen in array Java Basics - Anfänger-Themen 3
M Verständnisfrage: Objekt erzeugen u. zuweisen Java Basics - Anfänger-Themen 16
I OOP Verständnisfrage zu Singelton Pattern Java Basics - Anfänger-Themen 21
M Verständnisfrage zu JPanel Java Basics - Anfänger-Themen 3
S Verständnisfrage: Exception Gebrauch Java Basics - Anfänger-Themen 2
R Verständnisfrage NPE Java Basics - Anfänger-Themen 5
M Verständnisfrage zur Zahlenumwandlung (Dezimal-->Dual) Java Basics - Anfänger-Themen 25
P Java Objekte - Verständnisfrage Java Basics - Anfänger-Themen 9
N Verständnisfrage zu folgendem Programm Java Basics - Anfänger-Themen 2
L Grundlegende Verständnisfrage Hasmap Referenzen Java Basics - Anfänger-Themen 4
S Verständnisfrage zu Interfaces Java Basics - Anfänger-Themen 2
VfL_Freak Verständnisfrage zur Klasse "TIMER" Java Basics - Anfänger-Themen 7
P Verständnisfrage zu Instanzen/Objekten Java Basics - Anfänger-Themen 9
M Verständnisfrage im Umgang mit Map Java Basics - Anfänger-Themen 10
K Verständnisfrage zu int.length und String.length() Java Basics - Anfänger-Themen 4
G 2D Array gleichsetzen verständnisfrage Java Basics - Anfänger-Themen 2
M kleine und einfache Verständnisfrage Java Basics - Anfänger-Themen 3
N verständnisfrage java.util.Calendar Java Basics - Anfänger-Themen 4
G Datentypen bits, bytes, chars - Verständnisfrage Java Basics - Anfänger-Themen 5
E Verständnisfrage zu Shutdownhook Java Basics - Anfänger-Themen 5
D Verständnisfrage: Java und MySql Java Basics - Anfänger-Themen 3
F Rekursion Verständnisfrage Java Basics - Anfänger-Themen 6
A Exception Verständnisfrage: Exceptions während, einer Statischenzuweisung abfangen Java Basics - Anfänger-Themen 10
Z Comparator Verständnisfrage Java Basics - Anfänger-Themen 5
D Verständnisfrage zu Funktionen Java Basics - Anfänger-Themen 6
H Verständnisfrage Persistenz Java Basics - Anfänger-Themen 10
neurox Verständnisfrage zu Threads Java Basics - Anfänger-Themen 4
E Verständnisfrage Syntax: frame.getContentPane().add(button) Java Basics - Anfänger-Themen 11
Y Kleine Verständnisfrage zum Thema dynamische Polymorphie Java Basics - Anfänger-Themen 3
F Verständnisfrage Objekt instanzierung / Polymorphie Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben