Programmier-Tutorial - Seite 2

 

Objektorientierte Programmierung in 7 Minuten | Mosh



Objektorientierte Programmierung in 7 Minuten | Mosh

Die objektorientierte Programmierung (OOP) revolutionierte die Art und Weise, wie wir an die Softwareentwicklung herangehen, indem sie vier Kernkonzepte einführte: Kapselung, Abstraktion, Vererbung und Polymorphismus. Diese Konzepte bieten einen leistungsstarken und organisierten Rahmen für den Entwurf und die Implementierung komplexer Systeme.

Bei der Kapselung werden zusammengehörige Variablen und Funktionen in einer Einheit namens Objekt gebündelt. Indem wir Daten und die Methoden, die mit diesen Daten arbeiten, in einem Objekt kapseln, schaffen wir eine in sich geschlossene Einheit mit klar definierten Grenzen. Ein Autoobjekt kann beispielsweise Eigenschaften wie Marke, Modell und Farbe sowie Methoden wie Starten, Stoppen und Bewegen haben. Diese Kapselung ermöglicht es uns, das Fahrzeugobjekt als eine Einheit zu manipulieren und mit ihm zu interagieren, wobei die internen Implementierungsdetails vor der Außenwelt verborgen bleiben. Die Kapselung verbessert nicht nur die Codeorganisation, sondern verbessert auch die Wiederverwendbarkeit und Wartbarkeit des Codes.

Bei der Abstraktion werden komplexe Implementierungsdetails ausgeblendet und nur wesentliche Funktionen oder Schnittstellen offengelegt. Es ermöglicht uns, vereinfachte Darstellungen realer Objekte oder Konzepte zu erstellen. So wie ein DVD-Player seine komplizierte interne Logik hinter ein paar Tasten abstrahiert, können Objekte in OOP ihr Innenleben verbergen und gleichzeitig eine klare und prägnante Benutzeroberfläche bereitstellen. Indem wir die Komplexität abstrahieren, können wir die kognitive Belastung reduzieren und unseren Code verständlicher machen. Darüber hinaus fungiert die Abstraktion als Schutzschild, der die Auswirkungen von Änderungen innerhalb eines Objekts isoliert und unbeabsichtigte Folgen für andere Teile der Codebasis verhindert.

Vererbung ist ein Mechanismus, der es Objekten ermöglicht, Eigenschaften und Verhaltensweisen von anderen Objekten zu erben. Mit der Vererbung können wir eine Hierarchie von Objekten erstellen, in der spezialisiertere Objekte Eigenschaften von allgemeineren Objekten erben. Diese Hierarchie fördert die Wiederverwendung von Code, da gemeinsame Attribute und Methoden in einem Basisobjekt definiert und von seinen Unterklassen geerbt werden können. Beispielsweise haben HTML-Elemente wie Textfelder, Dropdown-Listen und Kontrollkästchen alle gemeinsame Eigenschaften wie verstecktes und inneres HTML sowie Methoden wie Klicken und Fokus. Anstatt diese Eigenschaften und Methoden in jedem HTML-Element zu duplizieren, können wir sie einmal in einem generischen Objekt namens HTML-Element definieren und die spezifischen Elemente davon erben lassen. Vererbung beseitigt Redundanz, verbessert die Wartbarkeit des Codes und ermöglicht flexible und erweiterbare Codearchitekturen.

Polymorphismus, abgeleitet von den griechischen Wörtern „poly“ (viele) und „morph“ (Form), bezieht sich auf die Fähigkeit von Objekten, mehrere Formen oder Verhaltensweisen anzunehmen. In OOP ermöglicht Polymorphismus die Behandlung von Objekten unterschiedlichen Typs als Objekte eines gemeinsamen Typs. Dieses Konzept wird durch Methodenüberschreibung und Methodenüberladung erreicht. Durch das Überschreiben von Methoden kann eine Unterklasse ihre eigene Implementierung einer von ihrer Oberklasse geerbten Methode bereitstellen. Beispielsweise müssen möglicherweise verschiedene HTML-Elemente auf einer Seite gerendert werden, aber jedes Element hat sein eigenes Rendering-Verhalten. Durch die Implementierung einer Render-Methode in jedem Objekt können wir Polymorphismus erreichen und den Code vereinfachen, wodurch langwierige if-else- oder switch-case-Anweisungen entfallen. Die Methodenüberladung hingegen ermöglicht die Koexistenz mehrerer Methoden mit demselben Namen, aber unterschiedlichen Parameterlisten innerhalb einer Klasse. Polymorphismus ermöglicht Codeflexibilität, verbessert die Lesbarkeit des Codes und fördert das Prinzip der „Programmierung auf eine Schnittstelle“ statt auf eine bestimmte Implementierung.

Durch die Nutzung von Kapselung, Abstraktion, Vererbung und Polymorphismus bietet die objektorientierte Programmierung einen strukturierten Ansatz für die Softwareentwicklung. Es bietet zahlreiche Vorteile wie Code-Organisation, Wiederverwendbarkeit, Wartbarkeit, Modularität und Erweiterbarkeit. Das Verständnis und die effektive Anwendung dieser Kernkonzepte ermöglichen es Entwicklern, komplexe Systeme zu erstellen, die flexibel und skalierbar sowie im Laufe der Zeit einfacher zu verstehen und zu warten sind.

 

Einführung in die objektorientierte Programmierung – Crashkurs


Einführung in die objektorientierte Programmierung – Crashkurs

Willkommen zu einer Einführung in die objektorientierte Programmierung. In diesem Kurs werden wir das Konzept der objektorientierten Programmierung und ihre vier Hauptprinzipien untersuchen. Vorkenntnisse im Programmieren werden vorausgesetzt, aber wenn Sie neu im Programmieren sind, empfehlen wir Ihnen, sich unser Einführungsvideo zum Programmieren anzusehen, das in der Beschreibung verlinkt ist.

