Was ist der genaue Unterschied zwischen Kapselung und Abstraktion?
Antworten
Zu viele Anzeigen?class Aeroplane : IFlyable, IFuelable, IMachine
{ // Aeroplane's Design says:
// Aeroplane is a flying object
// Aeroplane can be fueled
// Aeroplane is a Machine
}
// But the code related to Pilot, or Driver of Aeroplane is not bothered
// about Machine or Fuel. Hence,
// pilot code:
IFlyable flyingObj = new Aeroplane();
flyingObj.Fly();
// fighter Pilot related code
IFlyable flyingObj2 = new FighterAeroplane();
flyingObj2.Fly();
// UFO related code
IFlyable ufoObj = new UFO();
ufoObj.Fly();
// **All the 3 Above codes are genaralized using IFlyable,
// Interface Abstraction**
// Fly related code knows how to fly, irrespective of the type of
// flying object they are.
// Similarly, Fuel related code:
// Fueling an Aeroplane
IFuelable fuelableObj = new Aeroplane();
fuelableObj.FillFuel();
// Fueling a Car
IFuelable fuelableObj2 = new Car(); // class Car : IFuelable { }
fuelableObj2.FillFuel();
// ** Fueling code does not need know what kind of vehicle it is, so far
// as it can Fill Fuel**
Abstraction
ist eine Vertrag für die Umsetzung, die wir vorhaben. Die Implementierung kann sich im Laufe der Zeit ändern. Die verschiedenen Implementierungen selbst können versteckt sein oder auch nicht, sind aber Maskiert hinter der Abstraktion.
Angenommen, wir definieren alle APIs
einer Klasse in einer interface
dann die Nutzer unseres Codes auffordern, sich auf die definierten APIs
der interface
. Es steht uns frei, die Implementierung zu verbessern oder zu ändern, wir müssen uns nur an den festgelegten Vertrag halten. Die Benutzer sind nicht gekoppelt mit unserer Implementierung.
Wir EXPONIEREN alle NÖTIGEN Regeln (Methoden) in der Abstraktion Die Implementierung der Regeln wird den implementierenden Entitäten überlassen, auch die Implementierung ist nicht Teil der Abstraktion. Es ist nur die Unterschrift y Erklärung was die Abstraktion ausmacht.
Encapsulation
ist einfach HIDING die internen Details, indem der Zugang zu den Zuständen und Verhaltensweisen eingeschränkt wird. Eine gekapselte Klasse kann, muss aber nicht über gut definierte Abstraction
.
java.util.List
ist eine Abstraktion für java.util.ArrayList
. Die internen Zustände von java.util.ArrayList
gekennzeichnet mit non public
Zugriffsmodifikatoren ist die Verkapselung.
Modifier Angenommen, eine Klasse Container.nava implements IContainer
, IContainer
können Methoden deklarieren wie addElement
, removeElements
, contains
, usw. Hier IContainer
stellt die Abstraktion für ihre implementierende Klasse dar. Abstraktion bedeutet, dass die APIs einer Klasse, eines Moduls oder eines Systems für die Außenwelt deklariert werden. Diese APIs werden die contract
. Dieses System kann bereits entwickelt sein oder noch nicht. Die Nutzer des Systems können sich nun auf die deklarierten APIs verlassen und sicher sein, dass jedes System, das einen solchen Vertrag implementiert, sich immer an die deklarierten APIs halten wird, sie werden immer die Implementierung für diese APIs bereitstellen. Sobald wir eine konkrete Entität schreiben, ist die Entscheidung, unsere internen Zustände zu verbergen, Kapselung.
In-short
Verwendung von Abstraktion -> Verkapselung & Verwendung von Verkapselung -> Datenverstecken
OR
Data Hiding ist eine Teilmenge der Encapsulation y Kapselung ist eine Teilmenge der Abstraktion
Referenz: http://www.tonymarston.co.uk/php-mysql/abstraction.txt