Klasse Konto

Neue Frage »

Auf diesen Beitrag antworten »
SarahK. Klasse Konto

Meine Frage:
Hi Leute,

ich hätte noch ein Problem. Erst einmal der Code hierzu:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:

/*Aufgabe 1
(Kontofuehrung.java)
Schreiben Sie eine Klasse Konto, welche folgende Eigenschaften hat: einen Kontoinhaber (nur den
Namen als String), einen Kontostand (als float) und eine Kontonummer (der Einfachheit halber ein
long). Ein Konto wird unter Angabe des Namens des Kontoinhabers, einer Kontonummer und mit dem
Kontostand = 0,0 Euro angelegt. Man kann Geldbeträge einzahlen und abheben. Diese verändern
logischerweise den Kontostand. Ein Kontoauszug kann gedruckt werden, das soll bedeuten, dass
Kontoinhaber, -nummer und der Kontostand am Bildschirm ausgegeben werden.
Wenn die Klasse Konto kompilierbar ist, schreiben Sie eine Klasse Kontofuehrung. In deren main()-
Funktion legen Sie zwei Konten (von Herrn Maier und Frau Mueller) an, initialisieren diese und tätigen
dann ein paar Einzahlung und Abhebungen. Mittels Anschauen des Kontoauszugs können Sie die
Geldbewegungen kontrollieren. */

class Konto{
	String kontoinhaber;
	float kontostand = 0.0F;
	long kontonummer; 
	
	public Konto (String inhaber, float stand, long nummer)	{ //Konstruktor
		inhaber = kontoinhaber; 
		stand = kontostand;
		nummer = kontonummer; 
	}
		void einzahlen (float betrag){
		kontostand = kontostand + betrag;
	}
		void auszahlen (float betrag){
		kontostand = kontostand - betrag;
	}
		void drucken (String kontoinhaber, float kontostand, long kontonummer){
		System.out.println(kontoinhaber);
		System.out.println(kontostand);
		System.out.println(kontonummer);
	}
}

public class Kontofuehrung {
	public static void main (String[]args)
	{
	Konto h = new Konto ();
	h.einzahlen (3.5F);
	h.auszahlen (2.0F); 
	h.drucken(); 
	}
}





Meine Ideen:
In der main - Funktion zeigt er mir zwei Fehler an. Den ersten bei der Erzeugung der Referenz auf Konto.

Den zweiten bei der Methode h.drucken().

Ich bin mir in beiden Fällen nicht sicher, was übergeben werden muss.

Vielen Dank für Eure Hilfe :-)
 
Auf diesen Beitrag antworten »
eulerscheZahl

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
package infoboard;

public class Kontofuehrung {
	class Konto {
		String kontoinhaber;
		float kontostand = 0.0F;
		long kontonummer;

		public Konto(String inhaber, long nummer) { //Kontostand ist zu Beginn 0 und wird nicht an den Konstruktor übergeben
			kontoinhaber = inhaber; //Zuweisung getauscht
			kontonummer = nummer; //ebenso
		}

		void einzahlen(float betrag) {
			kontostand = kontostand + betrag;
		}

		void auszahlen(float betrag) {
			kontostand = kontostand - betrag;
		}

		void drucken() { //Funktionsargumente gelöscht
			System.out.println(kontoinhaber);
			System.out.println(kontostand);
			System.out.println(kontonummer);
		}
	}

	Kontofuehrung() {
		Konto h = new Konto("Name", 123456789);
		h.einzahlen(3.5F);
		h.auszahlen(2.0F);
		h.drucken();
	}

	public static void main(String[] args) {
		new Main(); //in der main kann kein Konto erzeugt werden
	}
}
Auf diesen Beitrag antworten »
SarahK.

Okey, erstmal vielen Dank für die Korrektur. Da sind noch so einige Sachen dabei, wo ich nicht ganz verstehe:

Für was braucht man eigentlich den Konstruktor?

Was passiert hier eigentlich genau?

code:
1:
2:
3:
4:
5:
6:
7:
8:
class Konto {
		String kontoinhaber;
		float kontostand = 0.0F;
		long kontonummer;

