Was???
Kapselung ist der Prozess der Bündelung von Daten und Funktionen in einer einzigen Einheit (d. h. Kapsel), sie kann auch den Zugriff auf einige der Daten/Methoden einschränken.
Es ist neben Vererbung, Polymorphismus und Datenabstraktion eine der vier Säulen von OOP.
Warum?
Es ist einfacher, eine blinde Annahme zu treffen und an allen Stellen Kapselung zu verwenden, aber es ist wichtig, das Warum zu verstehen, damit Sie es richtig verwenden können.
Versuchen wir, das Warum zu verstehen, indem wir uns eine Beispielaufgabe ansehen.
Aufgabe:
Erstellen Sie einen Rechner für Schülerergebnisse, der Folgendes tun sollte:
- Berechnen Sie die Durchschnittsnote
- Stellen Sie fest, ob ein Schüler durchgefallen oder bestanden ist
- Wird einen Fehler auslösen, wenn eine der Betreffmarkierungen ungültig ist ( 100)
Lösung 1: der nicht gekapselte Weg
Die Idee besteht lediglich darin, das Problem zu lösen, daher habe ich die prozedurale Programmierung gewählt, um dies zu erreichen, was meiner Meinung nach einen guten Kontrast bieten und das Problem offensichtlicher erscheinen lassen könnte.
type Subject = "english" | "maths"; interface IStudent { name: string; marks: Record<subject number>; } // Receive Input const studentInput: IStudent = { name: "John", marks: { english: 100, maths: 100, }, }; // Step1: Validate the provided marks Object.keys(studentInput.marks).forEach((subjectName) => { const mark = studentInput.marks[subjectName as Subject]; if (mark > 100 || mark studentInput.marks[current as Subject] + accumulator, 0 ); // Step3: find the average const average = totalMarks / Object.keys(studentInput.marks).length; // Step4: find the result const boolResult = average > 40; // Step 5: print result console.log(boolResult); console.log(average); </subject>
Probleme mit Lösung 1:
Damit wird definitiv das erwartete Ergebnis erzielt, es sind jedoch mehrere Probleme damit verbunden. Um nur einige zu nennen:
- Jede Implementierung hier ist weltweit zugänglich und es gibt keine Kontrolle über ihre Verwendung durch zukünftige Mitwirkende.
- Daten und Vorgänge sind getrennt, sodass es schwierig ist, nachzuvollziehen, welche Funktionen sich auf die Daten auswirken. Sie müssten jeden Codeabschnitt sorgfältig durchgehen, um zu verstehen, was aufgerufen wird und Teil einer Ausführung ist.
- Funktionen werden mit zunehmender Logik schwieriger zu verwalten. Änderungen können aufgrund der engen Kopplung dazu führen, dass nicht verwandter Code beschädigt wird.
Wie kann das Problem gelöst werden?
Indem Sie Encapsulation integrieren oder es deutlicher machen, indem Sie die folgenden zwei Schritte ausführen,
- Kontrollierter Zugriff auf Daten und Funktionen
- Daten mit Verhalten bündeln
Lösung 2: Der gekapselte Weg
type SubjectNames = "english" | "maths"; interface IStudent { name: string; marks: Record<subjectnames number>; } class ResultCalculator { protected student: IStudent; constructor(student: IStudent) { this.student = student; } isPassed(): boolean { let resultStatus = true; Object.keys(this.student.marks).forEach((subject: string) => { if (this.student.marks[subject as SubjectNames] { if ( this.student.marks[subject as SubjectNames] 100 ) { throw new Error(`invalid mark`); } }); } private totalMarks() { return Object.keys(this.student.marks).reduce( (acc, curr) => this.student.marks[curr as SubjectNames] + acc, 0 ); } private subjectCount() { return Object.keys(this.student.marks).length; } } // Receive Input const a: IStudent = { name: "jingleheimer schmidt", marks: { english: 100, maths: 100, }, }; // Create an encapsulated object const result = new ResultCalculator(a); // Perform operations & print results console.log(result.isPassed()); console.log(result.getAverage()); </subjectnames>
Beachten Sie in der obigen Lösung,
- Die Methoden „totalMarks“, „subjectCount“, „validateMarks“ und die Mitgliedsvariable „student“ werden nicht verfügbar gemacht und können nur vom Klassenobjekt verwendet werden.
2.Der Datenschüler wird mit jedem Verhalten davon gebündelt.
Das obige ist der detaillierte Inhalt vonOOP – Kapselung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

Python eignet sich besser für Datenwissenschaft und maschinelles Lernen, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python ist bekannt für seine prägnante Syntax- und Rich -Bibliotheks -Ökosystems und ist für die Datenanalyse und die Webentwicklung geeignet. 2. JavaScript ist der Kern der Front-End-Entwicklung. Node.js unterstützt die serverseitige Programmierung und eignet sich für die Entwicklung der Vollstapel.

JavaScript erfordert keine Installation, da es bereits in moderne Browser integriert ist. Sie benötigen nur einen Texteditor und einen Browser, um loszulegen. 1) Führen Sie sie in der Browser -Umgebung durch, indem Sie die HTML -Datei durch Tags einbetten. 2) Führen Sie die JavaScript -Datei nach dem Herunterladen und Installieren von node.js nach dem Herunterladen und Installieren der Befehlszeile aus.

So senden Sie im Voraus Aufgabenbenachrichtigungen in Quartz Wenn der Quartz -Timer eine Aufgabe plant, wird die Ausführungszeit der Aufgabe durch den Cron -Ausdruck festgelegt. Jetzt...

So erhalten Sie die Parameter von Funktionen für Prototyp -Ketten in JavaScript in JavaScript -Programmier-, Verständnis- und Manipulationsfunktionsparametern auf Prototypungsketten ist eine übliche und wichtige Aufgabe ...

Analyse des Grundes, warum der dynamische Verschiebungsfehler der Verwendung von VUE.JS im WeChat Applet Web-View Vue.js verwendet ...

Wie kann ich gleichzeitige Anfragen für mehrere Links und nach Abfolge der Rückgabeergebnisse beurteilen? In Tampermonkey -Skripten müssen wir oft mehrere Ketten verwenden ...


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen