it-swarm.com.de

Was ist der Unterschied zwischen Abstraktion und Kapselung?

In Interviews wurde ich gebeten, den Unterschied zwischen Abstraktion und Verkapselung zu erklären. Meine Antwort war wie folgt

  • Abstraktion erlaubt es uns, komplexe reale Welt auf einfachste Weise darzustellen. Es ist der Prozess der Identifizierung der relevanten Eigenschaften und Verhaltensweisen, die ein Objekt besitzen sollte. mit anderen Worten, um das notwendige Merkmal darzustellen, ohne die Hintergrunddetails darzustellen.

  • Encapsulation ist ein Prozess, bei dem alle internen Details eines Objekts vor der realen Außenwelt verborgen werden. Das Wort "Einkapselung" ist wie "Einschließen" in eine "Kapsel". Es hindert Clients daran, ihre interne Ansicht zu sehen, in der das Verhalten der Abstraktion implementiert ist.

Ich glaube, mit der obigen Antwort war der Interviewer überzeugt, aber dann wurde ich gefragt, ob der Zweck beider besteht, sich zu verstecken, warum dann die Kapselung verwendet werden muss. Zu dieser Zeit hatte ich keine gute Antwort darauf.

Was muss ich hinzugefügt haben, um meine Antwort vollständiger zu machen?

49
vishu minhas

Die Abstraktion hat mit der Trennung der Schnittstelle von der Implementierung zu tun. (Wir interessieren uns nicht für was es ist, es interessiert uns, dass es funktioniert auf eine bestimmte Weise.)

Encapsulation hat mit dem Verbot des Zugriffs auf interne Strukturen einer Implementierung oder deren Kenntnis zu tun. (Wir interessieren uns nicht oder müssen wie es funktioniert sehen, nur das tut es.)

Manche Leute verwenden die Kapselung als Synonym für Abstraktion, was (IMO) falsch ist. Möglicherweise dachte Ihr Interviewer darüber nach. Wenn dies der Fall ist, sprachen Sie jeweils über zwei verschiedene Dinge, wenn Sie von "Einkapselung" sprachen.


Es ist erwähnenswert, dass diese Konzepte in verschiedenen Programmiersprachen unterschiedlich dargestellt werden. Einige Beispiele:

  • In Java und C # bieten Schnittstellen (und bis zu einem gewissen Grad abstrakte Klassen) Abstraktion, während Zugriffsmodifizierer Kapselung bereitstellen.
  • In C++ ist das meistens das Gleiche, nur dass wir keine Schnittstellen haben, sondern nur abstrakte Klassen.
  • In JavaScript sorgt die Enten-Typisierung für Abstraktion und die Schließung für die Kapselung. (Die Namenskonvention kann auch Kapselung bereitstellen, dies funktioniert jedoch nur, wenn sich alle Parteien damit einverstanden erklären.)
62
cdhowie

Es ist einfach!

Nehmen wir zum Beispiel das Fernsehen - es ist Encapsulation, weil:

  1. Das Fernsehen ist mit verschiedenen Funktionen ausgestattet, die ich nicht kenne, weil sie vollständig verborgen sind.

  2. Versteckte Dinge wie Musik, Video usw. alles in einer Kapsel gebündelt, die wir einen Fernseher nennen

Nun, Abstraktion ist wenn wir ein wenig über etwas wissen und das kann uns helfen, etwas zu manipulieren, für das wir nicht wissen, wie es intern funktioniert.

Zum Beispiel: Eine Fernbedienung fürs Fernsehen ist Abstraktion, weil

  1. Mit der Fernbedienung wissen wir, dass durch Drücken der Zifferntasten die Kanäle geändert werden. Wir wissen nicht, was intern tatsächlich passiert. Wir können das Verborgene manipulieren, aber wir wissen nicht , wie es intern gemacht wird.

Wenn wir programmatisch irgendwie auf die versteckten Daten zugreifen können und etwas wissen, ist dies Abstraktion. Und wenn wir nichts über die Interna wissen, ist dies die Kapselung.

