Autor Beitrag
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Fr 10.12.21 08:29 
user profile iconOldCat hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
Ich will sehen, ob unser angehender Meister-Programmierer mitdenkt :D


Oh... bitte macht euch nicht über mich lustig. Ich komme mir eh schon total minderbemittelt vor und wundere mich, dass ihr überhaupt noch auf meine Probleme eingeht...


Das haben wir auch nicht, ganz im Gegenteil. Ich habe meinen Code absichtlich mit Fehlern gespickt, die natürlich sofort aufgefallen sind. Doch sind sie auch Dir aufgefallen ?

Aber nun verdaue erst mal den Code von @Th69 :D

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 10.12.21 09:17 
Da ich gestern nicht so viel Zeit hatte (vor meiner 3. Impfung), ist mir gerade noch eingefallen, daß man die Operatorabfrage-Schleife besser so schreiben sollte:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
while (true)
{
    op = int.Parse(Console.ReadLine());
    Console.WriteLine($"You chose: {op}");

    if (op >= 1 && op <= 4)
        break;

    Console.WriteLine("Your input is invalid. Try again, with numerals 1 - 4.");
}

(ist kürzer und einfacher zu lesen)

Und schon mal als Ausblick für OldCat, wie man den Code exception-sicher macht (damit das Programm nicht beendet wird, wenn der Anwender keine Zahl eingibt):
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if (int.TryParse(Console.ReadLine(), out op))
{
  // ok: in op is the converted value
}
else
{
  // error: not an integer
}
OldCat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77

Win 10 Pro x64
C# (VS 2019), (VS 2022)
BeitragVerfasst: Fr 10.12.21 12:57 
Zitat:
user profile iconOlafSt Das haben wir auch nicht, ganz im Gegenteil.

Das kaufe ich euch nicht ab *lach* :P

Zitat:
Ich habe meinen Code absichtlich mit Fehlern gespickt, die natürlich sofort aufgefallen sind.

Das ist gemein :wink: Aber jetzt verstehe ich, warum das alles so verwirrend ist. Ihr linkt mich :P , um zu sehen, wie ich darauf reagiere. Als Asperger muss ich erstmal auf so eine Idee kommen :D . Und ich wundere mich die ganze Zeit, warum die Vorschläge mich so verwirren... Für mich galt bis zu diesem Augenblick, das alles, was ihr mir hier anbietet richtig und unschlagbar ist...

Zitat:
Doch sind sie auch Dir aufgefallen ?

Nein, ich denke nicht ... :oops: ... Solltest Du das hier meinen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
namespace MiniCalculator
{
    internal class Program
    {
        static void Main()
        {
            MyCalculationClass myCalc = new MyCalculationClass();
            //Abfrage der Eingabewerte hier
            myCalc.AskValues();  //Ich sage jetzt schon, das das NICHT funktionieren wird
            myCalc.AskOperator();
            //usw. usf.
        }
    }
}

Dann hat es mich einfach verwirrt, und ich dachte mir: Nee, so werd ich das nicht schreiben 8)
Siehe auch mein Anfängerstatement zur Main() Methode in Konsolenapps.

Th69 hat folgendes geschrieben:
Und schon mal als Ausblick für OldCat, wie man den Code exception-sicher macht

Dazu werde ich mal schauen, wie ich es schreiben würde...

Moderiert von user profile iconTh69: C#- durch Quote-Tags ersetzt
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Fr 10.12.21 16:41 
user profile iconOldCat hat folgendes geschrieben Zum zitierten Posting springen:
Aber jetzt verstehe ich, warum das alles so verwirrend ist.

Haben wir nicht - und soweit ich das in Erinnerung habe, war das bisher der einzige "Test".
Außerdem stand im "Test"-Code ja auch, dass das so nicht funktioniert - typisch Pseudocode eben.

user profile iconOldCat hat folgendes geschrieben Zum zitierten Posting springen:
Als Asperger muss ich erstmal auf so eine Idee kommen.

Du kannst das auch noch weitere 13 Mal wiederholen, aber es wird dir nicht helfen :P

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
namespace MiniCalculator
{
    internal class Program
    {
        static void Main()
        {
            MyCalculationClass myCalc = new MyCalculationClass();
            //Abfrage der Eingabewerte hier
            myCalc.AskValues();  //Ich sage jetzt schon, das das NICHT funktionieren wird
            myCalc.AskOperator();
            //usw. usf.
        }
    }
}

