[geteilt] C-Diskussion


  • Klassen, was ist daran so schwer? Eine Klasse hat Methoden und Felder/Variablen ,welche diese spezialisieren. Diese Klasse ist gleichzeitig ein Objekt ,was dann in anderen Klassen erzeugt werden kann und genutzt werden kann. Die Dot.notationen ist dann ganz einfach um halt eine klasse aufzurufen.
    foo Beispiel = new foo();
    Beispiel.bar();
    Ist das so kompliziert? Außerdem kann man damit dann auf Strukturen zurückgreifen (Vererbung etc. / innere Klassen)... System.out.println ist halt ein längerer Befehl was solls.
    Typen ist doch auch ganz normal... hat C auch. Rückgabewerte und Variablentypen. Das ist das gleiche wie in C.
    Arrays sind genau wie in C, es gibt aber zusätzlich eine Array klasse ,die dir das Sortieren und etc. übernehmen kann. Nichts besonderes. Dazu braucht man auch nicht dein String[] args...
    Statische Methoden brauchen kein Objekt.... nicht objektorientiert fertisch.
    public und private sind einfach Zugriffsmodifikatoren, was ist daran nicht zu verstehen und ein Interface ist eine Vorlage für eine Klasse, es legt fest welche Methoden es haben soll.
    Ich sehe da ganz und gar kein Problem und nichts kompliziertes

    Es ist besser nicht zu moderieren als falsch zu moderieren


  • Nö. Java ist ein einziger Clusterfuck. Eiffel wäre ne einfach zu lernende OOP-Sprache. Was muss man denn alles kapieren bis man in Java "Hello World" versteht?
    <nen haufen Stichpunkte>


    Vergleiche von Java mit C sind ja auch absolut aussagekräftig :rolleyes:.

    Meine Erfahrungen sagen mir halt das zumindest im "normalen" (Heisst: IT-Bude die keine Spezialanforderungen erfüllt) Mittelstandsgeschäft der C-Syntax und auch OOP als Defacto-Standard existieren. Keiner behauptet das Java absolut simpel ist, aber was ich behaupte ist das Java eine leicht (und fast vollständig) zu erlernende Klassenbasierte-OOP-Sprache die eben an den C-Syntax stark angelehnt ist.

    Das hat unter anderem was damit zu tun, das in den 90-00er Jahren die Dynamischen/Funktionalen/<Sprache die nicht wie C/Java/C++/PHP ist> halt ein großen Durchhänger (also von der Verbreitung) hatten und sich bis heute eben nicht absolut durchgesetzt haben (Also der "Markt" war einfach nicht segmentiert genug, insbesondere bei Paradigmen).


    Ach übrigens: Stichpunkte die vollkommen differenziert sind als gegenüberstellung merkmal nutzen find ich oll.


  • weil dus schon kannst
    pointer sind auch nich komplizierter

    Ich hab mich auch in pointer eingelesen und kann sie so halb... und natürlich hab ich auch erst die OOP nicht verstanden. Aber nach einer Zeit fällt dann einfach der groschen.
    --------------------------
    Wenn Java so kompliziert wäre, würde ja z.b in NRW nicht Java gelehrt werden und im abitur verwendung finden.

    Es ist besser nicht zu moderieren als falsch zu moderieren

    Einmal editiert, zuletzt von Der Doktor (15. Dezember 2012 um 13:18)


  • Vergleiche von Java mit C sind ja auch absolut aussagekräftig :rolleyes:.

    Meine Erfahrungen sagen mir halt das zumindest im "normalen" (Heisst: IT-Bude die keine Spezialanforderungen erfüllt) Mittelstandsgeschäft der C-Syntax und auch OOP als Defacto-Standard existieren. Keiner behauptet das Java absolut simpel ist, aber was ich behaupte ist das Java eine leicht (und fast vollständig) zu erlernende Klassenbasierte-OOP-Sprache die eben an den C-Syntax stark angelehnt ist.

    Das hat unter anderem was damit zu tun, das in den 90-00er Jahren die Dynamischen/Funktionalen/<Sprache die nicht wie C/Java/C++/PHP ist> halt ein großen Durchhänger (also von der Verbreitung) hatten und sich bis heute eben nicht absolut durchgesetzt haben (Also der "Markt" war einfach nicht segmentiert genug, insbesondere bei Paradigmen).


    Ach übrigens: Stichpunkte die vollkommen differenziert sind als gegenüberstellung merkmal nutzen find ich oll.


    Es ging mir nur darum darzustellen dass C halt deutlich weinger Konzepte hat und deshalb einfacher zu lernen ist. Dass C nicht besser ist als Java ist schon klar, und schon gar nicht für grosse Projekte. Und dass Java ein Quasi-Standard sonstwo ist macht's nicht gut.

    Merkste selbst, ne? :fresse: "Ach is doch alles ganz einfach man muss nur den Nippel durch die Lasche ziehen und System.out.println is einfach ein etwas längerer Befehl..."


    Wenn Java so kompliziert wäre, würde ja z.b in NRW nicht Java gelehrt werden und im abitur verwendung finden.

    Jo den Scheiss versteht ja hinterher auch keiner.


  • Es ging mir nur darum darzustellen dass C halt deutlich weinger Konzepte hat und deshalb einfacher zu lernen ist. Dass C nicht besser ist als Java ist schon klar, und schon gar nicht für grosse Projekte. Und dass Java ein Quasi-Standard sonstwo ist macht's nicht gut.


    Schon klar, aber (fast) bis auf akademische Schulen ist diese Ansicht eben (leider) anders. [== eben der Quasi-Standard].

    Lösung:
    #include <java/java.h>

    *narf*

  • komm hier rein

    "programmiersprache x ist besser als die völlig nicht vergleichbare programmiersprache y"

    ich geh wieder raus


  • Ich kenne hier niemanden der ,wenn man es ihm gut beigebracht (oder das Buch gut ist), es nicht verstanden hat.

    Halt bis zur Klausur. OOP und speziell Java wirft so viele Fragen auf, das kann man nicht einfach mal schnell erklären. Warum sollte ich nicht alles static machen? Warum sollte ich nicht alles public machen? Warum brauche ich Inheritance wenn ich auch einfach ein Feld machen kann mit der Superklasse und darauf die Methoden aufrufen? Warum geht Inheritance nur mit einer Klasse? Wozu brauche ich Konstruktoren, kann ich nicht einfach eine init()-Methode machen? Was sollte ich dann in den Konstruktor packen und was in Methoden? Ganz abgesehen davon wenn man mal generics braucht, die sind konstruktionsbedingt in Java irre.
    Java ist einfach komplizierter zu lernen als C weil es viel mehr Zeug hat. Und wenn man schnelle, motivierende Ergebnisse haben will ist es auch nix, dann sollte man weder C noch Java, sondern lieber Ruby lernen. Java ist überhaupt keine Einsteigersprache, sondern eine für grosse Industrieprojekte die zur Hälfte nach Indien outgesourcet werden. Warum der Kram an Schulen gelehrt wird ist ziemlich unverständlich, aber an schulischem Informatikunterricht ist ja vieles ziemlich unverständlich...

  • Halt bis zur Klausur. OOP und speziell Java wirft so viele Fragen auf, das kann man nicht einfach mal schnell erklären. Warum sollte ich nicht alles static machen? Warum sollte ich nicht alles public machen? Warum brauche ich Inheritance wenn ich auch einfach ein Feld machen kann mit der Superklasse und darauf die Methoden aufrufen? Warum geht Inheritance nur mit einer Klasse? Wozu brauche ich Konstruktoren, kann ich nicht einfach eine init()-Methode machen? Was sollte ich dann in den Konstruktor packen und was in Methoden? Ganz abgesehen davon wenn man mal generics braucht, die sind konstruktionsbedingt in Java irre.
    Java ist einfach komplizierter zu lernen als C weil es viel mehr Zeug hat. Und wenn man schnelle, motivierende Ergebnisse haben will ist es auch nix, dann sollte man weder C noch Java, sondern lieber Ruby lernen. Java ist überhaupt keine Einsteigersprache, sondern eine für grosse Industrieprojekte die zur Hälfte nach Indien outgesourcet werden. Warum der Kram an Schulen gelehrt wird ist ziemlich unverständlich, aber an schulischem Informatikunterricht ist ja vieles ziemlich unverständlich...

    Die Klausuren fallen nicht schlecht aus...
    Warum nicht alles static machen? Z.B wenn man ein grafisches Spiel machen will, ist ein Spieler ein Objekt, dass könnte man mit Spieler.gehe() animieren bzw. dessen position verändern.
    Warum nicht alles public? Nehmen wir an du programmierst eine mathesuit .... willst du dann das andere Methoden oder gar andere programme die Daten manipulieren körnnen? Nein sicherlich nicht....
    Die Vererbung ist eine recht coole Sache und die damit zusammenhänge Polymorphie, es hilft den Code weiterzuverwenden und man kann einen Code auf Referenzen aufbauen, somit kann man den code in vielen Projekten einsetzen.
    Vererbung ist eine Spezialisierung! Hast du eine Klasse Rechner und eine Klasse Netzwerkrechner ,die von Rechner erbt, hat sie vielleicht ganz spezielle Methoden und übernimmt die Methoden der Superklasse und natürlich die Felder. Das erspart eine ganze Menge Code, und ist nützlich. Ich wende es z.B bei meinem Turing Maschinen Simulator an.
    Die Konstruktoren sind zum initialisieren eines Objekts beim Aufruf. Z.b bei einer Patientenqueue . Wenn du ein neues Patientenobjekt machst kannst du dann z.b mit den Konstruktor es direkt mit einen Namen , einer Steuernummer und so weiter initialisieren und schon Methoden aufrufen. GANZ EINFACH.
    Genercis sind kein großes Ding.
    Und wenn man Java benutzt kriegt man sofort Ergebnisse. Wir hatten z.B ein kleines Spiel programmiert , dass hatte nur ein paar Schulstunden gedauert. Damals noch mit Greenfoot. Mit Krabben und Fischen... Manche gingen dann weiter und haben sogar ein wirklich gutes Star Wars spiel programmiert mit ein paar Tausend Zeilen Code. Naja das wäre mir zu dumm gewesen.
    Java ist extrem Einsteigerfreundlich

    Es ist besser nicht zu moderieren als falsch zu moderieren

  • Halt bis zur Klausur. OOP und speziell Java wirft so viele Fragen auf, das kann man nicht einfach mal schnell erklären. Warum sollte ich nicht alles static machen? Warum sollte ich nicht alles public machen? Warum brauche ich Inheritance wenn ich auch einfach ein Feld machen kann mit der Superklasse und darauf die Methoden aufrufen? Warum geht Inheritance nur mit einer Klasse? Wozu brauche ich Konstruktoren, kann ich nicht einfach eine init()-Methode machen? Was sollte ich dann in den Konstruktor packen und was in Methoden? Ganz abgesehen davon wenn man mal generics braucht, die sind konstruktionsbedingt in Java irre.
    Java ist einfach komplizierter zu lernen als C weil es viel mehr Zeug hat. Und wenn man schnelle, motivierende Ergebnisse haben will ist es auch nix, dann sollte man weder C noch Java, sondern lieber Ruby lernen. Java ist überhaupt keine Einsteigersprache, sondern eine für grosse Industrieprojekte die zur Hälfte nach Indien outgesourcet werden. Warum der Kram an Schulen gelehrt wird ist ziemlich unverständlich, aber an schulischem Informatikunterricht ist ja vieles ziemlich unverständlich...

    Soll ich dir die Fragen mal beantworten? Oder war das einfach nur mal schnell ein Beispiel was Neulinge für Fragen haben könnten?


  • Die Klausuren fallen nicht schlecht aus...


    Meinte bis nach der Klausur. Man kriegt so viel beigebracht dass man die Klausur besteht.


    Warum nicht alles static machen? Z.B wenn man ein grafisches Spiel machen will, ist ein Spieler ein Objekt, dass könnte man mit Spieler.gehe() animieren bzw. dessen position verändern.


    Das erklärt genau garnix wenn ich nur einen Spieler habe


    Warum nicht alles public? Nehmen wir an du programmierst eine mathesuit .... willst du dann das andere Methoden oder gar andere programme die Daten manipulieren körnnen? Nein sicherlich nicht....


    Information hiding ist definitiv keine Möglichkeit um Daten zu schützen


    Die Vererbung ist eine recht coole Sache und die damit zusammenhänge Polymorphie


    Vererbung ist nicht Polymorphie, das sind zwei verschiedene Konzepte, du kannst Polymorphie ohne Vererbung haben


    , es hilft den Code weiterzuverwenden


    Kann man auch mit Instanzen


    und man kann einen Code auf Referenzen aufbauen


    Was?


    somit kann man den code in vielen Projekten einsetzen.


    Kann man auch mit Instanzen


    Vererbung ist eine Spezialisierung! Hast du eine Klasse Rechner und eine Klasse Netzwerkrechner ,die von Rechner erbt, hat sie vielleicht ganz spezielle Methoden und übernimmt die Methoden der Superklasse und natürlich die Felder. Das erspart eine ganze Menge Code, und ist nützlich.


    Wie gesagt, du kannst auch einfach 'ne Instanz machen und die Methoden eines Objekts der Superklasse aufrufen.


    Die Konstruktoren sind zum initialisieren eines Objekts beim Aufruf. Z.b bei einer Patientenqueue . Wenn du ein neues Patientenobjekt machst kannst du dann z.b mit den Konstruktor es direkt mit einen Namen , einer Steuernummer und so weiter initialisieren und schon Methoden aufrufen. GANZ EINFACH.


    Und warum mach ich das nicht mit einer setData-Methode oder so?


    Genercis sind kein großes Ding.


    lol


    Und wenn man Java benutzt kriegt man sofort Ergebnisse. Wir hatten z.B ein kleines Spiel programmiert , dass hatte nur ein paar Schulstunden gedauert. Damals noch mit Greenfoot. Mit Krabben und Fischen... Manche gingen dann weiter und haben sogar ein wirklich gutes Star Wars spiel programmiert mit ein paar Tausend Zeilen Code. Naja das wäre mir zu dumm gewesen.
    Java ist extrem Einsteigerfreundlich


    Wie lange hast du schon mit Java gearbeitet und wie lange mit anderen Sprachen?

    Du bist genau das perfekte Beispiel für das was ich meine. OOP ist unglaublich komplex und eigentlich wissen sehr wenige richtig wie es funktioniert und wie man damit arbeiten sollte, mich eingeschlossen. Man erklärt es dann mit so bekloppten real life Analogien à la "Baum ist eine Klasse und der Baum vor der Tür ist ein Objekt". Das führt zwangsläufig dazu dass wenn man das in der Schule lernt man irgendeinen Dreckscode hinfrickelt weil man eigentlich Jahre bräuchte um OOP und dann erst Java auch nur ansatzweise zu verstehen.


    Soll ich dir die Fragen mal beantworten? Oder war das einfach nur mal schnell ein Beispiel was Neulinge für Fragen haben könnten?


    Eigentlich wars 'n Beispiel, aber du darfst es gerne probieren ;)

  • Soll ich dir die Fragen mal beantworten? Oder war das einfach nur mal schnell ein Beispiel was Neulinge für Fragen haben könnten?

    Ich weiß, was Neulinge wohl für fragen stellen würden, ich habe die Fragen selbst gefragt. Und der Lehrer hatte sie ,weil er sich auskannte, gut beantwortet und wer etwas Sinn für Informatik hat, der versteht das... Java ist da recht simpel!
    Java ist auch eine Insel erklärt das auch gut.
    Als ob C jetzt so viel einfacherer wäre? Wie willst du denn da einsteigen? Natürlich mit Konsolen, wir konnten wenigstens noch mit etwas zum Anfassen anfangen, wir sind dann auch zu konsolen übergegangen. Und wenn ich mir hier im C Buch mal ansehe, was man alles für Code schreiben muss, für ein bescheuertes Windows Fenster. Da sag mal, dass wäre so toll einfach. Da ist Swing zwar noch buggy, aber da kann man schneller ein einfaches Fenster machen.

    Es ist besser nicht zu moderieren als falsch zu moderieren

  • Erstmal: Irgendwelche kleine Spiele kriegen Kinder auch in Python hin. Oder früher in Basic oder Pascal. Das ist keine Leistung die Java neu erbracht hat.

    Glaube du hast den Punkt von heinzes Beitrag nicht ganz verstanden. Die Antworten auf heinzes Frage klingen einfach, und du hast irgendwelche Antworten aus Einsteigerbüchern gegeben, in Wirklichkeit steckt da aber viel mehr dahinter.

    Nur ein Beispiel:

    Die Aussage " Genercis sind kein großes Ding" ist nämlich so schlicht falsch. Klar sind Generics auf den ersten Blick trivial. Dann aber lernst du mal über Ko- und Kontra-Varianz, und merkst dass während man in ein Array von Tieren auch ein Array von Enten packen kann (Tier[] ts = new Ente[10]; ), dass das bei einer "List<Tier> ts = new LinkedList<Ente>(10);" nicht geht und dass Generics in Java das wohl komplizierteste an der ganzen Sprache ist.

    Java mag furchtbar einfach aussehen. Die Details sind aber haarig, und werden von vielen Neulingen total unterschätzt. Dann wird irgendwie .equals() überschrieben, und die Leute wundern sich warum die HashMap plötzlich nicht mehr funktioniert. Oder man macht eine Factory mit inneren Klassen und hat plötzlich Memory Leaks durch die ganzen impliziten this-Referenzen. Da hilft der Garbage Collector dann auch nicht mehr.

    C hingegen sieht kompliziert aus, die Details sind aber eigentlich ganz simpel.

    Einmal editiert, zuletzt von gandro (15. Dezember 2012 um 17:02)


  • Ich habe nie gesagt ,dass Vererbung Polymorphie sei. Aber Polymorphie hängt mit der Vererbung zusammen und kann nur in Vererbungsbäumen auftreten.
    Eine Referenz ist eine Variable, die auf ein Objekt im Stack verweist.
    Beispiel neu = new Beispiel(); -> neu ist eine Referenz...

    Was ist wohl einfacher?
    zu schreiben: Patient foo = new Patient ("foorius", 1,89, 2917283);
    oder
    Patient foo = new Patient();
    foo.setName("foorius");
    foo.setGroesse("1,89);
    ...
    Das spart doch total viele Zeilen.
    Mit C habe ich mich ein Jahr beschäftigt, seit 2 mache ich Java und genau so lange eigentlich C#.
    ...
    Und ein Leher der etwas so erklärt: "Baum ist eine Klasse und der Baum vor der Tür ist ein Objekt"
    Den kannst du sowieso in die tonne kloppen

    Es ist besser nicht zu moderieren als falsch zu moderieren

    Einmal editiert, zuletzt von DosAmp (15. Dezember 2012 um 17:07)


  • Ich habe nie gesagt ,dass Vererbung Polymorphie sei. Aber Polymorphie hängt mit der Vererbung zusammen und kann nur in Vererbungsbäumen auftreten.


    Nö.


    Eine Referenz ist eine Variable, die auf ein Objekt im Stack verweist.
    Beispiel neu = new Beispiel(); -> neu ist eine Referenz...


    Nö das is definitiv nicht aufm Stack und hat auch garnix mit Vererbung und reusability zu tun


    Aha, Konstruktoren sind dazu da Zeilen zu sparen?


    Mit C habe ich mich ein Jahr beschäftigt, seit 2 mache ich Java und genau so lange eigentlich C#.


    Oh dear...

  • das "spart Zeilen"-argument ist quatsch, du könntest auch eine methode setAllData("foorious", 1.89) machen und das in einem rutsch setzen, trotzdem hat der Konstruktur eine andere Semantik, denn er kann nur 1x aufgerufen werden im gegensatz zu set-methoden, mit denen man so sachen auch während des Lebenszykluses eines Objektes ändern kann, was aber u.U. gar nicht erwünscht ist

    Einmal editiert, zuletzt von oreissig (15. Dezember 2012 um 17:18)

  • Wie soll Polymorphie denn sonst funktionieren, wenn das Objekt keine is-a Beziehung hat?
    Und warum soll das denn nicht stimmen? neu ist eine Referenzvariable, und die verweist einfach auf ein Objekt was im Speicher liegt, wir hatten da noch gelernt, dass das im Stack liegt. Und natürlich sind Konstruktoren nicht nur zum Zeilensparen, es ist einfach eine Methode die bestimmte Sachen ausführt, wenn ein Objekt erstellt wird.

    Es ist besser nicht zu moderieren als falsch zu moderieren

  • RISC-Assembler ist am einfachsten ihr Faggots.

    PGP-Key E384 009D 3B54 DCD3 21BF  9532 95EE 94A4 3258 3DB1 | S/MIME-Key 0x1A33706DAD44DA
    G d-@ s+:- a--- C+++ UB+L++ P--- L++@ E-@>++ W+ N o? K? w>++ !O !M !V PS+++ PE-- Y+>++ PGP++>+++ !t 5? X? !R tv b+++>++++ DI !D G>+ e>+++ h !r>++ !z
    „Die Aachener gelten als Erfinder des 4. Hauptsatzes der Thermodynamik: ‚Thermo schreibt man zweimal.“‘
    “Saying that Java is good because it works on all platforms is like saying oral sex is good because it works on all sexes.”
    „Es gibt 10 Sorten von Leuten: Die einen verstehen das Binärsystem, die anderen nicht.“
    „Manche Männer lieben Männer, Manche Frauen eben Frauen; Da gibt's nix zu bedauern und nichts zu staunen; Das ist genau so normal wie Kaugummi kauen; Doch die meisten werden sich das niemals trauen“

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!