Die objektorientierte Programmierung ermöglicht es uns, Variablen ähnlichen Typs zu gruppieren, was die Verwaltung komplexer Programme erleichtert. In der Vergangenheit wurden primitive Datentypen wie Byte, Int, Float, Double, Boolean und Char zum Speichern einzelner einfacher Werte verwendet. Da die Programme jedoch immer komplexer wurden, benötigten Programmierer eine Möglichkeit, zusammengehörige Variablen zu gruppieren.

Dies führte zur Entwicklung von Strukturen in C, die die Gruppierung von Daten unterschiedlichen Typs ermöglichten. Strukturen stellten eine Verbesserung gegenüber Arrays dar, da sie die Speicherung verschiedener Daten ermöglichten. Den Strukturen fehlte jedoch die Fähigkeit, Funktionen in ihnen zu definieren.

Mit dem Aufkommen der objektorientierten Programmierung wurden Objekte eingeführt. Ein Objekt ist eine Instanz einer Klasse, die als Vorlage für Objekte dient. Objekte können Daten speichern und Funktionen definieren. Die Klasse definiert die gemeinsamen Attribute und Verhaltensweisen der Objekte, während Objekte bestimmte Instanzen mit ihren eigenen eindeutigen Daten darstellen.

Kapselung ist eines der Hauptprinzipien der objektorientierten Programmierung. Dabei geht es darum, Daten und Methoden innerhalb einer Klasse zu bündeln und vor dem Zugriff von außen zu verbergen. Andere Klassen können mit den Attributen eines Objekts nur über die Methoden der Klasse interagieren, z. B. Getter- und Setter-Methoden. Die Kapselung trägt dazu bei, die Kontrolle über die Daten zu behalten und reduziert die Programmkomplexität, indem sie den direkten Zugriff auf interne Attribute verhindert.

Abstraktion ist ein weiteres Prinzip, das sich darauf konzentriert, wesentliche Details anzuzeigen und gleichzeitig unnötige Komplexitäten zu verbergen. In der Programmierung bedeutet das, Schnittstellen für Klassen zu definieren, die die Kommunikation zwischen verschiedenen Codeabschnitten ermöglichen. Die genaue Implementierung von Methoden ist innerhalb der Klasse verborgen und externe Klassen interagieren nur mit der definierten Schnittstelle. Dieser Ansatz ermöglicht eine modulare Programmierung und erleichtert die Zusammenarbeit zwischen mehreren Programmierern.

In den nächsten Abschnitten werden wir die verbleibenden Prinzipien der objektorientierten Programmierung diskutieren: Vererbung und Polymorphismus. Diese Prinzipien verbessern die Flexibilität und Wiederverwendbarkeit von Code in der objektorientierten Programmierung weiter.

Das war's mit der Einführung in die objektorientierte Programmierung. Fahren wir mit dem nächsten Abschnitt fort und untersuchen wir die Kapselung genauer.

  • 00:00:00 In dieser Vorlesung untersuchen wir, was objektorientierte Programmierung ist und wie sie funktioniert. Wir besprechen, wie primitive Datentypen wie Bytes, Ints, Floats, Doubles und Booleans funktionieren und wie Strukturen dazu beitragen können, Daten effizienter zu organisieren und zu speichern. Wir werden auch untersuchen, wie Objekte erstellt werden und wie sie miteinander in Beziehung stehen.

  • 00:05:00 Die objektorientierte Programmierung bietet eine Möglichkeit, zusammengehörige Daten und Funktionen zu gruppieren und ermöglicht so eine komplexe Programmierung, ohne alles separat programmieren zu müssen. In diesem Crashkurs befassen wir uns mit dem ersten von vier Hauptprinzipien von OOP – der Kapselung. Wir werden sehen, wie dies im Kontext des Schachbeispiels aus dem vorherigen Abschnitt verwendet wird und wie es die Verfolgung und Verwaltung verwandter Attribute erleichtert.

  • 00:10:00 Abstraktion ist die Idee, wesentliche Details vor Benutzern einer Klasse zu verbergen, während Kapselung die Praxis ist, Daten vor anderen Klassen zu verbergen. Diese Konzepte sind wichtig, wenn Sie an großen und komplexen Programmen arbeiten, da es schwierig sein kann, sich beim Programmieren auf das Gesamtbild zu konzentrieren. In diesem Abschnitt wird das vierte Prinzip der objektorientierten Programmierung, die Abstraktion, besprochen.

  • 00:15:00 In der objektorientierten Programmierung ist eine Schnittstelle ein vorgegebener Satz von Methoden, die zwei Klassen verwenden dürfen, um miteinander zu kommunizieren. Dies verhindert, dass verschiedene Teile des Programms vollständig miteinander gekoppelt werden, und trägt dazu bei, Kommunikationsfehler zu vermeiden. Vererbung ist das Prinzip, das es einer Klasse ermöglicht, andere Klassen daraus abzuleiten. In diesem Video sehen wir uns ein Beispiel an.

  • 00:20:00 In diesem Crashkurs über objektorientierte Programmierung besprechen wir die drei Hauptzugriffsmodifikatoren: öffentlich, privat und geschützt. Wir diskutieren auch Polymorphismus, der Methoden beschreibt, die viele Formen annehmen können. Abschließend diskutieren wir das Prinzip der Vererbung, das beschreibt, wie Klassen miteinander in Beziehung gesetzt werden können.

  • 00:25:00 Polymorphismus ist die Fähigkeit einer Methode, abhängig von der Klassenhierarchie, aus der sie aufgerufen wird, unterschiedliche Formen anzunehmen. Dies funktioniert sowohl dynamisch als auch statisch. Durch Überladen können Methoden mit demselben Namen unterschiedliche Auswirkungen haben, die Implementierung ist jedoch möglicherweise schwierig.

  • 00:30:00 Dieses Video stellt die Grundlagen der objektorientierten Programmierung (OOP) vor. Wenn Sie mehr über OOP erfahren möchten, schauen Sie sich unbedingt die anderen Videos der Crash Course-Reihe an.
 