Ohne Fernbedienung können wir im Fernsehen nichts ändern. Wir müssen sehen, was angezeigt wird, da alle Bedienelemente verborgen sind.

53
Mayank Gaur

Abstraktion

Offenlegen der Entität anstelle der Details der Entität.

"Details sind vorhanden, aber wir berücksichtigen sie nicht. Sie sind nicht erforderlich."

Beispiel 1:

Verschiedene Berechnungen: Addition, Multiplikation, Subtraktion, Division, Quadrat, Sin, Cos, Tan.

Wir zeigen nicht die Details, wie wir Sin, Cos oder Tan berechnen. Wir zeigen nur den Rechner und es gibt verschiedene Methoden, die vom Benutzer verwendet werden müssen.

Beispiel 2

Mitarbeiter hat: Vorname, Nachname, Vorname. Er kann sich anmelden (), abmelden (), doWork ().

Es gibt viele Prozesse für das Anmelden von Mitarbeitern, z. B. das Herstellen einer Verbindung zur Datenbank, das Senden der Mitarbeiter-ID und des Kennworts sowie das Empfangen einer Antwort von der Datenbank. Obwohl die obigen Details vorhanden sind, blenden wir die Details aus und zeigen nur "Mitarbeiter" auf.

Verkapselung

Einschließen Behandeln mehrerer Merkmale/Funktionen als eine Einheit anstelle von Individuen ... Damit die Außenwelt sich auf diese Einheit bezieht, anstatt auf deren Details direkt.

"Details sind vorhanden, wir berücksichtigen sie, zeigen sie jedoch nicht, stattdessen zeigen wir, was Sie sehen müssen."

Beispiel 1:

Anstatt es als Addition, Subtraktion, Multiplikation, Division zu bezeichnen, nennen wir es jetzt als Rechner.

Beispiel 2

Alle Merkmale und Vorgänge werden jetzt vom Mitarbeiter wie "John" vermittelt. John hat einen Namen. John Can DoWork (). John kann sich anmelden ().

Verstecken

Die Umsetzung vor der Außenwelt verstecken ... Damit die Außenwelt nicht sieht, was nicht gesehen werden sollte.

"Details sind da, wir betrachten sie, aber wir zeigen sie nicht. Sie müssen sie nicht sehen."

Beispiel 1:

Ihre Anforderung: Addition, Subtraktion, Multiplikation, Division. Sie können es sehen und erhalten das Ergebnis. 

Sie müssen nicht wissen, wo die Operanden gespeichert werden. Es ist nicht Ihre Anforderung. 

Auch ist jede Anweisung, die ich ausführt, nicht Ihre Anforderung.

Beispiel 2

John möchte wissen, wie viel Prozent er besucht hat. GetAttendancePercentage () wird also aufgerufen.

Für diese Methode müssen jedoch Daten in der Datenbank gespeichert werden. Daher wird FetchDataFromDB () aufgerufen. FetchDataFromDB () muss NICHT für die Außenwelt sichtbar sein. 

Daher werden wir es verstecken. John.GetAttendancePercentage () ist jedoch für die Außenwelt sichtbar.

Abstraktion, Verkapselung und Verstecken ergänzen sich.

Da wir Abstraktionsebenen für Details erstellen, werden die Details gekapselt. Und weil sie eingeschlossen sind, sind sie verborgen.

15
Aditya Bokade

Unterschied zwischen Abstraktion und Verkapselung: -

Abstraktion

  1. Abstraktion löst das Problem in der Designebene.
  2. Abstraktion dient zum Ausblenden unerwünschter Daten und zur Bereitstellung relevanter Daten.
  3. Mit der Abstraktion können Sie sich auf das konzentrieren, was das Objekt macht, anstatt darauf, wie es funktioniert.
  4. Abstraktion - Äußeres Layout, verwendet in Bezug auf das Design . Zum Beispiel: - Äußeres Aussehen eines Mobiltelefons, wie es ein Anzeigebildschirm und Tasten auf dem Tastenfeld zum Wählen einer Nummer hat.

