Что означает это утверждение: «Интерфейсы классов должны обеспечивать согласованную абстракцию»? - PullRequest
0 голосов
/ 12 октября 2009

В настоящее время я читаю Code Complete, и в главе, посвященной занятиям, автор говорит, что

Интерфейсы классов должны обеспечивать согласованную абстракцию

Я не могу правильно понять это утверждение и был бы признателен, если бы кто-то мог дать объяснение с примерами и каковы соответствующие плюсы и минусы.

Спасибо.

1 Ответ

1 голос
/ 12 октября 2009

Представьте, что у вас есть интерфейс для взаимодействия с некоторыми хранилищами. Клиент / пользователь интерфейса должен иметь возможность хранить и извлекать объекты. Кроме того, у вас будет «виды» объектов в хранилище, и при хранении или получении клиент должен указать, какой тип объекта он хранит или извлекает. Поскольку нам нравятся типы и ненавистные строки, они будут делать это с типами. Итак:

interface ObjectStorage
{
    void storeObject( object, type );
    object retrieveObject( type );
}

Реализация интерфейса хотела бы указывать только те типы, которые она может обработать, и поэтому определяет типы, которые будут реализованы в интерфейсе.

«Согласованная абстракция» в этом контексте будет означать, что абстракция интерфейса должна быть на одном уровне. Непоследовательная абстракция будет определять типы реализации в интерфейсе, например:

interface ObjectStorage
{
    void storeObject( object, FileType );
    FileType retrieveObject( FileType );
}

это связывало бы любую реализацию для работы исключительно с FileType s или его подтипами.

Надеюсь, я был несколько последовательным в своем ответе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...