Schau dir den Code doch mal an und überlege, was er tut bzw. tun sollte.
Und die zwei Methoden - wie heißen sie, was sollten sie tun und was nicht?
Und dann versuch die mal zu implementieren, aber wichtig: Beachte das, was Du vorher festgestellt hast, was die Methode tun darf und was nicht.

Aber wie schon im Code steht:
Zitat:
Ich sage jetzt schon, das das NICHT funktionieren wird

Warum, das wirst Du schon herausfinden, wenn Du versuchst, sie zu implementieren.
OldCat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77

Win 10 Pro x64
C# (VS 2019), (VS 2022)
BeitragVerfasst: Fr 10.12.21 17:02 
Zitat:
Schau dir den Code doch mal an und überlege, was er tut bzw. tun sollte.
Und die zwei Methoden - wie heißen sie, was sollten sie tun und was nicht?


Es wird in der Main() Methode ein Objekt names myCalc erstellt. Dieses Objekt ist eine Instanz der MyCalculationClass. Diese Klasse gibt es in meinem Code nicht. Daher kann sie auch nicht funktionieren. Die Bezeichnung "Class" ist darüber hinaus redundant. Die Klasse hätte genausogut auch MyCalculation heißen können.

Anschließend wird über das Objekt myCalc die Methode AskValues() aufgerufen. Diese Methode gibt es in meinem Code nicht. Also kann es nicht funktionieren. Danach wird über das Objekt myCalc die Methode AskOperator() aufgerufen. Diese Methode gibt es in meinem Code auch nicht, also kann auch sie nicht funktionieren.

Zu guter Letzt, selbst wenn ich diese Methoden hätte (ich könnte sie natürlich schreiben, bzw. meine Gegenstücke umschreiben) kann der Aufruf der Methoden nicht funktionieren, da es in der Main() Methode diese Methoden nicht gibt. Möglicherweise gibt es sie in der Klasse MyCalculationClass, aber dann müsste der Aufruf myCalc.MyCalculationClass.Methode xy() heißen.

Nur ... weiter helfen tut mr das alles nicht :nixweiss:

Es sei denn, ich bin zu blöd?? :nixweiss:
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Fr 10.12.21 18:19 
Zitat:
Die Bezeichnung "Class" ist darüber hinaus redundant. Die Klasse hätte genausogut auch MyCalculation heißen können.

Würde ich so unterschreiben, aber darum ging's mir gar nicht.

Und dass es sie bei dir noch nicht gibt, ist klar.
Mir ging es darum, wie die Methoden heißen, was Du anhand der Namen erwarten würdest, was sie tun und wie man es implementiert.

Zitat:
ich könnte sie natürlich schreiben, bzw. meine Gegenstücke umschreiben

Ersteres (schreiben, nicht umschreiben) - ist bei sowas oft klüger, weil man sich dann nicht vom alten Code "ablenken" lässt und direkt etwas mehr Übung bekommt.

Zitat:
Möglicherweise gibt es sie in der Klasse MyCalculationClass, aber dann müsste der Aufruf myCalc.MyCalculationClass.Methode xy() heißen.

Nein, ich weiß auch nicht, wo Du das her hast.
Der Code von OlafSt ist schon korrekt so, zumindest technisch. Nur bei der Implementierung wird es schwierig, weil die Methoden, so wie sie da stehen, einfach nicht ausreichen.
Also versuch sie zu implementieren, ohne dass sie dabei mehr tun, als der Name vermuten lassen würde (das schließt auch darin aufgerufene Methoden ein).
Und das meine OlaftSt: Das wird dir nämlich nicht gelingen, nicht ohne die Methoden-Signatur und die Aufrufe anzupassen - wie Du es anpassen musst, das solltest Du herausfinden.

So langsam glaube ich aber, dass Du kein Verständnisproblem hast (bzw. nicht nur), sondern einfach die Grundlagen fehlen.
Es hat noch nie jemandem geholfen, einfach anzufangen und ohne Grundwissen von einem Problem zum Nächsten zu stolpern, bis am Ende irgendwas bei raus kommt.
So kann man zwar auch C# lernen, aber es dauert sehr, sehr viel länger und ist für alle Beteiligten sehr viel anstrengender - und dein Wissen ist am Ende immer noch lückenhaft.
Oder schätze ich die Situation falsch ein?