C++ OOP – Einführung in Klassen und Objekte für Anfänger



C++ OOP – Einführung in Klassen und Objekte für Anfänger

Willkommen auf meinem Kanal, alle zusammen! Ich bin Saldina und erstelle Videos zum Thema IT und Programmierung. Wenn Sie an diesen Themen interessiert sind, sollten Sie meinen Kanal abonnieren und diesem Video einen Daumen nach oben geben.

In diesem Video möchte ich in die Welt der objektorientierten Programmierung (OOP) eintauchen. Was genau ist objektorientierte Programmierung? OOP ermöglicht es uns, reale Objekte in der Programmierung vollständig mit ihren Attributen und Verhaltensweisen darzustellen.

Zwei grundlegende Konzepte in OOP sind Klassen und Objekte. Lassen Sie uns den Unterschied zwischen den beiden verstehen. Eine Klasse dient als Vorlage oder Blaupause und definiert die Struktur und das Verhalten eines Objekts. Andererseits ist ein Objekt eine Instanz einer Klasse. Um dies zu veranschaulichen, stellen Sie sich eine Klasse vor, die Früchte darstellt, und Objekte dieser Klasse könnten ein Apfel, eine Banane oder ein Pfirsich sein. Ebenso hätte eine Klasse, die Autos darstellt, Objekte wie Volvo, Ford oder BMW. Jede Klasse verfügt über Attribute (Eigenschaften) wie Name, Preis, Höchstgeschwindigkeit und Farbe sowie Verhaltensweisen (Methoden) wie Fahren, Bremsen und Farbwechsel.

Erstellen wir nun eine Beispielklasse namens „YouTubeChannel“. Um eine Klasse zu erstellen, verwenden wir das Schlüsselwort „class“, gefolgt vom Klassennamen in geschweiften Klammern. Wir müssen die Mitglieder der Klasse auch außerhalb der Klasse zugänglich machen, indem wir den Zugriffsmodifikator „public“ verwenden. In unserer YouTubeChannel-Klasse definieren wir Attribute wie den Namen des Kanals, den Namen des Eigentümers, die Anzahl der Abonnenten und eine Liste veröffentlichter Videotitel. Um diese Attribute darzustellen, weisen wir ihnen Werte zu. Wir erstellen ein Objekt der YouTubeChannel-Klasse und greifen mithilfe der Punktnotation auf seine Eigenschaften zu. Beispielsweise können wir den Namen des YouTube-Kanals als „CodeBeauty“ und den Namen des Eigentümers als „Saldina“ zuweisen.

Wir können die Abonnentenzahl auch auf 1800 setzen und der Liste drei veröffentlichte Videotitel hinzufügen. Um die in diesen Eigenschaften gespeicherten Informationen anzuzeigen, drucken wir sie mit „cout“ aus. Für die Liste der veröffentlichten Videotitel, bei der es sich um eine Sammlung handelt, können wir sie mithilfe einer Schleife durchlaufen und jeden Videotitel drucken. Wenn wir das Programm ausführen, können wir die Ausgabe mit den Details des YouTube-Kanals sehen: den Kanalnamen, den Namen des Eigentümers, die Anzahl der Abonnenten und die Liste der veröffentlichten Videotitel.

In zukünftigen Videos werden wir Themen wie Konstruktoren und Klassenmethoden behandeln, die optimierte Ansätze für die Arbeit mit Klassen und Objekten bieten.

Ich hoffe, Ihnen hat dieses Video gefallen! Wenn Sie es hilfreich fanden, geben Sie ihm bitte einen Daumen nach oben und abonnieren Sie meinen Kanal, indem Sie auf das Glockensymbol klicken. Bleiben Sie dran für weitere spannende Inhalte. Wir sehen uns im nächsten Video. Tschüss!

 

C++ OOP (2020) – Was sind Konstruktoren und Klassenmethoden? Wie benutzt man sie?


C++ OOP (2020) – Was sind Konstruktoren und Klassenmethoden? Wie benutzt man sie?

Hallo zusammen, willkommen auf meinem Kanal! Ich bin Saldina und auf diesem Kanal erstelle ich Videos zum Thema Programmierung. Wenn Sie das interessiert, denken Sie darüber nach, dieses Video zu abonnieren und einen Daumen nach oben zu geben. In diesem Video möchte ich über Konstruktoren und Klassenmethoden sprechen.

In einem früheren Tutorial haben wir Code für eine Klasse namens YouTubeChannel geschrieben. Es verfügt über vier öffentliche Eigenschaften: Name, Name des Eigentümers, Anzahl der Abonnenten und eine Liste der veröffentlichten Videotitel. Wir haben ein Objekt dieser Klasse erstellt und seinen Eigenschaften Werte zugewiesen. Lassen Sie uns nun ein Problem mit diesem Ansatz angehen. Wenn wir ein weiteres YouTube-Kanalobjekt erstellen möchten, müssten wir den Code kopieren und einfügen und entsprechende Änderungen vornehmen. Dies verstößt gegen das „Don't Repeat Yourself“-Prinzip. Um dieses Problem zu lösen, können wir Konstruktoren und Klassenmethoden verwenden.

Ein Konstruktor ist eine spezielle Methode, die beim Erstellen eines Objekts aufgerufen wird. Sie hat denselben Namen wie die Klasse und keinen Rückgabetyp. Erstellen wir einen Konstruktor für die YouTubeChannel-Klasse. Es erhält zwei Parameter: Name und Besitzername. Im Konstruktor weisen wir diese Parameter den entsprechenden Eigenschaften zu. Nachdem wir den Konstruktor erstellt haben, können wir ihn zum Erstellen von Objekten verwenden, indem wir die erforderlichen Werte übergeben. Dadurch entfällt die Notwendigkeit, den Code zum Erstellen von Objekten zu wiederholen. Wir können auch Klassenmethoden verwenden, um die Wiederholung von Code für die Anzeige von Informationen über die Kanäle zu vermeiden.