Verkapselung

  1. Encapsulation löst das Problem in der Implementierungsebene.
  2. Encapsulation bedeutet, den Code und die Daten in einer einzigen Einheit zu verbergen, um die Daten vor der Außenwelt zu schützen.
  3. Einkapselung bedeutet, die inneren Details oder Mechanismen zu verbergen, wie ein Objekt etwas tut.
  4. Kapselung - Inneres Layout, verwendet in Bezug auf Implementierung . Zum Beispiel: - Inneres Implementierungsdetail eines Mobiltelefons, wie Tastenfeld und Anzeigebildschirm über Schaltkreise miteinander verbunden werden.
11
Vishal Patolia

Kapselung

Die Einkapselung aus dem, was Sie beim Googeln gelernt haben, ist ein Konzept der Kombination der zugehörigen Daten und Operationen in einer einzelnen Kapsel oder einer Klasse in OOP, sodass kein anderes Programm die Daten oder die Methodenimplementierung ändern kann zu einem bestimmten Zeitpunkt. Nur die Getter- und Setter-Methoden können Zugriff auf die Instanzvariablen gewähren.

Unser Code wird möglicherweise von anderen verwendet und zukünftige Upgrades oder Fehlerbehebungen haften. Encapsulation ist etwas, das sicherstellt, dass alle Codeänderungen, die wir in unserem Code vornehmen, den Code anderer Benutzer nicht beschädigen.

Encapsulation trägt zur Wartbarkeit, Flexibilität und Erweiterbarkeit des Codes bei.

Encapsulation hilft, die Implementierung hinter einer Schnittstelle zu verbergen.

Abstraktion

Abstraktion ist der Prozess, bei dem die Implementierung hinter einer Schnittstelle verborgen wird. Wir sind uns also nur des tatsächlichen Verhaltens bewusst, aber nicht, wie genau das Denken intern ausgeht. Das häufigste Beispiel ist das Szenario, in dem ein Schlüssel in das Schloss gesteckt und leicht entriegelt wird. Die Schnittstelle hier ist also das Schlüsselloch, während wir nicht wissen, wie die Hebel im Schloss sich untereinander abstimmen, um das Schloss zu entriegeln.

Genauer gesagt kann Abstraktion als die Fähigkeit beschrieben werden, dieselbe Schnittstelle für verschiedene Objekte zu verwenden. Es können verschiedene Implementierungen derselben Schnittstelle vorhanden sein, während die Details jeder Implementierung durch die Kapselung verborgen werden.

Zum Schluss die Aussage, um alle Verwirrungen bis jetzt zu beantworten. Der verborgene Teil bezieht sich auf die Kapselung, während der freigelegte Teil sich auf die Abstraktion bezieht.

Lesen Sie hier mehr dazu

5
abhimanyu435

Ich weiß, dass es viele Antworten mit verschiedenen Beispielen vor mir gibt.
Nun, hier ist meine Meinung Abstraktion interessiert sich für die Realität.

In Abstraktion verbergen wir etwas, um reduzieren Sie die Komplexität davon Und in Kapselung verbergen wir etwas, um schützen das Daten.

Wir definieren die Kapselung als das Umschließen von Daten und Methoden in einer einzigen Entität, die als Klasse bezeichnet wird.

In Java wird die Kapselung mithilfe von Gethrern und Setters nicht nur durch das Einbetten von Daten und Methoden erreicht. Wir definieren auch einen Weg, um auf diese Daten zuzugreifen ... und beim Zugriff auf Daten schützen wir sie auch. 

Technisch wäre beispielsweise die Definition einer Anrufgewichtung für eine private Datenvariable. Nun wissen wir, dass die Gewichtung im realen Szenario nicht Null oder weniger sein kann.
Stellen Sie sich vor, wenn es keine Getter und Setter gibt, die jemand leicht auf einen negativen Wert setzen könnte, wenn Sie öffentliches Mitglied der Klasse sind.

Nun der letzte Unterschied anhand eines Beispiels aus der realen Welt,
Betrachten wir eine Leiterplatte, die aus Schaltern und Tasten besteht. Wir wickeln alle Drähte in einen Schaltkasten, sodass wir jemanden schützen können, indem wir nicht direkt in Kontakt kommen (encapsulation).

