浏览代码

done further doc/ work + revert #40b3753

Noah Vogt 3 年之前
父节点
当前提交
d1cd2e7d74
共有 4 个文件被更改,包括 24 次插入21 次删除
  1. 1 0
      doc/media/grober-ansatz.drawio
  2. 二进制
      doc/media/grober-ansatz.png
  3. 20 2
      doc/portfolio.tex
  4. 3 19
      src/ui/MainWindow.java

+ 1 - 0
doc/media/grober-ansatz.drawio

@@ -0,0 +1 @@
+<mxfile host="app.diagrams.net" modified="2022-05-06T07:23:11.500Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" etag="p2fk99IJSeZ_gozVlViE" version="18.0.0" type="device"><diagram id="sjbyanrG_to2hAsC2oxt" name="Page-1">3Vhdb9owFP01PG7KBwR4pNCtW1dpUjW1PJrEJC6OnTlOIf31uyY2iRNAdGoH6wvKPfHnPedcO/T8abr5KlCW3PEI057nRJueP+t53th34FcBZQUMgqACYkGiCnJr4J68YA3qfnFBIpxbDSXnVJLMBkPOGA6lhSEh+NputuTUnjVDMe4A9yGiXfSBRDKp0JE3rPEbTOLEzOwG4+pNikxjvZM8QRFfNyD/uudPBeeyeko3U0xV7kxeqn5fDrzdLUxgJk/pIH9Nn9BsHrujx8lKfs9nv0v+SW8jl6XZMI5g/zrkQiY85gzR6xq9ErxgEVajOhDVbX5wngHoAviEpSw1maiQHKBEplS/hQWL8rEZzNVgnwcmnG304FVU6qhaq1rgwRRoKOeFCPGRfRspIRFjeaSdtyMKBI55imE90E9giiR5tteBtNTiXbuaDXjQhLyCHD3uM6KFngk8tiSrJWa5xKLnBRTWfrVQT7HcJkgjBrhDhD0QpnSnX8FCFnXzFvc2s+uESHyfoW0i1+Bum0W9OCwk3hzno5s/3cHva2/o4uCOdLyureYa/yQNmwXOO6V8fFY/NCwwtxzw7n7wTvSDf04/eB0/dAR/i0CObIbD1UUK3nUvTfD+iTn9L9Lpjc+dzn4nnTeoyOSKojzHJxTsSr8Xmex2sR6eO9eDPdJtF28WTdQlEKJQUUBCOy12DvGGyEYZhmhuKjQ810VYBaYGX0Dt7p9Yuw/Q2+BvsIc+g51c4vUMPzmBjdTqGdrq8Z2WLKpt6l7Na2xroL7X8vygNVCVh85AW4nttv33qgs6qoOPBSo70gOjSVtsuRR8haeccgEI40xdHpaE0haEKImZUiwoAW55/pWyLYFZJvpFSqJoe/PYZ3pb0m/h+1HfPrP6XeMHe4Tjv5fvRx0GGElTJZFvcC9G7EVNSnP4nUgpyKL4wOTs1G/I2VOVh/+SHHMiN9ipWXAWGD5cEqjKaupCUYQJU18yDpRpVFKSq1bRFrk1ZyZKVerYIs/2HYMfhkp3eKCwWQds8CZcQlj/8VBVxvrfG//6Dw==</diagram></mxfile>

二进制
doc/media/grober-ansatz.png


+ 20 - 2
doc/portfolio.tex

@@ -233,8 +233,16 @@ Sie lernen die Klasse \texttt{java.util.ArrayList} kennen und stellen dadurch fe
 Anforderungen (i) und (iii) über die beiden Methoden \texttt{add()} und \texttt{Iterator()} erfüllt. Für die Realisierung der Klasse \texttt{MischMaschine} können Sie also grundsätzlich die Klasse \texttt{ArrayList} und das Konzept der Vererbung nutzen. Um die Anforderung (ii) zu implementieren, müssen Sie zusätzlich Ihre eigene Methode \texttt{mischen()} schreiben (s. die Methode \texttt{java.util.Collections.shuffle()} aus der Klasse \texttt{java.util.*}), die das Mischen tatsächlich realisiert, und zu Ihrer Klasse hinzufügen.
 Implementieren Sie auf dieser Weise die externe Klasse MischMaschine, die Objekte der Hauptklasse \texttt{Karten} aufnehmen, mischen und durchlaufen kann.}\\
 
+Dass Objekte der Klasse \texttt{MischMaschine} in der Lage sein sollen (i) - (iii) zu erfüllen ist verständlich, doch da jedoch die Klasse eine grafische Oberfläche starten soll, wird es als sinnvoller empfunden diese drei Punkte durch die Unterklasse resp. Datentyp-Klasse \texttt{KartenDeck} welche wiederum Daten der Datentyp-Klasse \texttt{Karte} bearbeitet. Dies steht ja nicht im Widerspruch zur Aufgabenstellung, sondern eine Interpretation.\\
+
 \textit{\textbf{1c)}: Ändern Sie die Hauptklasse Karten so ab, dass sie alle erzeugten Karten des Kartenspiels an die Klasse MischMaschine übergibt. Die MischMaschine soll die Karten mischen und
