my application is split up into smaller parts (plugins)
and the specification for the objects used by these plugins are defined in interfaces
(the programmer does not need to know how data is retrieved. i have a StorageService, which provides different PersistenceServices. each of these PersistenceServices represent an concrete implementation. for exampe one saves its data in a XML file, another one can save it to a Database, how data-Structure is saved/mapped is up to the developer - important is the result!)
why do i do that? because all my data is currently stored in an database, which was designed like 15 years back, and its datastructure is not the way i want it to be. so i implemented a persistence service, which can load the data from this database. then i switch my persistence service to the new one and i can save it to my 'new' database with data structure without any problems.