|
ООП С Sharp - Введение в интерфейсы
Одна из характерных черт объектов в повседневной жизни связана с тем, что они образуют семейства взаимосвязанных сущностей, разделяющих общие аспекты ди-зайна. Диван подобен креслу с тем отличием, что на нем может сидеть более одного человека. Компакт-диск обладает примерно теми же свойствами, что и магнитная лента, но с дополнительной возможностью прямого доступа. Многие автомобили отличаются стилем и размером кузова, но внутри их двигатели и другие компоненты построены во многом аналогично и зачастую из одних и тех же компонентов.
Это — примеры реализации интерфейсов, и их эквивалентами в ООП могут быть некоторые классы (возможно, EscortCar, OrionCar и FiestaCar?), которые не только представляют методы с одинаковыми именами, но, по сути те же самые методы, в том смысле, что при вызове этих методов выполняется один и тот же код.
Расширим пример. Скажем, имеющийся Escort заменяется другим Escort — с дизельным двигателем. Оба автомобиля имеют одинаковый корпус (пользовательский интерфейс одинаков), но под капотом у них разные двигатели. Это пример наследования интерфейса, и эквивалентом в программировании могут быть два класса (EscortCar и EscortDieselCar), представляющие методы с одинаковыми именами, назначением и сигнатурой, но разной реализацией.
Разработчики на Java и C++, знакомые с COM, знают, что наследование реализации — это вид наследования, поддерживаемый Java, C++ и другими традиционными объектно-ориентированными языками, в то время как более ограниченное наследование интерфейсов было единственной формой наследования, поддерживаемого COM и COM-объектами. Visual Basic поддерживает только наследование интерфейса через ключевое слово Implements. Большое преимущество C# состоит в том, что он поддерживает оба вида наследования.
До тех пор, пока речь идет о программировании на C#, вы думаете о том, как определять новые классы, при этом используя средства существующих классов. Выгода двойная: во-первых, наследование представляет удобный способ повторного использования существующего, полностью протестированного кода в разных контекстах, таким образом, позволяя сэкономить немало времени на кодировании; во-вторых, наследование позволяет еще лучше структурировать ваши программы, предлагая более тонкую детализацию вашим классам.
В этом месте мы переходим к новому примеру кода, описывающему компанию сотовой связи, который продемонстрирует работу наследования интерфейсов в программе C#. Наследование классов C# — это всегда наследование реализации.
|