Erstellen wir eine Klassenmethode namens getInfo, die die Kanalinformationen ausschreibt. Wir können den Code zur Anzeige der Informationen in diese Methode verschieben und für beide Objekte verwenden. Um die getInfo-Methode aufzurufen, können wir sie für das Objekt aufrufen, indem wir den Namen des Objekts gefolgt von einem Punkt und dem Methodennamen verwenden. Auf diese Weise können wir die Informationen für beide Kanäle anzeigen, ohne den Code zu duplizieren.

Durch den Einsatz von Konstruktoren und Klassenmethoden erreichen wir saubereren und effizienteren Code. Die Hauptfunktion wird einfacher zu lesen und zu warten. Konstruktoren kümmern sich um die Initialisierung von Objekteigenschaften, während Klassenmethoden allgemeine Verhaltensweisen der Klasse kapseln.

Ich hoffe, Sie fanden dieses Video hilfreich. Wenn es dir gefallen hat, gib ihm bitte einen Daumen nach oben und abonniere meinen Kanal. Vergessen Sie nicht, auf das Glockensymbol zu klicken, um auf dem Laufenden zu bleiben. Wir sehen uns in meinem nächsten Video. Tschüss!

 

C++ OOP – Was ist Kapselung in der Programmierung?



C++ OOP – Was ist Kapselung in der Programmierung?

Hallo allerseits! Ich bin Saldina und willkommen auf meinem programmbezogenen Kanal. Wenn Sie sich für das Programmieren interessieren, sollten Sie dieses Video abonnieren und einen Daumen nach oben geben. In diesem Video besprechen wir die Kapselung.

Sehen wir uns zunächst kurz den Code aus unseren vorherigen Videos an. Wir haben eine YouTubeChannel-Klasse mit öffentlichen Attributen: Name, Besitzername, Abonnentenzahl und eine Liste veröffentlichter Videotitel. Wir haben auch einen YouTubeChannel-Konstruktor und eine getInfo-Methode.

Konzentrieren wir uns nun auf die Kapselung. Das Prinzip der Kapselung besagt, dass Eigenschaften privat sein sollten und dass auf ihre Werte über von der Klasse bereitgestellte Methoden zugegriffen und diese geändert werden sollten. Dies gewährleistet eine kontrollierte und ordnungsgemäße Datenmanipulation. Um die Notwendigkeit der Kapselung zu veranschaulichen, führen wir ein Problem ein. Derzeit können wir der Abonnentenzahl direkt einen Wert zuweisen, was nicht der natürlichen Art und Weise entspricht, wie Abonnenten steigen oder fallen sollten. Stattdessen sollten wir Methoden wie „Subscribe“ und „Unsubscribe“ bereitstellen, um diese Änderungen zu steuern.

Um die Eigenschaften vor Benutzern zu verbergen, machen wir sie privat. Indem wir ihren Zugriffsmodifikator in „private“ ändern, schränken wir den direkten Zugriff auf diese Eigenschaften ein. Dies führt jedoch zu Fehlern, da auf die privaten Mitglieder jetzt außerhalb der Klasse nicht mehr zugegriffen werden kann. Damit Benutzer die Anzahl der Abonnenten ändern können, erstellen wir zwei Methoden: „subscribe“ und „unsubscribe“. Die „subscribe“-Methode erhöht die Anzahl der Abonnenten, während die „unsubscribe“-Methode sie verringert. Mithilfe dieser Methoden können Benutzer mit der Klasse interagieren und die durch die Methoden definierten Regeln befolgen.

Bei der Abmeldemethode ist ein Problem aufgetreten. Derzeit ist es möglich, dass die Zählung negativ wird. Um dies zu beheben, müssen wir eine Prüfung hinzufügen, die sicherstellt, dass die Anzahl größer als Null ist, bevor wir sie dekrementieren. Darüber hinaus verfügen wir über ein weiteres Privateigentum, nämlich veröffentlichte Videotitel, das derzeit nicht zugänglich ist. Um Zugriff auf diese Eigenschaft zu ermöglichen, erstellen wir eine Methode namens „publishVideo“. Diese Methode nimmt einen String-Parameter (den Videotitel) und fügt ihn mithilfe der push_back-Methode zur Liste der veröffentlichten Videotitel hinzu.

Schließlich haben wir Methoden bereitgestellt, die es Benutzern ermöglichen, mit der Klasse zu interagieren und die privaten Eigenschaften zu manipulieren. Um den Zugriff auf die Eigenschaften „Name“ und „Eigentümername“ weiter zu steuern, können wir Getter- und Setter-Methoden erstellen.

Um die Kapselung zusammenzufassen:

  • Machen Sie Eigenschaften privat, um den direkten Zugriff einzuschränken.
  • Stellen Sie öffentliche Methoden zum Ändern der privaten Eigenschaften bereit.
  • Stellen Sie eine ordnungsgemäße Datenmanipulation sicher, indem Sie die in den Methoden definierten Regeln befolgen.

Wenn Sie Code haben, der Getter- und Setter-Methoden implementiert, können Sie ihn gerne im Kommentarbereich zur Überprüfung teilen.

Wenn Ihnen dieses Video gefallen hat, geben Sie ihm bitte einen Daumen nach oben, abonnieren Sie meinen Kanal und klicken Sie auf das Glockensymbol, um Benachrichtigungen für zukünftige Videos zu erhalten. Danke fürs Zuschauen, wir sehen uns im nächsten Video! Tschüss!

 

C++ OOP – Was ist Vererbung in der Programmierung?



C++ OOP – Was ist Vererbung in der Programmierung?

Hallo zusammen, ich bin Saldina und ich erstelle Videos zum Thema Programmierung. Wenn Sie daran interessiert sind, sollten Sie meinen Kanal abonnieren. Geben Sie diesem Video außerdem einen Daumen nach oben. In diesem Video möchte ich die Kapselung besprechen.

