Was kommt nach den Grundlagen?



  • Wäre es sinnvoll sich jetzt schon mit GUI Programmierung zu befassen?



  • double-b schrieb:

    Wäre es sinnvoll sich jetzt schon mit GUI Programmierung zu befassen?

    Sinnvoll ist das, worauf du Lust hast. Wenn dich GUI Programmierung interessiert, könnte die WinAPI die richtige Wahl als Einstieg sein.
    Das Tutorial finde ich ganz angenehm:
    http://pronix.linuxdelta.de/C/win32/index.shtml



  • Danke für eure Anworten. Ich werde mich dann mal mit der Windowsprogrammierung
    beschäftigen.



  • Ich weiss nicht, ob WinAPI ein guter Einstieg in die GUI-Programmierung ist. Das Framework ist C und relativ Low-Level (halt die Betriebssystem-Schnittstelle). Eventuell wäre ein GUI-Framework wie Qt, Ultimate++, VCF, gtkmm, etc. oder Artchis algierlib am Anfang geeigneter, weil du dich auf C++ und objektorientierte Dinge wie Design-Patterns konzentrieren könntest.



  • Man kann doch trotzdem die Vorteile der Objektorientierung nutzen, obwohl man
    eine in C geschriebene Schnittstelle benutzt, oder?



  • Ja, sicher. OOP funktioniert auch in C selbst. Aber gewisse Techniken und Design Patterns wirst du nur in C++ antreffen. Und auch wenn du in eigenen Projekten viele von ihnen verwendest, ohne es zu wissen, lernst du einige davon nicht automatisch.

    Aber OOP-Design ist ja nur ein Teil. Die Herangehensweise ist halt je nach Framework und je nach Sprache ziemlich unterschiedlich. Es ist sicher gut viele Varianten zu sehen, sofern man etwas kritisch ist. Teilweise werden Dinge wegen Limitierungen der Sprache (in C, oder in C++ vor 15 Jahren) unnötig umständlich gelöst. Nicht dass du dir solche Dinge aneignest 😉

    Das könntest du aber auch schön verhindern, indem du Bücher wie "Effective C++" oder "Exceptional C++" liest. Das sind oft empfohlene Werke für Fortgeschrittene, die einige Tricks und Fallgruben in C++ ansprechen.



  • Du bist also der Meinung es spricht nichts dagegen sich mit Windows
    Programmierung zu beschäftigen, aber ich sollte mir zusätzlich
    einen guten Stil angewöhnen und mich mit Algorithmen und anderen
    Techniken beschäftigen?



  • Wenn du für Windows entwickeln willst ist es sicherlich nicht schlecht die Grundlagen der WinAPI zu kennen...



  • Nexus schrieb:

    Ja, sicher. OOP funktioniert auch in C selbst. Aber gewisse Techniken und Design Patterns wirst du nur in C++ antreffen. Und auch wenn du in eigenen Projekten viele von ihnen verwendest, ohne es zu wissen, lernst du einige davon nicht automatisch.

    Also um das mal klarzustellen, wenn Leute, wie hier Nexus, sagen, dass man auch in C OOP betreiben kann, dann meinen sie damit, dass man, wenn man es darauf anlegt, gegen jede Sprache kämpfen kann und mit ihr in einer Art und Weise programmieren kann, für die sie nicht gedacht ist.

    Das heißt aber nicht, dass C die Programmiertechniken, die man bei objektorientierter Programmierung einsetzt, in irgendeiner Weise unterstützt. Um es mal ganz klar auszudrücken: C ist nicht für objektorientierte Programmierung gedacht. Und es handelt sich dabei auch in keinster Weise um eine Sprache, mit der man OOP lernen kann.



  • Aber man kann doch beispielsweise die winapi funktionen nutzen, um komfortablere
    C++ Funktionen zu programmieren.



  • dot schrieb:

    Wenn du für Windows entwickeln willst ist es sicherlich nicht schlecht die Grundlagen der WinAPI zu kennen...

    Ich habe mich zwar nie mit WinAPI beschäftigt, aber ich halte das trotzdem einfach mal für Quatsch. 😉

    Warum sollte man sich bei GUI-Programmierung mit Low-Level Kram auseinandersetzen? Was sind die _wichtigen_ Einsichten, die man dadurch gewinnt? Für mich hört sich das so an, als ob man Sachen in Assembler schreiben sollte, weil man sonst nicht versteht, was der Rechner macht. Aber das ist genauso Quatsch.

    Die Einsichten, die man dadurch gewinnen könnte, sollte man sich lieber mit einem guten Buch über die entsprechende Thematik aneignen. Statt Assembler zu lernen, sollte man lieber ein Buch über Computer-Architektur und Design lesen. Und statt WinAPI zu nutzen sollte man vermutlich gar nichts lesen. Ich sehe dazu überhaupt gar keinen Grund.



  • twotime schrieb:

    Theoretisch ja, aber dieses Vorgehen ist wohl total langweilig und mühselig und wahrscheinlich unrealistisch. Und ein Framework lernt man nicht mal so nebenbei, vorallem wenn man das Thema (GUI-Programmierung) vorher noch nicht kennt. Außerdem lernt man auch was über Designpattern, wenn man Frameworks lernt. Wenn man immer nur C++ Konsolenprogrammierung bereit, werden einem die meisten Designpatters auch relativ sinnlos vorkommen. Und 4. würde ich während 1. und 2. machen.

    Ich habe nichts dagegen, dass der Threadersteller sich mit GUI-Programmierung beschäftigt. Aber ich sehe das nur als Anwendungsgebiet, in dem man die Dinge, die man wirklich lernt, ausprobieren kann.

    Klar, ich habe damals auch recht früh mal einen grafischen Taschenrechner und so programmiert. Aber das relevante dabei war nicht, herauszufinden, wie man irgendwelche Buttons realisiert. Das interessante dabei war das, was sich hinter der GUI abgespielt hat. Praktisch das Zusammenspiel der einzelnen Programmkomponenten. Dort liegt die Herausforderung. Die Herausforderung sollte nie in der GUI liegen.



  • Gregor schrieb:

    Also um das mal klarzustellen, wenn Leute, wie hier Nexus, sagen, dass man auch in C OOP betreiben kann, dann meinen sie damit, dass man, wenn man es darauf anlegt, gegen jede Sprache kämpfen kann und mit ihr in einer Art und Weise programmieren kann, für die sie nicht gedacht ist.
    [...]
    Um es mal ganz klar auszudrücken: C ist nicht für objektorientierte Programmierung gedacht.

    Nein, so meinte ich das nicht.

    Schau dir C-Bibliotheken an, du wirst sehr oft auf objektorientierte Programmierung treffen. Statt a.foo(7, 4) hast du eben foo(a, 7, 4) , statt Konstruktoren Create() und statt Destruktoren Destroy() . Dinge wie Vererbung und Polymorphie sind natürlich schwieriger, aber dennoch möglich. Aber darum gehts nicht – es ist wichtig zu sehen, dass sich das Denken in Objekten auch in C auszahlt, selbst wenn die Sprache nicht viel mehr als struct dafür anbietet.

    Du klammerst dich zu sehr an der OOP-Definition fest, wie sie z.B. in Java benutzt wird. Um OOP zu lernen, wie du sie verstehst, ist daher auch eine solche Sprache geeigneter. Daher auch "Aber gewisse Techniken und Design Patterns wirst du nur in C++ antreffen". Was ich sagen wollte, ist dass man auch in C objektorientiert programmieren kann und dadurch nicht selten besseren Code schreibt.



  • Gregor schrieb:

    dot schrieb:

    Wenn du für Windows entwickeln willst ist es sicherlich nicht schlecht die Grundlagen der WinAPI zu kennen...

    Ich habe mich zwar nie mit WinAPI beschäftigt, aber ich halte das trotzdem einfach mal für Quatsch. 😉

    Die Frage ist: Will er GUIs entwickeln oder will er sich in die Windowsprogrammierung einarbeiten?



  • Nexus schrieb:

    Gregor schrieb:

    dot schrieb:

    Wenn du für Windows entwickeln willst ist es sicherlich nicht schlecht die Grundlagen der WinAPI zu kennen...

    Ich habe mich zwar nie mit WinAPI beschäftigt, aber ich halte das trotzdem einfach mal für Quatsch. 😉

    Die Frage ist: Will er GUIs entwickeln oder will er sich in die Windowsprogrammierung einarbeiten?

    Ich möchte mein Grundwissen anwenden, egal ob GUI oder insgesamt
    Windowsprogrammierung.



  • Wenn du dir nicht sicher bist, dann schau dir doch verschiedenste Bereiche mit ihren Frameworks an und benutze das, das dir am meisten zusagt. Zum Beispiel könntest du auch in Richtung Spiele-/Grafikprogrammierung gehen 😉



  • Nexus schrieb:

    Schau dir C-Bibliotheken an, du wirst sehr oft auf objektorientierte Programmierung treffen. Statt a.foo(7, 4) hast du eben foo(a, 7, 4) , statt Konstruktoren Create() und statt Destruktoren Destroy() . Dinge wie Vererbung und Polymorphie sind natürlich schwieriger, aber dennoch möglich. Aber darum gehts nicht – es ist wichtig zu sehen, dass sich das Denken in Objekten auch in C auszahlt, selbst wenn die Sprache nicht viel mehr als struct dafür anbietet.

    Du klammerst dich zu sehr an der OOP-Definition fest, wie sie z.B. in Java benutzt wird. Um OOP zu lernen, wie du sie verstehst, ist daher auch eine solche Sprache geeigneter. Daher auch "Aber gewisse Techniken und Design Patterns wirst du nur in C++ antreffen". Was ich sagen wollte, ist dass man auch in C objektorientiert programmieren kann und dadurch nicht selten besseren Code schreibt.

    1. Objektorientierung ist eine Frage der Denkweise und keine Frage der Syntax, das sehe ich durchaus auch so. Ich habe Objektorientierung damals mit UML gelernt, also nicht ansatzweise mit irgendeiner Programmiersprache. Die Frage ist aber, ob die Programmiersprache die gedanklichen Konstrukte, die man bei einer objektorientierten Sichtweise hat, ebenfalls bietet oder ob sie das nicht tut. C++ macht das, Java macht das, C# macht das, C macht das nicht. In C muss man sich die Konstrukte selbst zurechtbiegen und sich dann halt sagen "Wenn da XYZ steht, dann ist das für mich eine Umsetzung von Polymorphie". C ist eine Programmiersprache, die auf prozedurale Programmierung ausgelegt ist und entsprechende Sprachmittel für eben dieses Programmierparadigma bietet. Wenn Du jetzt sagst, dass Du OOP in C betreibst, dann bringst Du gedanklich eine weitere Interpretationsschicht zwischen Dich und die Sprache und Du schränkst Dich bezüglich der Art der Nutzung der Programmiersprache ein. Du entscheidest Dich bewusst dafür, dass Du in dieser Programmiersprache anders programmierst, als es eigentlich gedacht ist.

    Aus meiner Sicht gibt es dafür nur einen Grund: Die Programmiersprache ist aus irgendeinem Grund festgelegt, Du siehst aber ein, dass die Denkweise, die zu dieser Programmiersprache passt, nicht aufs Anwendungsgebiet passt.

    Abgesehen davon: Der Threadersteller will glaube ich C++ lernen. Dann soll er auch lernen, die Sprachmittel zu benutzen, die C++ bietet.

    2. Du sagst, dass man auch in C OOP betreiben kann und dadurch nicht selten besseren Code schreibt. Besser im Vergleich zu was? Besser im Vergleich zu nicht-OOP C-Code? Oder besser im Vergleich zu OOP C++ Code? Im ersten Fall sagst Du praktisch aus, dass C für bestimmte Anwendungsgebiete einfach nicht geeignet ist, da dort wohl eine objektorientierte Sichtweise angebracht ist, die C nicht unterstützt. Eigentlich ist dann die richtige Konsequenz, wenn man diesbezüglich die Wahl hat, nicht C zu benutzen. Wenn Du den zweiten Fall meinst, dann müsstest Du mir das mal genauer erklären.



  • Im Prinzip bauen doch alle Windows Frameworks auf der Windows API auf,
    oder?



  • Nexus schrieb:

    Du klammerst dich zu sehr an der OOP-Definition fest, wie sie z.B. in Java benutzt wird. Um OOP zu lernen, wie du sie verstehst, ist daher auch eine solche Sprache geeigneter. Daher auch "Aber gewisse Techniken und Design Patterns wirst du nur in C++ antreffen".

    Welche Design Patterns ?



  • C ist nicht optimal geeignet, um OOP zu erlernen, kein Zweifel. Das sind C++ und java aber auch nicht. Reine OO-Sprachen sehen ganz anders aus.


Anmelden zum Antworten