2016-04-03 10 views
-1

Ich versuche, UML-Klassendiagramm für dieses Problem zu erstellen: So Benutzer wird aufgefordert, ein Kennwort einzugeben. Es ist eine 9-stellige Nummer. Das System erhält Passwörter und prüft, ob es korrekt ist oder nicht, indem es in die Datenbank schaut, in der das korrekte Passwort gespeichert ist. Wenn das Passwort korrekt ist, muss das System die Meldung "Richtig" anzeigen. Andernfalls wird die Meldung "Fehler" angezeigt. Wenn der Benutzer mehr als 5 Mal hintereinander ein falsches Passwort eingibt, hört das System auf, Nachrichten anzuzeigen.UML-Klassendiagramm für die Kennwortüberprüfung erstellen

Ich habe 4 Klassen hier, oder? Benutzer, System, Datenbank, Zähler

┌─────────────────────────┬ 
    │ User     │ 
    ├─────────────────────────┬ 
    │- pass: int    | 
    ├─────────────────────────┼ 
    |+ EnterPass()   | 
    ├─────────────────────────┼ 
      | * 
      | 
      | 
      | 
      | 
      | 1 
    ┌─────────────────────────┬ 
    │ System     │ 
    ├─────────────────────────┬ 
    │       | 
    ├─────────────────────────┼ 
    |+ CheckPass()   | 
    |+ ShowSuccess()   | 
    |+ ShowError()   | 
    |+ ShowNothing()   | 
    |+ ChangeCategory()  | 
    ├─────────────────────────┼ 
      | 1 
      | 
      | 
      | 
      | 
      | 1 
    ┌─────────────────────────┬ 
    │ Database    │ 
    ├─────────────────────────┬ 
    │- CorrectPass: int  | 
    ├─────────────────────────┼ 
    |+ ValidatePass(): bool | 
    |+ Increment1()   | 
    ├─────────────────────────┼ 
      | 1 
      | 
      | 
      | 
      | 
      | 1 
    ┌─────────────────────────┬ 
    │ Counter    │ 
    ├─────────────────────────┬ 
    │- CounterState: int  | 
    ├─────────────────────────┼ 
    |+ increment()   | 
    |+ GetState(): int  | 
    ├─────────────────────────┼ 

Kann mir jemand sagen, ob das stimmt? Ich bin mir nicht sicher, ob ich Counter und System irgendwie verbinden sollte. Gibt es etwas, das ich hinzufügen sollte?

+2

Es ist keine gute Sicherheit, ein Passwort zu speichern, es ist besser, eine Hash-Version davon zu speichern. Verwenden Sie eine Funktion wie PBKDF2, bcrypt oder script, sie verwenden einen Salt-, einen Hash- und einen Iterationszähler. Führen Sie dann bei der Kennwortprüfung das vom Benutzer angegebene Kennwort im selben Prozess aus und vergleichen Sie die Hashwerte. – zaph

Antwort

0

Das ist nicht wirklich ein gutes Design. Datenbank und Counter sollten keine Klassen sein. Das erste wegen seiner Komplexität und das zweite wegen seiner Einfachheit. Anstatt System für die Passwortprüfung zu verwenden, machen Sie diese Authentifizierung. Was Sie System nennen, wird neben der Authentifizierung ein Konglomerat aus vielen anderen Klassen sein. Der Zähler ist nur ein privates Attribut innerhalb der Authentifizierung.

Jetzt zu Ihrer Datenbank. Hier repräsentiert es wahrscheinlich die Benutzer, die das System erlaubt. Rufen Sie diese Klasse Benutzer auf und weisen Sie sie allen Eigenschaften zu, die ein Benutzer besitzt (Name, verschlüsseltes Passwort, letzte Anmeldung usw.). Das Zuordnen zu einer realen Datenbank ist Gegenstand einer späteren Entwurfsphase, in der Sie diese Klassen durch Implementierung einer Persistenzschnittstelle persistent machen.

+0

Vielleicht wird es dadurch ein bisschen klarer machen. Datenbank enthält nur ein einziges Passwort. Es ist eine 9-stellige Nummer und alle Benutzer müssen dasselbe Passwort eingeben, um die Erfolgsmeldung zu sehen. Ich bin mir nicht sicher ob ich dich richtig verstanden habe, aber sollte ich nur 3 Klassen erstellen? Benutzer, Autentification und Datenbank? Habe ich recht? Könnten Sie bitte detaillierter sein? –

+0

Nun, das macht noch weniger Sinn. Eine Klasse, die ein einzelnes Passwort enthält, ist überhaupt keine Klasse. Sie sollten wahrscheinlich ein wenig über OOD lernen, bevor Sie hier fortfahren. –

1

Im Allgemeinen möchten Sie nicht so viel Detail modellieren, weil Sie mit einem abgestandenen, trägen Modell enden werden. Benutzer und Zähler sind eher ein Anliegen von OOP und ähneln dem Modellieren von Sand und Lehm, aus denen die Bausteine ​​für ein Haus bestehen. Wen interessiert diese Detailgenauigkeit? Stattdessen ist es besser, die Problemdomäne zu modellieren, die hier völlig fehlt.

Sie könnten die Systemarchitektur modellieren, die die Komponenten, Verantwortlichkeiten und Interaktionen identifizieren würde. Sie könnten Ihr System und Ihre Datenbank zu einer Architektur entwickeln.

Ist Ihr Modell korrekt UML? Sicher, aber es ist nicht besonders nützlich.

BTW, wenn Sie eins zu eins Vielfalt sehen, das ist fast immer eine rote Fahne.

+0

@ Jim L. Also ist diese Lösung richtig? –

+0

@TimDenali: es ist syntaktisch korrekt UML. Ist es nützlich? Vielleicht nicht. –