Es ist uns egal, wie diese Drähte miteinander verbunden sind. Wir möchten nur, dass eine Schnittstelle den Schalter ein- und ausschaltet. Diese Schnittstelle wird durch Buttons bereitgestellt (Abstraktion

3
Omkar Mozar

Abstraktion: Abstraktion ist ein Prozess, in dem Sie relevante Daten sammeln oder sammeln und nicht relevante Daten entfernen. (Und wenn Sie Abstraktion erreicht haben, wird auch die Einkapselung erreicht.) 

Encapsulation: Encapsulation ist ein Prozess, in dem Sie Funktionen und Member in einer einzigen Einheit zusammenfassen. Mittel Sie verbergen die Implementierungsdetails. Mittel, auf die der Benutzer zugreifen kann, indem er ein Objekt der Klasse erstellt, er/sie kann keine Details sehen. 

Beispiel:  

 public class Test
   {
    int t;
    string  s;
 public void show()
  {
   s = "Testing";
   Console.WriteLine(s);
   Console.WriteLine(See()); // No error
  }

 int See()
  {
   t = 10;
   return t;
  }

 public static void Main()
  {
  Test obj =  new Test();
  obj.Show(); // there is no error
  obj.See(); // Error:- Inaccessible due to its protection level
  }
 }

Im obigen Beispiel kann der Benutzer nur auf die Show () - Methode zugreifen, indem er obj (Abstraktion) verwendet. 

Und die See () -Methode ruft intern in der Show () -Methode auf, die Einkapselung ist, da der Benutzer nicht weiß, was in der Show () -Methode vor sich geht. 

3
Sonu Rajpoot

Encapsulation: Angenommen, ich habe einige vertrauliche Dokumente. Jetzt verstecke ich diese Dokumente in einem Schließfach, sodass niemand darauf zugreifen kann. Dies ist die Kapselung.

Abstraktion: Ein riesiger Vorfall ereignete sich in der Zeitung. Jetzt listete die Zeitung nur die wichtigeren Details des tatsächlichen Vorfalls auf, dies ist Abstraktion. Darüber hinaus werden in der Schlagzeile des Vorfalls noch spezifischere Details in einer einzigen Zeile hervorgehoben, wodurch eine höhere Abstraktionsebene des Vorfalls erzielt wird. Auch Höhepunkte eines Fußball/Cricket-Matches können als Abstraktion des gesamten Spiels betrachtet werden.

Daher werden Daten durch die Einkapselung verborgen, um ihre Integrität zu schützen, und durch Abstraktion werden wichtige Details hervorgehoben.

In der Programmiersprache können wir sehen, dass eine Variable eingeschlossen sein kann, um den Bereich einer Klasse als privat zu definieren, sodass sie nicht direkt von außen auf sie zugreifen kann. Dies ist encapsulation. Eine Funktion kann in eine Klasse geschrieben werden, um zwei Zahlen auszutauschen. Nun können die Zahlen entweder durch Verwendung einer temporären Variablen oder durch Bitmanipulation oder durch arithmetische Operation ausgetauscht werden. Das Ziel des Benutzers besteht jedoch darin, die getauschten Nummern unabhängig von der für den Austausch verwendeten Methode zu erhalten. Dies ist Abstraktion. .

3

Abstraktion: Im Falle einer Hardware-Abstraktionsschicht haben Sie einfache Schnittstellen, um die Hardware auszulösen (z. B. nach links/rechts drehen), ohne die dahinterliegenden Hardwaredetails zu kennen. So versteckt sich die Komplexität des Systems. Es ist eine vereinfachte Ansicht der realen Welt.

Kapselung: Ausblenden von Objektinternalen. Das Objekt ist eine Abstraktion der realen Welt. Die Details dieses Objekts (wie Datenstrukturen ...) können jedoch durch die Kapselung ausgeblendet werden.

2
DevelopmentFun

ZUSAMMENFASSUNG: "Ein Blick auf ein Problem, das die wesentlichen Informationen extrahiert, die für einen bestimmten Zweck relevant sind, und den Rest der Informationen ignoriert." [IEEE, 1983]

ENCAPSULATION: "Encapsulation oder gleichwertiges Verbergen von Informationen bezieht sich auf die .__-Praxis, alles, was es braucht, in ein Objekt einzubeziehen, und .__ dies auf eine Weise zu tun, dass kein anderes Objekt diese interne Struktur kennen muss . "

2
user6407581

Abstraktion bezieht sich auf das Darstellen wesentlicher Merkmale ohne Einbeziehung der Hintergrunddetails oder -erklärungen.

Encapsulation ist eine Technik, mit der die Eigenschaften und das Verhalten eines Objekts ausgeblendet werden und der Zugriff von außen nur entsprechend zulässig ist. Es verhindert, dass andere Objekte die Eigenschaften oder Methoden des gekapselten Objekts direkt ändern oder darauf zugreifen.

Unterschied zwischen Abstraktion und Einkapselung

1.Abstraction konzentriert sich auf die Außenansicht eines Objekts (d. H. Der Schnittstelle). Encapsulation (Informationsverbergen) verhindert, dass Clients die Innenansicht sehen, in der das Verhalten der Abstraktion implementiert ist.

2.Abstraction löst das Problem auf der Entwurfsseite, während Encapsulation die Implementierung ist.

3. Die Verkapselung ist das Ergebnis der Abstraktion. In Encapsulation geht es kaum darum, Ihre Abstraktion an die Entwickleranforderungen anzupassen.

2
Jenny

Abstraction ist einer der vielen Vorteile von Data Encapsulation. Wir können auch sagen, dass Data Encapsulation eine Möglichkeit ist, Abstraction zu implementieren.

2

Aus meiner Sicht ist die Kapselung ein Gedanke des Programmierers, um die Komplexität des Programmcodes mithilfe des Zugriffsbezeichners zu verbergen.
Wo ist Abstraktion Trennung von Methode und Objekt nach ihrer Funktion und ihrem Verhalten? Zum Beispiel hat Auto Blätter, Räder, Bremse, Scheinwerfer. 

1
Priyanjan kumar

Entwickler A, der das Konzept der Abstraktion - inhärent verwendet, wird ein Modul/eine Bibliotheksfunktion/ein Widget verwenden, das nur mit was es (und was wird es verwendet wird) betroffen ist, aber nicht wie es es tut. Die Schnittstelle dieser ModulBibliotheksfunktion/des Widgets (die "Hebel", die der Entwickler A ziehen/schieben darf) ist die Personifikation dieser Abstraktion. 

Entwickler B, der ein solches Modul/eine solche Funktion/ein solches Widget erstellen möchte, verwendet das Konzept encapsulation , um sicherzustellen, dass Entwickler A (und jeder andere Entwickler, der das Widget verwendet) die resultierende Abstraktion nutzen kann. . Entwickler B beschäftigt sich ganz bestimmt mit , wie das Widget macht, was es tut.

TLDR; 

  • Abstraktion - Ich interessiere mich für was etwas tut, aber nicht wie es.
  • Encapsulation - Ich kümmere mich um wie etwas tut was es tut, so dass andere sich nur um was kümmern müssen. 

(Um etwas zu abstrahieren, müssen Sie etwas anderes kapseln. Wenn Sie etwas kapseln, haben Sie eine Abstraktion erstellt.)

1
Julie

Mein Meinung der Abstraktion ist nicht im Sinne von Verstecken von Implementierungs- oder Hintergrunddetails!

Abstraktion gibt uns den Vorteil, mit einer Darstellung der realen Welt umzugehen, die einfacher zu handhaben ist, wiederverwendbar ist und mit anderen Komponenten unseres mehr oder weniger komplexen Programmpakets kombiniert werden kann. Wir müssen also herausfinden, how, dass wir einen vollständigen Frieden in der realen Welt finden, der vollständig genug ist, um den Sinn unseres Algorithmus und unserer Daten darzustellen. Das Implementierung der Schnittstelle kann die Details verbergen, aber dies ist nicht Teil der Arbeit, die wir für die Abstraktion von etwas tun müssen.

Für mich ist das Wichtigste für die Abstraktion:

  1. reduzierung der Komplexität
  2. reduzierung der Größe/Menge
  3. aufteilung nicht verwandter Domänen in eindeutige und unabhängige Komponenten

Das alles hat für mich nichts damit zu tun, Hintergrundinformationen zu verbergen!

Wenn Sie Daten sortieren möchten, kann die Abstraktion zu folgenden Ergebnissen führen:

  1. ein Sortieralgorithmus, der von der Datendarstellung unabhängig ist
  2. eine Vergleichsfunktion, die unabhängig von Daten und Sortieralgorithmus ist
  3. eine generische Datendarstellung, die unabhängig von den verwendeten Algorithmen ist

All dies hat nichts mit dem Verstecken von Informationen zu tun.

1
Klaus

Abstraktion : Daten ausblenden . Encapsulation : Daten binden.

0
ShubhamWanne

In Bezug auf iOS kann gesagt werden, dass Objective C-Dateien (d. H. .H und .m) sowohl Abstraktion als auch Verkapselung verwenden.

Abstraktion

Die Header-Datei (.h) macht die Funktionen und öffentlichen Mitglieder nur für die Außenwelt verfügbar. Niemand weiß, wie sie verwendet werden, es sei denn, sie haben die Implementierungsdatei dabei. Die .m-Datei enthält alle Verwendungs- und Implementierungslogik. Msgstr "Implementierung bleibt unbelichtet".

Verkapselung

Die Eigenschaft (@property) kapselt das Speicherverwaltungsattribut (atomar, stark, beibehalten, schwach) einer iVar.

0
Shobhit C

Encapsulation verweigert der Außenwelt grundsätzlich den Zugriff auf die interne Implementierung oder das Wissen über Interna, während Abstraction eine verallgemeinerte Sicht auf jede Implementierung gibt, die der Außenwelt bei der Interaktion hilft damit

0
Rakesh Pakide

Warum Kapselung? Warum Abstraktion?

beginnen wir mit der folgenden Frage:

1) Was passiert, wenn Code direkt auf das Feld zugreifen darf? (Direktes Zulassen bedeutet Feld machen öffentlich)

