Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix/class #54

Merged
merged 24 commits into from
Oct 5, 2020
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
.vscode
.vscode
*.log
3 changes: 3 additions & 0 deletions sheets/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,9 @@ pythontex-files-*/
# Latexian
TSWLatexianTemp*

# latexindent
__latexindent_temp.tex

## Editors:
# WinEdt
*.bak
Expand Down
4 changes: 2 additions & 2 deletions sheets/1/exercise-1.tex
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
\excercise{Programmstart}

\begin{Infobox}[HowTo: Wie bekomme ich des Projekt]
\begin{enumerate}
\begin{enumerate}[label=\arabic*.]
\item Lade als erstes das Maven-Projekt \jvkpackage runter, man findet es hier:
\begin{center}
\color{blue}\href{\jvkpackageurl}{\textit{\jvkpackageurl}}
Expand All @@ -21,7 +21,7 @@
\end{Infobox}

\begin{Infobox}[HowTo: Projekt Import in Eclipse]
\begin{enumerate}
\begin{enumerate}[label=\arabic*.]
\item Um ein Projekt zu importieren klicke zuerst auf \fbox{File} $\to$ \fbox{Import...}.
\item Wähle in dem Ordner \fbox{Maven} $\to$ \fbox{Existing Maven Projects} oder nutze das Suchfeld oben um \fbox{Existing Maven Projects} zu finden. Klicke dann auf \fbox{Next \textgreater}.
\item Drücke oben rechts auf \fbox{Browse...} und suche das Verzeichnis, wo die Datei \jvkpackage entpackt wurde.
Expand Down
49 changes: 28 additions & 21 deletions sheets/1/exercise-2.tex
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,20 @@

\excercise{Einschub: Objekte, Klassen, Klassendiagramm}

\begin{Infobox}
\begin{Infobox}[HowTo: Klassen und Objekte auseinander halten]
In Java (und auch in anderen Programmiersprachen) gibt es \textbf{Klassen} und \textbf{Objekte}.
Dabei gehört ein Objekt immer zu einer Klasse. Genauer gesagt ist ein Objekt immer genau \textbf{eine Instanz} einer Klasse.
Dabei gehört ein Objekt immer zu einer Klasse. Genauer gesagt ist ein Objekt \textbf{eine Instanz} einer Klasse.

Die Klasse beschreibt dabei generell welche Eigenschaften und Fähigkeiten ein Objekt haben kann.
Die Klasse beschreibt dabei generell welche Eigenschaften und Operationen ein Objekt haben kann.
ruffdd marked this conversation as resolved.
Show resolved Hide resolved
Eigenschaften können zum Beispiel Daten (wie der Name oder die Farbe des Objekts) sein.
Fähigkeiten wiederum sind Operationen die das Objekt ausführen kann.
Das Objekt, also eine konkrete Instanz der Klasse, hat dann zum Beispiel eine bestimmte Farbe (grün).
Ein anderes Objekt der selben Klasse kann eine eigene Farbe (rot) haben.
\paragraph{}
Man muss sich dabei oft entscheiden wie ein generisch oder genau man eine Klasse macht. z.B. kann man die Klasse Sportschuh und die Klasse High Heels haben oder man hat die Klasse Schuh mit der Eigenschaft Typ.
Operationen wiederum sind Funktionen die das Objekt ausführen kann.
ruffdd marked this conversation as resolved.
Show resolved Hide resolved
Das Objekt, also eine konkrete Instanz der Klasse, hat dann zum Beispiel eine bestimmte Farbe (z.B. grün).
Ein anderes Objekt der selben Klasse kann eine eigene Farbe (z.B. rot) haben.\\

buehlefs marked this conversation as resolved.
Show resolved Hide resolved
Man muss sich dabei oft entscheiden wie generisch oder genau man eine Klasse macht. Zum Beispiel kann man die Klasse Sportschuh und die Klasse High Heels haben oder man hat nur eine Klasse Schuh mit einer Eigenschaft, welche die Schuhart beschreibt.
\end{Infobox}

\begin{enumerate}[label=\alph*)]
\begin{enumerate}
\item Wir haben hier ein paar Klassen. Bitte erweitere sie um je 3 weitere Eigenschaften. Der Stuhl ist ein Beispiel:

\begin{tikzpicture}
Expand All @@ -32,23 +32,30 @@
\node[draw, rectangle, minimum height= 4cm, minimum width=3cm,align=left, anchor=north] (B1) at (10.5,0) {Autor\\$\rule{2cm}{0.15mm}$\\$\rule{2cm}{0.15mm}$\\$\rule{2cm}{0.15mm}$\\};
\end{tikzpicture}

\item Nun erstelle zu jeder Klasse 3 Objekte. Wenn ihr in einer Gruppe zusammenarbeitet sollte jeder selbst auf Objekte kommen.

\item Bitte lies diesen Text und identifiziere 3 Klassen mit je drei Eigenschaften die vorkommen:
\item Nun erstelle zu jeder Klasse drei verschiedene Objekte. Wenn ihr in einer Gruppe zusammenarbeitet sollte sich jeder selbst ein Objekte ausdenken.

Die BilligMöbel GmbH ist ein Unternehmen mit 1000 Mitarbeiter. Doch sie wissen nicht viel über ihre Mitarbeiter. Sie merken sich lediglich ihr Alter, Name, Gehalt und Berufsbezeichnung. Deswegen kann das Untenehmen ihre Möbel sehr Billig verkaufen: Stühle für 10 Euro, Ligen für 15 Euro und ganz viele andere Arten von Möbeln. Alle kann man aus Plastik oder Holz bekommen und in verschiedenen Farben.
\item Identifiziere im folgenden Text drei vorkommende Klassen mit jeweils drei Eigenschaften:

Aber sie merken sich wer schon alles bei ihnen eingekauft hat. Für jeden Kunden haben sie sich aufgeschrieben: Wann er das letzte mal eingekauft hat; Wie viel er insgesamt ausgegeben hat und wann diese Person Geburtstag hat.
Die BilligMöbel GmbH ist ein Unternehmen mit 1000 Mitarbeiter.
In der Akte jedes Mitarbeiters ist sein Name und Alter sowie sein Gehalt und seine Kontonummer.
Aufgrund von Massenproduktion kann das Untenehmen ihre Möbel sehr Billig verkaufen.
So kosten z.B. Stühle 10€, Liegen 15€ und Schränke 32€.
Alle kann man aus Plastik oder Holz bekommen und in verschiedenen Farben.
In ihrer Kundenkartei vermerken sie das Geschlecht und Postleitzahl ihrer Kunden sowie die Kosten ihres letzten Éinkaufs.
\end{enumerate}

\begin{Infobox}
Klassen verfügen auch über Aktionen die von bzw. auf ihren Objekten ausgeführt werden können. Wenn wir bei dem Auto Beispiel bleiben, kann es z.B. fahren, bremsen, abbiegen oder den Motor an / abschalten. Diese Aktionen werden Operationen genannt.
\paragraph{}
Dabei können Operationen auch sogenannte Parameter besitzen wie z.B. abbiegen(links) oder fahren(50) (für 50 km/h) Wie man genau bestimmt was diese Parameter bedeuten erklären wir noch.
\begin{Infobox}[HowTo: Operationen von Objekten]
Klassen verfügen über Operationen die von bzw. auf ihren Objekten ausgeführt werden können.
Als Beispiel betrachten wir ein Auto. Es kann fahren, bremsen, abbiegen oder den Motor an-/abschalten.\\

Dabei können Operationen auch sogenannte Parameter besitzen wie z.B. abbiegen(links) oder fahren(50) (für 50 km/h).
Wie man genau bestimmt was diese Parameter bedeuten erklären wir noch.
\end{Infobox}

\begin{enumerate}[label=\alph*)] \setcounter{enumi}{3}
\item überlege dir für die folgenden 3 Klassen Operationen. Es ist nicht notwendig Parameter zu verwenden. Der Stuhl ist wieder ein Beispiel:
\begin{enumerate} \setcounter{enumi}{3}
\item Überlege dir für die folgenden 3 Klassen, Operationen.
Es ist nicht notwendig Parameter zu verwenden.
Der Stuhl ist wieder ein Beispiel:

\begin{tikzpicture}
\node[draw, rectangle, minimum height=0.75cm,minimum width=3cm, anchor=south] (A) {\textbf{Stuhl}};
Expand All @@ -66,7 +73,7 @@

\item Überlege dir nun eine eigene Klasse und finde zu ihr 3 Eigenschaften und 3 Operationen. Dann überlege die 3 Objekte dieser Klasse. Wenn du in einer Gruppe arbeitest könnt ihr gerne durchtauschen und jeder muss Objekte für die Klasse eines Kommilitonen finden.

