\documentclass[12pt,a4paper,ngerman]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{amsfonts,amssymb,amsmath,listings,color}
\usepackage{hyperref}
\pagestyle{plain}

\subject{\vspace{-3cm}The GAME}
\title{Übungsaufgaben 6}
\subtitle{OOP und Klassen}
\date{}

\definecolor{pblue}{rgb}{0.13,0.13,1}
\definecolor{pgreen}{rgb}{0,0.5,0}
\definecolor{pred}{rgb}{0.9,0,0}
\definecolor{pgrey}{rgb}{0.46,0.45,0.48}

\lstset{language=Java,
	showspaces=false,
	showtabs=false,
	breaklines=true,
	showstringspaces=false,
	breakatwhitespace=true,
	commentstyle=\color{pgreen},
	keywordstyle=\color{pblue},
	stringstyle=\color{pred},
	basicstyle=\ttfamily,
	tabsize=4,
	moredelim=[il][\textcolor{pgrey}]{$$},
	moredelim=[is][\textcolor{pgrey}]{\%\%}{\%\%}
}

\begin{document}
	\maketitle
	
	\paragraph{Aufgabe 1}\mbox{}
	\label{A1}
	Modelliere das Objekt ''Katze'' als Java-Code, also schreibe eine Klasse, mithilfe der nachfolgenden Beschreibung.
	\begin{itemize}
		\item[] Eine Katze \emph{hat} eine Anzahl an Pfoten, Augen, Ohren und ein Gewicht. 	
				Katzen haben von Geburt an Fellfarben.
				Außerdem gibt es entweder den Zustand \emph{tod} oder \emph{lebendig}.
		
		\item[]	Die Katze \emph{kann} laufen und fressen.\\
				Beim Fressen kann ihr eine bestimmte Menge an Futter übergeben werden, wodurch sie schwerer wird.
	\end{itemize}

	\subparagraph{Lösung:}
	\begin{lstlisting}
	public class Katze
	{
		public int amountPaws;
		public int amountEyes;
		public int amountEars;
		
		public double weight;
		
		public String[] furColours;
		
		public boolean isAlive;
		
		public Katze()
		{
			this(4, 2, 2, 5.0, new String[] {"black", "white"}, true);
		}
		
		public Katze(int amountPaws, int amountEyes, int amountEars, double weight, String[] furColours, boolean isAlive)
		{
			this.amountPaws = amountPaws;
			this.amountEyes = amountEyes;
			this.amountEars = amountEars;
			this.weight = weight;
			this.furColours = furColours;
			this.isAlive = isAlive;
		}
		
		public void move()
		{
		}
		
		public void eat(double amountFood)
		{
			this.weight += amountFood;
		}
	}
	\end{lstlisting}
	\newpage
	\paragraph{Aufgabe 2}\mbox{}
	Erweitere die Katze aus \hyperref[A1]{Aufgabe 1}:\\
	Eine Katze verliert Gewicht, je nachdem wie weit sie gelaufen ist.
	Falls die Katze schwerer als 10 kg ist, stirbt sie an den Folgen des Übergewichts (Beachte: Eine tote Katze kann nicht mehr fressen, ...).
	
	\subparagraph{Lösung:}
	\begin{lstlisting}
	public class Katze
	{
		public int amountPaws;
		public int amountEyes;
		public int amountEars;
		
		public double weight;
		
		public String[] furColours;
		
		public boolean isAlive;
		
		public Katze()
		{
			this(4, 2, 2, 5.0, new String[] {"black", "white"}, true);
		}
		
		public Katze(int amountPaws, int amountEyes, int amountEars, double weight, String[] furColours, boolean isAlive)
		{
			this.amountPaws = amountPaws;
			this.amountEyes = amountEyes;
			this.amountEars = amountEars;
			this.weight = weight;
			this.furColours = furColours;
			
			if (weight <= 10.0)
			{
				this.isAlive = isAlive;
			}
		}
		
		public void move(double distance)
		{
			if (isAlive)
			{
				this.weight -= distance / 3;
			}
		}
		
		public void eat(double amountFood)
		{
			if (isAlive)
			{
				this.weight += amountFood;
				
				if (this.weight > 10.0)
				{
					this.isAlive = false;
				}
			}
		}
	}
	\end{lstlisting}
	\newpage
	\paragraph{Aufgabe 3}\mbox{}
	Modelliere das Objekt ''Person'' als Java Klasse vollständig, d.h. versuche dabei alle möglichen Member und Methoden zu finden.
	
	\subparagraph{Lösung:}
	Hier gibt es viel Freiheiten, daher ist unten nur ein Lösungsvorschlag einer Teillösung.
	\begin{lstlisting}
	public class Person
	{
		public String name;
		public String address;
		
		public String sex;
		
		public int age;
		
		public Head head;
		public Arm[] arms;
		public Leg[] legs;
		
		// ...
		
		public void moveArm(int index, double... angle)
		{
		}
		
		public void moveLeg(int index, double... angle)
		{
		}
		
		// ...
		
		public void fart(double loudness)
		{
		}
		
		// ...
	}
	\end{lstlisting}
	\newpage
	\paragraph{Aufgabe 4}\mbox{}
	Modelliere die Member und Methoden des Objekts ''Bankautomat'' als Text. Als Hilfe kannst du die Begriffe \emph{hat} und \emph{kann} verwenden. Danach programmierst du das.

	\subparagraph{Lösung:}
	Ein ''Bankautomat'' \emph{hat} Display, Eingabebereich, Kartenschlitz, Ausgabeschlitz, Tresor, $\dots$\\
	Ein ''Bankautomat'' \emph{kann} Karte einziehen und ausgeben, Geld ausgeben, Eingaben entgegennehmen, Ausgaben auf Display machen, $\dots$
	\begin{lstlisting}
	public class Bankautomat
	{
		public Display display;
		public InputDevice inputDevice;
		public Cardholder cardholder;
		public MoneyOutput moneyOutput;
		public Safe safe;
		
		// ...
		
		public void putCardIn()
		{
		}
		
		public void putCardOut()
		{
		}
		
		public void outputMoney(double amountOfMoney)
		{
		}
		
		public void handleInput()
		{
		}
		
		public void print(String text)
		{
		}
		
		// ...
	}
	\end{lstlisting}

\end{document}