Es gibt gute Bücher, die alles Nötige erklären, wie z.B. "C# 8 mit Visual Studio 2019" von Andreas Kühnel - ich hab die alte Version von 2010 durchgearbeitet.
Du solltest auf jeden Fall die 2019er Variante nehmen, einfach weil sich seit 2016 wirklich sehr viel getan hat.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 10.12.21 18:57 
Sorry. Ich hab den philosophischen Freitags Blues ;)

Zitat:
Es hat noch nie jemandem geholfen, einfach anzufangen und ohne Grundwissen von einem Problem zum Nächsten zu stolpern, bis am Ende irgendwas bei raus kommt.
So kann man zwar auch C# lernen, aber es dauert sehr, sehr viel länger und ist für alle Beteiligten sehr viel anstrengender - und dein Wissen ist am Ende immer noch lückenhaft.
Oder schätze ich die Situation falsch ein?


Ist vermutlich eine Typfrage bezüglich des Lernenden. Ich lerne so. Lernen ist für mich erfolgreich vorwärts scheitern ;)
An meinen Fehlern lerne ich mehr als an meinen Erfolgen. In einem Buch lerne ich erfolgreich Programme nachschreiben, den Erkenntnisgewinn dabei sehe ich aber eher mager. Ich muß wissen warum die anderen denkbaren Wege jenseits der gezeigten Lösung nicht funktionieren. Ich will später echte Probleme lösen keine "Buch" oder "Beispiel" Probleme und gegenüber neuen Problemen muß ich primär Wissen was nicht funktioniert um dann im Restbereich des Möglichen die Lösung zu suchen.

Oder ein anderes Bild. Ortskenntnis ist wenn man die anderen Wege, auch Sackgassen, kennt. Wenn man nur den einen richtigen Weg kennt und da ist doch mal eine Baustelle hat man verloren. Ist wohl ein Bild für ältere Menschen die noch Wissen wie sowas ohne Navi ging ;)

Oder noch ein anderes Bild (mit einem Bild) um ein guter Maler zu werden reicht es nicht sich einen van Goch anzusehen ich muß malen. Und wenn am anfang nur ein Strichmännchen rauskommt ja dann ist es halt nur ein Strichmännchen. Der Erkenntnisgewinn wie man malt ist aber immer noch besser als beim betrachten des van Goch.

Hier ist glaube ich eher das Problem das ein Forum da an seine Grenzen stößt. Das was wir sagen ist bestimmt oft hilfreich aber man muss das auch interpretieren können und dazu brauch man eigentlich bereits die Fähigkeiten die er ja gerade erst versucht zu erlangen und der Kommunikationsweg ist da einfach sehr sehr lang und der Groschen fällt dann halt später.

Das Beispielprojekt von TH69 sehe ich in der gleichen Ecke. Er sieht jetzt eine vermutlich gute richtige Lösung das Wissen warum die wie entstanden ist fehlt aber weiterhin.
Den Weg zu zeigen wie man von der Idee zur Lösung kommt und warum man wie beim schreiben abgebogen ist fehlt. Wir können hier nur regelmäßig Feedback geben und so versuchen zu lenken bis der Groschen fällt. Ähnlich, aber schwieriger, als als Tutor daneben zu sitzen. Führt hoffentlich dann aber dazu das ein anderes ähnliches Problem leichter gelöst werden kann. Weil das gewohne Wissen wie man zur Lösung kommt dann auch anwendbar ist. Und nicht weil im nächsten Problem aus Taschenrechner jetzt vielleicht ein Einheitenconverter wird das Schulterzucken ausbricht.
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Fr 10.12.21 19:31 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Ist vermutlich eine Typfrage bezüglich des Lernenden.

Ne, eher eine Frage, worauf man es bezieht ^^

Ich meine nicht die Frage, wie man etwas lösen kann und ob man das auch sollte, sondern die blanken Grundlagen, wo es kein "könnte", "sollte" oder "würde" gibt.
Du kannst z.B. keine OOP verstehen und was sie bringt, wenn Du nicht weißt, wie man Klassen und Methoden benutzt.
Klar, es geht auch ohne dieses Grundwissen, aber damit stellst Du dir halt selber ein Bein. Hier sollte man mMn. vorarbeiten, um es danach deutlich leichter zu haben.