lassen Sie uns dies mit einem Beispiel verstehen,

following is our BankAccount class and following is its limitation
*Limitation/Policy* : Balance in BankAccount can not be more than 50000Rs. (This line 
 is very important to understand)

class BankAccount
{
   **public** double balanceAmount;
}

Following is **AccountHolder**(user of BankAccount) class which is consumer of 
**BankAccount** class.

class AccountHolder
{
   BankAccount mybankAccount = new BankAccount();

   DoAmountCreditInBankAccount()
   {
       mybankAccount.balanceAmount = 70000; 
      /* 
       this is invalid practice because this statement violates policy....Here 
       BankAccount class is not able to protect its field from direct access
       Reason for direct access by acount holder is that balanceAmount directly 
       accessible due to its public access modifier. How to solve this issue and 
       successfully implement BankAccount Policy/Limitation. 
      */
   }
}

wenn ein anderer Teil des Codes direkt auf das Feld balanceAmount zugreift, stellen Sie den Kontostand auf 70000Rs ein, was nicht akzeptabel ist. In diesem Fall können wir nicht verhindern, dass ein anderer Teil des Codes auf das Feld balanceAmount zugreift.

Was können wir also tun?

=> Wir können das balanceAmount-Feld als privat deklarieren, damit kein anderer Code direkt darauf zugreifen kann. Der Zugriff auf dieses Feld ist nur über eine öffentliche Methode möglich, die mit dem balanceAmount-Feld arbeitet. Die Hauptrolle der Methode ist, dass wir eine Präventionslogik innerhalb der Methode schreiben können, sodass das Feld nicht mit mehr als 50000Rs initialisiert werden kann. Hier stellen wir eine Bindung zwischen dem Datenfeld balanceAmount und der Methode her, die dieses Feld bearbeitet. Dieser Prozess wird als Kapselung bezeichnet. (Es geht ausschließlich darum, Felder mit Zugriffsmodifikatoren wie private zu schützen.)

