Представьте, что у вас есть интерфейс для взаимодействия с некоторыми хранилищами. Клиент / пользователь интерфейса должен иметь возможность хранить и извлекать объекты. Кроме того, у вас будет «виды» объектов в хранилище, и при хранении или получении клиент должен указать, какой тип объекта он хранит или извлекает. Поскольку нам нравятся типы и ненавистные строки, они будут делать это с типами. Итак:
interface ObjectStorage
{
void storeObject( object, type );
object retrieveObject( type );
}
Реализация интерфейса хотела бы указывать только те типы, которые она может обработать, и поэтому определяет типы, которые будут реализованы в интерфейсе.
«Согласованная абстракция» в этом контексте будет означать, что абстракция интерфейса должна быть на одном уровне. Непоследовательная абстракция будет определять типы реализации в интерфейсе, например:
interface ObjectStorage
{
void storeObject( object, FileType );
FileType retrieveObject( FileType );
}
это связывало бы любую реализацию для работы исключительно с FileType
s или его подтипами.
Надеюсь, я был несколько последовательным в своем ответе.