Bei komplexeren Themen (z.B. die OOP selbst) gebe ich dir aber Recht: Das nach dem Lehrbuch zu lernen, liegt nicht jedem.
Ich bevorzuge meist eine Mischvariante: Nachlesen, wie man es machen "sollte" und dann selber experimentieren und dabei ggf. scheitern.
Es kommt immer wieder vor, dass ich etwas versuche und einfach nicht begreife, warum es nicht geht - bis ich dann feststelle, in der Doku steht ja, dass genau das nicht geht :D Hätte ich vorher in die Doku geschaut, hätte ich mir sehr viel Zeit und Nerven sparen können.

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Hier ist glaube ich eher das Problem das ein Forum da an seine Grenzen stößt. Das was wir sagen ist bestimmt oft hilfreich aber man muss das auch interpretieren können und dazu brauch man eigentlich bereits die Fähigkeiten die er ja gerade erst versucht zu erlangen und der Kommunikationsweg ist da einfach sehr sehr lang und der Groschen fällt dann halt später.

Das drückt es vermutlich besser aus, als mein Kommentar dazu - auch wenn die Aussage nicht exakt gleich ist.
OldCat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77

Win 10 Pro x64
C# (VS 2019), (VS 2022)
BeitragVerfasst: Fr 10.12.21 20:50 
Zitat:
Möglicherweise gibt es sie in der Klasse MyCalculationClass, aber dann müsste der Aufruf myCalc.MyCalculationClass.Methode xy() heißen.

Huch ja, ein Denkfehler ... :lol:

Zum Thema, wie wir in einem Selbststudium am Besten Programmieren lernen, ist reines Nachprogrammieren definitiv nicht ausreichend. Denn genau das habe ich bisher gemacht: Bücher lesen und Nachprogrammieren. Von Anfang an wollte ich Aufgaben haben. Mein erstes Buch, mit dem meine Reise begann war (und ist) das Buch C# Programmieren für Einsteiger, Michael Bonacina. Gut ist: Es gibt einem ein paar Mini-Aufgaben am Ende eines jeden Kapitels. Somit programmiert man sogar nicht nur nach. Sondern man kann schauen, ob man auch verstanden hat, was man zuvor nachprogrammiert hat. Das Buch hat aber deutliche Schwächen: CamelCase, PascalCase, und co. werden nicht erwähnt. Auch Zeichenfolgeninterpolation oder ausführliche Bezeichner werden nicht erwähnt.