Einkapselung ist ein Weg, um Abstraktion zu erreichen ... aber wie? => Benutzer dieser Methode wissen nichts über die Implementierung (wie viel wird gutgeschrieben? Logik und all das Zeug) der Methode, die er/sie aufrufen wird. Das Nichtwissen über Implementierungsdetails durch den Benutzer wird als Abstraktion bezeichnet (Ausblenden von Details vom Benutzer).

Following will be the implementation of class:

class BankAccount
{
   **private** double balanceAmount;

   **public** void UpdateBankBalance(double amount)
   {
    if(balanceAmount + amount > 50000)
    {
       Console.WriteLine("Bank balance can not be more than 50000, Transaction can 
                          not be proceed");
    }
    else
    {
       balanceAmount = balanceAmount + amount;
           Console.WriteLine("Amount has been credited to your bank account 
                              successfully.....");
    }
   }
}


class AccountHolder
{
   BankAccount mybankAccount = new BankAccount();

   DoAmountCreditInBankAccount()
   {
      mybankAccount.UpdateBankBalance(some_amount);
      /*
       mybankAccount.balanceAmount will not be accessible due to its protection level 
       directly from AccountHolder so account holder will consume BankAccount public 
       method UpdateBankBalance(double amount) to update his/her balance.
      */
   }
}
0
Israil Karud

Meiner Meinung nach sind beide Begriffe in gewissem Sinne miteinander verbunden und irgendwie miteinander vermischt. "Encapsulation" bietet eine Möglichkeit, verwandte Felder und Methoden in einer Klasse (oder einem Modul) zu gruppieren, um die verwandten Elemente zusammenzufassen. Ab diesem Zeitpunkt können Daten auf zwei Arten versteckt werden.

  1. Durch Zugriffsmodifizierer. 

    Nur zum Ausblenden des Zustands der Klasse/des Objekts.

  2. Einige Funktionalitäten abstrahieren.

    ein. Durch Schnittstellen/abstrakte Klassen kann eine komplexe Logik innerhalb der gekapselten Klasse oder des Moduls abstrahiert/generalisiert werden, um von außen verwendet zu werden.

    b. Durch Funktionssignaturen. Ja, auch Funktionssignaturen, Beispiel für Abstraktion. Anrufer kennen nur die Signatur und die Parameter (sofern vorhanden) und wissen nicht, wie die Funktion ausgeführt wird. Es kümmert sich nur um den zurückgegebenen Wert.

In ähnlicher Weise könnte "Abstraktion" als eine Art Einkapselung betrachtet werden, in der das Verhalten in eine Schnittstelle (oder eine abstrakte Klasse oder eine normale Klasse) zusammengefasst wird.

0
stdout

Die Kapselung wird aus zwei Gründen verwendet:

1.) Verbergen und Schützen von Daten (der Benutzer Ihrer Klasse kann die Daten nur mit den bereitgestellten Methoden ändern).

2.) Die Daten und Methoden, die zum Manipulieren der Daten verwendet werden, zu einer Entität (Kapsel) zusammenfassen. Ich denke, der zweite Grund ist die Antwort, die Ihr Interviewer hören wollte.

