wie blutigen anfaenger java lehren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Sonntag 2. September 2007, 18:34

folgendes:
ein freund von mir geht ab jetzt mit mir im gleichen informatik kurs
in seinem forherigen kurs hat er angefangen javascript zu lernen seine kentnisse uebers programmieren sind aber noch sehr beschraenkt.
deswegen hab ich ihm versprochen mit ihm kosequent zu "lernen" (man lernt programmieren nicht lernend sondern spielend (= mit spass und interesse lernen))

das problem is aber das wir als erste programmiersprache java lernen....
wie soll ich das also angehen? kann ich ihm den nachdem ich ihm absolute grundlagen erklaert habe gleich von typen, OOP, und syntakische obskuritaeten sprechen (vas ja in java schon fuer ein "helo world" programm erforderlich ist) oder soll er erst ein bischen mit python rumspielen ?


vieleicht hat nhemand damit erfahrung......
cp != mv
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Sonntag 2. September 2007, 18:43

Ich denke, wenn jmd. Java lernen will/muss, sollte er auch Java lernen und nicht erst Python. Man kann ja auch in Java erstmal "rumspielen" und gewisse Dinge nicht sofort erklären, sondern fertige Klassen "umbauen". Außerdem wird das Javalernen nicht umbedingt toller, wenn man Python kann. Dann nämlich, fällt es einem psychisch schwerer, weil man sich dauernd fragt "wozu dieses ganze Zeug?". Man überlegt immer, wie einfach das in Python ging etc.
Und wenn ihr in Info Java lernt, ist es zudem vlt. auch etwas viel, nebenbei noch Python zu lernen, das alles auseinander zu halten und dann passend zusammenzubringen (sodass Java einfacher wird).
Du könntest es aber andersrum machen und ihm, wenn er Java einigermaßen kann, sagen, wie toll Python ist. :D
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Montag 3. September 2007, 08:57

Ich finde es besser, erst Python zum lernen/lehren zu nutzen, da man dort erstmal OOP außen vor lassen kann.

Desweiteren besteht bei "Java als erste Sprache" die Gefahr, dass Leute das falsche Bild vom Programmieren bekommen: für sie besteht die Welt nur noch auch Objekten und Java-Konstrukten. Auch Sachen wie Mehrfachvererbung gibt es einfach nicht. Und dann noch die irrige Annahme, dass "protected" und "private" den Code schützen, oder allgemein dass mein seinen Code vor anderen schützen muss.
Benutzeravatar
C4S3
User
Beiträge: 292
Registriert: Donnerstag 21. September 2006, 10:07
Wohnort: Oberösterreich

Montag 3. September 2007, 12:53

Wenn man Java lernen will, so soll man das tun.
Aber als kleiner Tipp, bzw. als Hilfe:

http://www.bluej.org/

http://www.amazon.de/lernen-BlueJ-Einf% ... 233&sr=8-1

Und als IDE am Anfang natürlich BlueJ.

Wenn man gerade mit OOP lernt, finde ich das sehr gut. Ich hatte Anfangs echte Probleme, OOP zu kapieren, aber damit hab ich es hinbekommen. ;)

Die Art und Weise, WIE einem OOP da beigebracht wird, ist einfach toll.
Gruß!
Benutzeravatar
penguin-p
User
Beiträge: 22
Registriert: Sonntag 19. August 2007, 13:47

Montag 3. September 2007, 13:31

Joghurt hat geschrieben:Und dann noch die irrige Annahme, dass "protected" und "private" den Code schützen
Wer verbreitet denn solche Annahmen?
public, protected und private finde ich persönlich eigentlich recht schön, da man damit seine Klasse nicht nur gedanklich, sondern tatsächlich in einen privaten Teil und eine öffentliche bzw. semi-öffentliche Schnittstelle gliedern kann. Manchmal vermisse ich das bei Python ;) ... jaja diese C++ Muttersprachler :D

Eigentlich "schützt" protected den Code ja auch. Es schützt eben Attribute und Methoden vor Zugriffen, die von außerhalb der Klasse kommen. Aber ich denke so war dein Text nicht gemeint ;)
BlackJack

Montag 3. September 2007, 14:30

Private und öffentliche API wird in Python per Namenskonvention geregelt. Namen mit einem führenden Unterstrich sollte man von aussen nur verwenden, wenn man weiss was man da tut.

Per "reflection" kommt man bei Java in der Regel auch an ``private``-Attribute heran. Bei C++ reicht bei den meisten Compilern ein ``#define private public``.
Benutzeravatar
penguin-p
User
Beiträge: 22
Registriert: Sonntag 19. August 2007, 13:47

Montag 3. September 2007, 14:49

Solche Namenskonventionen sind hässlich, wenn du ein Attribut von public nach private verschieben willst musst du es umbenennen ... und zwar auch überall da wo es verwendet wird. Meiner Ansicht nach sollten Bezeichner keine weitere Semantik tragen.
Der Python Weg hat natürlich auch seine Vorteile. Man kommt beispielsweise um Schlüsselwörter wie friend herum und die Sprache an sich bleibt einfacher.
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Montag 3. September 2007, 15:14