-anschliessend sie an die Hauptklasse Karten in der gemischten Reihenfolge zurückgeben, wo sie schlussendlich auf den Bildschirm im grafischen Interface ausgelegt werden.}
+anschliessend sie an die Hauptklasse Karten in der gemischten Reihenfolge zurückgeben, wo sie schlussendlich auf den Bildschirm im grafischen Interface ausgelegt werden.}\\
+
+Hier macht es relativ wenig Sinn nach Ansicht des Autors dieser Arbeit, die Hauptklasse \texttt{Karten} direkt zu bearbeiten, um die im grafischen Interface abgebildeten Karten zu mischen. Denn solch eine Änderung sollte in der jeweiligen aus der Klasse \texttt{Karten} gecallten Klasse geschehen, im Falle der hier präsentierten Lösung ist das in der Klasse \texttt{MainWindow}.\\
+
+Auch dass die zur Mischung stehenden Karten an die Klasse \texttt{MischMaschine} abgegeben werden soll, erscheint auch nicht direkt sinnvoll. In dieser Lösung wird das Kartendeck im User Interface in einer Instanz der Klasse \texttt{KartenDeck} gespeichert und die Mischfunktion als Methode dieser Klasseninstanz einfach gecallt.
+
+
 
 \subsubsection{Bewertung}
 Vom Autor dieser Arbeit wird diese Aufgabe als doch recht sinnvoll angesehen. Einerseits ist das Handling eines Kartenspiels resp. eines Kartendecks ein recht passender Fall, wo man die Prinzipien der OOP-Konzepts (Objekt-Orientierten Programmierung) anwenden kann: So erschien es sinnvoll eine Klasse \texttt{Karte} zu schreiben um den Datentyp einer Karte als Objekt darzustellen inklusive Getter- und Settermethoden und passenden Attributen. Ein Kartendeck wäre dann eine Klasse welche eine \texttt{ArrayList} ist, welche Objekte der Klasse \texttt{Karte} aufnehmen, und passende Methoden zu deren Manipulation bieten (Karten hinzufügen, entfernen, mischen, etc.). Ein paar OOP-Konzepte wurden im Laufe des Unterrichts im Ergänzungsfach Informatik schon angeschnitten, weshalb es nach der Meinung des Autors auch schön ist, diese wiederverwenden zu können. \\
@@ -244,7 +252,17 @@ Was auch im Unterricht behandelt wurde, sind simple grafische Interfaces mit der
 Auf die Schlussfolgerungen und Reflexionen auf die Arbeit als gesamtes wird noch später im letzten Punkt genauer eingegangen, doch die Arbeit erschien dem Autor ausgewogen bezüglich Machbarkeit, Aufwand, Themenbereichen (Karten Backend und GUI Frontend). Ein Kritikpunkt ist aber, dass die Namen der Klassen - \texttt{Karten} und \texttt{MischMaschine} - vorgegeben waren, denn da es nach Ansicht des Autors dieses Portfolios seine kreativen Freiraum bezüglich Quellcode-Struktur und Klassenbenennung. Gegeben, bei dieser Aussage befindet man sich auf hohem Niveau der Kritik.
 
 \subsection{Lösungsansatz}
-\subsection{grob}
+
+\subsubsection{Grobe Übersicht}
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=.6\textwidth]{media/grober-ansatz.png}
+    \caption{Spielkarten}
+\end{figure}
+
+Wie in der obigen Abbildung ersichtlich, wird in der Hauptklasse \texttt{Karten} durch das \texttt{SwingUtilities.invokeLater()}-Environment ausgeführt, welches den einzigen Nutzen hat, das Grafikfenster zu starten, welches in der Klasse \texttt{MainWindow} geschrieben ist.\\
+
+Das Grafikfenster besteht aus verschiedenen Komponenten der AWT- und Swing-Library
 
 \subsection{Vorstellung und Erklärung}
 

+ 3 - 19
src/ui/MainWindow.java

@@ -5,7 +5,6 @@ import java.awt.Color;
 import java.awt.FlowLayout;
 import java.awt.Font;
 import java.awt.GridLayout;
-import java.awt.Insets;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.net.URL;
@@ -98,25 +97,10 @@ public class MainWindow {
                                    getResource("img/cards/" +
                                    karte.getFarbe().toString().toLowerCase() +
                                    "-" + karte.getWert() + ".png");
-            JButton cardButton = new JButton();
-            cardButton.setBorderPainted(false);
-            cardButton.setBorder(null);
-            cardButton.setFocusable(false);
-            cardButton.setMargin(new Insets(0, 0, 0, 0));
-            cardButton.setContentAreaFilled(false);
+            JLabel jlabel = new JLabel();
             ImageIcon labelIcon = new ImageIcon(iconImagePath);
-            cardButton.addActionListener(new ActionListener() {
-				@Override
-				public void actionPerformed(ActionEvent arg0) {
-                    System.out.println(karte.getFarbe());
-                    System.out.println(karte.getWert());
-				}
-
-            });
-
-            cardButton.setIcon(labelIcon);
-
-            cardPanel.add(cardButton);
+            jlabel.setIcon(labelIcon);
+            cardPanel.add(jlabel);
         }
 
         fillUpWithEmptyCardsIfNeeded();