Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Klasse Konto » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Zum Ende der Seite springen Klasse Konto
Beiträge zu diesem Thema Autor Datum
 Klasse Konto SarahK. 10.01.2015 12:28
 RE: Klasse Konto eulerscheZahl 10.01.2015 12:58
 RE: Klasse Konto SarahK. 10.01.2015 14:51
 RE: Klasse Konto eulerscheZahl 10.01.2015 14:57
 RE: Klasse Konto SarahK. 10.01.2015 15:29
 RE: Klasse Konto eulerscheZahl 10.01.2015 15:35
 RE: Klasse Konto Karlito 10.01.2015 16:14
 RE: Klasse Konto eulerscheZahl 10.01.2015 16:40
 RE: Klasse Konto SarahK. 10.01.2015 16:12
 RE: Klasse Konto SarahK. 11.01.2015 11:35
 RE: Klasse Konto Karlito 11.01.2015 12:01
 RE: Klasse Konto SarahK. 11.01.2015 12:10
 RE: Klasse Konto Karlito 11.01.2015 14:33
 RE: Klasse Konto SarahK. 11.01.2015 15:03

Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
SarahK.
unregistriert
Klasse Konto Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 :-)
10.01.2015 12:28
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
	}
}


__________________
Syntax Highlighting fürs Board (Link)
10.01.2015 12:58 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
SarahK.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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?
10.01.2015 14:51
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

__________________
Syntax Highlighting fürs Board (Link)
10.01.2015 14:57 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
SarahK.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
10.01.2015 15:29
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Das ist sogar recht üblich.

__________________
Syntax Highlighting fürs Board (Link)
10.01.2015 15:35 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
10.01.2015 16:14 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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;


__________________
Syntax Highlighting fürs Board (Link)
10.01.2015 16:40 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
SarahK.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Vielen Dank :-)
10.01.2015 16:12
SarahK.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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?)
11.01.2015 11:35
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
11.01.2015 12:01 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
SarahK.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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).
11.01.2015 12:10
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
11.01.2015 14:33 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
SarahK.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich finde den Studiengang sehr cool, da er einfach eine Mischung aus Informatik und Kreativität ist.´:-)
11.01.2015 15:03
Baumstruktur | Brettstruktur
Gehe zu:
Informatiker Board » Themengebiete » Praktische Informatik » Klasse Konto