public, protected und private finde ich persönlich eigentlich recht schön
ich find sogar goto`s (apropo, wieso beinhaltet dein anzeigebild dieses museumsstueck :lol: ) schoener als public, protected und private

es kann ja situationnen geben, indenen man zum beispiel einem top kriminellen verbrecher seine ``TopSecretFTPConn`` instanz zur veruegung stellt und das attribut ``password`` daher nur fuer die interne benutzung freigegeben werden soll.
aber in de regel braucht man sowas nicht
cp != mv
Benutzeravatar
penguin-p
User
Beiträge: 22
Registriert: Sonntag 19. August 2007, 13:47

Montag 3. September 2007, 16:20

Ohje, goto :D ... keine falschen Vorstellungen, so böse bin ich dann doch nicht ;)

Es geht nicht darum, dass irgendwelche Attribute der Klasse geheim wären oder verschlüsselt werden sollen, sondern darum, dass eine Klasse über eine innere und äußere Schnittstelle verfügt. Das heißt, dass jemand, der deine Klasse durch ein Modul einbindet und instanziiert kein Attribut der internen Schnittstelle beschreiben kann und damit die Instanz aus Unwissenheit in einen undefinierten Zustand versetzt. Durch public, protected und private kannst du die Konsistenz deiner Klasse bzw. deren Instanzen garantieren.
BlackJack

Montag 3. September 2007, 17:31

Wenn dem so wäre, dürfte es keine Java-Programme geben bei denen Objekte in einem inkonsistentem Zustand wären. ;-)

Und wie gesagt gibt es führende Unterstriche, das erfüllt die gleiche Aufgabe wie ``private``. Ausser das es keinen Zugriffsschutz bietet. Aber wie ich mal in einem Perl-Text sinngemäss gelesen habe: Bei uns betritt man fremde Häuser (Objekte) aus Respekt und Rücksichtnahme nicht, und nicht weil uns ein Elektrozaun daran hindert.

``goto`` in C ist übrigens manchmal ganz nützlich. Bis zu einem gewissen Grad kann man damit innerhalb einer Funktion zum Beispiel Ausnahmen nachahmen, die ja auch eine Art Sprung ausserhalb des normalen Programmflusses zu einer Marke darstellen.
Benutzeravatar
penguin-p
User
Beiträge: 22
Registriert: Sonntag 19. August 2007, 13:47

Montag 3. September 2007, 19:33

BlackJack hat geschrieben:Wenn dem so wäre, dürfte es keine Java-Programme geben bei denen Objekte in einem inkonsistentem Zustand wären. ;-)
Zu Java kann ich leider nichts sagen, da kenn ich mich nicht aus.
Und wie gesagt gibt es führende Unterstriche, das erfüllt die gleiche Aufgabe wie ``private``. Ausser das es keinen Zugriffsschutz bietet. Aber wie ich mal in einem Perl-Text sinngemäss gelesen habe: Bei uns betritt man fremde Häuser (Objekte) aus Respekt und Rücksichtnahme nicht, und nicht weil uns ein Elektrozaun daran hindert.
Ja es ist bis auf den Zugriffsschutz dasselbe (schönes Zitat übrigens :D). Allerdings habe ich ja schon gesagt, dass ich es ungünstig finde, sowas über den Bezeichner zu regeln.

Aber ich sehe ein, dass private etc. in Python auch nicht optimal wären, da dadurch die Sprache ein Stück weit aufgebläht würde.
lunar

Montag 3. September 2007, 20:40

penguin-p hat geschrieben:Solche Namenskonventionen sind hässlich, wenn du ein Attribut von public nach private verschieben willst musst du es umbenennen ... und zwar auch überall da wo es verwendet wird.
Hast du mal in Java ein von anderen Klassen verwendetes Attribut von public nach private verschoben, und dann beobachtet, was der Compiler dazu sagt?

Wenn nicht, dann solltest du das einfach mal tun... danach wirst du das "Umbenennen" in Python mit anderen Augen sehen.

Sofern es nur um die Verwendung innerhalb einer Klasse geht, dann erfordert das Umbenennen genau einen Klick und eine Eingabe in meinem emacs. Wenn das bei dir komplizierter ist, solltest du dir vielleicht mal einen vernünftigen Editor suchen, der das Konzept des sogenannten "Suchen und Ersetzen" oder besser noch des "Refactoring" kennt...

Was Namenskonventionen angeht, die verwendet man doch sowieso täglich, wie z.B. die Java-Konventionen, dass Namen von Methoden in Camel Case geschrieben werden, und Attribute klein. Da macht eine Konvention mehr doch auch nicht viel aus ;)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 3. September 2007, 22:54

lunar hat geschrieben:Was Namenskonventionen angeht, die verwendet man doch sowieso täglich, wie z.B. die Java-Konventionen, dass Namen von Methoden in Camel Case geschrieben werden, und Attribute klein. Da macht eine Konvention mehr doch auch nicht viel aus ;)
In einigen Sprachen ist die ungarische Notation auch sehr populär (ich muss wohl nicht sagen in welchen *g*). Schlimmer ist, wenn Leute anfangen das nach Python zu portieren, das ist dann natürlich total sinnlos.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Dienstag 4. September 2007, 13:49

Ungarische Notation in PHP ist der Hammer...
CrackPod
User
Beiträge: 205
Registriert: Freitag 30. Juni 2006, 12:56

Mittwoch 5. September 2007, 12:39

Leonidas hat geschrieben:
lunar hat geschrieben:Was Namenskonventionen angeht, die verwendet man doch sowieso täglich, wie z.B. die Java-Konventionen, dass Namen von Methoden in Camel Case geschrieben werden, und Attribute klein. Da macht eine Konvention mehr doch auch nicht viel aus ;)
In einigen Sprachen ist die ungarische Notation auch sehr populär (ich muss wohl nicht sagen in welchen *g*). Schlimmer ist, wenn Leute anfangen das nach Python zu portieren, das ist dann natürlich total sinnlos.
Ungarische Notation?
Antworten