		public Konto(String inhaber, long nummer) { //Kontostand ist zu Beginn 0 und wird nicht an den Konstruktor übergeben
			kontoinhaber = inhaber; //Zuweisung getauscht
			kontonummer = nummer; //ebenso


Meiner Vermutung nach ist class Konto der Konstruktor?
Auf diesen Beitrag antworten »
eulerscheZahl

Du musst unterscheiden zwischen einer Klasse und einer Instanz.
Die Klasse sagt nur, dass es Variablen gibt (kontoinhaber, kontostand) und Funktionen (einzahlen, auszahlen).
Wenn du in diese Variablen wirklich etwas reinschreiben willst, brauchst du eine Instanz. Mit Hilfe des Konstruktors kannst du eine Instanz erzeugen.
Er hat die Syntax public Klassenname(optional: Argumente) {...}. Er besitzt keinen Rückgabetyp. Im Konstruktor wird der Speicher für die Instanz reserviert und die Klassenvariablen können befüllt werden, eine Datei geöffnet oder was du eben gerade brauchst.
 
Auf diesen Beitrag antworten »
SarahK.

Verstehe ich es richtig, dass es auch möglich wäre, das folgende zu schreiben?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
public class Kontofuehrung {
	class Konto {
		String kontoinhaber;
		float kontostand = 0.0F;
		long kontonummer;

		public Konto(String kontoinhaber, long kontonummer) { //Kontostand ist zu Beginn 0 und wird nicht an den Konstruktor übergeben
			this.kontoinhaber = kontoinhaber; //Zuweisung getauscht
			this.kontonummer = kontonummer; //ebenso
Auf diesen Beitrag antworten »
eulerscheZahl

Das ist sogar recht üblich.
Auf diesen Beitrag antworten »
SarahK.

Vielen Dank :-)
Auf diesen Beitrag antworten »
Karlito

Zitat:
Original von eulerscheZahl
Das ist sogar recht üblich.


Das ist sogar mehr als üblich. Ein Konto ohne Kontonummer ist nicht konsistent. In der objektorientierten Welt sollte es möglichst so sein, dass ein Objekt immer in einem konsistenten Zustand ist und dass es keine Möglichkeit gibt einen Inkonsistenten Zustand zu erreichen. Darum gilt auch das Geheimnisprinzip, womit der innere Zustand eine Objektes nur durch Akzessoren (getter und setter) manipuliert werden darf. Mit diesen Akzessoren ist es dann möglich den Übergang von einem Konsistenten Zustand in einen Anderen sicher zu stellen.
Eine sehr unschöne Verwirrung stifet das Wort "Konstruktor", da der Konstruktor das Objekt nicht konstruiert. Er initialisiert das Objekt nur und stellt damit den ersten konsistenten Zustand her. Die eigentliche Konstruktion ist die Einheit aus Allokation und Initialisierung. Das wird meistens vom new-Operator umgesetzt.

Ich hoffe ich habe damit keine Verwirrung gestiftet.

Gruß,

Karlito
Auf diesen Beitrag antworten »
eulerscheZahl

Zitat:
Original von KarlitoDarum gilt auch das Geheimnisprinzip, womit der innere Zustand eine Objektes nur durch Akzessoren (getter und setter) manipuliert werden darf.

das habe ich glatt übersehen.
code:
1:
2:
3:
private String kontoinhaber; //private ergänzt
private float kontostand = 0.0F;
private long kontonummer;
Auf diesen Beitrag antworten »
SarahK.

Danke, Karlito für den Hinweis. private hatten wir zu diesem Zeitpunkt noch nicht. (Kann das sein, dass private auch unter den Oberbegriff Kapselung fällt?)
Auf diesen Beitrag antworten »
Karlito

Ja. Wobei genau genommen private nur ein Mittel zur Umsetzung der Kapselung ist. private ist ein Zugriffsmodifikator, der verhindert, dass eine mit private gekennzeichnete Variable von außen zugegriffen werden kann.

Edit: darf ich fragen, was Du studierst?

Gruß,

Karlito
Auf diesen Beitrag antworten »
SarahK.

Klar darfst du großes Grinsen

Ich studiere Medieninformatik im 1. Semester. Ca 80% Programmierung, Mathe und Grundlagen der IT und ungefähr 20% Gestaltung (Webdesign, Fotografie, Film, Benutzeroberflächen in Apps verbessern, usw).
Auf diesen Beitrag antworten »
Karlito

Ah, cool. Ja, Medieninformatik ist schon zu einem großen Teil Informatik, Mehr Gestaltung hat man dann in Kommunikationsdesign u.ä., soweit ich weiß. Viele überrascht es, dass der Mathe/Informatik-Anteil so hoch ist. Ich persönlich finde es gut so, auch wenn ich selbst nicht Medieninformatik studiere.

An der Stelle überrascht mich jedoch ein wenig, wie eure Vorlesung aufgebaut ist und dass das Geheimnisprinzip erst gelehrt wird, nachdem ihr die erste Klasse gebaut habt. Wenn man es einmal falsch gemacht hat, dann prägt es sich ja unter Umständen so ein...

Gruß,

Karlito
Auf diesen Beitrag antworten »
SarahK.

Ich finde den Studiengang sehr cool, da er einfach eine Mischung aus Informatik und Kreativität ist.´:-)
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »