Построение иерархии интерфейсов
Построение иерархии интерфейсов
Продолжим наше обсуждение вопросов создания пользовательских интерфейсов и рассмотрим тему иерархии интерфейсов. Вы знаете, что класс может выступать в роли базового класса для других классов (которые, в свою очередь, тоже могут быть базовыми классами для других классов), но точно так же можно строить отношения наследования и среди интерфейсов. Как и следует ожидать, интерфейс на вершине иерархии определяет общее поведение, а интерфейсы, находящиеся на более низких уровнях, "уточняют" это поведение. Для примера рассмотрите следующую иерархию интерфейсов.
// Базовый интерфейс.
public interface IDrawable { void Draw(); }
public interface IPrintable: IDrawable { void Print(); }
public interface IMetaFileRender: IPrintable { void Render(); }
Соответствующая цепочка наследования показана на рис. 7.5.

Рис. 7.5. Иерархия интерфейсов
Теперь, если некоторый класс должен поддерживать все варианты поведения, заданные в рамках этой иерархии интерфейсов, то этот класс должен выводиться из интерфейса, лежащего в основе иерархии (в данном случае это IMetaFileRender). Все методы, определенные базовым интерфейсом (или интерфейсами), автоматически переносятся в определение. Например:
// Этот класс поддерживает IDrawable, IPrintable и IMetaFileRender.
public class SuperImage: IMetaFileRender {
public void Draw() { Console.WriteLine("Базовая логика визуализации."); }
public void Print() { Console.WriteLine("Вывод на принтер."); }
public void Render() { Console WriteLine("Вывод в метафайл."); }
}
Вот пример вывода каждого интерфейса из экземпляра SuperImage.
// Использование интерфейсов.
static void Main(string[] args) {
SuperImage si = new SuperImage();
// Получение IDrawable.
IDrawable itfDraw = (IDrawable)si;
itfDraw.Draw();
// Получение IMetaFileRender, который использует все методы,
// определенные выше по цепочке интерфейсов.
if (itfDraw is IMetaFileRender) {
IMetaFileRender itfMF = (IMetaFileRender)itfDraw;
itfMF.Render();
itfMF.Print();
}
Console.ReadLine();
}
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
8.4. Перемещение по иерархии файлов
8.4. Перемещение по иерархии файлов Несколько системных вызовов и стандартных библиотечных функций дают возможность изменять текущий каталог и определять полный путь к текущему каталогу. Более сложные функции позволяют осуществлять произвольные действия с каждым
Определение интерфейсов в C#
Определение интерфейсов в C# Изложение материала этой главы мы начнем с формального определения типа "интерфейс". Интерфейс – это просто именованная коллекция семантически связанных абстрактных членов. Эти члены определяются интерфейсом в зависимости от поведения,
Реализация интерфейсов в C#
Реализация интерфейсов в C# Чтобы расширить функциональные возможности класса (или структуры) путем поддержки типов интерфейса, нужно просто указать в определении класса (или структуры) список соответствующих типов, разделив их запятыми. Непосредственный базовый класс
17.1. Определение иерархии классов
17.1. Определение иерархии классов В этой главе мы построим иерархию классов для представления запроса пользователя. Сначала реализуем каждую операцию в виде отдельного класса:NameQuery // ShakespeareNotQuery // ! ShakespeareOrQuery // Shakespeare || MarloweAndQuery // William && ShakespeareВ каждом классе
17.2. Идентификация членов иерархии
17.2. Идентификация членов иерархии В разделе 2.4 мы уже упоминали о том, что в объектном проектировании обычно есть один разработчик, который конструирует и реализует класс, и много пользователей, применяющих предоставленный открытый интерфейс. Это разделение
19.2.1. Исключения, определенные как иерархии классов
19.2.1. Исключения, определенные как иерархии классов В главе 11 мы использовали два типа класса для описания исключений, возбуждаемых функциями-членами нашего класса iStack:class popOnEmpty { ... };class pushOnFull { ... };В реальных программах на C++ типы классов, представляющих исключения, чаще
Пример иерархии
Пример иерархии В конце обсуждения полезно рассмотреть пример POLYGON-RECTANGLE в контексте более общей иерархии типов геометрических фигур. Рис. 14.2. Иерархия типов фигурФигуры разбиты на замкнутые и незамкнутые. Примером замкнутой фигуры кроме многоугольника является также
Нижняя часть иерархии
Нижняя часть иерархии На рис. 16.4 представлен также класс NONE, антипод класса ANY, потомок всех классов, не имеющих собственных наследников и превращающий глобальную иерархию наследования классов в решетку (математическую структуру). NONE не имеет потомков, его нельзя
Параллельные иерархии
Параллельные иерархии Чтобы не оставить камня на камне, рассмотрим вариант примера SKIER с двумя параллельными иерархиями. Это позволит нам смоделировать ситуацию, уже встречавшуюся на практике: TWO_ WAY_LIST > LINKED_LIST и BI_LINKABLE > LINKABLE; или иерархию с телефонной службой
О (не)эффективном управлении, конфликте интересов на разных уровнях иерархии и Невидимой Ноге Дмитрий Шабанов
О (не)эффективном управлении, конфликте интересов на разных уровнях иерархии и Невидимой Ноге Дмитрий Шабанов Опубликовано 15 февраля 2013 Мы живем в сложном и плохо управляемом мире. Как повысить качество принимаемых решений? Мне кажется, что самый
8.10. ПРИМЕР РЕТРОСПЕКТИВНОЙ РАЗРАБОТКИ ИЕРАРХИИ КЛАССОВ БИБЛИОТЕКИ ВИЗУАЛЬНЫХ КОМПОНЕНТ DELPHI И C++ BUILDER
8.10. ПРИМЕР РЕТРОСПЕКТИВНОЙ РАЗРАБОТКИ ИЕРАРХИИ КЛАССОВ БИБЛИОТЕКИ ВИЗУАЛЬНЫХ КОМПОНЕНТ DELPHI И C++ BUILDER Delphi и C++ Builder представляет собой визуальное средство разработки корпоративных информационных систем. В C++ Builder используется язык объектно-ориентированного
Модель строгой иерархии удостоверяющих центров
Модель строгой иерархии удостоверяющих центров Строгая иерархия удостоверяющих центров обычно графически изображается в виде древовидной структуры с корнем наверху и ветвями, спускающимися вниз и заканчивающимися листьями. В этом перевернутом дереве корень
Иерархии на основе политик
Иерархии на основе политик Традиционное представление о строгой иерархии заключается в том, что каждый УЦ внутри иерархии подчинен одному и только одному вышестоящему УЦ. Логически это подразумевает, что удостоверяющие центры внутри данной иерархии придерживаются