Ich habe in früheren Videos dieses Kurses Code geschrieben. Wenn Sie sie noch nicht gesehen haben, schauen Sie sich sie unbedingt an. Ich werde Links in der Videobeschreibung bereitstellen. Lassen Sie mich den Code kurz durchgehen, damit Sie ihn besser verstehen. Ich habe eine YouTubeChannel-Klasse mit vier öffentlichen Attributen erstellt: Name, Besitzername, Abonnentenzahl und eine Liste veröffentlichter Videotitel. Der YouTubeChannel-Konstruktor und die getInfo-Methode sind ebenfalls vorhanden. Den Konstruktorcode können Sie hier sehen.

In der Hauptfunktion habe ich ein Objekt der YouTubeChannel-Klasse erstellt und Werte für den Namen und den Eigentümernamen zugewiesen. Ich habe außerdem drei Videos zur Liste der veröffentlichten Videos hinzugefügt. Abschließend habe ich Informationen zum Kanal ausgedruckt. Lassen Sie uns nun über die Kapselung sprechen. Dieses Prinzip legt nahe, dass diese Immobilien privat und nicht öffentlich sein sollten. Die in diesen Eigenschaften gespeicherten Daten sollten nur durch Methoden geändert werden, die Sie dem Benutzer zur Verfügung stellen. Durch Befolgen der Regeln dieser Methoden kann der Benutzer die Eigenschaftswerte ändern.

Betrachten wir ein Problem, um zu verstehen, warum wir eine Kapselung benötigen. Was passiert, wenn ich die Abonnentenzahl dieses YouTube-Kanals auf eine Million setze? Das sollte nicht erlaubt sein. Wenn ich den Code ausführe, sehen Sie, dass der Kanal jetzt eine Million Abonnenten hat. Um Abonnenten zu gewinnen, müssen Benutzer jedoch natürlich die Subscribe- und Unsubscribe-Methoden aufrufen. Durch den Einsatz dieser Methoden wird die Abonnentenzahl erhöht oder verringert. Um diese Eigenschaften vor dem Benutzer zu verbergen, machen wir sie privat statt öffentlich. Dies bedeutet, dass auf sie nur innerhalb der Klasse selbst zugegriffen werden kann. Damit Benutzer die Anzahl der Abonnenten ändern können, erstellen wir zwei Methoden: Abonnieren und Abbestellen. Die „subscribe“-Methode erhöht die Anzahl der Abonnenten, während die „unsubscribe“-Methode sie verringert.

Um die Anzahl der Abonnenten zu erhöhen oder zu verringern, müssen wir nun diese Methoden aufrufen. Beispielsweise wird youtubeChannel.subscribe() dreimal verwendet, um drei Abonnements zu simulieren. Wenn ich youtubeChannel.unsubscribe() aufrufe und dann getInfo aufrufe, werden Sie sehen, dass es zwei Abonnenten gibt. Es tritt auch ein Fehler bei der Kompilierung auf, da die Eigenschaft „veröffentlichte Videotitel“ jetzt privat und nicht zugänglich ist. Um dieses Problem zu lösen, erstellen wir eine Methode namens „publishVideo“, die der Liste der veröffentlichten Videotitel einen Videotitel hinzufügt. Die Methode benötigt einen Titelparameter, der es dem Benutzer ermöglicht, den Videotitel anzugeben. Durch den Aufruf von youtubeChannel.publishVideo("Title") fügen wir Videos zur Liste hinzu.

Zusammenfassend geht es bei der Kapselung darum, Eigenschaften privat zu machen und öffentliche Methoden zu deren Änderung bereitzustellen. Getter- und Setter-Methoden können verwendet werden, um auf bestimmte Eigenschaften zuzugreifen und diese zu ändern. Teilen Sie Ihre Implementierung der Getter- und Setter-Methoden gerne zur Überprüfung in den Kommentaren mit.

Wenn Sie dieses Video hilfreich fanden, geben Sie ihm einen Daumen nach oben, abonnieren Sie meinen Kanal und klicken Sie auf das Glockensymbol. Bleiben Sie dran für weitere Videos. Bis zum nächsten Mal! Tschüss!

 

C++ OOP – Was ist Polymorphismus in der Programmierung? (einfaches Beispiel)



C++ OOP – Was ist Polymorphismus in der Programmierung? (einfaches Beispiel)

Hallo zusammen, willkommen auf meinem Kanal. Mein Name ist Saldina und ich erstelle Videos zum Thema IT und Programmierung. Wenn Sie das interessiert, denken Sie darüber nach, meinen Kanal zu abonnieren und diesem Video einen Daumen nach oben zu geben. In diesem speziellen Video möchte ich über Polymorphismus sprechen.

Polymorphismus bezieht sich auf die Fähigkeit eines Objekts, mehrere Formen anzunehmen. Das bedeutet, dass Sie zwei oder mehr Objekte haben können, die von derselben Basisklasse erben. Diese Objekte können eine Methode mit demselben Namen, aber unterschiedlichen Implementierungen haben, was zu unterschiedlichem Verhalten führt. Werfen wir einen Blick auf den Code, den wir in meinen vorherigen Kursen geschrieben haben. Ich habe eine Klasse namens „YouTubeChannel“ mit privaten Eigenschaften wie Name, Abonnentenzahl und veröffentlichten Videotiteln erstellt. Es verfügt außerdem über eine geschützte Eigenschaft namens „Eigentümername“. Darüber hinaus gibt es öffentliche Methoden, einen Konstruktor, eine „getInfo“-Methode und „subscribe/unsubscribe“-Methoden.

Als nächstes haben wir einen bestimmten YouTube-Kanaltyp namens „CookingYouTubeChannel“, der von der Basisklasse erbt. Es verfügt über einen eigenen Konstruktor und eine zusätzliche Methode namens „Übung“, die speziell für Kochkanäle gilt. Jetzt möchte ich eine weitere abgeleitete Klasse namens „SingersYouTubeChannel“ für einen YouTube-Kanal zum Thema Gesang erstellen. Dieser Kurs verfügt auch über eine „Übungs“-Methode, die Implementierung unterscheidet sich jedoch vom Kochkanal. Sänger übten das Singen, das Erlernen neuer Lieder und sogar das Tanzen.

