5.4 Aufruf von Methoden Wenn man mehrere Methoden hat, die gleich heißen und sich nur an den Parametern unter- scheiden, so sagt man, sie haben verschiedene Signaturen. Die Signatur ist der Name der Methode zusammen mit den Datentypen ihrer Parameter und ihrem Rückgabetyp. Auch mit einer unterschiedlichen Anzahl an Parametern oder unterschiedlicher Reihenfolge der Parameter haben zwei Methoden unterschiedliche Signaturen. Wenn wir mehrere Methoden mit gleichen Namen aber verschiedenen Signaturen haben, so heißen die Methoden überladen. Allerdings dürfen sich Methoden nicht nur an ihrem Rück- gabewert unterscheiden. Zum Beispiel ist die Methode System.out.println überla- den und kann mit Variablen beliebigen Typs aufgerufen werden oder sogar ohne Parameter. 5.4 Aufruf von Methoden Eine Methode, die sogenannte main-Methode kennen wir schon. Da das Programm zu Ende ist, wenn die main-Methode zu Ende ist, kann sie natürlich auch niemandem et- was zurückgeben und hat daher den Rückgabetyp void. Wenn man ein Programm startet, möchte man diesem Programm oft mitteilen, welche Datei es öffnen soll, oder man möch- te im Programm gleich von Start an gewisse Optionen setzen können, zum Beispiel, dass keine Plugins geladen werden sollen. Solche Aufruf-Argumente werden bei Start eines Java-Programms von der Java-Runtime-Environement in ein String-Array geschrieben und dann der main-Methode übergeben. Aus diesem Grund hat die main-Methode als Para- meter ein String-Array, welches häufig args genannt wird. Wie wir wissen, wird die main-Methode automatisch aufgerufen. Wie ruft man aber nun die anderen Methoden auf? Hierzu muss man lediglich den Methodennamen hinschreiben und die Parameter in Typ und Anzahl korrekt übergeben. Wenn eine Methode einen Rück- gabetyp hat, so speichert man diesen dadurch, dass man den Methodenaufruf - und somit den Rückgabewert - einfach einer Variable geeigneten Typs zuweist. Sehen wir uns hierfür ein Beispiel an: 1 public class Methoden 10 11 public static void main(String[] args) 16 } In der main-Methode wird die power-Methode mit den Argumenten exponent und 2.0 aufgerufen. Die power-Methode berechnet daraufhin 2 hoch 5. Das Ergebnis hiervon, nämlich 32, wird von der power-Methode zurück gegeben und in der main-Methode in der Variablen rueckgabe gespeichert und in der darauffolgenden Zeile ausgegeben. In diesem Beispiel wird die Variable rueckgabe nirgendwo sonst benötigt, daher können wir auch folgende Vereinfachung in der main-Methode vornehmen: 37.
[Audio] In Java wird die Signatur einer Methode durch ihre Parameter und Rückgabetyp festgelegt. Dadurch ist es möglich, dass verschiedene Methoden mit dem gleichen Namen, aber unterschiedlichen Signaturen existieren. Dies wird als Überladen bezeichnet. Die main-Methode dient als Einstiegspunkt für ein Java-Programm und wird automatisch aufgerufen, um Argumente an das Programm zu übergeben. Andere Methoden können durch die Anpassung der Parameter aufgerufen werden und der Rückgabewert kann optional einer passenden Variablen zugewiesen werden. Bei verschachtelten Methodenaufrufen wird die Auswertung von innen nach außen durchgeführt. In unserem Beispiel wird in der main-Methode die Funktion power verwendet, um die Potenz von 2 hoch 5 auszugeben. Das gleiche Ergebnis kann auch mit einer tief verschachtelten power-Funktion in einer einzigen Zeile erreicht werden. Zum Beispiel multipliziert die power-Funktion die Potenz von 3 hoch 3 mit der Potenz von 2 hoch 5 und gibt das Ergebnis von 32 hoch 27 aus..
[Audio] "Die Gültigkeit von Variablen in der imperativen Programmierung ist ein wichtiger Aspekt. Es ist nicht möglich, auf jede deklarierte Variable von jeder Stelle des Programms aus zuzugreifen. Dies liegt daran, dass Variablen immer nur in einem bestimmten Teil des Programms gültig sind. Dieser Bereich wird als Gültigkeitsbereich bezeichnet und wird durch geschweifte Klammern {} markiert. Innerhalb dieser Blöcke sind Variablen "ebenenweise" gültig. Dieses Konzept ist hilfreich, um längere Programme zu schreiben, da es uns vor versehentlicher Mehrfachverwendung von Variablen schützt. Zum Beispiel können wir in einer Schleife eine Zählvariable i verwenden, ohne uns ständig um Konflikte mit anderen i-Variablen kümmern zu müssen. Das folgende Beispiel demonstriert die Funktionsweise von Blöcken. Auch wenn es nicht sinnvoll ist, zeigt es deutlich, dass Blöcke allein die Gültigkeitsbereiche von Variablen bestimmen. In der main-Methode gibt es zwei Blöcke: Block 1 und Block 2. In Block 1 wird eine Variable a mit dem Wert 5 deklariert, in Block 2 wird sie erneut mit dem Wert 4.0f deklariert. Da es sich um zwei separate Blöcke handelt, gibt es keine Konflikte. Wenn die Blöcke nicht markiert wären, würde es zu einer Fehlermeldung kommen. Dies liegt daran, dass Java die Variable a am Ende von Block 1 vergisst und sie im unteren Block erneut deklariert werden kann. Die Gültigkeit von Variablen wird also durch Blöcke bestimmt und ermöglicht eine bessere Strukturierung von Programmen..
[Audio] Java bietet uns die Möglichkeit, Methoden mit verschiedenen Signaturen zu erstellen, basierend auf ihren Parametern und Rückgabetypen. Diese Methoden können überladen werden, solange sie sich in ihrer Signatur unterscheiden. Die "main" Methode wird automatisch aufgerufen und verwendet, um Argumente an ein Java-Programm zu übergeben. Andere Methoden werden einfach aufgerufen, indem die richtigen Parameter angegeben werden und optional der Rückgabewert einer Variablen vom entsprechenden Typ zugewiesen wird. Wir betrachten nun die Gültigkeit von Variablen innerhalb von Blöcken. Im Beispiel sehen wir, dass auf die Variable "a" aus dem äußeren Block zugegriffen werden kann. Wenn jedoch im inneren Block eine Variable mit demselben Namen deklariert wird, greifen wir automatisch auf die innerste Variable zu. Das erklärt die Ausgabe "3" in diesem Beispiel. In Schleifen und bedingten Anweisungen werden automatisch Blöcke verwendet. Variablen, die innerhalb dieser Blöcke deklariert werden, sind außerhalb nicht mehr gültig. In der Schleife in unserem Beispiel ist die Variable "i" gültig, aber außerhalb der Schleife kann nicht mehr auf sie zugegriffen werden, was zu einem Fehler führt. Auch Methoden verwenden Blöcke, wodurch Variablen nur innerhalb dieser Methode gültig sind. Zum Beispiel sind "x", "n", "ergebnis" und "i" innerhalb der Methode "power" gültig, wobei "i" nur innerhalb der Schleife gültig ist und die anderen Variablen in der gesamten Methode gültig sind. Es ist jedoch wichtig zu beachten, dass Methoden normalerweise nicht ineinander verschachtelt sind und somit Variablen nicht zwischen Methoden zugänglich sind. Das war eine kurze Zusammenfassung über die Gültigkeit von Variablen in Java. Wir haben gesehen, dass Blöcke in Form von {}-Klammern sowohl in Schleifen, bedingten Anweisungen als auch in Methoden vorkommen. Sie dienen dazu, Variablen nur innerhalb ihres jeweiligen Gültigkeitsbereichs zugänglich zu machen..
[Audio] In diesem Teil unserer Präsentation beschäftigen wir uns mit der Gültigkeit von Variablen und Blöcken bei Klassen in Java. Dies ist wichtig für das Verständnis der Objektorientierung und hilft bei der Erstellung effizienterer und strukturierterer Programme. In Java können Methoden verschiedene Signaturen haben, abhängig von ihren Parametern und Rückgabetypen. Dies ermöglicht auch die Überladung von Methoden, solange sie sich in ihrer Signatur unterscheiden. Die main-Methode wird automatisch aufgerufen und dient dazu, Argumente an ein Java-Programm zu übergeben. Andere Methoden können durch die Übergabe der richtigen Parameter aufgerufen werden und optional den Rückgabewert einer entsprechenden Variablen zugewiesen werden. Nun gehen wir zu Punkt 6.4 über, in dem es um Blöcke bei Klassen geht. Obwohl wir noch nicht mit Klassen gearbeitet haben, verwenden wir immer den Block der Klasse unseres aktuellen Programms. Auch wenn in diesem Beispiel keine Variablen innerhalb des Klassenblocks vorhanden sind, besitzt die Klasse "Gültigkeit" einen Block, in dem die main-Methode definiert ist. Im Kapitel über Objektorientierung werden wir lernen, dass Variablen auch innerhalb von Klassen eingeführt werden können. Diese Variablen gelten dann nur innerhalb des Klasseblocks, in dem sie definiert wurden. Ein Beispiel für verschiedene Gültigkeitsbereiche zeigt Punkt 6.5 unserer Präsentation. In diesem Beispiel gibt es mehrere Ebenen der Gültigkeit. Der erste Block erstreckt sich über die ganze Klasse, daher wird er auch als Klassenebene bezeichnet. In den beiden Methoden gibt es jeweils eine Methodenebene und innerhalb der oberen Methode existiert zusätzlich noch eine Schleifenebene. Es gibt also verschiedene Bereiche, in denen Variablen definiert und gültig sind. In der Klassenebene ist beispielsweise die Variable "a" gültig. In der Methode "power" sind die Variablen "x", "n" und "ergebnis" gültig und innerhalb der Schleife auch die Variable "i". In der main-Methode existieren die Variablen "args", "b" und eine weitere Variable namens "ergebnis". Diese Informationen sollten dazu beitragen, ein besseres Verständnis für die Gültigkeit von Variablen und Blöcken bei Klassen in Java zu entwickeln..
[Audio] Die Variable a in der Klasse wird innerhalb der Methode automatisch zu einem double konvertiert und zum Ergebnis addiert. Dies geschieht aufgrund der lokalen Variable a, die in der Methode vorhanden ist und den Wert 2 hat. Dabei wird das a aus der Klasse, welches den Wert 3 hat, überdeckt.Die Markierungen | dienen lediglich der Übersicht und gehören nicht zum eigentlichen Programm." Die Variable a innerhalb der Klasse wird automatisch zu einem double konvertiert und zum Ergebnis hinzugefügt. Dies geschieht aufgrund der lokalen Variable a, die in der Methode vorhanden ist und den Wert 2 hat. Dadurch wird die Variable a in der Klasse, welche einen Wert von 3 hat, überschrieben. Die Markierungen dienen nur zur Übersicht und haben keine Funktion im eigentlichen Programm..
[Audio] Zusammenfassend können Java-Methoden je nach Parametern und Rückgabetypen unterschiedliche Signaturen haben und überladen werden, solange sie sich in ihren Signaturen unterscheiden. Die Hauptmethode wird automatisch aufgerufen und verwendet, um Argumente an ein Java-Programm zu übergeben, während andere Methoden einfach durch die Bereitstellung der richtigen Parameter und optional durch die Zuweisung ihres Rückgabewertes an eine Variable des entsprechenden Typs aufgerufen werden können. Rekursion, abgeleitet aus dem lateinischen Wort "recurrere", was "zurücklaufen" bedeutet, bezieht sich auf eine Funktion in der Informatik oder Mathematik, die sich selbst verwendet, um ein Problem zu lösen. Rekursion ist eine Lösungsstrategie für verschiedene Problemstellungen. In den meisten Fällen führt Rekursion zu kompakten und leicht verständlichen Lösungen. Schauen wir uns ein Beispiel an. In der Mathematik gibt es Vorgänger- und Nachfolgerfunktionen, die verwendet werden, um geordnete Mengen zu definieren, wie zum Beispiel die Beschreibung von Eigenschaften natürlicher Zahlen. Eine Zahl hat einen Vorgänger, der um eins kleiner ist als die Zahl selbst. Die folgende Funktion gibt die rekursiven Aufrufe für die Vorgängerfunktion v(x) für jede Zahl x an: v(x) = 0, wenn x = 0; v(x-1) + 1, andernfalls für alle x ∈ N. Für 0 ist v(x) auch 0, und dann ist der Wert der Funktion immer gleich dem Wert der Funktion eine Stelle weiter links, plus eins. Die Vorgängerfunktion wird x-mal aufgerufen, entsprechend der Größe der Zahl x. Im Grunde genommen ist jede Rekursion eine Fallunterscheidung. Es gibt einen Fall für die Abbruchbedingung (auch Basisfall genannt) und einen rekursiven Fall. In dem Beispiel ist x = 0 die Abbruchbedingung. Es empfiehlt sich, bei der Behandlung von Problemen, die mit Rekursion gelöst werden können, zuerst die Abbruchbedingung zu betrachten. Der rekursive Fall tritt in der Regel mehr als einmal auf, dies wird als rekursive Schritte bezeichnet. In dem Beispiel wird dieselbe Funktion f erneut aufgerufen, aber mit geänderten Parametern (x-1) und dann wird das Ergebnis um eins erhöht. Natürlich kann die Formel auch als Methode implementiert werden. 1 int v(int x) else " "In summary, Java methods can have different signatures based on their parameters and return types, and methods can be overloaded as long as they have different signatures. The main method is automatically called and used to pass arguments to a Java program, while other methods are called by simply providing the correct parameters and optionally assigning their return value to a variable of the appropriate type. Recursion, which comes from the Latin word "recurrere" meaning "to run back", refers to a function in computer science or mathematics that reuses itself to solve a problem. Recursion is a solution strategy for a variety of problem scenarios. In most cases, recursion leads to compact and easily understandable solutions. Let's look at an example. In mathematics, there are predecessor and successor functions, used to define ordered sets, such as describing properties of natural numbers. A number has a predecessor, which is one less than the number itself. The following function gives the recursive calls for the predecessor function v(x) for any number x: v(x) = 0, if x = 0 v(x-1) + 1, otherwise for all x ∈ N. For 0, v(x) is also 0, and then the value of the function is always equal to the value of the function one place to the left, plus one. The predecessor function is called x times, according to the size of the number x. In essence, every recursion is a case differentiation. There is a case for the termination condition (also called the base case) and.
[Audio] Heute gebe ich Ihnen einen Überblick über die verschiedenen Formen der Rekursion in Java und deren potenzielle Gefahren. Es ist wichtig zu verstehen, dass Java Methoden unterschiedliche Signaturen haben können und überladen werden können, solange sie sich in ihrer Signatur unterscheiden. Die Hauptmethode wird automatisch aufgerufen, um Argumente an das Java-Programm zu übergeben. Andere Methoden werden durch die Bereitstellung der richtigen Parameter aufgerufen und können optional ihren Rückgabewert einer entsprechenden Variable zuweisen. In Java wird die Rekursion verwendet, um Aufgaben zu lösen, die auch auf Papier rekursiv gelöst werden würden. Java merkt sich dabei, wo ein Aufruf passiert ist und speichert dies im Callstack. Beim Verlassen der Rekursion kann Java somit die richtigen Ergebnisse an den richtigen Stellen einsetzen. Es gibt verschiedene Formen der Rekursion, wie zum Beispiel die lineare Rekursion, bei der ein Aufruf eine Kette von weiteren Aufrufen erzeugt und dann terminiert. Diese Form kann in der Regel durch Schleifen ersetzt werden. Auch die kaskadenförmige Rekursion, bei der mehrere Aufrufe parallel folgen, kann elegant sein, jedoch einen hohen Berechnungsaufwand haben. Ein Beispiel dafür ist die Berechnung der Fibonacci-Zahlen. Bei der wechselseitigen Rekursion rufen sich zwei Funktionen gegenseitig auf und bei der verschachtelten Rekursion werden die Parameter für den Aufruf selbst durch Rekursion bestimmt. Diese Form kann oft schwer nachvollziehbar sein und wird beispielsweise bei der Ackermann-Funktion verwendet. Es ist wichtig, den Basisfall bei der Nutzung von Rekursion korrekt zu konstruieren, da sonst das Programm nicht terminieren kann. Wir hoffen, dass dieser Überblick über die verschiedenen Formen und Gefahren der Rekursion in Java hilfreich war..
[Audio] Die Objektorientierung ist ein neues Konzept, das wir nach dem Erlernen der Grundlagen der imperativen Programmierung kennenlernen. Im Gegensatz zu früheren Programmierparadigmen, bei denen Variablen einem bestimmten Typ angehören mussten, ermöglicht die Objektorientierung eine breitere Vielfalt an Typen. Wie im täglichen Leben, wo wir verschiedene Gegenstände begegnen und sie in Kategorien wie Menschen, Gebäude oder Gegenstände einordnen, sprechen wir in der Objektorientierung von Objekten. Diese Objekte sind jeweils einem bestimmten Typ zugeordnet und können verschiedene Ausprägungen haben. Bei der Objektorientierung versucht man, existierende Aufgaben und Probleme in Objekte umzuwandeln und sie effizient zu verwalten. Dieses Konzept erfordert zunächst eine neue Sichtweise auf Probleme, bietet aber langfristig intuitivere und übersichtlichere Programme sowie weitere Vorteile. In der Praxis werden beispielsweise Bücher, CDs oder DVDs verwaltet, anstatt Gebäude zu programmieren. Als Beispiel möchten wir nun unsere Finanzen erfassen und dazu Konten bei verschiedenen Banken verwalten. Ein Konto hat verschiedene Eigenschaften wie eine Kontonummer, einen Inhaber, einen Kontostand und eine Bankleitzahl. In Java haben wir bisher verschiedene Datentypen kennengelernt, wie beispielsweise int oder double. Mit der Objektorientierung können wir jedoch unsere eigenen Typen, die sogenannten Klassen, definieren. Diese dienen als Vorlage für die Erstellung von Objekten und ermöglichen es uns, komplexere Strukturen zu erstellen. Somit bietet die Objektorientierung eine mächtige Möglichkeit zur Verwaltung und Organisation von Daten und Aufgaben..
[Audio] In dieser Präsentation haben wir uns mit der objektorientierten Programmierung in Java beschäftigt. Wir haben gelernt, dass Klassen den Bauplan für Objekte darstellen und dass Objekte Instanzen von Klassen sind. Ein wichtiger Aspekt der Objektorientierung ist, dass Klassen immer groß geschrieben werden sollen. Bei zusammengesetzten Klassennamen beginnt jeder Teil mit einem Großbuchstaben, z.B. BankAutomatKartenLeser. Unsere Klasse "Konto" hat die Attribute Inhaber, Guthaben, Nummer und BLZ mit den Datentypen String, double und int. Diese Attribute können mit Hilfe der Objekte der Klasse befüllt und genutzt werden. Bei der Erstellung von Objekten muss das Schlüsselwort "new" verwendet werden, z.B. Konto giro = new Konto(); Dadurch wird ein Objekt vom Typ Konto mit allen Attributen angelegt. Um die Attribute zu befüllen, nutzen wir die Schreibweise Variablenname.Attribut, ähnlich wie bei der Initialisierung von Variablen mit primitiven Datentypen. Es ist auch möglich, mehrere Objekte einer Klasse anzulegen, indem wir ein Array mit dem Datentyp Konto erstellen. Zusammenfassend können Java-Methoden aufgrund ihrer Parameter und Rückgabetypen verschiedene Signaturen haben, und Methoden können überladen werden, solange sie verschiedene Signaturen haben. Die Hauptmethode wird automatisch aufgerufen und zur Übergabe von Argumenten an ein Java-Programm verwendet, während andere Methoden einfach durch Bereitstellen der richtigen Parameter aufgerufen werden können und optional ihren Rückgabewert einer Variable des entsprechenden Typs zuweisen..
[Audio] Die Signatur einer Java-Methode besteht aus den Parametern und dem Rückgabetyp. Mehrere Methoden können den gleichen Namen haben, solange sie unterschiedliche Signaturen haben. Die main-Methode wird automatisch beim Ausführen des Programms aufgerufen und erhält Argumente als Parameter. Andere Methoden können durch die Übergabe der richtigen Parameter aufgerufen werden und können optional einen Rückgabewert liefern, der in einer Variablen gespeichert werden kann. Es gibt auch nicht-statische Methoden, die nur aufgerufen werden können, wenn ein Objekt existiert. In unserem Beispiel haben wir eine nicht-statische Methode hinzugefügt, die das Abheben von Geld von einem Konto ermöglicht. Die Bank kann ein Limit festlegen, bis zu dem das Konto überbucht werden kann. Diese Methode erfordert ein vorher erstelltes und befülltes Objekt. Eine wichtige Erweiterung unserer Klasse ist das Attribut limit, das es der Bank ermöglicht, die maximale Überbuchung festzulegen. Bei einem Limit von -500 ist es möglich, das gesamte Guthaben und zusätzlich 500 abzuheben, danach gibt die Methode false zurück. Negative Beträge können durch die Methode abgefangen werden. Zusammenfassend sind Java-Methoden anhand ihrer Signatur unterscheidbar und können überladen werden. Die main-Methode ist eine Ausnahme, da sie automatisch aufgerufen wird. Nicht-statische Methoden sind direkt mit einem Objekt verbunden und erfordern ein vorher erstelltes Objekt. Das neue Attribut limit ermöglicht es, die Überbuchung eines Kontos zu begrenzen. Um eine Methode aufzurufen, muss ein Objekt erstellt und befüllt werden..
[Audio] Java-Methoden können verschiedene Signaturen haben, je nach ihren Parametern und Rückgabetypen. Auch die Überladung von Methoden ist möglich, solange sie unterschiedliche Signaturen haben. Die Hauptmethode wird automatisch aufgerufen und dient dazu, Argumente an ein Java-Programm zu übergeben. Andere Methoden können einfach durch Bereitstellen der richtigen Parameter aufgerufen werden und optional kann deren Rückgabewert einer Variable des entsprechenden Typs zugewiesen werden. Im Allgemeinen nimmt ein Konstruktor die verschiedenen Werte für die Attribute eines Objekttyps entgegen. Es ist auch möglich, mehrere Konstruktoren zu haben, um beispielsweise den Fall abzudecken, dass ein Attribut unbekannt ist und daher mit dem Standardwert gefüllt werden muss. In unserem Beispiel haben wir eine Klasse namens "Konto" erstellt, die über zwei Konstruktoren verfügt. Der erste Konstruktor nimmt alle relevanten Informationen entgegen, einschließlich des Namens des Kontoinhabers, des Guthabens, der Kontonummer, der Bankleitzahl und des Limits. Der zweite Konstruktor erwartet dieselben Informationen, setzt jedoch das Guthaben auf 0. Um ein Objekt vom Typ "Konto" zu erstellen, können wir den entsprechenden Konstruktor verwenden und alle erforderlichen Informationen bereitstellen. Beispielsweise können wir mit dem ersten Konstruktor ein Girokonto für Max Mustermann erstellen, indem wir seinen Namen, sein Guthaben, seine Kontonummer, seine Bankleitzahl und das Limit übergeben. Java ergänzt automatisch einen leeren Konstruktor, wenn wir eine Klasse erstellen. Wenn wir jedoch selbst einen oder mehrere Konstruktoren schreiben, wird der leere Konstruktor nicht mehr automatisch erstellt. Dies bedeutet, dass wir in unserem Beispiel nur noch die von uns geschriebenen Konstruktoren verwenden können. In unserem vorherigen Kapitel haben wir uns mit der Gültigkeit von Variablen befasst. Nun betrachten wir, wie es sich mit der Gültigkeit von Attributen verhält..
[Audio] Es ist möglich, in Java verschiedene Methoden mit unterschiedlichen Signaturen zu erstellen, die auf ihren Parametern und Rückgabetypen basieren. Diese Methoden können überladen werden, solange sie sich in ihrer Signatur unterscheiden. Die main-Methode wird automatisch aufgerufen und verwendet, um Argumente an ein Java-Programm zu übergeben. Andere Methoden können einfach durch die Bereitstellung der richtigen Parameter aufgerufen werden und optional kann ihr Rückgabewert einer Variablen des entsprechenden Typs zugewiesen werden. Bei der Deklaration von Attributen in Klassen ist es wichtig zu beachten, dass öffentliche und private Attribute immer deklariert werden müssen. Werden ihnen dabei kein Wert zugewiesen, werden sie mit einem Standardwert initialisiert. Dieser Standardwert ist für numerische Werte 0, für boolesche Werte false und für alle anderen Datentypen, einschließlich selbst erstellter Typen, null. Jedoch ist es nicht garantiert, dass alle Java-Versionen auf allen Geräten dieselben Standardwerte für primitve Datentypen verwenden. Daher ist es empfehlenswert, Attributen entweder bei der Deklaration oder im Konstruktor einen Startwert zuzuweisen. Andernfalls kann ein Zugriff auf ein nicht initialisiertes Objekt zu einem Laufzeitfehler führen, der das Programm ohne weitere Behandlung abstürzen lässt. Wie schon erwähnt, können Klassen auch statische Methoden enthalten, die auch außerhalb von Objekten zugreifbar sind. Es ist auch möglich, statische Attribute zu erstellen. Ein Beispiel hierfür ist das statische Attribut "anzahl", mit dem wir die Gesamtzahl der erstellten Konten verfolgen können. Wenn es umständlich wäre, die Anzahl der Konten jedes Mal von Hand zu zählen, wenn wir ein neues Konto anlegen, kommt der Konstruktor ins Spiel, der diese Aufgabe automatisch für uns erledigen kann. Wir greifen auf Objektattribute, wie "inhaber" oder "nummer", indem wir den Objektnamen gefolgt von einem Punkt und dem Attributnamen schreiben. Für statische Attribute verwenden wir jedoch den Klassennamen, gefolgt von einem Punkt und dem Attributnamen. In unserem Beispiel wäre das also "Konto.anzahl"..
[Audio] In dieser Präsentation wurde die Objektorientierung und ihre Bedeutung in Java behandelt. Es wurde erklärt, dass private Attribute und Methoden nur innerhalb einer Klasse verwendet werden können, während public Attribute und Methoden für externe Verwendung zugänglich sind. Dies ermöglicht es uns, die Veränderung von Attributen nur auf bestimmte Weise zu erlauben. Bei unserem Beispiel eines Kontos bedeutet dies, dass wir bestimmen wollen, wie das Guthaben verändert werden darf. Deshalb halten wir das Attribut privat und fügen unserer Klasse eine Methode zum Einzahlen auf das Konto hinzu, die einen Sicherheitsmechanismus enthält. Im Anschluss haben wir uns mit der Notwendigkeit von public und private auseinandergesetzt. Auch wenn es zu Beginn der Objektorientierung möglicherweise nicht offensichtlich erscheint, ist die Einschränkung der Sichtbarkeit eine wichtige Maßnahme, um die Komplexität von Programmen zu beherrschen. Um dies zu verdeutlichen, betrachten wir ein Beispiel mit einem Fernseher. Nur die Anschlüsse, die der Anwender benutzen soll, werden nach außen geführt, während andere Anschlüsse, die der Fernseher benötigt, aber der Anwender nicht beeinflussen soll, privat bleiben. Zusammenfassend haben wir gelernt, dass Java-Methoden aufgrund ihrer Parameter und Rückgabetypen verschiedene Signaturen haben können und dass Methoden nur dann überladen werden können, wenn sie sich in ihrer Signatur unterscheiden. Die main-Methode wird automatisch aufgerufen und verwendet, um Argumente an ein Java-Programm zu übergeben, während andere Methoden einfach durch Übergeben der korrekten Parameter aufgerufen werden können. Vielen Dank für Ihre Aufmerksamkeit..
[Audio] In Java gibt es verschiedene Möglichkeiten, Methoden zu definieren. Eine wichtige Eigenschaft von Methoden sind ihre Signaturen, die durch die Parameter und Rückgabetypen bestimmt werden können. Durch Überladung können Methoden mit unterschiedlichen Signaturen erstellt werden. Die Hauptmethode wird automatisch aufgerufen und dient dazu, Argumente an ein Java-Programm zu übergeben. Andere Methoden können einfach durch Angabe der richtigen Parameter aufgerufen werden und optional kann der Rückgabewert einer passenden Variablen zugewiesen werden. Ein weiteres wichtiges Konzept in der objektorientierten Programmierung ist die Kapselung oder auch das Geheimnisprinzip genannt. Dies bedeutet, dass der Nutzer einer Klasse sich nicht um den internen Ablauf der Methoden kümmern muss und somit auch spätere Änderungen an der Implementierung möglich sind. Die Entwicklungsumgebung zeigt dabei nur die öffentlichen Teile einer Klasse an, wodurch der Nutzer einen guten Überblick über den Funktionsumfang erhält, ohne sich um interne Details kümmern zu müssen. Dies ist besonders vorteilhaft, da es dem Nutzer egal sein kann, ob es mehrere Hilfsmethoden oder interne Attribute gibt, die durch die Kennzeichnung als privat nicht nach außen sichtbar sind. Wenn zwei Variablen auf dasselbe Objekt verweisen, wird in Java lediglich ein Verweis auf das Objekt selbst in der Variablen gespeichert. Dieser Verweis wird auch Referenz genannt und kann sehr nützlich sein, um beispielsweise Objekte zu vergleichen. Im Gegensatz dazu werden einfache Datentypen wie int als Kopien des Wertes in den Variablen gespeichert. Das bedeutet, dass bei der Zuweisung einer Variable zu einer anderen, eine Kopie des Wertes erstellt wird und somit beide Variablen unabhängig voneinander sind. Diese Unterschiede zwischen Objekten und einfachen Datentypen sollten bei der Programmierung beachtet werden, um unerwartete Ergebnisse zu vermeiden. Insgesamt bietet die objektorientierte Programmierung viele Vorteile, wie die Kapselung und die Möglichkeit der Überladung von Methoden. Durch Verwendung von Referenzen können außerdem effizienter mit Objekten gearbeitet werden. Es ist jedoch auch wichtig, die Unterschiede zwischen Objekten und einfachen Datentypen zu verstehen und entsprechend zu berücksichtigen. Nur so können wir die volle Leistungsfähigkeit von Java nutzen..
[Audio] Die Programmiersprache Java bietet zahlreiche Möglichkeiten der Objektorientierung, um komplexe Anwendungen zu erstellen. Dabei spielen die Java-Methoden eine wichtige Rolle. Diese können je nach Parametern und Rückgabetyp verschiedene Signaturen haben. Durch sogenanntes "Overloading" können Methoden mehrmals mit unterschiedlichen Signaturen verwendet werden. Bei der Ausführung des Java-Programms wird automatisch die "main" Methode aufgerufen. Diese dient dazu, Argumente an das Programm zu übergeben. Andere Methoden können durch Angabe der passenden Parameter aufgerufen werden und der Rückgabewert kann optional einer geeigneten Variablen zugewiesen werden. Ein Beispiel für die Verwendung von Objektorientierung im Bankbereich ist die Klasse "Konto". Diese kann verschiedene Eigenschaften wie Name, Kontostand oder Referenznummer haben. Durch die Initialisierung mit entsprechenden Werten können diese Eigenschaften genutzt werden. Wenn jedoch versucht wird, über eine Null-Referenz auf Eigenschaften oder Methoden zuzugreifen, kommt es zu einem Laufzeitfehler oder sogar einem Programmabsturz. Dies kann zum Beispiel passieren, wenn ein Objekt gelöscht wird, indem die Referenz auf null gesetzt wird. Beim Versuch, auf die Eigenschaft "blz" des gelöschten Objekts zuzugreifen, tritt ein Null-Pointer-Fehler auf. Dies gilt auch für nicht initialisierte Objekte. Daher ist es wichtig, sorgfältig mit Objekten umzugehen und Null-Referenzen zu vermeiden..
[Audio] In der Informatik gibt es abstrakte Datentypen, die komplexe Daten oder Mengen davon repräsentieren können. Diese erweiterten Datentypen sind wichtig für Algorithmen und Problemlösungen und ermöglichen effiziente Lösungen. Abstrakte Datentypen sind Beschreibungen von Datenstrukturen und deren Funktion. Viele Programmiersprachen, wie Java, haben bereits vorimplementierte erweiterte Datentypen. Im Informatikstudium sollte man jedoch selbst einfache abstrakte Datentypen implementieren, um ein besseres Verständnis zu erlangen. Ein Beispiel dafür ist die Liste, die ähnlich wie ein Array mehrere Elemente eines bestimmten Typs aufnehmen kann. Im Gegensatz zu einem Array kann eine Liste jedoch eine variable Anzahl von Elementen aufnehmen und die Länge der Liste kann dynamisch geändert werden. Weitere wichtige Datentypen sind Stapel, Schlangen, Bäume, Halden oder assoziative Arrays. In der Vorlesung "Algorithmen und Datenstrukturen" wird das Thema der abstrakten Datentypen vertieft. Eine Liste besteht aus einzelnen Listenelementen, die verbunden sind..
[Audio] Es existieren verschiedene Arten von Java-Methoden, die sich durch ihre Parameter und Rückgabetypen in ihrer Signatur unterscheiden können. Diese Methoden können auch überladen werden, solange ihre Signaturen sich unterscheiden. Die Hauptmethode wird automatisch aufgerufen und verwendet, um Argumente an ein Java-Programm zu übergeben. Andere Methoden können durch die Angabe der korrekten Parameter aufgerufen werden und optional ihren Rückgabewert einer Variablen des entsprechenden Typs zuweisen. Auf Folie 18 unserer Präsentation betrachten wir die Verwendung von einfachen abstrakten Datentypen. Bislang haben wir nur einzelne Elemente und noch keine echte Liste erstellt, da die Reihenfolge der Elemente noch nicht festgelegt wurde. Für diese Festlegung wird das zweite Element als Nachfolger des ersten referenziert. Nach Definition ist das letzte Element der Liste dasjenige, welches keinen Nachfolger mehr besitzt. Es hat also die Nachfolger-Referenz "null". Um später einfacher mit der Liste zu arbeiten, bieten wir die Erstellung einer Listenklasse an. Diese umhüllt das erste Listenelement und bietet somit Zugriff auf die Liste in Form eines einzelnen Objekts. In unserer Beispielklasse "Liste" wird der Listenkopf durch das erste Listenelement initialisiert. Außerdem gibt es Methoden wie "laenge()", die die Anzahl aller Elemente zählen, und "fuegeHinzu()", um ein neues Element in die Liste aufzunehmen. Um die Liste zu erstellen, können wir die Listenklasse verwenden und die einzelnen Elemente mit der "fuegeHinzu()" Methode hinzufügen. Wie man sehen kann, hat die Einführung einer eigenen Klasse für die Liste viele Vorteile, da Operationen wie das Iterieren über die Liste sich auf die gesamte Liste beziehen können. Auf Abbildung 9.1 ist unsere bisherige Liste mit drei Elementen zu sehen. Eine typische Operation auf Listen ist das sogenannte "Iterieren" über die Elemente. Dies bedeutet, dass man nacheinander über jedes Element der Liste läuft und eine bestimmte Aktion ausführen kann. Auf der nächsten Folie werden wir uns die genaue Implementierung eines solchen Iterators anschauen..