Noch während ich mich durch die ersten Kapitel hangelte, entdeckte ich Microsoft.learn für mich. Es ist ähnlich aufgebaut: Es wird einem via Modul ein Thema erklärt, am Ende muss man Aufgaben meistern, die die Module zum Thema haben. Die Module sind Teil von Lernpfaden. Komplett durchgearbeitet habe ich den Lernpfad "Erste Schritte". Weitere Lernpfade habe ich angefangen (Hinzufügen von Logik zu Ihren Anwendungen mit C#, Arbeiten mit Daten in C#, Erstellen von .NET-Anwendungen mit C#). Microsoft.learn kann ich als Einstieg in die Materie wirklich empfehlen. Hier lernte ich ne Menge über die Syntax, Escapezeichensequenzen, Literale versus Variablen, Zeichenfolgeninterpolation, Ausführliche Bezeichner, etc.
Während ich mich durch den ersten Lernpfad lernte, kaufte ich mehr Bücher: Einstieg in C# mit Visual Studio 2019: Ideal für Programmieranfänger, und Visual C# 2019 – Grundlagen, Profiwissen und Rezepte. Diese Bücher habe ich mal kurz überflogen, schaue manchmal was nach. Aber "Durcharbeiten" fand hier nicht statt.

Dann entdeckte ich auf Youtube Michael Hadley von der Columbia University of Art, der dort Playlists zu Verfügung stellt. Ich begann seine Playlist "Introduction to Programming in C#". Dort habe ich ca. die Hälfte angesehen und nachgearbeitet. Dazu habe ich mir dann noch das Buch UML 2.5: Das umfassende Handbuch. besorgt. Sodass ich wenigstens grundlegende Klassendiagramme schreiben kann...

Und in diesem Prozess kam ich zu euch.

Ich weiß nicht, was ihr im Kopf habt, wenn ihr von Grundlagen sprecht. Die nicht-OOP Basics von "Was sind Datentypen", "Was ist der Unterschied zwischen Literale und Variablen", "Was sind Namespaces, Klassen und Methoden", "If elseif else", "Switch case", And OR Operatoren, do while, while, for und foreach Schleifen, etc. sind mir bekannt, bzw. kann/könnte ich nutzen.
OOP Paradigma scheint mir ganz offensichtlich Schwierigkeiten zu bereiten.

Was ich allerdings neben all dem sagen wollte, ist:

Hier, durch euch, habe ich eine x mal steilere Lernkurve hingelegt, als die Prozesse zuvor! :flehan: Daher ist mir hier bewusst gewodern, wie wichtig es ist, nicht einfach für sich als Quereinsteiger mittleren Alters (41) ein Selbstudium ganz alleine zu machen. Man lernt wirklich nur halb so viel :wink:

PS: Das Buch "C# 8 mit Visual Studio 2019" werde ich mir besorgen ^_^ Leider wird das erst im Februar was, bis dahin ist kein Budget frei.

Aktuell versuche ich den Code von Th69 zu verstehen. Habe ihn ausgedruckt, vergleiche ihn Zeile für Zeile mit meinem, und schreibe das ganze in eine Texdatei.
OldCat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77

Win 10 Pro x64
C# (VS 2019), (VS 2022)
BeitragVerfasst: Sa 11.12.21 16:03 
Zitat:
user profile iconPalladin007 So langsam glaube ich aber, dass Du kein Verständnisproblem hast (bzw. nicht nur), sondern einfach die Grundlagen fehlen.

Das ist sehr gut möglich! Habe ja in etwa angegeben, wo ich stehe.

Könntest Du vielleicht mir hier mal in Kurzform auflisten, was alles zu den Grundlagen gehört? Nur, damit wir dieses Problem aus der Welt schaffen können. Dann wäre die Kommunikation schon mal besser, wenn ich die Grundlagen erlernt habe.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 11.12.21 16:59 
Vllt. fehlt dir auch eher ein Grundverständnis der OOP? Du könntest dazu mal das OpenBook Objektorientierte Programmierung anschauen.

Für diesen Beitrag haben gedankt: OldCat
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Sa 11.12.21 18:56 
user profile iconOldCat hat folgendes geschrieben Zum zitierten Posting springen:
Könntest Du vielleicht mir hier mal in Kurzform auflisten, was alles zu den Grundlagen gehört?

Kann ich nicht - zum Einen würde es den Rahmen sprengen, zum Anderen würde ich garantiert etwas vergessen.

Dafür gibt es ja Bücher und das ist auch einer der großen Vorteile.
Von "Visual C# 2012" weiß ich, dass die ersten Kapitel eine gute Idee sind.
OOP wird auch erklärt, aber um beurteilen zu können, wie gut man das versteht, ist das mir schon zu sehr ins Fleisch übergegangen :D
Wenn Du die alte (dafür kostenlose) Version liest, musst Du bloß darauf achten, dass Angaben zum Framework oder VisualStudio nicht mehr aktuell sind - die C#-Grundlagen sind aber unverändert.
Und ja, es ist ein Buch - man sollte es auch nicht als "wie man etwas tun sollte" verstehen, sondern als "wie man etwas tun kann" - es erklärt die Syntax und wie man sie benutzt.

Das von Th69 verlinkte OOP-Buch kenne ich nicht, aber meiner Erfahrung nach ist beim Thema OOP besser, je mehr man dazu liest.
Es gibt zig Wege, die Prinzipien zu erklären und zig Meinungen, wie man es interpretieren kann - mit der Zeit setzt sich dann ein Überblick zusammen und der ist sehr viel wert.
Bei mir hat's auch seine Zeit und verschiedene Sichtweisen gebraucht.
OldCat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77

Win 10 Pro x64
C# (VS 2019), (VS 2022)
BeitragVerfasst: So 12.12.21 15:41 
Zitat:
user profile iconTh69Vllt. fehlt dir auch eher ein Grundverständnis der OOP? Du könntest dazu mal das OpenBook Objektorientierte Programmierung anschauen.

Da bin ich mir inzwischen sicher. Ich habe ooP nicht verstanden. In meinem ersten Thema hier im Forum kam doch auch schon der Verdacht auf, dass ich ooP nicht verstanden habe:

Verstehe das Keyword 'static' nicht eindeutig.

Werde mir erstmal das Buch "Objektorientierte Programmierung von Bernhard Lahres, Gregor Rayman" durchlesen.
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: So 12.12.21 16:00 
Ich erinnere mich, dass die OOP-Erklärung im "Java ist auch eine Insel"-Buch sehr gut war. Das Buch geht natürlich noch sehr viel weiter, ich meine nur den OOP-Teil.
Ist aber keine Kaufempfehlung, doch wenn jemand in deinem Umfeld es hat - schau doch mal rein. Oder frag in der Schule/Berufsschule/Uni, irgendwer wird das schon haben.
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Mo 13.12.21 09:19 
Gerade was das Lernen angeht, habe ich in all den Jahren eine Sache festgestellt, die auch bei den allermeisten meiner Kollegen, aktuell wie vergangen, absolut zutreffend ist bzw. war:

Es geht nichts über selbst erarbeitetes Wissen. Dieser Moment, wo man gesagt bekommt "das wird so nicht funktionieren", man dann überlegt wieso nicht; herumprobiert;plötzlich die Lösung vor sich hat und das berühmte Licht im Kopf angeht: "Ja klar, darum geht das nicht" oder "jetzt kapier ich, wofür das gut ist" - das in diesem Moment gelernte gräbt sich um vieles tiefer in das Gedächtnis ein, als jede Zeile Code, die man liest, jede Zeile in einem Buch, jedes Video, das man sieht.

Darum schreibe ich auch nie die ganze Lösung hin - daraus lernt man nicht viel. Mein kleines Programm, das ich da für OldCat hingebastelt habe, sollte eben genau dies bewirken: Von dem, was ich da schrieb, ausgehend weiter herumprobieren. Was zu probieren ist, hatte ich schon geschrieben (nämlich das das nicht funktionieren wird).

Also sollte auf eigene Faust eine Methode implementiert werden, die es richtig macht. Und genau dieses "selbst implementieren" ist der Lerninhalt. Programmieren besteht nicht nur aus dem Befolgen von Formalien, von Syntax und Code-Styleguides. Der größte Teil daran ist kreativ - nämlich eine Lösung für ein Problem zu finden. Doch dies kann man nur schwer aus Büchern lernen.

Nach wie vor bin ich der Ansicht, ein Pair Programming, wo man OldCat mal zeigt, wie man an so ein Problem herangeht, sehr nützlich und hilfreich wäre. Ich denke nicht, das OldCat hier eine Hausaufgabe gelöst haben will, dafür dauert das schon zu lange ;)

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
OldCat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77

