• Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом


  • Иллюстрированный самоучитель по 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, чтобы сообщить об этом редактору.