Um Polymorphismus zu demonstrieren, erstelle ich Instanzen sowohl der Koch- als auch der Sänger-YouTube-Kanäle. Dann wende ich auf jedem Kanal die Methode „Üben“ an. Sie können sehen, dass die jeweiligen Implementierungen basierend auf dem Kanaltyp aufgerufen werden. Zusätzlich führe ich eine „contentQuality“-Eigenschaft ein, um die Qualität des Inhalts zu verfolgen. Jedes Mal, wenn die Methode „Üben“ aufgerufen wird, erhöht sich die Qualität des Inhalts. Ich füge außerdem eine Methode namens „checkAnalytics“ hinzu, die die Bewertung der Inhaltsqualität überprüft und eine Nachricht basierend auf der Bewertung ausgibt.

Um den Polymorphismus weiter zu veranschaulichen, verwende ich Zeiger auf die Basisklasse, um auf Objekte abgeleiteter Klassen zu zeigen. Diesen Zeigern ordne ich die Adressen der Koch- und Sänger-YouTube-Kanäle zu. Mithilfe dieser Zeiger rufe ich die Methode „checkAnalytics“ für jeden Kanal auf und zeige, dass Polymorphismus es uns ermöglicht, Basisklassenzeiger zum Aufrufen abgeleiteter Klassenmethoden zu verwenden.

Ich hoffe, dass Ihnen dieses Video Spaß gemacht hat. Wenn ja, gib bitte einen Daumen nach oben und erwäge, meinen Kanal zu abonnieren. Vergessen Sie nicht, auf das Glockensymbol zu klicken, um Benachrichtigungen für zukünftige Videos zu erhalten. Vielen Dank und bis zum nächsten Video. Tschüss!

 

Beziehung zwischen virtuellen Funktionen, rein virtuellen Funktionen und abstrakten Klassen in OOP erklärt



Beziehung zwischen virtuellen Funktionen, rein virtuellen Funktionen und abstrakten Klassen in OOP erklärt

In diesem Video erkläre ich den Zweck und die Beziehung zwischen virtuellen Funktionen, rein virtuellen Funktionen und abstrakten Klassen. Ich freue mich darauf, diese Playlist zur objektorientierten Programmierung fortzusetzen. Wenn Sie Fragen oder Themen haben, die Sie in zukünftigen Videos sehen möchten, hinterlassen Sie bitte unten einen Kommentar. Lassen Sie uns nun in die virtuellen Funktionen eintauchen.

Eine virtuelle Funktion ist eine Funktion, die in einer Basisklasse definiert ist und in einer abgeleiteten Klasse neu definiert werden kann. Der Hauptzweck virtueller Funktionen besteht darin, Laufzeitpolymorphismus zu ermöglichen. Wenn Sie eine virtuelle Funktion mithilfe eines Basisklassenzeigers oder einer Referenz aufrufen, wird die am stärksten abgeleitete Version dieser Funktion ausgeführt. Wenn die abgeleitete Klasse über eine eigene Implementierung verfügt, wird diese Version ausgeführt. Andernfalls wird die Implementierung in der Basisklasse verwendet.

Schauen wir uns ein Beispiel in Visual Studio an. Wir erstellen eine „Instrument“-Klasse mit einer virtuellen Funktion namens „makeSound“, die eine Nachricht ausgibt. Anschließend erstellen wir eine abgeleitete Klasse namens „Accordion“, die die Funktion „makeSound“ mit ihrer eigenen Implementierung überschreibt. Indem wir einen Basisklassenzeiger zum Aufrufen der Funktion verwenden, können wir sehen, dass die abgeleitete Version ausgeführt wird. Durch Hinzufügen des Schlüsselworts „virtual“ zur Basisklassenfunktion wird sichergestellt, dass die am stärksten abgeleitete Version aufgerufen wird.

Lassen Sie uns als Nächstes rein virtuelle Funktionen und abstrakte Klassen diskutieren. Eine rein virtuelle Funktion ist eine virtuelle Funktion ohne Implementierung in der Basisklasse. Es zwingt abgeleitete Klassen, ihre eigene Implementierung bereitzustellen. Indem wir eine virtuelle Funktion auf „gleich Null“ setzen, erstellen wir eine rein virtuelle Funktion. Dadurch wird die Basisklasse zu einer abstrakten Klasse, die nicht instanziiert werden kann. Abgeleitete Klassen müssen die rein virtuelle Funktion implementieren. Wir erstellen eine „Piano“-Klasse, die von der „Instrument“-Klasse abgeleitet ist. Wenn wir versuchen, ein Objekt vom Typ „Piano“ zu erstellen, ohne die rein virtuelle Funktion zu implementieren, führt dies zu einem Fehler. Sobald wir die Funktion jedoch in der Klasse „Piano“ implementieren, können wir erfolgreich ein Objekt erstellen und die Funktion aufrufen.

Lassen Sie uns abschließend das polymorphe Verhalten virtueller Funktionen untersuchen. Wir haben zwei Instrumentenzeiger, einer zeigt auf ein „Akkordeon“-Objekt und der andere auf ein „Klavier“-Objekt. Indem wir ein Array von Instrumentenzeigern erstellen, können wir zeigen, dass der Aufruf der Funktion „makeSound“ mithilfe der Basisklassenzeiger zur Ausführung der abgeleiteten Versionen der Funktion führt.

Ich hoffe, diese Erklärung hilft Ihnen, virtuelle Funktionen, rein virtuelle Funktionen und abstrakte Klassen besser zu verstehen. Wenn Sie weitere Fragen haben, lassen Sie es mich bitte in den Kommentaren unten wissen. Vielen Dank fürs Zuschauen und vergessen Sie nicht, sich anzumelden!

 

