Biesterfeld: OOP, wozu? (Fragen zu Java/Classen etc.)

Beitrag lesen

Hej,

Ich begreife eigentlich die ganze OOP nicht wirklich, wozu soll es denn gut sein, dass wenn ich eine Klasse erstellt habe davon eine Instanz zu machen?

Klassen sind zwar ein wesentliches Konzept der OOP, aber aus Ihrer Existenz leitet sich noch eine Reihe andere Konzepte ab, die man erst im fortgeschrittenen Umgang mit der OOP zu schätzen lernt. So z.B. Polymorphie, Vererbung und Datenkapselung. Einen guten Überblick liefert Wikipedia.

Aus den Konzepten ergeben sich Merkmale die den Prozess der Programmierung drastisch vereinfachen sollen. So z.B. leichte Wartbarkeit des Codes durch Kapselung, Flexibilität durch das bereitstellen von Schnittstellen oder auch teilweise automatische Code-Erzeugung durch das Abbilden von Datenstrukturen auf Klassen.

Wie kann man die OOP erklären damit es eine Newbie ohne erfahrung im OOP bereich verstehen kann?

Vor allem, indem man den Newbie damit üben lässt. Versuch dir erstmal vorzustellen dass ein Objekt ein "Ding" ist, welches in irgendwo im Raum rumschwirrt. Dieses Ding hat nun bestimmte Eigenschaften, die durch einen Bauplan des Dings vorgeschrieben sind. Dieser Bauplan ist die Klasse. Allerdings weiß im Idealfall nur das Ding alleine seine Eigenschaften. Es lässt auch niemanden so ohne weiteres die Eigenschaften verändern, sie gehören ja schließlich ihm. Daher stellt das Ding nach außen Methoden zur Verfügung um die Eignschaften die es Preisgeben will auch mitzuteilen. Oder es stellt Methoden bereit, die Eigenschaften zu ändern. Auch das wird durch die Klasse definiert. Für dich als Programmierer hat das einen enormen Vorteil: Du musst gar nicht wissen, wie das Ding funktioniert, du musst es nur noch bedienen können.

Stell dir ein Radio vor: Es hat innendrin einen ganzen Krempel Technik implementiert. Du möchtest gar nicht wissen wie im Detail so alles in dem Radio funktioniert. Du möchtest aber wenn du auf den Knopf "Nächsten Sender suchen" drückst das Radio dir auch den nächsten Sender sucht und wiedergibt. Gleichzeitig bietet das Radio eine weitere Schnittstelle zur Außenwelt bereit: Es ist in der Lage UKW-Wellen zu empfangen und so zu verarbeiten, dass das Signal entsprechend wiedergegeben wird. U.u. tun das zwei verschiedene Radios unterschiedlich. Entscheidend ist aber, dass da jedes Radio nach dem Radio-Bauplan gebaut wurde du jedes Radio immer zu bedienen weißt und da die Klasse Radio auch die Schnittstelle UKW-Empfänger implementiert hat, sich jede Radiostation darauf verlassen kann, dass ihr gesendetet Signal richtig verarabeitet werden wird.

Wieso muss in Java die Datei genau so heißen wie die Class?

Is halt so. Z.B. damit Du gezwungen bleibst den Überblick zu behalten und nicht immer erst in die Klasse reinschauen musst um zu wissen wie sie denn heisst. Hätte man auch anders machen können, spricht aber auch nichts dagegen es so zu machen.

Wie wird aus meiner kleinen Klasse -im Moment nur ein kleiner Calculator- eine wirkiche Anwendung die auf jedem Rechner -mit Installiertem Java- laufen kann?

Deine kleine Klasse, so sie bereits auf deinem Rechner läuft und das tut was sie soll, ist bereits eine Anwendung die ebensogut auf jedem anderen Rechner mit ensteprechender JVM lauffähig wäre.

Falls du mit einer wirklichen Anwendung eine aufwendige GUI meinst, so muss vor allem noch viel Übung deinerseits ins Land gehen. Ich will dich nicht entmutigen, aber grafische Benutzerschnittstellen in Java verlangem dem Programmierer einen sicheren Umgang mit _allen_ Aspekten der OOP ab. Ich beobachte oft, dass gerade Anfänger gerne aus kreativem Antrieb etwas sehr aufwendiges in Java entwicklen wollen und aus weitreichendem Mangel an Verständnis der Konzepte an den GUIs scheitern und so wieder scnell die Lust verlieren.

Fang erstmal an den Kern deines Calculators zu programmieren und überleg dir was du so für Klassen hast. Z.B. hast du sowas wie eine Operation (z.B. '+'), die zwei Zahlen (z.B. 2 + 3), oder aber auch eine Zahl und eine andere Operation ( 1 + ( 2 + 3 ) ) nimmt und verarbeitet. Was sind die Methoden, was sind die Eigenschaften? Was ist das Ergebnis, wie wird die Ausgabe realisiert? Du benötigst eine Eingabe und eine Ausgabe der Ergebnisse? Programmier doch erstmal so eine Anwendung nur für die Kommandozeile. Wenn das geschehen ist und funktioniert, kannst du mit den bestehenden Klassen die du bereits geschrieben hast, noch eine grafische Benutzeroberfläche drumherum basteln.

Zuguterletzt kann ich mir dieses eine Zitat dennoch nicht verkneifen:
"Are you quite sure that all those bells and whistles, all those wonderful facilities of your so called powerful programming languages, belong to the solution set rather than the problem set?" Edsger W. Dijkstra

Beste Grüße
Biesterfeld

--
Art.1: Et es wie et es
Art.2: Et kütt wie et kütt
Art.3: Et hätt noch immer jot jejange
Das Kölsche Grundgesetz