451 Stimmen

Unterschied zwischen Abstraktion und Verkapselung?

Was ist der genaue Unterschied zwischen Kapselung und Abstraktion?

1voto

coder Punkte 299

Ich denke, dass Encapsulation ein Weg ist, Abstraktion zu implementieren. Werfen Sie einen Blick auf den folgenden Link.

Abstraktion und Verkapselung

1voto

A.T. Punkte 21218

Ich versuche hier eine Grenze zwischen Abstraktion und Kapselung zu ziehen. Meiner Meinung nach ist Abstraktion mehr eine konzeptionelle Sache, während Kapselung eine der Abstraktionsimplementierung ist. Da man Daten auch ohne Kapselung verstecken kann, z.B. mit privaten Konstanten oder Variablen, können wir also Verkapselung mit Data Hiding, aber Data Hiding ist nicht immer Verkapselung . Im folgenden Code versuche ich, die einfachste Form dieser Konzepte darzustellen.

    // Abstraction
    interface IOperation
    {
        int SquareNumber();
    }

    public class Operation
    {
        // Data hiding
        private int number;

        public Operation(int _number)
        {
            this.number = _number;
        }

        // Encapsulation
        public int SquareNumber()
        {
            return number * number;
        }
    }

In Aktion,

IOperation obj = new Operation(2); 
// obj.number  <--- can't access because hidden from world using private access modifier but not encapsulated. 
obj.SquareNumber(); // cannot access internal logic to calculate square because logic is hidden using encapsulation.

1voto

A.T. Punkte 21218

Lassen Sie mich dies mit einem einfachen Codebeispiel versuchen

Abstraktion = Datenverstecken + Kapselung

 // Abstraction
    interface IOperation
    {
        int GetSumOfNumbers();
    }
    internal class OperationEven : IOperation
    {
        // data hiding
        private IEnumerable<int> numbers;

        public OperationEven(IEnumerable<int> numbers)
        {
            this.numbers = numbers;
        }
        // Encapsulation
        public int GetSumOfNumbers()
        {
            return this.numbers.Where(i => i % 2 == 0).Sum();
        }
    }

0voto

Mohan Punkte 326

Abstraktion

Abstraktion ist der Prozess, bei dem die gemeinsamen Eigenschaften und Felder aller bestehenden und geplanten Implementierungen herausgezogen werden.

Zum Beispiel: Auto ist ein Recht für Limousine, Fließheck, SUV, Coupé, Cabrio. Auto hätte alle Eigenschaften und Felder, die allen Fahrzeugtypen gemeinsam sind.

Verkapselung

Verkapselung bedeutet, dass unerwünschte Details vor dem Benutzer verborgen werden. Dieser Begriff stammt von der Kapsel. Genauso wie Medikamente vor dem Benutzer in der Kapsel versteckt werden. Details von verschiedenen Maschinen und Ausrüstungen und Geräten, von Mixern, Fahrrädern, Waschmaschinen, Radios, Fernsehern bis hin zu Flugzeugen. Sie wollen nicht, dass alle Details der Maschine für den Benutzer sichtbar sind.

In Worten der Programmierung: Betrachten wir eine Klasse Car. Im folgenden Beispiel muss der Benutzer nur wissen, dass er den Schlüssel drehen muss (Methode turnKey()), die internen Funktionen sind ihm nicht bekannt. Der Benutzer muss nichts über die internen Funktionen oder über die internen Komponenten wissen.

In diesem Fall sind alle privaten Methoden interne Funktionen und private Felder wie "Piston p1" sind interne Daten, die der Benutzer nicht kennen muss.

public class Car{

    private void startMotor(){ //do something }
    private void generateVoltage(){ //do something }
    private void sparkPlugIgnition(){ //do something }
    private void fuelFlowFromTankToInjector(){ //do something }
    private void pushPistonsDown() { 
               p1.doAction();
               p2.doAction();
               //do something    }
    private void moveCrankShaft(){ //do something }

    private Piston p1;
    private Piston p2;

    public void turnKey(){
        startMotor();
        generateVoltage();
        sparkPlugIgnition();
        fuelFlowFromTankToInjector();
        pushPistonsDown();
        moveCrankShat();
        ...
    }
}

0voto

Kurz gesagt:

Abstraktion ist eine Technik, die uns dabei hilft, zu erkennen, welche Informationen wichtig sind und welche verborgen bleiben sollten.

Verkapselung ist dann die Technik, um die Informationen so einzuschließen, dass Details und Implementierungsdetails eines Objekts verborgen bleiben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X