Hallo! Haben Sie sich jemals gefragt, warum Java so konzipiert ist? In dem Sinne, dass Sie darauf basierende Klassen erstellen – Objekte, Klassen haben Methoden usw. Aber warum ist die Struktur der Sprache so, dass Programme aus Klassen und Objekten bestehen und nicht aus etwas anderem? Warum wurde der Begriff „Objekt“ erfunden und in den Vordergrund gerückt? Funktionieren alle Sprachen auf diese Weise und wenn nicht, welche Vorteile bietet es Java? Wie Sie sehen, gibt es viele Fragen :) Versuchen wir, jede davon in der heutigen Vorlesung zu beantworten.
Kristen Nygaard und Ole Johan Dahl – Schöpfer von Simula
Es scheint, dass Simula nach Programmierstandards eine alte Sprache ist, aber ihre „Familien“-Verbindung zu Java ist mit bloßem Auge erkennbar. Höchstwahrscheinlich können Sie den darauf geschriebenen Code leicht lesen und allgemein erklären, was er tut :)
OOP-Prinzipien:
Was ist objektorientierte Programmierung (OOP)?
Natürlich besteht Java aus einem bestimmten Grund aus Objekten und Klassen. Dies ist keine Laune seiner Schöpfer oder gar ihre Erfindung. Es gibt viele andere Sprachen, die auf Objekten basieren. Die erste derartige Sprache hieß Simula und wurde bereits in den 1960er Jahren in Norwegen erfunden. Simula führte unter anderem die Konzepte „ Klasse “ und „ Methode “ ein.Begin
Class Rectangle (Width, Height); Real Width, Height;
Begin
Real Area, Perimeter;
Procedure Update;
Begin
Area := Width * Height;
OutText("Rectangle is updating, Area = "); OutFix(Area,2,8); OutImage;
Perimeter := 2*(Width + Height);
OutText("Rectangle is updating, Perimeter = "); OutFix(Perimeter,2,8); OutImage;
End of Update;
Update;
OutText("Rectangle created: "); OutFix(Width,2,6);
OutFix(Height,2,6); OutImage;
End of Rectangle;
Rectangle Class ColouredRectangle (Color); Text Color;
Begin
OutText("ColouredRectangle created, color = "); OutText(Color);
OutImage;
End of ColouredRectangle;
Ref(Rectangle) Cr;
Cr :- New ColouredRectangle(10, 20, "Green");
End;
Das Codebeispiel ist dem Artikel Simula – 50 Jahre OOP entnommen . Wie Sie sehen, unterscheiden sich Java und sein Vorfahre nicht so sehr voneinander :) Dies liegt daran, dass das Erscheinen von Simula die Geburt eines neuen Konzepts markierte – der objektorientierten Programmierung. Wikipedia gibt die folgende Definition von OOP: Objektorientierte Programmierung (OOP) ist eine Programmiermethode, die auf der Darstellung eines Programms als Sammlung von Objekten basiert, von denen jedes eine Instanz einer bestimmten Klasse ist und die Klassen eine Vererbungshierarchie bilden. Meiner Meinung nach ist es sehr erfolgreich. Sie haben vor kurzem begonnen, Java zu lernen, aber es gibt kaum Wörter darin, die Ihnen unbekannt sind :) Heute ist OOP die am weitesten verbreitete Programmiermethode. Neben Java werden OOP-Prinzipien in vielen gängigen Sprachen verwendet, von denen Sie vielleicht schon gehört haben. Dies sind C++ (es wird aktiv von Computerspielentwicklern verwendet), Objective-C und Swift (sie schreiben Programme für Apple-Geräte), Python (am gefragtesten im Bereich maschinelles Lernen), PHP (eine der beliebtesten Webentwicklungssprachen), JavaScript (einfacher gesagt, was sie nicht damit machen) und viele andere. Was sind eigentlich diese „Prinzipien“ von OOP? Lassen Sie uns es Ihnen genauer erzählen.
OOP-Prinzipien
Das sind die Grundlagen. 4 Hauptmerkmale, die zusammen das objektorientierte Programmierparadigma bilden. Sie zu verstehen ist der Schlüssel, um ein erfolgreicher Programmierer zu werden.Prinzip 1. Vererbung
Die gute Nachricht ist, dass Sie bereits mit einigen Prinzipien von OOP! vertraut sind. :) Wir sind in Vorlesungen bereits einige Male mit der Vererbung in Berührung gekommen und hatten Zeit, uns damit zu beschäftigen. Vererbung ist ein Mechanismus, der es Ihnen ermöglicht, eine neue Klasse basierend auf einer vorhandenen (übergeordneten) Klasse zu beschreiben. In diesem Fall werden die Eigenschaften und Funktionalitäten der übergeordneten Klasse von der neuen Klasse übernommen. Warum ist eine Erbschaft notwendig und welche Vorteile bietet sie? Zunächst einmal die Wiederverwendung von Code. In übergeordneten Klassen beschriebene Felder und Methoden können in untergeordneten Klassen verwendet werden. Wenn alle Fahrzeugtypen 10 gemeinsame Felder und 5 identische Methoden haben, müssen Sie diese nur in die übergeordnete Klasse einfügenAuto
. Sie können sie problemlos in abgeleiteten Klassen verwenden. Solide Vorteile: sowohl quantitativ (weniger Code) als auch qualitativ (Klassen werden viel einfacher). Gleichzeitig ist der Vererbungsmechanismus sehr flexibel und Sie können die fehlenden Funktionen in den Nachkommen separat hinzufügen (einige Felder oder klassenspezifisches Verhalten). Im Allgemeinen gilt wie im normalen Leben: Wir sind alle in mancher Hinsicht unseren Eltern ähnlich, unterscheiden uns aber in mancher Hinsicht von ihnen :)
Prinzip 2. Abstraktion
Das ist ein sehr einfaches Prinzip. Abstraktion bedeutet, die wichtigsten und bedeutsamsten Eigenschaften eines Objekts hervorzuheben und umgekehrt – sekundäre, unbedeutende Eigenschaften zu verwerfen. Erfinden wir das Rad nicht neu und erinnern uns an ein Beispiel aus einer alten Vorlesung über Unterricht. Nehmen wir an, wir erstellen ein Archiv mit den Mitarbeitern des Unternehmens. Um Mitarbeiterobjekte zu erstellen, haben wir eine Klasse geschriebenEmployee
. Welche Merkmale sind für die Beschreibung in der Firmenakte wichtig? Vollständiger Name, Geburtsdatum, Sozialversicherungsnummer, Steueridentifikationsnummer. Aber es ist unwahrscheinlich, dass wir auf einer Karte dieser Art seine Größe, Augen- und Haarfarbe benötigen. Das Unternehmen benötigt diese Informationen über den Mitarbeiter nicht. Daher Employee
werden wir für die Klasse die Variablen , und festlegen String name
und int age
auf int socialInsuranceNumber
für int taxNumber
uns unnötige Informationen wie die Augenfarbe verzichten und diese abstrahieren. Wenn wir aber für eine Agentur einen Katalog mit Fotomodellen erstellen, ändert sich die Situation dramatisch. Um ein Model zu beschreiben, sind uns Größe, Augenfarbe und Haarfarbe sehr wichtig, die TIN-Nummer ist jedoch nicht erforderlich. Daher Model
erstellen wir in der Klasse Variablen String height
, String hair
, String eyes
.
Prinzip 3: Kapselung
Wir sind bereits darauf gestoßen. Kapselung in Java bedeutet, den Zugriff auf Daten und die Möglichkeit, diese zu ändern, einzuschränken. Wie Sie sehen, basiert es auf dem Wort „Kapsel“. In dieser „Kapsel“ verbergen wir einige für uns wichtige Daten, die niemand ändern soll. Ein einfaches Beispiel aus dem Leben. Sie haben einen Vor- und Nachnamen. Jeder, den Sie kennen, kennt sie. Sie haben jedoch keinen Zugriff darauf, Ihren Vor- und Nachnamen zu ändern. Man könnte sagen, dieser Vorgang ist im Passamt „gekapselt“: Nur dort können Sie Ihren Vor- und Nachnamen ändern, und nur Sie können es tun. Andere „Benutzer“ haben nur lesenden Zugriff auf Ihren Vor- und Nachnamen :) Ein weiteres Beispiel ist das Geld in Ihrer Wohnung. Es ist keine gute Idee, sie sichtbar mitten im Raum zu lassen. Jeder „Benutzer“ (eine Person, die zu Ihnen nach Hause kommt) kann die Anzahl Ihres Geldes ändern, d. h. Hole sie ab. Es ist besser, sie in einem Safe einzukapseln. Nur Sie haben Zugriff und nur mit einem speziellen Code. Offensichtliche Beispiele für Kapselung, mit denen Sie bereits gearbeitet haben, sind Zugriffsmodifikatoren (private
usw. public
) und Getter-Setter. Wenn das age
Klassenfeld Cat
nicht gekapselt ist, kann jeder schreiben:
Cat.age = -1000;
Und der Kapselungsmechanismus ermöglicht es uns, das Feld age
mit einer Setter-Methode zu schützen, mit der wir überprüfen können, dass das Alter keine negative Zahl sein darf.
Prinzip 4. Polymorphismus
Polymorphismus ist die Fähigkeit, mehrere Typen so zu behandeln, als wären sie derselbe Typ. In diesem Fall unterscheidet sich das Verhalten von Objekten je nach Typ, zu dem sie gehören. Klingt etwas kompliziert? Lass es uns jetzt herausfinden. Nehmen wir das einfachste Beispiel: Tiere. Erstellen wir eine KlasseAnimal
mit einer einzigen Methode – voice()
und zwei ihrer Nachkommen – Cat
und Dog
.
public class Animal {
public void voice() {
System.out.println("Stimme!");
}
}
public class Dog extends Animal {
@Override
public void voice() {
System.out.println(„Wow-wow!“);
}
}
public class Cat extends Animal {
@Override
public void voice() {
System.out.println("Miau!");
}
}
Versuchen wir nun, einen Link zu erstellen Animal
und ihm ein Objekt zuzuweisen Dog
.
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.voice();
}
}
Welche Methode wird Ihrer Meinung nach aufgerufen? Animal.voice()
oder Dog.voice()
? Die Klassenmethode wird aufgerufen Dog
: Woof-woof! Wir haben eine Referenz erstellt Animal
, aber das Objekt verhält sich wie Dog
. Bei Bedarf kann er sich wie eine Katze, ein Pferd oder ein anderes Tier verhalten. Die Hauptsache besteht darin, Animal
einem Objekt einer bestimmten Nachkommenklasse eine Referenz eines allgemeinen Typs zuzuweisen. Das ist logisch, denn alle Hunde sind Tiere. Das haben wir gemeint, als wir sagten: „Objekte verhalten sich unterschiedlich, je nachdem, um welchen Typ es sich handelt.“ Wenn wir ein Objekt erstellen würden Cat
−
public static void main(String[] args) {
Animal cat = new Cat();
cat.voice();
}
Die Methode voice()
würde „Meow!“ ausgeben. Was bedeutet „die Fähigkeit, mit mehreren Typen zu arbeiten, als wären sie derselbe Typ“? Das geht auch ganz einfach. Stellen wir uns vor, wir gründen einen Friseursalon für Tiere. Unser Friseursalon muss in der Lage sein, alle Tiere zu schneiden, daher erstellen wir eine Methode shear()
(„Schnitt“) mit einem Parameter Animal
– dem Tier, das wir schneiden werden.
public class AnimalBarbershop {
public void shear(Animal animal) {
System.out.println(„Der Haarschnitt ist fertig!“);
}
}
shear
Und jetzt können wir sowohl Objekte Cat
als auch Objekte an die Methode übergeben Dog
!
public static void main(String[] args) {
Cat cat = new Cat();
Dog dog = new Dog();
AnimalBarbershop barbershop = new AnimalBarbershop();
barbershop.shear(cat);
barbershop.shear(dog);
}
Hier ist ein klares Beispiel: Die Klasse AnimalBarbershop
arbeitet mit Typen Cat
, als Dog
wären sie vom gleichen Typ. Gleichzeitig haben sie Cat
ein unterschiedliches Dog
Verhalten: Sie nutzen ihre Stimmen anders.
GO TO FULL VERSION