Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

11

20.01.2014, 14:48

4) void BankKonto :: setKontostand(double Betrag) tut nicht das was man erwarten würde.
Es tut genau das, was man bei einem Konto erwarten würde. Der Name der Methode ist jedoch äußerst schlecht gewählt. Ein "changeBy(x)" oder "transfer(x)" wäre besser gewesen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

12

20.01.2014, 15:08

Noch besser wäre gewesen nur Transfers zu erlauben, indem man erzwingt, dass ein anderes Konto übergeben wird. Aber selbst ein perfektes Beispiel würde ihm nichts bringen, weil er nicht wüsste was es perfekt macht.
Er muss einfach nur sein Buch lesen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Sc4v

Alter Hase

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

13

21.01.2014, 02:05

Es tut genau das, was man bei einem Konto erwarten würde.
Mh mein Prof würde jetzt den Finger heben und meckern ^^ Mit Kenntnis des Programmkontext tut die Methode so gar nicht was man erwarten würde. Die Methode ist Public und ermöglicht uneingeschränkten Schreibzugriff ohne jegliche Authentifizierung und Validierung des Kontostandes: in einer konkreten Anwendung brutal fatal. Ich denke das meinte auch Tankard.


Ein "changeBy(x)" oder "transfer(x)" wäre besser gewesen.
Diese Methodennamen würden bei dem vorhandenem Body absolut gar nicht passen, denn es wird nichts transferiert sondern der Kontostand wird überschrieben. Ein transfer(-199.0) würde dich ganz schön arm machen ^^

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

21.01.2014, 07:13

Dann hätte ich einen DispoKredit von 199€. Wo genau ist jetzt das Problem? Noch nie negative Kontostände gesehen? Das geht nämlich und das nennt man "sein Konto überziehen". Auf meiner Kreditkarte (was auch als Konto geführt wird) stehen regelmäßig negative Zahlen, bis sie am Ende des Monats automatisch vom angeschlossenen Konto ausgeglichen werden.
Natürlich gehört da mehr rein, aber das würde doch wohl bei weitem das Beispiel übersteigen. Dann müssten nämlich auch Kreditrahmen, Zinssätze und weiß der Geier was noch definiert werden. Das sprengt ja wohl jeden Rahmen.

Fakt ist, dass es bei einem Konto deutlich mehr Sinn macht, dass der Betrag auf dem Konto nur *um* einen bestimmten Betrag geändert und nicht fix auf einen bestimmten Wert gesetzt werden kann. Das geht nämlich bei jedem Konto auch nur dann, wenn man vorher den Kontostand abfragt.
Also nein, die Methode tut für ein Konto genau das, was man erwarten würde - im Rahmen dieses Beispiels hier.

Und nochmal nein, Tankard meinte ziemlich sicher, dass ein "+=" bei einem "set" nicht üblich ist. Das ist in diesem Fall aber korrekt. Nur der Name der Methode ist Mist, denn es gibt bei einem Konto eigentlich kein "set", sondern eben nur Ein- oder Auszahlungen, die den Kontostand um einen gewissen Betrag ändern.

Die Methode private zu machen ist ebenfalls Quatsch. Jeder kann eine Lastschrift auf mein Konto tätigen. Jeder! Ungefragt! Ich kann diesen allerdings widersprechen. Auch kann jeder einfach ungefragt Geld auf mein Konto überweisen! Public ist also absolut korrekt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (21.01.2014, 07:20)


15

21.01.2014, 09:39

Irgendwie fast schon amüsant was für eine Diskussion etwas nach sich zieht, was eigentlich nur ein einfaches Beispiel zu einer Klasse sein soll …. weder ein gutes bzw. sinnvolles Design, noch "guter" Code.
Eure Einwände mögen alle richtig sein (vor allem der Sache mit dem setKontostand() muss ich zustimmen, der Name war wirklich schlecht gewählt^^), nur ob das Ganze dann nicht eher weiter weg von einem "einfachen" Beispiel driftet ist wieder was anderes.
Allerdings scheint sich der TE wohl eh verabschiedet zu haben, weshalb das nicht mehr so wichtig sein sollte :)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

21.01.2014, 10:30

