Иллюстрированный самоучитель по Visual Basic .NET

Наследование и интерфейсы

  • Основы наследования

    В предыдущей главе кратко упоминались два столпа объектно-ориентированного программирования в VB.NET: наследование реализации, обеспечивающее возможность многократного использования кода, и наследование интерфейсов, то есть "контракт", которому должны соответствовать некоторые аспекты поведения класса. Обе разновидности наследования будут подробно рассмотрены в этой главе.
  • Знакомство с наследованием

    Начнем с повторения некоторых терминов. Класс, взятый за основу при определении нового класса, называется базовым классом. Класс, определяемый на основе базового класса, называется производным классом.
  • Обращение к функциональности базового класса

    В VB.NET существует модификатор Protected, который автоматически предоставляет доступ из производных классов к соответствующему члену класса, будь то метод или переменная класса. Возникает искушение воспользоваться этим модификатором и объявить все поля базового класса с уровнем доступа Protected, чтобы производные классы могли легко и быстро работать с ними. Не поддавайтесь соблазну!
  • Переопределение свойств и методов

    В нашем примере, где программист автоматически получает 6-процентное повышение зарплаты вместо 5-процентного, необходимо изменить поведение метода RaiseSalary и отразить в нем автоматическую надбавку. Это называется переопределением функции. | Примечание | Общие члены классов переопределяться не могут.
  • Как стать начальником? Просмотр иерархии наследования. Правила преобразования и обращения к членам классов в иерархии наследования.

    Предположим, вы построили замечательную объектно-ориентированную систему учета кадров, в которой в полной мере используются все преимущества полиморфизма. А теперь попробуйте ответить на простой вопрос – как в вашей системе реализован перевод простого работника в менеджеры?
  • Полиморфизм на практике

    Наследование часто помогает избавиться от громоздких конструкций Select Case и If-Then-Else, чтобы вся черновая работа выполнялась компилятором и механизмом полиморфизма. Например, цикл из следующего фрагмента работает как с экземплярами класса Employee, так и с экземплярами Programmer: | Sub Maln() | Dim tom As New Employee("Tom".
  • Замещение

    Термин "замещение" (shadowing) встречался и в ранних версиях VB, и в большинстве языков программирования. Локальная переменная, имя которой совпадает с именем переменной, обладающей более широкой областью видимости, замещает (скрывает) эту переменную.
  • Абстрактные базовые классы. Пример: класс CollectionBase.

    На стадии проектирования наследственных связей в программе часто выясняется, что многие классы обладают целым рядом сходных черт. Например, внештатные сотрудники не относятся к постоянным работникам, но и те и другие обладают рядом общих атрибутов – именем, адресом, кодом налогоплательщика и т. д.
  • Корневой базовый класс Object. Основные методы класса Object.

    Вся работа .NET Framework (а следовательно, и VB.NET) основана на том, что каждый тип является производным от корневого класса Object, общего предка всех классов (в ООП такие классы иногда называются космическими (space) базовыми классами).
  • Equals и ReferenceEquals. Метод ToString.

    В классе Object поддерживаются две версии Equals – общая и обычная. Общая версия имеет следующий синтаксис: | Overloads Public Shared Function Equals(0bject.
  • Функция GetType и рефлексия

    Каждый тип .NET Framework представлен объектом Type. Класс Type содержит множество методов со сложными именами – например, метод GetMembers возвращает информацию об именах всех методов заданного класса.
  • MemberWiseClone

    В программировании, как и в современной науке: | Клоном называется точная копия объекта. | Состояние клона может измениться и стать отличным от состояния исходного объекта. | Но самое важное правило клонирования формулируется так:
  • Проблема неустойчивости базовых классов и контроль версии

    Проблема несовместимости компонентов хорошо известна всем, кому доводилось программировать для Windows. Обычно она выступает в форме так называемого кошмара DLL (DLL Hell) – программа использует определенную версию DLL, a потом установка новой версии компонента нарушает работу программы. Почему?
  • Интерфейсы

    Вероятно, вы убедились в том, что наследование занимает важное место в VB.NET, но для полноценного использования объектно-ориентированных средств VB.NET вам также придется освоить реализацию интерфейсов. Этой важной теме посвящены несколько ближайших разделов.
  • Механика реализации интерфейса. Нетривиальное применение интерфейсов.

    Во многих компаниях, занимающихся программированием (хотя бы в Microsoft), существует должность ведущего программиста или ведущего специалиста по тестированию. Предположим, вы решили расширить систему учета кадров и включить в нее эти новые должности с особыми свойствами – скажем, наличием фонда материального поощрения для особо отличившихся подчиненных.
  • Выбор между интерфейсами и наследованием. Важнейшие интерфейсы: ICloneable и IDisposable.

    Хотя на первый взгляд интерфейсы чем-то напоминают базовые классы, от этой аналогии больше вреда, чем пользы. Абстрактный класс может содержать реализованные методы, а в интерфейсе они недопустимы. Абстрактные базовые классы создаются только в результате тщательного анализа функциональности с выделением самого примитивного общего предка, и ни по какой другой причине.
  • Коллекции. For Each и интерфейс lEnumerable.

    Коллекцией (collection) называется объект, предназначенный для хранения других объектов. Коллекция содержит методы для включения и удаления внутренних объектов, а также обращения к ним в разных вариантах – от простейшей индексации, как при работе с массивами, до сложной выборки по ключу, как в классе Hashtable, представленном в предыдущей главе.
  • ICollection

    Интерфейс ICollection определяется производным от IEnumerable; он дополняет этот интерфейс тремя свойствами, доступными только для чтения, и одним новым методом. Класс ICollection редко реализуется самостоятельно. Как правило, он образует базу для интерфейсов IList и IDictionary (см. ниже).
  • IDictionary

    Интерфейс IDictionary представляет коллекцию, в которой доступ к данным осуществляется по ключу – как в хэш-таблицах, описанных в предыдущей главе. Более того, класс хэш-таблиц в числе прочих реализует интерфейсы IDictionary, ICollection, Enumerable и ICloneable!
  • IComparable

    Предположим, коллекцию объектов Employee потребовалось отсортировать по заработной плате. Конечно, операцию сортировки было бы удобно реализовать непосредственно в классе Emplоуее, чтобы сортировка простого или динамического массива объектов этого класса выполнялась так же просто, как сортировка строковых массивов.
  • Интерфейс IComparer

    .NET Framework позволяет выполнять сортировку по нескольким критериям. Например, чтобы упорядочить массив работников сначала по заработной плате, а затем по имени (в группах с одинаковой зарплатой) следует реализовать интерфейс IComparer, содержащий единственный метод СотрагеТо.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.