Думайте об интерфейсе как о контракте для определения семантики или концепции. Это общий подход, а не конкретный язык. В контексте объектно-ориентированного программирования, если вы работаете с одной моделью наследования, есть отличный повод предпочесть интерфейсы классам для определения вашей объектной модели, поскольку этот единственный путь суперкласса довольно ценен, и вы хотите сохранить его для что-то более «существенное», чем определение свойств, предоставляемых объекту или методам.
Наличие семантики IContainer (контракта) — довольно плохая причина для создания интерфейса из вашей папки; лучше, чтобы ваша папка (если она выполняет какую-либо нетривиальную логику) «реализовала» (вероятно, уже существующий) интерфейс IContainer или ICollection в основных структурах вашего языка.
Как всегда, лучший выбор в значительной степени зависит от конкретной проблемы. В случае ваших рецептов, которые также являются папками (?!), вы, вероятно, имеете в виду отношения родитель-потомок или композиция, отношения - семантика, которая может (и должна) быть выражена с помощью интерфейсов, если в вашей системе будут другие элементы. «действовать» над вещами, составленными с использованием такой семантики.
Интерфейсы сопряжены с некоторыми накладными расходами (с точки зрения программирования), и если вы обнаружите, что, закончив работу, не имеете ничего, кроме набора классов и интерфейсов Woof и IWoof, то вы поймете, что вам, вероятно, не нужно было выражать ваша проблема с интерфейсами - было бы достаточно простых классов.
Как правило, для любого I у вас должна быть как минимум пара конкретных классов (с более осмысленными именами, отличными от IImpl или ).
Надеюсь, это поможет.
person
alphazero
schedule
06.04.2009