„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Beziehung oder Fähigkeit, beide Kriterien werden herangezogen

Beziehung oder Fähigkeit, beide Kriterien werden herangezogen

Veröffentlicht am 08.11.2024
Durchsuche:359

Relationship or ability, both of these criteria are used

In der Gesellschaft gibt es bei der Bewertung der Fähigkeiten und des Wertes einer Person oft zwei verschiedene Kriterien: eines basiert auf „Beziehungen“ und das andere basiert auf „Fähigkeiten“. Beide Standards sind in unterschiedlichen Kulturen, Branchen und persönlichen Werten verankert und haben jeweils ihre eigenen Befürworter und Kritiker.

Innerhalb von Programmiersprachen gibt es zwei Arten von Standards, die Code auf unterschiedliche Weise organisieren und Datenstrukturen mit Funktionen verknüpfen. In diesem Artikel wird kurz auf die Anwendung und das Wirkprinzip dieser beiden gemeinsamen Standards eingegangen.

Klassenmodell

In der Javascript-Sprache wird das Schlüsselwort class bereitgestellt, mit dem wir Klassen definieren können. Wichtig ist, dass Klassen erweiterbar sind und wenn Methoden für eine Instanz aufgerufen werden, suchen sie nach Methodendefinitionen in der Reihenfolge der Prototypenkette. Zum Beispiel:


class Animal {
    move() { return 'move' }
}
class Monkey extends Animal {
    jump() { return 'jump' }
}
class Human extends Monkey {
    write() { return 'write' }
}


extends-Schlüsselwörter können uns dabei helfen, eine neue Klasse zu definieren, die andere Klassen erweitert. Wir können die Prototypenkette wie folgt erhalten:


let me = new Human()
let proto = me.__proto__
let r = []

while (proto !== null) {
    r.push(proto.constructor.name)
    proto = proto.__proto__
}


Wir erhalten Folgendes: ['Mensch', 'Affe', 'Tier', 'Objekt']. Wenn wir eine Methode aufrufen, hängt der Erfolg des Methodenaufrufs davon ab, ob in der Prototypenkette eine entsprechende Definition vorhanden ist. Wenn Sie beispielsweise me.move() aufrufen, hat es eine Definition in der Animal-Klasse und der Aufruf ist erfolgreich.

Dies ist das Klassenmodell, das ich gerne als „relationales“ Modell bezeichne, das aufgerufen werden kann, solange es in der Klasse der Instanz selbst oder in der übergeordneten Klasse, Großelternklasse usw. definiert ist An.

Kompetenzbasiertes Modell

Im Vergleich zum beziehungsbasierten Modell ist das kompetenzbasierte Modell viel einfacher. Solange eine Instanz ein bestimmtes Merkmal erfüllt, kann die entsprechende Methode unabhängig von der Beziehung der Instanz auf die Instanz einwirken.


let me = {
    moveable: true,
    freezable: false
}

function move(x) { return x.moveable ? 'move' : undefined }
function freeze(x) { return x.freezable ? 'freeze' : undefined }


In diesem Modell sind Daten und Methoden unabhängig voneinander. Der Vorteil besteht darin, dass es prägnant und unkompliziert ist, aber der Nachteil liegt auf der Hand, da die Methode und die Daten unabhängig sind und es schwierig ist, die Methodendefinition zu überschreiben.

Zusammenfassung

Nachdem wir die beiden Möglichkeiten zum Verbinden von Datenstrukturen und Methoden vorgestellt haben, können wir davon ausgehen, dass die Verwendung des relationalen Klassenmodells empfohlen wird, wenn Methoden mit unterschiedlichen Funktionen mit demselben Namen entsprechend der Datenklasse implementiert werden müssen . Wenn die Methode normalerweise relativ fest ist und die Daten veränderbar sind und dieselbe Methode mit unterschiedlichen Daten funktioniert, kann das kompetenzbasierte Modell verwendet werden.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/linjiezhang/relationship-or-ability-both-of-these-criteria-are-used-1dbd?1 Bei Verstößen wenden Sie sich bitte an [email protected] um es zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3