Win 10 Pro x64
C# (VS 2019), (VS 2022)
BeitragVerfasst: Di 14.12.21 10:06 
Das ihr die Hausaufgaben für mich macht, ist ganz sicher nicht mein Anliegen. In keinem meiner Threads habe ich darum gebeten für mich ein Problem zu lösen. Sondern ich habe immer nur Fragen zu einem bestimmten Sachverhalt gehabt. Ich denke Fragen zu beantworten ist nicht "Hausaufgaben für andere zu machen".
Zwar hat Th69 für mich einen Taschenrechner programmiert und dafür bin ich ihm auch dankbar. Aber darum gebeten hatte ich im Umkehrschluss auch nicht. Dann stellt sich auch noch die Frage, ob Th69 wirklich meine Hausaufgaben gemacht hat. Ich denke nicht. Denn: Er hat mir lediglich eine Referenz zu meiner schon gemachten Hausafgabe (meinen Quellcode zum Thema) bereit gestellt.

Kurzum: Ich bin hier, um euch Fragen zu stellen, die ich gerne beantwortet haben würde, da Bücher nicht antworten. Bücher "reden" zwar, antworten aber nicht, wenn man eine Frage hat.
Ich bin hier, damit ihr mir was beibringt, aber nicht, damit ihr meine Hausaufgaben macht ;)

Zitat:
user profile iconOlafSt Nach wie vor bin ich der Ansicht, ein Pair Programming, wo man OldCat mal zeigt, wie man an so ein Problem herangeht, sehr nützlich und hilfreich wäre.
Sag mir wann und wo, und vor allem wie :mrgreen: und ich bin dabei.
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Mi 15.12.21 08:47 
user profile iconOldCat hat folgendes geschrieben Zum zitierten Posting springen:
Das ihr die Hausaufgaben für mich macht, ist ganz sicher nicht mein Anliegen. In keinem meiner Threads habe ich darum gebeten für mich ein Problem zu lösen. Sondern ich habe immer nur Fragen zu einem bestimmten Sachverhalt gehabt. Ich denke Fragen zu beantworten ist nicht "Hausaufgaben für andere zu machen".


Du wärst überrascht, wie oft das vorkommt: Da wird lieblos irgendein Text hingerotzt, der vor Rechtschreibfehlern nur so strotzt. Dann ist es eine Aufgabe, die man mit 4 Stunden Videokurs auf Youtube lösen könnte. Und drunter steht dann plötzlich fehlerfrei: Wäre toll wenn ihr mir helfen könntet. Klassische "ich hab in Informatik 3 Wochen lang nur aufm Handy gedaddelt und jetzt blick ich nix"-Hausaufgabenbettelei. Hab ich bei dir nicht gesehen, nur deshalb habe ich überhaupt ein Wort geantwortet ;)

Zitat:

Zwar hat Th69 für mich einen Taschenrechner programmiert und dafür bin ich ihm auch dankbar. Aber darum gebeten hatte ich im Umkehrschluss auch nicht. Dann stellt sich auch noch die Frage, ob Th69 wirklich meine Hausaufgaben gemacht hat. Ich denke nicht. Denn: Er hat mir lediglich eine Referenz zu meiner schon gemachten Hausafgabe (meinen Quellcode zum Thema) bereit gestellt.


Ich denke, @Th69s Intention war eine andere: Nicht, dich loszuwerden, dafür braucht man sich nicht die Mühe zu machen und einen Taschenrechner programmieren :D Das geht einfacher. Ich denke eher, das sollte zur Anschauung dienen, wie man so ein Problem angeht und wie eine mögliche Lösung aussieht. Aus dieser kann man enorm viel herausziehen und lernen - ist aber schwierig, wenn viele der Basics noch fehlen.

Zitat:

Kurzum: Ich bin hier, um euch Fragen zu stellen, die ich gerne beantwortet haben würde, da Bücher nicht antworten. Bücher "reden" zwar, antworten aber nicht, wenn man eine Frage hat.
Ich bin hier, damit ihr mir was beibringt, aber nicht, damit ihr meine Hausaufgaben macht ;)

Darum reden wir ja noch mit Dir ;)

Zitat:
Zitat:
user profile iconOlafSt Nach wie vor bin ich der Ansicht, ein Pair Programming, wo man OldCat mal zeigt, wie man an so ein Problem herangeht, sehr nützlich und hilfreich wäre.
Sag mir wann und wo, und vor allem wie :mrgreen: und ich bin dabei.


Dazu schicke ich mal eine PN, wie ich mir das so vorstelle. Bitte beachten, wir alle haben ein Leben, also einen Job und private Verpflichtungen. Kann also einen oder zwei Tage dauern. In der Zwischenzeit findest du heraus, was PN ist und wie es funktioniert. Und du bringst dein Headset zum laufen, wenn es nicht wegen CoD oder WoW ohnehin schon funktioniert :D Cam wäre nett, ist aber nicht zwingend.

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.

Für diesen Beitrag haben gedankt: OldCat
OldCat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77

Win 10 Pro x64
C# (VS 2019), (VS 2022)
BeitragVerfasst: Mi 15.12.21 18:31 
Zitat:
Dazu schicke ich mal eine PN, wie ich mir das so vorstelle. Bitte beachten, wir alle haben ein Leben, also einen Job und private Verpflichtungen. Kann also einen oder zwei Tage dauern. In der Zwischenzeit findest du heraus, was PN ist und wie es funktioniert. Und du bringst dein Headset zum laufen, wenn es nicht wegen CoD oder WoW ohnehin schon funktioniert :D Cam wäre nett, ist aber nicht zwingend.