Abstraktion erklärt mit Beispielen aus der Praxis und Code! - C++ OOP-Kurs



Abstraktion erklärt mit Beispielen aus der Praxis und Code! - C++ OOP-Kurs

In diesem Video werde ich das wichtige Konzept der Abstraktion in der objektorientierten Programmierung diskutieren. Ich erkläre, was Abstraktion ist, und zeige, wie man Abstraktion in der C++-Programmierung implementiert und verwendet. Aber bevor wir uns darauf einlassen, möchte ich C++ Builder vorstellen, eine leistungsstarke IDE, die eine schnelle App-Entwicklung für mehrere Plattformen mit weniger Code ermöglicht. Es stellt eine nahtlose Verbindung zu verschiedenen Datenbanken her und enthält leistungsstarke Bibliotheken wie VCL- und FireMonkey-Frameworks. Starten Sie kostenlos über den Link in der Beschreibung.

Unter Abstraktion versteht man in der Programmierung den Vorgang, wichtige Informationen anzuzeigen und gleichzeitig komplexe und unwichtige Details zu verbergen. Um die Abstraktion besser zu verstehen, betrachten wir ein Beispiel aus der Praxis: eine Kaffeemaschine. Wenn Sie eine Kaffeemaschine benutzen, müssen Sie lediglich wissen, wie man Kaffee und Wasser einfüllt und einen Knopf drückt, um Kaffee zuzubereiten. Der interne Prozess der Maschine ist komplex, aber er ist abstrahiert und verbirgt sich hinter einer einfachen Prozedur. Diese Abstraktion erleichtert Benutzern die Bedienung der Maschine, ohne deren komplizierte Funktionsweise zu verstehen. In ähnlicher Weise nutzen wir in der Programmierung die Abstraktion, um komplexe Details zu verbergen und eine vereinfachte Schnittstelle bereitzustellen.

Ein weiterer wichtiger Aspekt der Abstraktion besteht darin, dass sich die abstrahierten Elemente nicht häufig ändern oder dass sie sich für den Endbenutzer zumindest nicht ändern. Das bedeutet, dass Sie die interne Implementierung ändern können, solange Sie die dem Benutzer zugängliche Schnittstelle nicht ändern. Wenn ein neues Unternehmen beispielsweise eine effizientere Kaffeemaschine entwickelt, kann es die internen Komponenten austauschen, um den Energieverbrauch zu senken, den Kaffee schneller zuzubereiten und den Lärm zu reduzieren. Solange der Benutzer noch Kaffee und Wasser einfüllen und die Taste drücken muss, bleibt die Benutzeroberfläche dieselbe und der Benutzer muss keine neue Art der Bedienung der Maschine erlernen. Diese Standardisierung des Verhaltens durch Abstraktion ermöglicht es neuen Unternehmen, auf bestehenden Benutzererwartungen aufzubauen.

Beim Programmieren können wir Abstraktionsebenen erstellen, um komplexe Details zu verbergen und anderen Entwicklern eine vereinfachte Schnittstelle bereitzustellen. Wenn ich beispielsweise eine Klasse mit verschiedenen komplexen Funktionalitäten erstelle, kann ich eine Abstraktionsschicht bereitstellen, die die zugrunde liegende Komplexität verbirgt. Andere Entwickler können dann die einfache Schnittstelle der Klasse nutzen, ohne die Implementierungsdetails kennen zu müssen. In C++ erreichen wir Abstraktion durch abstrakte Klassen, die mindestens eine rein virtuelle Funktion enthalten. Diese abstrakten Klassen definieren den Vertrag oder die Schnittstelle, die andere Klassen implementieren müssen.

Lassen Sie uns eine abstrakte Klasse namens „Smartphone“ erstellen, um dies zu veranschaulichen. Es wird eine öffentliche Funktion namens „Selfie machen“ deklariert, die eine wichtige Funktionalität darstellt, die alle Smartphones haben sollten. Indem wir diese Funktion mithilfe der Syntax „= 0“ zu einer rein virtuellen Funktion machen, transformieren wir die Klasse in eine abstrakte Klasse. Wir können keine Instanzen abstrakter Klassen direkt erstellen, aber wir können Zeiger auf sie erstellen. Jede Klasse, die ein Smartphone sein möchte, muss von dieser abstrakten Klasse erben und eine eigene Implementierung der rein virtuellen Funktion bereitstellen.

Erstellen wir beispielsweise eine „Android“-Klasse, die von der „Smartphone“-Klasse erbt. In dieser Klasse implementieren wir die Funktion „Selfie machen“ mit der komplexen Logik, die für Android-Geräte spezifisch ist. Ebenso können wir eine „iPhone“-Klasse erstellen, die ebenfalls von „Smartphone“ erbt und eine eigene Implementierung der Funktion „Selfie machen“ bereitstellt. Jede Klasse kann ihre eigene, einzigartige Implementierung haben, aber aus der Perspektive eines Smartphone-Nutzers bleibt der Prozess derselbe.

Die durch die „Smartphone“-Klasse erreichte Abstraktion ermöglicht es Entwicklern, die an Android- oder iPhone-Klassen arbeiten, sich auf ihre spezifischen Implementierungsdetails zu konzentrieren, ohne die Logik der anderen Klasse kennen zu müssen. Sie müssen lediglich den von der abstrakten Klasse definierten Vertrag einhalten und so sicherstellen, dass die erforderlichen Funktionalitäten implementiert werden. Durch den Einsatz von Abstraktion schaffen wir eine Trennung von Belangen, vereinfachen die Codenutzung und erleichtern die modulare Entwicklung. Durch Abstraktion können wir standardisierte Schnittstellen erstellen und komplexe Implementierungen verbergen, was zu mehr Wartung führt.

