{"id":286,"date":"2018-08-03T11:00:25","date_gmt":"2018-08-03T09:00:25","guid":{"rendered":"https:\/\/freizone.net\/java-einfach-lernen\/?p=286"},"modified":"2020-05-11T19:29:40","modified_gmt":"2020-05-11T17:29:40","slug":"grundlagen-der-objektorientierung","status":"publish","type":"post","link":"https:\/\/freizone.net\/java-einfach-lernen\/2018\/08\/03\/grundlagen-der-objektorientierung\/","title":{"rendered":"Grundlagen der Objektorientierung"},"content":{"rendered":"Im letzten Kapitel haben wir gelernt aus welchen Elementen ein Programm im Prinzip besteht und haben das Element Klasse angesprochen das Teil der objektorientierten Programmierung ist.\r\nEine Klasse ist im Prinzip nichts anderes als eine Beschreibung wie bestimmte Daten verarbeitet werden sollen. Mit dieser Art von Beschreibung wollen wir uns gleich besch\u00e4ftigen. Dazu machen wir uns noch kurz Gedanken worum es eigentlich beim Programmieren geht.\r\n\r\nIm Endeffekt geht es immer darum, irgendwelche Daten zu manipulieren. Oder exakt definiert:\r\n<em>Dateneingabe &gt; Datenverarbeitung &gt; Datenausgabe<\/em>\r\nBestes Beispiel ist hierf\u00fcr ein Taschenrechner. Ich gebe eine Zahl ein, dr\u00fccke die Wurzeltaste und schon habe ich das Ergebnis.\r\nAllerdings sind die meisten Programme nicht so einfach aufgebaut. Meist wird erst eine Oberfl\u00e4che, auch GUI (Graphic User Interface) geladen, die dann darauf wartet das vom Benutzer Daten eingegeben werden. Auf bestimmte Dateneingaben werden dann vorher festgelegte Aktionen durchgef\u00fchrt und gegebenenfalls erfolgt eine Ausgabe z.B. am Bildschirm oder Drucker.\r\nIn BASIC, einer\u00a0der ersten leicht erlernbaren Programmiersprachen, w\u00fcrde das in vereinfachtem Pseudocode ungef\u00e4hr so aussehen:\r\n(Mit \/\/ markierte Bereiche stellen Kommentare dar. Kommentare werden vom Compiler nicht ber\u00fccksichtigt)\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">\/\/ Men\u00fc bauen \r\nCREATEBUTTON aktion1 = \"Erster Button\";\r\nCREATEBUTTON aktion2 = \"zweiter Button\";\r\nCREATEBUTTON abbruch = \"Abbruch;\r\n\r\n\/\/ Teil des Programms der in einer Schleife st\u00e4ndig wiederholt wird \r\nREPEAT\r\n IF aktion1 = TRUE THEN \r\n  PRINT \"Button 1 gedr\u00fcckt\";\r\n ENDIF\r\n IF aktion2 = TRUE THEN \r\n  PRINT \"Button 2 gedr\u00fcckt\";\r\n ENDIF\r\nUNTIL abbruch = true\r\n\r\n\r\n<\/pre>\r\nDas Programm w\u00fcrde drei nebeneinanderliegende Buttons erstellen. Nach dem Befehl oder besser Schl\u00fcsselwort CREATEBUTTON\u00a0 steht die Variable unter welcher der Button im Computerspeicher zur Verf\u00fcgung steht. Die Zeichenkette nach dem &#8218;=&#8216; gibt die Beschriftung vor.\r\nREPEAT bezeichnet den Schleifenanfang.\r\nDas Schl\u00fcsselwort IF leitet eine Bedingung ein, ENDIF beendet sie. TRUE kennen wir bereits, ein sogenannter Boolean.\r\n\r\nBei dem Prinzip das Java verfolgt w\u00fcrde das ganze etwas anders aussehen. Auch hier verwenden wir zum besserem Verst\u00e4ndnis erstmal Pseudocode:\r\n(Kommentare \u00fcber mehrere Zeilen wie in diesem Beispiel werden mit \/* *\/ gebildet und werden ebenfalls nicht vom Compiler ausgef\u00fchrt).\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">PROGRAMMANFANG:\u00a0\/*\u00a0Der\u00a0Compiler\u00a0erstellt\u00a0nacheinander\u00a0drei\u00a0Objekte.\u00a0Wobei\u00a0er\u00a0jedesmal\u00a0die\u00a0Beschreibung\u00a0kopiert\u00a0und\u00a0und\u00a0mit\u00a0den\u00a0Daten\u00a0bef\u00fcllt\u00a0die\u00a0in\u00a0der\u00a0KONSTRUIERE-Anweisung\u00a0zu\u00a0finden\u00a0ist.\u00a0*\/\r\n\r\nbutton1\u00a0=\u00a0OBJECT\u00a0BUTTON,\u00a0KONSTRUIERE(\"Button\u00a0eins\");\r\nbutton2\u00a0=\u00a0OBJECT\u00a0BUTTON,\u00a0KONSTRUIERE(\"Button\u00a0zwei\");\u00a0\r\nbutton3\u00a0=\u00a0OBJECT\u00a0BUTTON,\u00a0KONSTRUIERE(\"Abbruch\");\r\n\r\nBESCHREIBUNG eines Objekts vom Datentyp BUTTON: \r\n DATENBLOCK:\r\n  TYP TEXT MeineBeschriftung\r\n DATENBLOCK ENDE\r\n\r\n KONSTRUKTIONSBLOCK:\r\n  erwartet: TYP TEXT\r\n  \u00fcbergabe an Variable: MeineBeschriftung\r\n KONSTRUKTIONSBLOCK ENDE\r\n\r\n MINIPROGRAMM: \r\n  IF I TRUE: \r\n   IF MeineBeschriftung = Abbruch THEN EXIT; \r\n    ELSE PRINT \"Dies ist \" + MeineBeschriftung; \r\n   ENDIF\r\n  ENDIF \r\n MINIPROGRAMM ENDE \r\n\r\nBESCHREIBUNGSENDE<\/pre>\r\nSchon ganz anders oder? Beim Klick auf den Button1 w\u00fcrde &#8222;Dies ist Button eins&#8220; ausgegeben werden. Die Buttons enthalten alle in sich selbst eine eigenes kleines Mini-Programm in Form einer If-Schleife. Diese Mini-Programme werden in Java <em>Methoden<\/em> genannt, da es sich jeweils um eine bestimmte Methode handelt um mit den im Datentyp vorhandenen Daten umzugehen bzw. diese zu manipulieren.\r\nEs entstehen drei\u00a0<em>Objekte<\/em> mit jeweils anderen Eigenschaften, in diesem Fall, andere\u00a0 Beschriftungen. Die Beschreibung des Objekts nennt man normalerweise\u00a0<em>KLASSE.\u00a0<\/em>Zum besseren Verst\u00e4ndnis hab ich es in dem Beispiel BESCHREIBUNG genannt da hier beschrieben wird was ein Objekt vom Typ Button enthalten muss. Im richtigen Quellcode wird dann sp\u00e4ter das Wort <em>class<\/em> benutzt.\r\nPraktischerweise m\u00fcssen die einzelnen Buttons nicht mehr nacheinander wie in Basic abgefragt werden. Die Buttons \u00fcberpr\u00fcfen sich durch die integrierte IF-Abfrage praktisch st\u00e4ndig ob sie gerade angeklickt werden. Dies geschieht mit <em>IF I TRUE.<\/em> Das Objekt fr\u00e4gt sich sozusagen selbst.\u00a0In JAVA wird das dann sp\u00e4ter alles etwas anders formuliert. Z.B. wird das eigene Objekt nicht mit\u00a0<em>I<\/em> sondern mit\u00a0<em>THIS <\/em>angesprochen<em>.\u00a0<\/em>THIS oder deutsch DIES bezieht sich immer auf das direkt umgebende Objekt. Ich habe in dem Beispiel deswegen <em>I<\/em> geschrieben, damit deutlich wird das man in JAVA Objekte m\u00f6glichst eigenst\u00e4ndig &#8222;denkend&#8220; und handelnd ansehen sollte. Letztlich ist es das Ziel diese Objekte so zu programmieren. Damit kann man sie sp\u00e4ter auch in anderen Programmen problemlos wiederverwenden.\r\n\r\nBei dieser Art zu programmieren wird das\u00a0<em>Paradigma<\/em> der <em>Objektorientierung\u00a0<\/em> angewandt. Ein Paradigma in der Informatik bezeichnet den Programmierstil, also die Art und Weise wie man programmiert. BASIC ist wie Assembler eine rein <em>imperative<\/em> Programmiersprache, d.h. es wird ein Befehl nach dem anderem ausgef\u00fchrt. Der Programmierer legt die Reihenfolge fest in der der Computer die Daten abarbeitet. In einer objektorientierten Sprache wie JAVA dagegen legt der Programmierer nur fest um welche Daten es sich handelt und was bei welcher Aktion sich \u00e4ndern soll. Die Reihenfolge (ob jetzt zuerst der Zustand des Button 1 oder Button 2 gemessen wird) \u00fcberl\u00e4sst er dem Computer. Intern wird daraus ganz am Ende nat\u00fcrlich immer eine langer imperativer Assemblercode.\r\n\r\nDie Vorteile der Objektorientierung sind unter anderem:\r\n<ul>\r\n \t<li><span style=\"font-size: 1rem;\">Die <em>KLASSEN<\/em> der Objekte (im obigen Beispiel BESCHREIBUNG sp\u00e4ter in Java <i>class\u00a0<\/i>genannt) k\u00f6nnen in anderen Programmen leicht wiederverwendet werden.<\/span><\/li>\r\n \t<li><span style=\"font-size: 1rem;\">Besonders bei vielen Objekten spart man Quellcode, da man die If-Abfragen nicht selbst anlegen muss.<\/span><\/li>\r\n \t<li><span style=\"font-size: 1rem;\">Objektorientiertes Programmieren ist bei richtiger Anwendung eine sehr saubere und \u00fcbersichtliche Art zu programmieren.\r\n<\/span><\/li>\r\n<\/ul>\r\n<strong>Zusammenfassung<\/strong>\r\n<ul>\r\n \t<li>Eine Klasse ist die Beschreibung eines Datentyps.<\/li>\r\n \t<li>Ein Objekt ist ein aus einer Klasse gebildeter Datentyp.<\/li>\r\n \t<li>Eine Methode ist ein kleines Mini-Programm das mit den Daten im Objekt arbeitet.<\/li>\r\n \t<li>Eine Variable ist der Verweis oder Referenz auf einen Speicherbereich in dem wir Daten ablegen k\u00f6nnen.<\/li>\r\n<\/ul>\r\nDes weiteren enth\u00e4lt jede Klasse auch noch einen sogenannten <em>Konstruktor<\/em>. Ein Konstruktor ist eine Methode die aufgerufen wird sobald aus einer Klasse ein neues Objekt gebildet wird.\r\n<p style=\"text-align: left;\">Aber genug der Theorie. Damit wissen wir bereits genug um mit dem programmieren anzufangen. Dabei werden wir das alles ganz nebenbei auch noch besser verstehen lernen.\r\nInstallieren wir jetzt das JDK.<\/p>\r\n&nbsp;\r\n\r\n\r\n\r\n&nbsp;\r\n\r\n","protected":false},"excerpt":{"rendered":"<p>Im letzten Kapitel haben wir gelernt aus welchen Elementen ein Programm im Prinzip besteht und haben das Element Klasse angesprochen das Teil der objektorientierten Programmierung ist. Eine Klasse ist im Prinzip nichts anderes als eine Beschreibung wie bestimmte Daten verarbeitet werden sollen. Mit dieser Art von Beschreibung wollen wir uns gleich besch\u00e4ftigen. Dazu machen wir [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/286"}],"collection":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/comments?post=286"}],"version-history":[{"count":24,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/286\/revisions"}],"predecessor-version":[{"id":821,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/286\/revisions\/821"}],"wp:attachment":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/media?parent=286"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/categories?post=286"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/tags?post=286"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}