\begin{Infobox}
\begin{Infobox}[Info: Objekte vs. reale Objekte]
Wichtig zu verstehen ist das Klassen und Objekte keine physischen Objekte repräsentieren müssen. Man kann auch z.B. eine Klasse für User Accounts oder eine Klasse für Personengruppen haben. Auch werden Klassen verwendet um technische Teile des Programms zu repräsentieren wie z.B. Das Fenster das angezeigt wird oder ein Paket das durchs Internet geschickt wird.
\end{Infobox}

Expand Down
126 changes: 88 additions & 38 deletions sheets/1/exercise-3.tex
Original file line number Diff line number Diff line change
Expand Up @@ -4,49 +4,99 @@
In dieser Aufgabe geht es darum den Syntax von Java zu verstehen.
In jeder teilaufgabe wir ein bestimmter teil von Java erklärt und du sollst ein Beispiel aus Aufgabe 1 finden. In \textbf{[]} steht immer wie viele verschiedenen Beispiele du finden sollst.

\renewcommand{\theenumi}{\alph{enumi}}
\begin{enumerate}
\item \textbf{[1]} Eine Klasse hat immer am Anfang das Schlüsselwort class, gefolgt von einem frei wählbaren Namen. Darauf folgen die { }, die den gesamten Inhalt der Klasse umschließen.
Zum inhalt einer Klasse gehören \textbf{[1]}Attribute und Operationen
\item \textbf{[1]} Eine Klasse hat immer am Anfang das Schlüsselwort \lstinline{class}, gefolgt von einem frei wählbaren Namen. Darauf folgen die \{ \}, die den gesamten Inhalt der Klasse umschließen.
Zum inhalt einer Klasse gehören \textbf{[1]}Attribute und Operationen

\textbf{[1]} Eine Operationen hat immer einen frei wählbaren Namen, vor dem entweder void oder eine Klasse steht. Eventuell gefolgt von Parametern. Die immer als Klasse und dann ein Name geschreiben werden und wenn man mehrere braucht kann man sie mit , getrennt auflisten.
Nach den() folgen {}, die einen Codeblock umschließen.
\begin{Infobox}{Namen}
Freiwählbare namen, müssen trotzdem ein paar Regeln Folgen
\begin{itemize}
\item Sie dürfen nicht gleich wie ein Schlüsselwort(z.B. class oder new) heißen.
\item Sie dürfen nicht mit einer Ziffer beginnen.
\item Sie dürfen kein Leerzeichen beinhalten.
\end{itemize}
\end{Infobox}
\textbf{[1]} Eine Operationen hat immer einen frei wählbaren Namen, vor dem entweder void oder eine Klasse steht. Eventuell gefolgt von Parametern. Die immer als Typ-Name (Klassen definieren Typen, Also kann man hier einfach den Namen einer Bestehenden Klasse hinschreiben) und dann ein neuer Name für die Operation, geschreiben werden und wenn man mehrere braucht kann man sie mit \lstinline{,} getrennt auflisten.
Nach den \lstinline{()} folgen \texttt{ \{\} }, die einen Codeblock umschließen.

\begin{lstlisting}[title={\textbf{Klassen Beispiel}}]
class <Name der Klasse>{

void <Operation Name>(<Typ Name> <Parameter Name>){
ruffdd marked this conversation as resolved.
Show resolved Hide resolved

}
}
\end{lstlisting}
\begin{lstlisting}[title={\textbf{Klassen Syntax}}]
class PDFElement{

void setFirstRowNumber(Integer rowNumber){

}
}
\end{lstlisting}
Alle in < > geschriebenen Wörter sind Platzhalter für das was sie beschreiben. Jeder kann mit etwas anderem Ausgefüllt werden, auch wenn sie gleich heißen.
ruffdd marked this conversation as resolved.
Show resolved Hide resolved

\begin{Infobox}{Namen}
Die frei wählbare Namen, müssen trotzdem ein paar Regeln Folgen
\begin{itemize}
\item Sie dürfen nicht gleich wie ein Schlüsselwort(z.B. \lstinline{class} oder \lstinline{new} ) heißen.
\item Sie dürfen nicht mit einer Ziffer beginnen.
\item Sie dürfen kein Leerzeichen beinhalten.
\end{itemize}
ruffdd marked this conversation as resolved.
Show resolved Hide resolved

