 Ja, willkommen zurück zu Programmiertparadigmen und zum Teil 4 des Moduls zu Names, Scopes und Bindings. Was wir hier jetzt machen wollen, ist uns zwei Sonderfälle von diesem ganzen Binden von Namen an Speicherobjekte anzuschauen, nämlich Aliasing und Overloading. Diese zwei Konzepte, Aliasing und Overloading, sind in dem Sinne besonders, dass wir hier eben nicht diese 1 zu 1-Assoziation zwischen Namen und den Speicherobjekten haben, worauf die Namen zeigen, sondern dass entweder mehrere Namen auf derselbe Speicherobjekt zeigen oder Einnahme auf verschiedene Objekte im Speicher zeigen kann. Also im Falle vom Aliasing ist es so, dass zwei oder auch noch mehr Namen auf derselbe Objekt zeigen. Das kann also zum Beispiel in der Form passieren, dass wir mehrere lokale Variablen haben, die aber jeweils auf derselbe Speicherobjekt zeigen. Und Overloading ist genau dasselbe nur andersrum, denn hier haben wir einen Namen, der aber der Umstände auf mehrere Speicherobjekte zeigt und wann genau das vorkommen kann, sehen wir gleich. Schauen wir uns zunächst erstmal ein Beispiel für Aliasing an und zwar zur Abwechslung diesmal in Form von einem Stück C Code. Wir haben hier erstmal eine Main Funktion, also da geht die ganze Ausführung dann los. Was wir da machen ist, dass wir als erstes mal eine Variable N definieren, die ein Double Wert enthält und zwar fünf und dann haben wir hier noch ein Double Pointer, also dieses kleine Sternchen heißt, dass wir einen Pointer auf einen Double Wert haben, also sprich das ist die Adresse eines Stückes Speicher, in dem dann ein Double Wert steht und zwar was da drin steht, ist die Adresse von N, also das wird auf dieselbe Stelle dem Speicher zeigen, wie das N, wo ja schon diese 5,4 drin steht. Dann übergeben wir dieses N beziehungsweise auch diesen Pointer P an diese Funktion H und die ist hier oben deklariert und definiert, was H macht ist, es bekommt erst mal ein Argument A und zwar ist das eine Adresse auf ein Double, also dieses Argument ist passed by reference, wir werden später noch sehen, was das genau heißt und was es da alles für Varianten gibt, aber jetzt für das Beispiel reicht es erst mal zu verstehen, dass das hier oben eine Adresse auf ein Stück Speicher ist, an dem ein Double Wert steht und ja, was der, was diese Funktion dann macht, ist einfach den Wert zu halbieren und wieder in A zurückzuschreiben, sprich wieder an genau dieselbe Stelle zu schreiben, wie diese Adresse, die eben hier übergeben wurde und schlussendlich wird das Ganze dann ausgegeben. Wer seine Zielkenntnisse jetzt mal kurz testen möchte, kann gerne mal Pause machen und überlegen, was da rauskommt. Für alle anderen mache ich jetzt mal weiter, weil eigentlich geht es hier um Alesing und das Interessante an dem Beispiel ist, dass diese drei Namen, das A hier oben, das N in der Mitte und das P unten, eigentlich alle auf dasselbe Speicherobjekt zeigen, also das ist diese 5, die irgendwo im Speicher gespeichert ist und P dadurch, dass es eben einfach nur eine Adresse auf dieses Stück Speicher enthält und dann später auch A, in dem es eben wieder eine Adresse enthält, die auch auf dasselbe Stück Speicher zeigen, sind alles Alias für den selben Wert, also das sind drei Namen A, N und P, die eben alle auf den selben Wert zeigen. Und weil es eben immer derselbe Wert ist und weil der hier oben dann auch wieder gleich überschrieben wird, wird dieser Wert 5 einfach zweimal halbiert, sprich am Ende kommt 1,25 raus und das ist dann das Ergebnis, was hier auch ausgegeben wird. So, nach diesem Beispiel für Alesing schauen wir uns jetzt mal ein Beispiel für das, naja, ein gegengesetzte Konzept an, nämlich Overloading. Beim Overloading haben wir die Situation, dass ein Name auf zwei oder mehr Objekte im Speicher zeigen kann und als Beispiel dafür haben wir hier mal ein Stückchen Java, also wir haben hier so eine Klasse, die heißt Overloading. In der Klasse gibt es vier Methoden, nämlich diese drei Methoden hier oben plus diese statische Methode hier unten. Was die statische Methode unten macht, ist erstmal eine Instanz der Klasse zu erstellen und dann auf dieser Instanz FU aufzurufen. Und es interessanter an dem Beispiel ist jetzt, dass es drei verschiedene FU Methoden gibt, die alle denselben Namen haben. Das heißt, die Frage ist, was wird denn eigentlich aufgerufen, wenn ich hier unten jetzt O.FU aufrufe. Und diese Auflösung, was da also tatsächlich dann aufgerufen wird, hängt davon ab, welche Argumente ich an diese FU Methode übergebe, denn die drei FU Methoden hier oben nehmen verschiedene Typen von Argumenten. Wenn dieses Punkt, was ich hier in dem Beispiel bewusst nicht hingeschrieben habe, gar nichts enthält, also wenn ich quasi keine Argumente übergebe, dann wird die erste FU Methode aufgerufen. Falls ich ein Integer-Wert übergeben würde, würde die zweite Methode aufgerufen. Und falls ich ein String übergebe, würde die dritte Methode aufgerufen. Das heißt, je nachdem, was da drin steht, hat diese eine Name FU eben drei verschiedene Bedeutung. Das heißt, diese eine Name FU zeigt potenziell auf drei verschiedene Speicherobjekte, nämlich die drei Implementierungen dieser FU Methoden, die es hier in der Klasse gibt. Ja, und das war es da schon aus dieser kurzen, aber präglanten vierten Einheit im Modul Name Scopes and Bindings. Sie wissen jetzt also, was Overloading und Alliasing sind, also diese zwei Spezialsituationen, wo Namen und Objekte eben nicht nur 1 zu 1 zueinander gemappt werden, sondern 1 zu n oder n zu 1. Und damit danke fürs Zuhören und bis zum nächsten Mal.