SarahK. unregistriert
 |
|
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 |
|
|
|
|
| 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 |
|
|
SarahK. unregistriert
 |
|
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 |
|
|
|
|
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 |
|
|
SarahK. unregistriert
 |
|
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 |
|
|
 |
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
 |
|
| 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 |
|
|
 |
|
|
| 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 |
|
|
SarahK. unregistriert
 |
|
|
10.01.2015 16:12 |
|
|
SarahK. unregistriert
 |
|
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
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
 |
|
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 |
|
|
SarahK. unregistriert
 |
|
Klar darfst du
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
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
 |
|
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 |
|
|
SarahK. unregistriert
 |
|
Ich finde den Studiengang sehr cool, da er einfach eine Mischung aus Informatik und Kreativität ist.´:-)
|
|
11.01.2015 15:03 |
|
|
|