Durch Abstraktion können wir standardisierte Schnittstellen erstellen und komplexe Implementierungen verbergen, was zu wartbarerem und flexiblerem Code führt. Es fördert die Wiederverwendung von Code und die modulare Entwicklung, indem es Funktionalität in abstrakte Klassen kapselt, die durch andere Klassen erweitert und implementiert werden können. Neben abstrakten Klassen stellt C++ auch einen weiteren Mechanismus zur Abstraktion bereit, der als Schnittstellen bezeichnet wird. Schnittstellen sind rein abstrakte Klassen, die einen Methodenvertrag definieren, der von jeder Klasse implementiert werden muss, die sich an die Schnittstelle halten möchte. Dies ermöglicht eine noch größere Abstraktion und lose Kopplung zwischen Komponenten.

Zusammenfassend ist Abstraktion in der objektorientierten Programmierung der Prozess, komplexe Details zu verbergen und eine vereinfachte Schnittstelle bereitzustellen. Es ermöglicht Entwicklern, sich auf bestimmte Implementierungen zu konzentrieren und gleichzeitig die zugrunde liegende Komplexität zu abstrahieren. Abstrakte Klassen und Schnittstellen sind die wichtigsten Werkzeuge zum Erreichen der Abstraktion in C++. Durch die Verwendung von Abstraktion können wir modulareren, wiederverwendbareren und wartbareren Code erstellen.

 

C++-Operator-Überladung, Anfänger bis Fortgeschrittene (ausführliche Erklärung)



C++-Operator-Überladung, Anfänger bis Fortgeschrittene (ausführliche Erklärung)

Hallo zusammen und willkommen auf meinem Kanal. Ich war mitten in meiner Arbeit und hatte nicht vor, dieses Video zu drehen, aber da ich an einem sehr interessanten Projekt arbeite, dachte ich, warum es euch nicht zeigen? Ich arbeite derzeit an einem großen Projekt mit Tausenden von Dateien und Millionen von Codezeilen. Ich war gerade dabei, meinen Code zu analysieren, was normalerweise 10 bis 15 Minuten dauert. Während wir auf die Analyse warten, werde ich Sie über die Überlastung von Operatoren informieren.

Der von mir verwendete Analyser heißt PDS Studio und kann über den Link in der Beschreibung kostenlos heruntergeladen werden. Ich zeige Ihnen, wie ich PDS Studio verwende, um Fehler zu finden und meinen Code zu optimieren. Sobald Sie PDS Studio heruntergeladen haben, benötigen Sie Code zur Analyse. Ich habe die Lösung aus meiner Arbeit, kann Ihnen den Code aber aufgrund einer Geheimhaltungsvereinbarung nicht zeigen. Die Ergebnisse der Analyse zeige ich Ihnen jedoch später im Video.

Um Ihren Code mit PDS Studio zu analysieren, müssen Sie auf die Registerkarte „Erweiterungen“ klicken und PDS Studio auswählen. Wählen Sie dann die gesamte Lösung zur Analyse aus. Da die Analyse einige Zeit in Anspruch nimmt, wechsle ich zu einem leeren Projekt und zeige Ihnen in der Zwischenzeit die Überlastung von Operatoren.

Durch die Operatorüberladung können wir definieren, wie sich ein bestimmter Operator mit einem bestimmten Datentyp verhält. Beispielsweise verhält sich der Plus-Operator anders, wenn er mit Zahlen verwendet wird, als wenn er mit einem benutzerdefinierten Datentyp verwendet wird. Wir können Operatorfunktionen erstellen, um dieses Verhalten zu definieren. Ich erkläre dieses Konzept anhand eines Beispiels für das Hinzufügen zweier benutzerdefinierter Datentypen.

In C++ können wir Operatorfunktionen erstellen, indem wir das Schlüsselwort „operator“ gefolgt vom Operator verwenden, den wir überladen möchten. Beispielsweise können wir den Plus-Operator überladen, indem wir eine „Operator+“-Funktion erstellen. Ich demonstriere dies, indem ich eine Struktur namens „YouTubeChannel“ mit zwei Attributen erstelle: „name“ und „subscribersCount“. Wir erstellen auch einen Konstruktor für diese Struktur.

Um den Einfügeoperator (<<) für unseren YouTubeChannel-Typ zu überladen, müssen wir eine „Operator<<“-Funktion definieren. Diese Funktion benötigt zwei Parameter: ein Objekt vom Typ „ostream“ (z. B. „cout“) und ein Objekt vom Typ „YouTubeChannel“. Wir übergeben diese Parameter als Referenz, um unnötiges Kopieren zu vermeiden.

Innerhalb der Funktion „operator<<“ verwenden wir das Objekt „ostream“, um die Informationen über den YouTubeChannel auszugeben. In diesem Fall drucken wir den Namen und die Anzahl der Abonnenten aus. Durch Überladen des Einfügungsoperators ermöglichen wir das Drucken von YouTubeChannel-Objekten mit dem Befehl „cout“.

Um den überladenen Einfügungsoperator zu verwenden, können wir einfach „cout << youtubeChannelObject“ schreiben. Dies funktioniert ähnlich wie wir andere Typen mit „cout“ drucken. Wir können die Operatorfunktion auch direkt wie eine reguläre Funktion aufrufen, indem wir das „cout“-Objekt und das YouTubeChannel-Objekt als Parameter übergeben.

Beachten Sie, dass verschiedene Operatoren unterschiedliche Arten der Überladung haben. Der Einfügungsoperator wird mit der Funktion „operator<<“ überladen, aber andere Operatoren wie Plus, Minus, größer als, kleiner als, gleich usw. haben ihre eigenen spezifischen Operatorfunktionen.

Das war’s für dieses Video. Ich hoffe, Sie fanden diese Einführung in die Operatorüberladung hilfreich. In der Beschreibung finden Sie eine Liste aller Operatoren, die in C++ überladen werden können. Sobald die Analyse abgeschlossen ist, zeige ich Ihnen die Ergebnisse. Wenn Sie Fragen haben, können Sie diese gerne in den Kommentaren stellen. Vielen Dank fürs Zuschauen!

Grund der Beschwerde: