@ Rob auf dem richtigen Weg hier ein gutes Beispiel. Sehen Sie sich die Auflistungsobjekte in C# oder Java an.
Ich denke, ich kann ein wenig erweitern, um dies klarer zu machen, warum dies ein gutes Beispiel ist ... Es gibt viele Möglichkeiten, Listen zu erstellen, aber es gibt ein paar grundlegende Operationen, die gemeinsam sind. Diese Operationen variieren alle mit der spezifischen Implementierung, aber der Aufrufer sollte nicht kümmern. Der Anrufer sollte sich darum kümmern, dass die Liste bestimmte Funktionen hat und weiß, wie es geht.
Nehmen wir zum Beispiel an, wir hätten einen Roboter, der unsere Einkäufe erledigt und für uns weggegeben hat.
while there are items in the bag's list
remove the next item from the bag
put away the item
put in etwas mehr Code-ish
while (item = bag.NextItem())
{
bag.Remove(item);
robot.PutAway(item);
}
Nun ist es Ihnen, wie die Liste der Elemente in der Tasche umgesetzt wird? Nein überhaupt nicht. Es ist dir nur wichtig, dass du den nächsten Gegenstand findest und ihn aus der Tasche nimmst. Ob die Tasche eine doppelt verkettete Liste ist, eine einzelne verkettete Liste, was auch immer, spielt keine Rolle.
Also, der Entwickler, der diesen abscheulichen PutAway-Algorithmus schreibt, interessiert sich nicht dafür, wie sie Artikel finden, sie kümmern sich nur darum, dass sie den Gegenstand haben. Der Tasche ist es egal, was mit den Gegenständen passiert, es interessiert nur, dass sie sie eine Weile halten können, dann werden sie weggenommen. Und dieser Entwickler wird für das Wochenende nach Hause gehen. :)
Natürlich ist dies ein schmerzlich einfaches Beispiel, es gibt eine ganze Reihe von Löchern, die Sie hineinstecken können.
Während die Frage explizit objektorientierte Sprachen erwähnt, glaube ich nicht, dass die Kapselung das Ziel der Verkapselung ist. –
@Jurily: Sie haben nach Beispielen von intelligenten Datenstrukturen und dummem Code gefragt (was ich als Algorithmen interpretiere), für die ich glaube, dass die STL gut passt. – fbrereto
Ich denke, es ist ein sehr guter Punkt, dass klassische Schnittstelle und Algorithmus-Design ein Beispiel für dieses Prinzip ist. – metatheorem