In C++11 könnte man das wohl sehr elegant lösen, indem man Geld als Typ repräsentiert, der nur moveable aber nicht copyable ist... :D

Sc4v

Alter Hase

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

17

21.01.2014, 13:02

Dann hätte ich einen DispoKredit von 199€. Wo genau ist jetzt das Problem? Noch nie negative Kontostände gesehen? Das geht nämlich und das nennt man "sein Konto überziehen". Auf meiner Kreditkarte (was auch als Konto geführt wird) stehen regelmäßig negative Zahlen, bis sie am Ende des Monats automatisch vom angeschlossenen Konto ausgeglichen werden.
Natürlich gehört da mehr rein, aber das würde doch wohl bei weitem das Beispiel übersteigen. Dann müssten nämlich auch Kreditrahmen, Zinssätze und weiß der Geier was noch definiert werden. Das sprengt ja wohl jeden Rahmen.

Fakt ist, dass es bei einem Konto deutlich mehr Sinn macht, dass der Betrag auf dem Konto nur *um* einen bestimmten Betrag geändert und nicht fix auf einen bestimmten Wert gesetzt werden kann. Das geht nämlich bei jedem Konto auch nur dann, wenn man vorher den Kontostand abfragt.
Also nein, die Methode tut für ein Konto genau das, was man erwarten würde - im Rahmen dieses Beispiels hier.

Und nochmal nein, Tankard meinte ziemlich sicher, dass ein "+=" bei einem "set" nicht üblich ist. Das ist in diesem Fall aber korrekt. Nur der Name der Methode ist Mist, denn es gibt bei einem Konto eigentlich kein "set", sondern eben nur Ein- oder Auszahlungen, die den Kontostand um einen gewissen Betrag ändern.

Die Methode private zu machen ist ebenfalls Quatsch. Jeder kann eine Lastschrift auf mein Konto tätigen. Jeder! Ungefragt! Ich kann diesen allerdings widersprechen. Auch kann jeder einfach ungefragt Geld auf mein Konto überweisen! Public ist also absolut korrekt.
Du hast den Programmcode von ihm falsch gelesen, ansonsten hättest du recht..
setKontostand macht kein "+=" sondern lediglich ein "="
Deswegen ist der Name der Methode auch korrekt :rolleyes:
Und kein Mensch der Welt darf auf einem Kontostand setKontostand(100.000) aurufen ^^
Das ist der Punkt, warum man eine Methode transfer() einführen würde... Du hast jedoch geschrieben der Methodenname setKontostand ist schlecht gewählt. Diese Aussage beruht jedoch auf der falschen Annahme setKontostand würde ein "+=" verwenden

18

21.01.2014, 13:32

Es war ursprünglich "+=", ich habe das editiert nachdem Tankard angemerkt hat, dass dies nicht dem entspricht was eine setXYZ() Methode normalerweise macht.
Ursprünglich machte die Methode was man bei einem Bankkonto erwarten würde, nun macht sie was man von setXYZ() erwartet.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

19

21.01.2014, 13:38

Übrigens können Banken Geld auch fast aus dem nichts erschaffen: http://www.youtube.com/watch?v=44eVHjyKJhQ
Schadet nicht zu wissen wie unser Geldsystem funktioniert :D
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

20

21.01.2014, 17:45

setKontostand macht kein "+=" sondern lediglich ein "="
Jetzt nicht mehr, aber genau das tat es mal.
Ich wollte das nur nochmal quoten, damit es eindeutig wird.
Es war ursprünglich "+=", ich habe das editiert nachdem Tankard angemerkt hat, dass dies nicht dem entspricht was eine setXYZ() Methode normalerweise macht.
Ursprünglich machte die Methode was man bei einem Bankkonto erwarten würde, nun macht sie was man von setXYZ() erwartet.


Übrigens können Banken Geld auch fast aus dem nichts erschaffen
Nein, können sie nicht. Sie können Giralgeld erschaffen. Giralgeld ist aber kein Geld und genau genommen nicht einmal ein legales Zahlungsmittel. Geld besitzt ein physisches Medium. Münzen oder Scheine. Giralgeld besitzt gar nichts und ist nur virtuell existent, aber nicht real.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige