gruppe06-hufflepuff-projekt.../Bewertung_TicTacToe.md

128 lines
4.0 KiB
Markdown

# Bewertung TicTacToe
## 🥇 8.5 Punkte von 10
👫 brandleo@students.zhaw.ch; fassband@students.zhaw.ch; schrom01@students.zhaw.ch; zieglmic@students.zhaw.ch
## Allgemeine Anforderungen (all-or-nothing)
> Voraussetzung für Punkterteilung: Die Applikation ist lauffähig.
## Entwicklung
👨‍🏫 Entwicklung: (0-6): 5
> je 0-2 Punkte (oder Abzüge):
> - Das Spiel besitzt die geforderte Funktionalität (Abzüge: Ende nicht erkannt, Spielfeld nicht ausgedruckt, Sprachumschaltung nicht bei jedem Zug vorhanden, Illegale Züge nicht erkannt, Grundfunktionalität des Spiels (z.B. Spielregeln) fehlt, die Aufgabe ist nicht gelöst)
> - Sie halten die Vorgaben hinsichtlich einsetzbarer
Konstrukte (z.B. Einsatz von Arrays) und Clean Code (siehe Anhang) ein
> - Sie haben eine sinnvolle Aufteilung in Klassen
und Klassendefinitionen gefunden (Kopplung, Kohäsion, Zuständigkeit, etc.)
* Funktionalität
* Das Spiel funktioniert bestens.
* Sogar mit 3 Sprachen!
* Clean Code: **0.5 Punkte Abzug**
* Uneinheitliche (runde und geschwungene) Klammersetzung.
* Hinweis: Gehen Sie als Team durch die IntelliJ Code Style Richtlinien, konfigurieren Sie diese so wie es für alle stimmt und speichern Sie diese im Projekt. Danach könnnen Sie die `Code -> Reformat Code` Funktion (`Ctrl+Alt+L`) verwenden.
* `if (` vs `if(`
* `if (<condition>) {` vs `if (<condition>){`
* `} else` vs `}` neue Zeile `else`
* Empfehlung:
```java
if (<condition 1>) {
<expressions>
} else if (<condition 2>) {
<expressions>
} else{
<expressions>
}
```
* Konstrukte:
* Nur erlaubte Konstrukte wurden verwendet.
* Aufteilung von Klassen: **0.5 Punkte Abzug**
* Es empfiehlt sich den Output in einer separaten Klasse zu machen anstatt die `System.out` Aufrufe zu verteilen.
* Der Code wird unabhängig von der Ausgabeart
* Dies ermöglicht z.B. eine Anpassung zu einem GUI
## Vorgehen und Dokumentation
👨‍🏫 Doku: (0-4): 3.5
> je 0-2 Punkte (oder Abzüge):
> - Funktionalität ist im Code oder anderweitig dokumentiert (und via README auffindbar)
> - Alle Gruppenmitglieder haben Code beigetragen und auf GitHub eingechecked. (Check durch
GitHub Log)
* Dokumentation:
* Sehr gutes `README.md`!
* Gute, übersichtliche Dokumentation, auch mit den entsprechenden Wertebereichen.
* Dokumentation von `TicTacToe` sollte keine Installations Anleitung haben. Das ist zu viel Wissen einer Klasse über wie das Setup genau aussieht. **0.5 Punkte Abzug**
* Meine Empfehlung: Dokumentation wie den Code auf Englisch zu schreiben
* Alle Gruppenmitglieder haben beigetragen
## Zusätzliche Hinweise (nicht bewertet)
* Vereinfachung durch Guard-Clauses:
```java
if (<condition>) {
return 1;
} else {
return 2;
}
// vereinfacht:
if (<condition>) {
return 1;
}
return 2;
```
* Optimierung `Gamefield.countSetfields`
```java
public int countSetFields() {
int count = 0;
for (Integer fieldValue : fields) {
if (fieldValue != 0) {
count++;
}
}
return count;
}
```
* Optimierung `Gamefield.setField`
```java
public boolean setField(int field, int player) {
int index = field - 1;
if (field < 1 || field > 9 || fields.get(index) != 0) {
return false;
}
fields.set(index, player);
return true;
}
```
* Optimierung `Gamefield.getField`
```java
public int getField(int field) {
if (field < 1 || field > 9) {
return -1;
}
return fields.get(field - 1);
}
```
* Optimierung `Game.checkWinVariants`:
* Zuerst mit Property `playerPlaying` vergleichen, da dies viel effizienter ist.
# Anhang
Folgende Vorgaben zu Clean Code werden angeschaut:
* Code ist aufgeräumt (PROG1 Kapitel 3: Objektinteraktion, Kapitel 6:Bibliotheksklassen)
* Sinnvolle Namensgebung (PROG1 Kapitel 1: Objekte und Klassen)
* Methodengestaltung (PROG1 Kapitel 3: Objektinteraktion, Kapitel 6, Bibliotheksklassen)
* Klassen haben Verhalten (PROG1 Kapitel 3: Objektinteraktion)
* Klassenoberfläche ist minimal (PROG1 Kapitel 3: Objektinteraktion, Kapitel 10: Vererbung)
* Vernünftiger Einsatz von Feldern (PROG1 Kapitel 3: Objektinteraktion)
* Javadoc (PROG1 Kapitel 2: Klassendefinitionen)