Eine PN an Dich ist raus gegangen. :dance2:
OldCat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77

Win 10 Pro x64
C# (VS 2019), (VS 2022)
BeitragVerfasst: Di 21.12.21 16:47 
Hey ihr lieben :beer:

Derzeit bin ich ja damit geschäftigt, OOP noch einmal wesentlich genauer unter die Lupe zu nehmen. Ansich wollte ich mit Beiträgen in diesem Thread warten, bis ich mir alles angeeignet habe, was meine Bücher zum Thema OOP hergeben, bevor ich Fragen bezüglich des Quellcodes von Th69 stelle.

Dennoch wage ich einmal eine Frage, dessen Antwort ich in meinen Büchern nicht fand:

Im .cs Modul "Applikation.cs" hat user profile iconTh69 folgende Syntax geschrieben, die ich bis dato noch nie gesehen habe und auch daran scheitere, sie mir selbst zu erklären:

In dieser Datei schreibt Th69 zunächst die "Application Klasse".

Darunter schreibt Th69 eine UserInputs Klasse, die nur Felder definiert:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
public class UserInputs
        {
            public double Number1; { get; set; }
            public double Number2; { get; set; }
            public int Operator; { get; set; }
        }


Und jetzt kommt die Stelle, die ich nicht verstehe:

ausblenden volle Höhe C#-Quelltext
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:
 public static UserInputs Input()
        {
            Console.WriteLine("Please enter your first number: ");
            double number1 = double.Parse(Console.ReadLine());
            Console.WriteLine($"You chose: {number1}");

            Console.WriteLine("Please enter your second number: ");
            double number2 = double.Parse(Console.ReadLine());
            Console.WriteLine($"You chose: {number2}");

            Console.WriteLine("Choose your operator by number and hit enter:");
            Console.WriteLine("> 1.) Addition");
            Console.WriteLine("> 2.) Subtraction");
            Console.WriteLine("> 3.) Multiplication");
            Console.WriteLine("> 4.) Division");

            int op = 0;

            while (true)
            {
                op = int.Parse(Console.ReadLine());
                Console.WriteLine($"You chose: {op}");

                if (op < 1 || op > 4)
                {
                    Console.WriteLine("Your input is invalid. Try again, with numerals 1 - 4.");
                    continue;
                }

                break;
            }

            return new UserInputs() { Number1 = number1, Number2 = number2, Operator = op };
        }


Folgendes verstehe ich nicht:
  • Was ist public static UserInputs Input()? Ist es eine statische Klasse, die eine Methode aufruft? Oder ist es eine statische Methode, die eine Klasse aufruft? Oder wie nennt man dieses Konstrukt?
  • Was genau macht: return new UserInputs() { Number1 = number1, Number2 = number2, Operator = op };? Gibt es eine neu erstellte Klasse zurück? Oder was macht es?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 21.12.21 17:17 
Zitat:
Was ist public static UserInputs Input()? Ist es eine statische Klasse, die eine Methode aufruft? Oder ist es eine statische Methode, die eine Klasse aufruft? Oder wie nennt man dieses Konstrukt?


Es ist eine Methode die eine Instanz vom Typ UserInputs zurückgibt.

Zitat:
Was genau macht: return new UserInputs() { Number1 = number1, Number2 = number2, Operator = op };? Gibt es eine neu erstellte Klasse zurück? Oder was macht es?


Es ist eine neu erstellte Instanz der Klasse UserInputs die dann sofort von der Methode zurückgegeben wird ja. Um keinen Konstruktor schreiben zu müssen zur Übergabe der Parameter oder eine weitere lokale Variable zu erfinden um die Instanz in mehreren Aufrufen zusammenzusetzen hat man hier einen sogenannten Initializer benutzt. Das in den geschweiften Klammern dahinter (der Initializer) ist die Zuweisung zu den einzelnen Properties der neuen Klasse und einfach nur weniger Schreibaufwand macht aber ansonsten das gleiche (abgesehen ein paar kleiner Details die aber jetzt nicht wichtig sind).

Moderiert von user profile iconTh69: C#-Tags (im Zitat) hinzugefügt

Für diesen Beitrag haben gedankt: OldCat