Auf der anderen Seite ist eine Abstraktion erforderlich, um dem Benutzer nur die erforderlichen Informationen anzuzeigen und nicht benötigte Details zu verbergen (z. B. das Implementieren von Methoden ausblenden, sodass der Benutzer bei einer Änderung der Implementierung nicht betroffen ist).

0
Ramy Sameh

Ein Programm besteht hauptsächlich aus zwei Teilen: DATA und PROCESS. Abstraktion verbirgt Daten im Prozess, sodass sich niemand ändern kann. Durch die Kapselung werden Daten überall versteckt, sodass sie nicht angezeigt werden können.

0
Dhruvin Soni

Das Wesentliche an der Abstraktion ist, dass der Client-Code nach einem anderen logischen/abstrakten Modell arbeitet. Dieses andere Modell kann komplexer oder weniger komplex sein, als die Implementierung bei einer bestimmten Client-Verwendung.

Beispiel: "Iterator" abstrahiert (oder generalisiert) sequenzielles Durchlaufen von 0 oder mehr Werten - in C++ manifestiert es sich als begin(), */-> (Dereferenzierung), end(), pre/post ++ Und möglicherweise --, Dann gibt es +, +=, [], std::advance Usw. Das ist viel Gepäck wenn der Client trotzdem sagen könnte, dass ein size_t entlang eines Arrays inkrementiert werden soll. Das Wesentliche ist, dass die Abstraktion ermöglicht, dass Client-Code, der eine solche Durchquerung durchführen muss, von der genauen Art des "Containers" oder der Datenquelle, die die Elemente bereitstellt, entkoppelt wird. Iteration ist ein Begriff auf höherer Ebene, der manchmal die Art und Weise einschränkt, in der die Durchquerung ausgeführt wird (z. B. kann ein Forward-Iterator nur ein Element gleichzeitig vorrücken). Die Daten können dann jedoch von einem größeren Satz von Quellen bereitgestellt werden (z. B. von einer Tastatur, wo Es gibt nicht einmal einen "Container" im Sinne von gleichzeitig gespeicherten Werten. Der Client-Code kann im Allgemeinen mit minimalen oder gar keinen Änderungen zu einer anderen Datenquelle wechseln, die durch eigene Iteratoren abstrahiert wird, und sogar polymorph zu anderen Datentypen - entweder implizit oder explizit mit etwas wie std::iterator_traits<Iterator>::value_type verfügbar.

Dies ist etwas ganz anderes als die Kapselung, bei der einige Daten oder Funktionen weniger zugänglich sind, sodass Sie wissen, dass sie nur indirekt als Ergebnis von Vorgängen auf der öffentlichen Schnittstelle verwendet werden. Die Kapselung ist ein wesentliches Werkzeug für die Aufrechterhaltung von Invarianten auf einem Objekt. Dies bedeutet, dass Sie nach jeder öffentlichen Operation die Wahrheit beibehalten möchten - wenn der Client-Code nur hineinreichen könnte Wenn Sie Ihr Objekt ändern, können Sie keine Invarianten erzwingen. Beispielsweise kann eine Klasse eine Zeichenfolge umbrechen, um sicherzustellen, dass nach jeder Operation Kleinbuchstaben in Großbuchstaben geändert werden. Wenn der Client-Code jedoch in die Zeichenfolge eingreifen und Kleinbuchstaben einfügen kann, ohne dass die Member-Funktionen der Klasse beteiligt sind, dann Die Invariante kann nicht erzwungen werden.

Um den Unterschied weiter hervorzuheben, betrachten Sie ein Datenelement privatestd::vector<Timing_Sample>, Das zufällig mit Vorgängen für das enthaltende Objekt gefüllt ist, wobei ein Bericht bei Zerstörung ausgegeben wird. Da der Daten- und Destruktor-Nebeneffekt in keiner Weise mit dem Client-Code des Objekts interagiert und die Operationen auf dem Objekt das Zeitverhalten nicht absichtlich steuern, gibt es keine Abstraktion dieser Zeitberichtsfunktion, sondern eine Kapselung. Ein Beispiel für eine Abstraktion wäre, den Timing-Code in eine separate Klasse zu verschieben, die den vector einkapselt (ihn private machen) und einfach eine Schnittstelle wie add(const Timing_Sample&) und report(std::ostream&) bereitstellt - die erforderliche logische/abstrakte Operationen, die mit der Verwendung einer solchen Instrumentierung verbunden sind, mit dem höchst wünschenswerten Nebeneffekt, dass der abstrahierte Code häufig für anderen Client-Code mit ähnlichen funktionalen Anforderungen wiederverwendbar ist.

0
Tony Delroy