Ich habe festgestellt, dass viele Interviewer diese Frage gerne stellen (ich bin Student), aber jedes Mal habe ich das Gefühl, dass meine Antwort auf diese Frage unbefriedigend ist.
Meine Antwort lautet normalerweise
Seine Designmerkmale sind: Vererbung, Kapselung, Polymorphismus
Von konkret bis abstrakt. Eigenschaften werden zu Variablen und Verhaltensweisen werden zu Methoden
Der Interviewer scheint jedoch nicht sehr zufrieden zu sein. Ich frage mich, ob es relativ elegante Antworten von verschiedenen Experten gibt.
Ich habe festgestellt, dass viele Interviewer diese Frage gerne stellen (ich bin Student), aber jedes Mal habe ich das Gefühl, dass meine Antwort auf diese Frage unbefriedigend ist.
Meine Antwort lautet normalerweise
Seine Designmerkmale sind: Vererbung, Kapselung, Polymorphismus
Von konkret bis abstrakt. Eigenschaften werden zu Variablen und Verhaltensweisen werden zu Methoden
Der Interviewer scheint jedoch nicht sehr zufrieden zu sein. Ich frage mich, ob es relativ elegante Antworten von verschiedenen Experten gibt.
Die erste Antwort ist ein Programmierparadigma.
Beschreiben Sie dann die drei von Ihnen genannten Funktionen ausführlich, zum Beispiel:
Vererbung: Unterklassen können von der übergeordneten Klasse bereitgestellte Variablen und Methoden wiederverwenden
Kapselung: Eine Reihe von Details abschirmen. Sie müssen die Existenz dieser Methode nur kennen, wenn Sie extern aufrufen
Polymorphismus: Die Methoden der übergeordneten Klasse können nach der Vererbung durch die Unterklasse auf unterschiedliche Weise implementiert werden;
sprechen. Ich bin zurück und habe meinen Artikel verloren
Ich habe gesehen, dass die Frage von lz abgelehnt wurde. Ich habe sie in der Community überprüft und festgestellt, dass es tatsächlich relevante Antworten gibt. Mein Artikel ist eine kleine Ergänzung. Wenn Sie Fragen haben, weisen Sie diese bitte darauf hin.
Objektorientiertes Denken
Lassen Sie mich vor einiger Zeit eine sehr einfache Funktion hinzufügen.
Es ist zwar eine sehr einfache Funktion, aber die Like-Funktion ist nicht auf eine bestimmte Zeit beschränkt Kommentare, Sie können Artikel, Fragen usw. mit „Gefällt mir“ markieren, und „Gefällt mir“-Angaben können eine Reihe von Ereignissen auslösen (Benachrichtigung relevanter Benutzer usw.). Zunächst dachte ich an drei Schreibweisen
点赞
<code>// 1.文章被用户点赞 $article->votedBy($user); // 2.用户给某篇文章点赞 $user->voteArticle($article); // 3.用户伸出大拇指给某篇文章点赞 $user->thumbUp()->voteToArticle($article); //$user->thumbUp()->voteToDiscuss($discuss);</code>
Das ist wirklich eine interessante Frage, haha. Natürlich wird jeder ein anderes Verständnis haben. Schließlich wird auch das Konzept der Objektorientierung gehypt.
Mein Verständnis umfasst zwei Aspekte:
Als das objektorientierte Konzept populär war, sprach man oft über die Wiederverwendung von Software, und Vererbung war eine direkte Manifestation der Wiederverwendung von Software. Später entdeckten die Leute jedoch, dass Komposition anstelle von Vererbung verwendet werden sollte, und dann wurde schnittstellenorientierte Programmierung populär.
Ich bin ein bisschen weit gegangen, also lasst uns hier aufhören.
Alles ist ein Objekt.
objektorientiert
Alles ist Objekt
Verwenden Sie unbedingt Beispiele
Zum Beispiel Tiere – „Furu-Tiere – Menschen“, Löwen, Tiger
Fügen Sie beispielsweise Polymorphismus hinzu, er heißt
Vererbung, wie Furu-Tiere lebendgebärend usw.
Bei der Implementierung eines Projekts müssen Sie das Geschäft in Code abstrahieren. Dieser Abstraktionsprozess ist das Programmierparadigma, und objektorientiert ist eines davon. Ähnliche umfassen die prozessorientierte und funktionale Programmierung.
Objektorientierte Funktionen sind 继承
, 多态
, 封装
.
Dann kann der Interviewer beginnen, 继承
, 多态
, 封装
zu fragen.
Perfekt! ~~~
Es wäre besser, wenn Sie wissen, was prozessorientierte und funktionale Programmierung ist.
In sich geschlossen, wenn er es nicht versteht, können Sie einfach gehen. Dieser Interviewer ist zu gut!
JS sagte: Alles ist ein Objekt, und Objekte sind auch Objekte – nichts Falsches
Ja, alles ist ein Objekt
Ich erinnere mich, dass ich eine Antwort auf zhihu gelesen habe. Sein Verständnis ist, dass (in der Praxis) die Wiederverwendung von Code das Wichtigste ist.
Kapselung: Sie können die gekapselten Codeblöcke direkt verwenden, was einer Wiederverwendung entspricht.
Vererbung: Vorhandene Attribute verwenden, das ist Wiederverwendung.
Polymorphismus: unterschiedliche Details, erfordert aber im Grunde immer noch eine erste Wiederverwendung.
Ohne auf fortgeschrittene Programmierung, Paradigmen und andere theoretische Dinge einzugehen, besteht der unmittelbarste Vorteil und die Erfahrung beim Schreiben von Code selbst darin, dass der Code aufgrund der häufigeren Wiederverwendung prägnanter wird.
Stellen Sie sich Ihrem Partner (allgemein bekannt als Freund/Freundin) gegenüber, nehmen Sie eine elegante Haltung ein und sagen Sie ihm/ihr dann liebevoll: „Schauen Sie mich an ...“ Dies bedeutet, dass Sie Ihrem Partner anmutig gegenüberstehen
Verpackungsdaten und damit verbundene Verhaltensweisen
Interessante Frage. Ich bin auch Student und möchte etwas von meinem eigenen Verständnis mitteilen.
Ein großartiges Merkmal der Objektorientierung ist, dass sie Daten und Verhalten (Operationen auf Daten) gleichzeitig kombiniert Es ähnelt eher der Betriebslogik der realen Welt.
Warum ich so denke, basiert auf dem Vergleich mit traditionellen Methoden (prozessorientiert usw.).
Zum Beispiel ist die Verarbeitung von Daten und Verhalten in der C-Sprache tatsächlich etwas getrennt und schenkt dem Verhalten mehr Aufmerksamkeit. Es gibt darin kein Konzept namens „Objekt“, sondern eine Welt voller Aktionen (Funktionen). Hauptsächlich rufen Funktionen Funktionen auf, und die Ergebnisse werden von Anfang bis Ende angegeben ... Das Wichtigste auf dieser Welt sind verschiedene Aktionen.
Das „Objekt“ von C++ ähnelt insbesondere einer Sache, beispielsweise einer Person. Seine Welt ist eine Welt voller Objekte. Hauptsächlich die Beziehungen zwischen Objekten (Menschen und Objekte, Menschen und Menschen usw.), diese Beziehungen oder Kollisionen führen zum Endergebnis ... Die wichtigsten Dinge auf dieser Welt sind verschiedene Objekte.
Die Objekte selbst tragen Daten und Funktionen; nur die Beziehung zwischen Objekten regt die Welt an. An diesen beiden Punkten ähnelt die objektorientierte Programmierung eher der realen Welt.
Die oben genannten „Vererbung, Kapselung, Polymorphismus“ und andere Merkmale können auch zur Simulation der realen Welt verwendet werden, um sie besser zu verstehen. Lassen Sie mich Ihnen nur einige Beispiele nennen...
Vererbung: Bücher & Lehrbücher & Computerlehrbücher – das ist die Vererbungsbeziehung in der realen Welt.
Kapselung: Mobiltelefon – es ist gekapselt, und wenn Sie es verwenden, müssen Sie die Schaltlogik im Inneren nicht kennen.
Polymorphisch: People.Look (Schönheit) und People.Look (starkes Licht) – die Parametertypen sind unterschiedlich und auch die Ausführung ist unterschiedlich.
Die Vorteile der Objektorientierung sind ebenfalls leicht zu verstehen. Die eine besteht darin, die Verständlichkeit zu verbessern, da Objekte gemäß den Regeln des menschlichen Weltverständnisses dargestellt werden und der gängigen Denkweise entsprechen. Die zweite besteht darin, die Entwicklung und Wartung des Systems zu einem großen Teil zu erleichtern gleichbedeutend mit einem neuen Verständnis von Objektdaten und -funktionen. Ändern Sie einige Dinge basierend auf dem Original.
Bitte kritisieren und korrigieren Sie mich, wenn ich etwas Falsches sage...!
Es kann nicht ausgeschlossen werden, dass einige Interviewer selbst sehr dumm sind. Das ist ein so großes verdammtes Thema, dass wir es nicht beenden können, selbst wenn wir tagelang zusammensitzen und reden
Scrollen Sie weniger auf Zhihu und schreiben Sie mehr Code
Alles ist ein Objekt.