Ich bereite mich auf ein Interview vor und habe beschlossen, meine OOP-Konzepte aufzufrischen. Es gibt Hunderte von Artikeln, aber es scheint, dass jeder sie anders beschreibt. Einige sagen
Abstraktion ist "der Prozess der Identifizierung gemeinsamer Muster mit systematischen Variationen; eine Abstraktion stellt das gemeinsame Muster dar und bietet ein Mittel zur Angabe der zu verwendenden Variation" (Richard Gabriel).
und wird durch abstrakte Klassen erreicht.
Ein anderer sagt
Abstraktion bedeutet, dem Client des Objekts nur die erforderlichen Details anzuzeigen
und
Angenommen, Sie haben eine Methode "CalculateSalary" in Ihrer Employee-Klasse, die EmployeeId als Parameter verwendet und das Gehalt des Mitarbeiters für den aktuellen Monat als ganzzahligen Wert zurückgibt. Nun, wenn jemand diese Methode anwenden möchte. Er muss sich nicht darum kümmern, wie das Mitarbeiterobjekt das Gehalt berechnet. Ein einziges Anliegen ist der Name der Methode, ihre Eingabeparameter und das Format des resultierenden Mitglieds.
Ich habe immer wieder gegoogelt und keines der Ergebnisse scheint mir eine richtige Antwort zu geben. Wo passt nun die Kapselung in all diese? Ich suchte und fand eine Frage zum Stapelüberlauf . Auch die Antworten auf diese Fragen wurden verwirrend hier , sagt sie
Kapselung ist eine Strategie, die als Teil der Abstraktion verwendet wird. Kapselung bezieht sich auf den Zustand von Objekten - Objekte kapseln ihren Zustand und verbergen ihn von außen; Externe Benutzer der Klasse interagieren über ihre Methoden mit ihr, können jedoch nicht direkt auf den Klassenstatus zugreifen. Die Klasse abstrahiert also die Implementierungsdetails, die sich auf ihren Status beziehen.
Und hier sagt ein anderes angesehenes Mitglied:
Sie sind verschiedene Konzepte.
Bei der Abstraktion werden alle nicht benötigten / unwichtigen Attribute eines Objekts verfeinert und nur die für Ihre Domain am besten geeigneten Eigenschaften beibehalten.
Jetzt bin ich mit dem ganzen Konzept durcheinander. Ich kenne mich mit abstrakter Klasse, Vererbung, Zugriffsspezifizierern und allem aus. Ich möchte nur wissen, wie ich antworten soll, wenn ich in einem Interview nach Abstraktion und / oder Kapselung gefragt werde.
Bitte markieren Sie es nicht als Duplikat . Ich weiß, dass es mehrere ähnliche Fragen gibt. Aber ich möchte die Verwirrung zwischen den widersprüchlichen Erklärungen vermeiden. Kann jemand einen glaubwürdigen Link vorschlagen? Ein Link zur Stackoverflow-Frage ist ebenfalls willkommen, es sei denn, dies führt erneut zu Verwirrung. :) :)
EDIT: Ich brauche Antworten, ein bisschen c # orientiert