\end{Infobox}
\item \textbf{[1]} Ein Befehl endet immer mit einem ; und muss in einem Codeblock stehen.
\item \textbf{[2]} Das erzeugen eines Objekts wird mit dem Schlüsselwort new eingeführt. Darauffolgt der Name der Klasse und (). Manchmal werden in die () noch Argumente geschreiben, mit Dingen die das Objekt von Anfang an braucht.
\item \textbf{[2]} Wenn wir ein Objekt länger als nur einmal brauchen müssen wir uns dieses Merken. Dazu verwenden wir eine Variable. Um eine zu erstellen. Schreiben wir zuerst die Klasse zu der das Objekt gehört. Gefolgt von dem frei wälbaren Namen den die Variable haben soll. Mit einem = lassen wir sie dann auf ein Objekt zeigen, indem wir entweder das new Objekt() direkt dahinter schreiben oder eine andere
Variable die bereits auf ein Objekt zeigt.
\begin{Infobox}[Attribute]
Wenn man eine Variable in den Codeblock einer Operation schreibt, dann kann man sie nur in der Operation verwenden.
Wenn man sie aber außerhalb der Operation, direkt in die Klasse schreiben, wird sie nicht Variable sondern Attribut genannt und kann von allen Operation die zu der Klasse gehören verwendet werden.\\
Das ist außerdem eine Ausnahme bei der ein Befehl nicht in dem Codeblock einer Operation steht.
\end{Infobox}
\begin{lstlisting}[title=\textbf{Kommando Syntax},firstnumber=5]
new <Typ Name>();
\end{lstlisting}
\item \textbf{[2]} Wenn wir ein Objekt länger als nur einmal brauchen müssen wir uns dieses Merken. Dazu verwenden wir eine Variable. Um eine zu erstellen. Schreiben wir zuerst die Klasse zu der das Objekt gehört. Gefolgt von dem frei wälbaren Namen den die Variable haben soll. Mit einem = lassen wir sie dann auf ein Objekt zeigen, indem wir entweder das new Objekt() direkt dahinter schreiben oder eine andere
ruffdd marked this conversation as resolved.
Show resolved Hide resolved
Variable die bereits einen Wert hat.

\begin{Infobox}[Attribute]
Wenn man eine Variable in den Codeblock einer Operation schreibt, dann kann man sie nur in der Operation verwenden.
ruffdd marked this conversation as resolved.
Show resolved Hide resolved
Wenn man sie aber außerhalb der Operation, direkt in die Klasse schreiben, wird sie nicht Variable sondern Attribut genannt und kann von allen Operation die zu der Klasse gehören verwendet werden.\\
Das ist außerdem eine Ausnahme bei der ein Befehl nicht in dem Codeblock einer Operation steht.
ruffdd marked this conversation as resolved.
Show resolved Hide resolved
\end{Infobox}
\item \textbf{[2]} Es wurde ja bereits erwähnt, dass Klassen Operationen haben. Außerdem, dass sie "alle" Befehle beinhalten. Wenn man diese Aufrufen möchte: schreibt man den namen der Variable die auf das Objekt zeigt oder auch direkt einfach den Initializer. Dann einen . gefolgt von dem Namen der Operation und (). Manche geben aber auch ein Objekt zurück, dadurch kann man gleich einen Operator davon Aufrufen oder man speichert sich es, mit einer variable zwischen. Außerdem haben sie manchmal Parameter, wie beim Initatiliesieren.
\begin{Infobox}[Operatoren]
Operatoren erfüllen zwei Funktionen. Man kann sie dazu verwenden um Informationen von einem Objekt zu bekommen. In dem Fall werden sie auch Abfragen oder Querries genannt.
Oder man verwenden sie um etwas zu tun. In dem Fall werden sie Kommandos oder commands gennant.
\end{Infobox}
\begin{lstlisting}[title=\textbf{Kommando Syntax},firstnumber=4]
<Operation Name>();
new <Typ Name>();
ruffdd marked this conversation as resolved.
Show resolved Hide resolved
new <Typ Name>().<Operation Name>();
<Typ Name> <Variablen Name> = new <Typ Name>();
ruffdd marked this conversation as resolved.
Show resolved Hide resolved
<Variablen Name>.<Operation Name>();
\end{lstlisting}
\begin{lstlisting}[title=\textbf{Kommando Beispiel},firstnumber=4]
String exampleText = new TextLoader("Kommando")
PDFElement commandExmaple = new CodeBox("Kommando Syntax");
commandExmaple.setFirstRowNumber(4);
\end{lstlisting}
\begin{Infobox}[Operationen]
Operatoren erfüllen zwei Funktionen. Man kann sie dazu verwenden um Informationen von einem Objekt zu bekommen.
In dem Fall werden sie auch Abfragen (oder engl. Querries) genannt.
Oder man verwenden sie um etwas zu tun. In dem Fall werden sie Kommandos (oder engl. commands) gennant.
\end{Infobox}

