{"id":284,"date":"2018-08-03T10:00:51","date_gmt":"2018-08-03T08:00:51","guid":{"rendered":"https:\/\/freizone.net\/java-einfach-lernen\/?p=284"},"modified":"2020-05-11T19:29:40","modified_gmt":"2020-05-11T17:29:40","slug":"grundlagen-der-programmierung","status":"publish","type":"post","link":"https:\/\/freizone.net\/java-einfach-lernen\/2018\/08\/03\/grundlagen-der-programmierung\/","title":{"rendered":"Grundlagen der Programmierung"},"content":{"rendered":"<p>Wir haben gelernt das man in Assembler bin\u00e4re Anweisungen in Schl\u00fcsselw\u00f6rter, den Mnemonics, zusammenfasst. Ebenso, das oft verwendete Aktionen in Interrupts organisiert wurden und ebenfalls in Assembler aufgerufen werden konnten. Wir werden uns nur kurz theoretisch mit Assemblerprogrammen befassen um die Vorteile einer h\u00f6heren Programmiersprache besser zu verstehen.<\/p>\n<p>Daten werden in Computer in Registern gespeichert. Ein Register hat eine eine Startadresse. Man kann sich das einfach als Tabelle vorstellen wobei der linke Wert die Adresse darstellt und der rechte Wert das was dort gespeichert ist.<br \/>\nZ.B. so:<\/p>\n<table>\n<tbody>\n<tr>\n<th align=\"center\">Adresse<\/th>\n<th align=\"center\">Wert<\/th>\n<\/tr>\n<tr>\n<td align=\"center\">0<\/td>\n<td align=\"center\">Hallo Welt<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">1<\/td>\n<td align=\"center\">f8E24D<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">2<\/td>\n<td align=\"center\">42<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Sehen wir uns nun ein einfaches Assemblerprogramm genauer an. Die nach dem Doppelslash\u00a0<code>\/\/<\/code>\u00a0folgenden Erl\u00e4uterungen sind Kommentare. Kommentare k\u00f6nnen mithilfe des Doppelslashs in fast allen Programmiersprachen hinzugef\u00fcgt werden.<br \/>\n<strong>Wichtig:<\/strong> Das Programm ist nur ein Beispiel f\u00fcr die komplizierte Programmierung mit Assembler. Ihr m\u00fcsst es nicht zwingend verstehen, es reicht zu wissen das Assemblerprogramme kompliziert sind und deshalb sogenannte <em>h\u00f6here<\/em> <em>Programmiersprachen<\/em> entwickelt wurden mit denen man einfacher und bequemer programmieren kann. Eine dieser Hochsprachen ist Java.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">org 100h           \/\/ Startadresse, 'org' steht f\u00fcr 'origin'\r\nstart:             \/\/ Markierung des Programmanfangs\r\nmovdx,unsertext    \/\/ Verschiebe das was in unsertext gespeichert ist (letzte Zeile) in das dx register\r\nmovah,09h          \/\/ Verschiebe den Wert 09h in das Register ah\r\nint21h             \/\/ F\u00fchre Interrupt Nr. 21h aus (Der Interrupt 21h hat 29 Funktionen und sieht immer im ah Register nach welche er ausf\u00fchren soll.\r\nmoval,0            \/\/ Speicher 0 im Register al\r\nmovah,4Ch          \/\/ Speicher Interruptaktion 4Ch in Register ah\r\nint21h             \/\/ Wie oben\r\nsection.data unsertext:db'Hallo Welt',13,10,'$' \/\/ 13 = Wagenr\u00fccklauf, 10= Zeilenvorschub $ = wird als String markiert<\/pre>\n<p>Zeile 4: Der Wert 09h ergibt sich daraus, das der Programmierer eine Interrupttabelle zur Hand hat in der er nachschauen kann welche Nummer die Aktion &#8218;Bildschirmausgabe&#8216; hat. In diesem Fall ist das die Aktion 9h des Interrupts 21h. Dieser Wert wird dann im ah Register gespeichert. Anschlie\u00dfend wird der Interrupt 21h aufgerufen welcher dann den Register ah ausliest und ausf\u00fchrt.<br \/>\nZeile 9: Hier wird die <em>Variable<\/em> <code>usertext <\/code>mit &#8218;HalloWelt&#8216; bef\u00fcllt. Eine Variable kann man sich als einen Beh\u00e4lter vorstellen in dem man Daten ablegen kann. Ausserdem muss festgelegt werden was f\u00fcr eine Art von Daten man in solch einer Variablen ablegt. Ob es z.B. Zeichen oder Zahlen sind. Ein &#8218;$&#8216; kennzeichnet diese Variable als vom Datentyp &#8218;String&#8216; das ist eine normale Zeichenkette die aus Buchstaben und Zahlen bestehen kann, in diesem Fall &#8218;Hallo Welt&#8216;. Ein <em>Datentyp<\/em> stellt wie der Name schon sagt, den Typ der betreffenden Daten dar, also z.B. reine Zahlenwerte oder Buchstaben bzw. Unicode-Zeichen aber auch komplexere Strukturen wie Buttons oder Grafikobjekte.<br \/>\nDie Zeilen 6-8 beenden das Programm und funktionieren \u00e4hnlich, wobei die Aktion 4Ch auf das al-Register zugreift das in Zeile 6 mit 0 gef\u00fcllt wurde. Dies bedeutet den Programmabbruch.<\/p>\n<p>Wir sehen also, das es relativ kompliziert ist ein Programm in Assembler zu schreiben.<\/p>\n<p>In Java ist das einfacher. Man w\u00fcrde schreiben: <code>System.out.println(\"Hallo Welt!\");<\/code><br \/>\nSchon viel einfacher oder?<\/p>\n<p>Um zu Programmieren braucht man mindestens:<\/p>\n<ul>\n<li>Schl\u00fcsselw\u00f6rter<\/li>\n<li>Variable<\/li>\n<li>Rechenzeichen<\/li>\n<\/ul>\n<p>Ein einfaches Programm das alle drei enth\u00e4lt k\u00f6nnte so aussehen:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">String data1 = \"James Bond: \";\r\nString data2= \"Agent 007\";\r\nSystem.out.println(data1 + data2);<\/pre>\n<p><em>Variablen<\/em> sind wie wir bereits gelernt haben Platzhalter oder &#8222;Beh\u00e4lter&#8220; von Daten. Im obigen Programm wird die Zeichenkette &#8222;James Bond: &#8220; in einer Variablen vom Typ String namens <code>data1<\/code> gespeichert. Dasselbe wird mit Agent 007 gemacht. Dann wird das ganze mit dem <code>System.out.println<\/code> ausgegeben. Das + bewirkt hier das beide Buchstaben zusammengef\u00fcgt werden. Das Ergebnis w\u00e4re <code>James Bond: Agent 007<\/code>.<\/p>\n<p><code>String<\/code> ist das Schl\u00fcsselwort f\u00fcr ein eine Zeichenkette. Zeichenketten k\u00f6nnen auch Zahlen enthalten, nur mit dem Unterschied das der Computer wei\u00df, das er diese nicht wie Zahlen behandeln muss. Das heisst in einem solchen Fall:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">String data1 = \"10\";\r\nString data2= \"20\";\r\nSystem.out.println(data1 + data2);<\/pre>\n<p>W\u00e4re das Ergebnis 1020. Da es sich um eine Zeichenkette handelt, f\u00fcgt der Computer diese nur zusammen. <span style=\"font-size: 1rem;\">Mit <\/span><code>String<\/code><span style=\"font-size: 1rem;\"> teilen wir also dem Compiler mit, das data1 eine Zeichenkette enth\u00e4lt. Mit dem <\/span><code>=<\/code><span style=\"font-size: 1rem;\"> wird dann das &#8222;A&#8220; der Variablen data1 zugeordnet.<br \/>\n<\/span><span style=\"font-size: 1rem;\">In Java muss bei der Erstellung einer Variablen dem Compiler immer mitgeteilt werden um was f\u00fcr einen Typ es sich handelt.<\/span><\/p>\n<p>Zu einem anderen Ergebnis w\u00fcrde man in diesem Fall kommen:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">int data1 = \"10\";\r\nint data2= \"20\";\r\nSystem.out.println(data1 + data2);<\/pre>\n<p><span style=\"font-size: 1rem;\">Hier w\u00fcrde <code>30<\/code> ausgegeben werden, da<\/span><span style=\"font-size: 1rem;\">\u00a0mit <code>int<\/code> die Variablen als Datentyp <code>Integer<\/code> ausgewiesen (auch deklarieren genannt) werden. <code>Integer<\/code> sind ganze Zahlen. Es werden pro Integer-Variable 32 Bit im Arbeitsspeicher belegt. Damit kann man Zahlen im Bereich von -2.147.483.648 bis 2.147.483.647 darstellen.<br \/>\nDa der Computer jetzt wei\u00df, das es sich um Zahlen handelt, addiert er den Inhalt beider Variablen.<br \/>\n<\/span>Der Name eines Schl\u00fcsselworts darf \u00fcbrigens nicht f\u00fcr Variablennamen verwendet werden.<\/p>\n<p>In Java gibt es Standard-Datentypen, sogenannte <em>primitive Datentypen. <\/em>Diese k\u00f6nnen mit dem vornangestellten Typnamen erstellt werden z.B. <code>String<\/code>\u00a0ist einer dieser Typen.<br \/>\nWenn man nur den Typnamen mit nachfolgendem Variablennamen angibt, z.B. nur\u00a0<code>String buchstaben;<\/code>, handelt es sich um eine <em>Deklaration<\/em><em>,\u00a0<\/em>man macht sozusagen dem Computer eine Variable bekannt.<br \/>\nWird, wie oben der Variablen auch noch ein Wert zugewiesen also<br \/>\n<code>String data1 = \"A\";<\/code>\u00a0spricht man davon, das die Variable auch noch <em>initialisiert<\/em> wurde.<br \/>\nMit dieser Anweisung haben wir also eine <em>Variable deklariert <\/em>und <em>initialisiert.<\/em><\/p>\n<p>Die ersten beiden Zeilen w\u00e4ren in den meisten Programmiersprachen \u00e4hnlich. Die dritte Zeile jedoch weist eine Besonderheit auf.<br \/>\n<code>System.out.println<\/code>\u00a0ist in Java kein Schl\u00fcsselwort. Es ist ein Zugriff auf die <em>Klassenbibliothek<\/em> <em>java.lang.<\/em>\u00a0Klassenbibliotheken sind in Java hierachisch strukturiert also praktisch wie einem Ordnersystem. Die ben\u00f6tigten Klassenbibliotheken werden am Anfang eines Programms geladen.<br \/>\nEs wird also zun\u00e4chst die Klasse System aufgerufen. Diese Klasse enth\u00e4lt ein Objekt namens out, das die\u00a0Methode\u00a0<em>println <\/em>(ln = line also print line) zur Verf\u00fcgung stellt. Diese Methode \u00fcbernimmt dann die Ausgabe. Eine Methode ist ein kleines Miniprogramm. Methoden sind normalerweise in Klassen und Objekten zu finden. Mithilfe einer <em>Klasse<\/em> kann man sich praktisch so etwas \u00e4hnliches wie ein Schl\u00fcsselwort selbst schreiben. Klingt doch super. Und hier sind wir auch schon mitten im <em>Paradigma der Objektorientierung.\u00a0<\/em>Mit diesem Paradigma und den Unterschieden zur <em>Prozessorientierung<\/em> wollen wir uns im n\u00e4chsten Kapitel besch\u00e4ftigen. Dort erfahren wir dann auch ganz genau was es mit den Klassen und Objekten auf sich hat.<\/p>\n<p><strong>Zusammenfassung<\/strong><\/p>\n<ul>\n<li>Daten werden im Computer in Registern gespeichert, bestehend aus einer Adresse und einem Wert.<\/li>\n<li>Eine Variable ist ein Beh\u00e4lter der einen Namen hat und auf eine bestimmte Speicheradresse verweist. Diese Speicheradresse enth\u00e4lt Daten eines bestimmten Typs.<\/li>\n<li>Variable k\u00f6nnen <em>deklariert\u00a0<\/em>(Erstellung) und <em>initialisiert <\/em>(bef\u00fcllt)\u00a0werden.<\/li>\n<li>Ein <em>Schl\u00fcsselwort<\/em> hat eine bestimmte Bedeutung und ist f\u00fcr diesen Zweck reserviert. Der Name eines Schl\u00fcsselworts darf nicht f\u00fcr Variablennamen verwendet werden.<\/li>\n<li>Mithilfe von <em>Rechenzeichen <\/em>k\u00f6nnen Berechnungen durchgef\u00fchrt werden, aber auch Zeichenketten verbunden werden.<\/li>\n<li>Ein <em>Paradigma<\/em> ist das Prinzip oder die Art und Weise nach der programmiert wird.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Wir haben gelernt das man in Assembler bin\u00e4re Anweisungen in Schl\u00fcsselw\u00f6rter, den Mnemonics, zusammenfasst. Ebenso, das oft verwendete Aktionen in Interrupts organisiert wurden und ebenfalls in Assembler aufgerufen werden konnten. Wir werden uns nur kurz theoretisch mit Assemblerprogrammen befassen um die Vorteile einer h\u00f6heren Programmiersprache besser zu verstehen. Daten werden in Computer in Registern gespeichert. [&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\/284"}],"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=284"}],"version-history":[{"count":25,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/284\/revisions"}],"predecessor-version":[{"id":992,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/284\/revisions\/992"}],"wp:attachment":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/media?parent=284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/categories?post=284"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/tags?post=284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}