\item \textbf{[2]} Normalerweiße hat alles was im Programmcode steht eine Aufgabe. Aber was machen wir wenn wir normallen text in den code schreiben wollen. Der einfach nur ein Kommentar für Menschen ist?\\
In so einen Fall kann man ein Text als Kommentar markieren. In den man entweder // schreibt. Dann ist alles danach, was in der Zeile ist, ein Kommentar oder man schreibt /* vor und */ nach den Kommentar. Dadurch kann man auch ein mehrzeiligen kommentar schreiben.
In so einen Fall kann man ein Text als Kommentar markieren. In den man entweder \lstinline[breaklines=false]{//} schreibt. Dann ist alles danach, was in der Zeile ist, ein Kommentar.
Alternativ kann man den kommentar auch mit \lstinline[breaklines=false]{/* */} umschließen. Dadurch kann man auch ein mehrzeiligen kommentar schreiben. Dabei ist es konnvention, jede Zeile mit einem \textcolor{javagreen}{\texttt{*}} zu beginnen.
\begin{lstlisting}[title=\textbf{Kommentar Syntax},firstnumber=11]
// <Kommentar Text>
<Programmcode> // <Kommentar Text>
/*
ruffdd marked this conversation as resolved.
Show resolved Hide resolved
* <Dies ist ein seeehr langer Platzhalter.
* Weil er soll verdeutlichen das ein Blockkommentar, sehr lange texte ermöglicht.>
* Aber man sollte es nicht übertreiben>
*/
\end{lstlisting}
\item Bei der nächsten Aufgabe sollt ihr keine Beispiele finden. Sondern einer aus der Gruppe macht eine veränderung am Code. Die gegen die Syntax Regeln verstößt. Das erkennt Eclipse und zeigt euch eine Fehlermeldung an. Diese soll nun der Rest der Gruppe lesen und versuchen herauszufinden Was geändert wurde und wie es richtig geht.\\
Vorschläge was geändert werden sollte:
\begin{itemize}
\item Lösch ein Semikolon
\item Lösch eine Klammer oder Füge ein Hinzu. Sowohl ( als auch \{
\item Mach aus einem Großbuchstaben einen klein Buchstaben oder umgekehrt. Versucht es mit Namen und auch mit Schlüsselworten wie class oder new.
\item Ersetz ein " durch ein '.
\item Lass ein " oder ein weg.
\item verschiebe eine Zeile aus der main in den Bereich außerhalb der main.
\item Initalisiere ein Objekt von einer Klasse die nicht existiert.
\item Bennen etwas (nicht main) um und verwende im neuem Namen ein Leerzeichen.
\item Lösche ein new.
\item (Optional) finde selber etwas was nicht erlaubt ist.
\end{itemize}
Vorschläge was geändert werden sollte:
\begin{itemize}
\item Lösch ein Semikolon
\item Lösch eine Klammer oder Füge ein Hinzu. Sowohl ( als auch \{
\item Mach aus einem Großbuchstaben einen klein Buchstaben oder umgekehrt. Versucht es mit Namen und auch mit Schlüsselworten wie class oder new.
\item Ersetz ein " durch ein '.
\item Lass ein " oder ein weg.
\item verschiebe eine Zeile aus der main in den Bereich außerhalb der main.
\item Initalisiere ein Objekt von einer Klasse die nicht existiert.
\item Bennen etwas (nicht main) um und verwende im neuem Namen ein Leerzeichen.
ruffdd marked this conversation as resolved.
Show resolved Hide resolved
\item Lösche ein new.
\item (Optional) finde selber etwas was nicht erlaubt ist.
\end{itemize}
\begin{Infobox}[main]
Die main muss immer main heißen. Denn sie ist der Startpunkt, also der Erste Code der ausgeführt wird wenn das Programmstartet. Ohne main kannst du kein Programm starten.
\end{Infobox}
\end{enumerate}
Loading