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

Классы и объекты

  • Введение в ООП (объектно-ориентированное программирование)

    Эта глава вместе с главами 5 и 6 занимает центральное место в книге. Причины просты: язык VB.NET стал первой объектно-ориентированной версией VB, и тот, кто недостаточно хорошо разбирается в ООП, не сможет в полной мере использовать новые возможности VB.NET.
  • Классы как пользовательские типы. Как объекты взаимодействуют друг с другом?

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

    Отправной точкой во всей терминологии ООП является понятие класса. Классом называется шаблон, по которому создаются объекты. | Каждый объект, созданный на основе класса, называется экземпляром этого класса. Методы, свойства и процедуры событий, определенные внутри класса, называются членами.
  • Абстракция. Инкапсуляция.

    Абстракцией называется моделирование объектов в программе. Другими словами, речь идет об имитации реально существующих объектов, отражающей особенности их взаимодействия в окружающем мире. Так, первый объектно-ориентированный язык Simula (http://java.sun.com/people/jag/SimulaHistory.html) разрабатывался специально для задач имитации и моделирования.
  • Наследование

    В качестве примера наследования представьте себе классы для отдельных категорий работников (класс Programmer, класс Manager и т. д.). Механизм, используемый для создания таких классов на базе класса Employee, называется наследованием.
  • Полиморфизм

    В традиционной трактовке термин "полиморфизм" (от греческого "много форм") означает, что объекты производных классов выбирают используемую версию метода в зависимости от своего положения в иерархии наследования.
  • Переход к использованию объектов

    С давних времен в программировании использовалась структурная, процедурно-ориентированная модель. Сначала программист разбирался, что должна делать программа, а затем выбирал одно из двух: | Задача разбивалась на подзадачи; те, в свою очередь, делились на подзадачи следующего уровня и т. д.
  • Экземпляры. Преимущества ООП.

    Итак, вы решили, какие классы должны входить в ваш проект. На следующем этапе построения объектной модели рассматриваются конкретные экземпляры этих классов. Попробуйте ответить на три вопроса: | Каким состоянием должен обладать объект? | Какими отличительными особенностями должен обладать объект?
  • Создание объектов в VB.NET

    В VB.NET, как и в прежних версиях VB, объекты создаются ключевым словом New (исключение составляют строки и массивы – для создания этих объектов предусмотрена сокращенная запись). | Рассмотрим практический пример – в .NET Framework входит полезный класс Random для работы со случайными числами.
  • Параметризованные конструкторы

    На первый взгляд конструктор New работает так же, как в предыдущих версиях VB. В действительности изменилось очень многое, и самое принципиальное изменение заключается в том, что при вызове New теперь могут передаваться параметры.
  • Пример: класс String, класс StringBuilder

    Другим хорошим примером класса с несколькими конструкторами является класс String. Хотя для конструирования строк предусмотрена сокращенная запись (последовательность символов, заключенная в кавычки), в более сложных случаях лучше перейти на использование конструкторов.
  • Хронометраж – насколько быстрее работает класс StringBuilder?

    Хотя Microsoft не разрешает публиковать точные результаты хронометража для бета-версий (и это вполне разумно, поскольку в них содержится большой объем отладочного кода), отношение результатов, полученных в ходе измерений, почти всегда остается более или менее постоянным.
  • Пространства имен. Импортирование. Класс DirectoryInfo.

    При использовании кода, написанного другими программистами, всегда возникает потенциальная опасность конфликтов имен. Но даже если забыть об этих конфликтах, все равно необходимо каким-то образом сгруппировать тысячи методов в соответствии с их функциональным назначением.
  • Справочная система и .NET Framework

    В библиотеку .NET Framework входят сотни пространств имен, каждое из которых содержит множество полезных классов. По масштабам и возможностям .NET Framework сравнима с полным интерфейсом Win32 API. Библиотека настолько огромна, что описать ее в одной книге попросту невозможно.
  • Классы коллекций в .NET Framework. ArrayList.

    Чтобы пробудить в вас интерес к .NET Framework, мы кратко рассмотрим некоторые классы коллекций. В этих классах реализуются стандартные структуры данных, часто используемые в нетривиальных программах.
  • Хэш-таблицы

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

    Рассмотрим следующий фрагмент: | Dim thing As New Object | Dim aRandomlnstance As New Random | В нем объявляются и создаются две переменные: thing и aRandomlnstance. Первая переменная содержит ссылку на тип Object, а вторая – ссылку на экземпляр класса Random.
  • Is и Nothing. TypeName и TypeOf.

    Оператор Is проверяет, ссылаются ли две объектные переменные на одну область памяти.
  • Проблемы с передачей объектных переменных по значению

    Большинство языков программирования требует четкого понимания, чем передача параметров по ссылке отличается от передачи по значению. Не забывайте, что в VB.NET параметры по умолчанию передаются по значению (ByVal).
  • Определение классов в программе

    От использования готовых классов .NET Framework мы переходим к определению собственных классов в программе. Код класса можно разместить в отдельном файле при помощи команды Project › Add Class, как в VB6, или же просто ввести его в нужном модуле – например, в стартовом модуле, содержащем точку входа в консольное приложение.
  • Атрибуты уровня доступа и создание объектов. Me.

    Атрибуты уровня доступа, установленные для класса, управляют возможностью создания объектов соответствующего типа. Грубо говоря, они являются отдаленным аналогом свойства Instancing в VB6, хотя для некоторых значений Instancing приходится дополнительно учитывать уровень доступа конструктора.
  • Перегрузка членов класса

    Метод RaiseSalary класса Employee можно сделать и поинтереснее. Предположим, повышения зарплаты до 10% происходят автоматически, но для больших сумм требуется специальный пароль. В прежних версиях VB такие задачи решались при помощи необязательных параметров.
  • Снова о конструкторах

    Если в вашем классе не определен конструктор, VB.NET автоматически генерирует для него конструктор, вызываемый без аргументов. Работа этого конструктора сводится к инициализации всех полей экземпляра значениями по умолчанию.
  • Снова о свойствах. Свойства и инкапсуляция.

    Принципиальное различие в работе свойств VB6 и VB.NET заключается в том, что секции Get и Set теперь должны обладать одинаковым уровнем доступа. Определять свойства с секциями Public Get и Private Set в VB.NET не разрешается. | Примечание | Это ограничение легко обходится.
  • Область видимости переменных

    Переменные класса (в том числе и закрытые поля), объявленные за пределами его методов или свойств, доступны для всех членов класса. Переменные, объявленные в методе или свойстве, являются локальными по отношению к этому методу или свойству.
  • Вложенные классы. Практическое использование вложенных классов на примере связанного списка.

    В программах VB.NET нередко встречаются ситуации, когда у вас имеются два класса: "внешний" и "внутренний", фактически принадлежащий первому. Вложенные (nested) классы обычно выполняют вспомогательные функции, и их код имеет смысл лишь в контексте внешнего класса.
  • Общие данные в классах. Общие члены классов.

    Вернемся к классу Еmploуее. Допустим, каждому работнику необходимо присвоить уникальный номер. В старых версиях VB задача решалась при помощи глобальных переменных, что приводило к нарушению инкапсуляции и создавало потенциальную угрозу случайного изменения номеров внешним кодом.
  • Жизненный цикл объекта. Уничтожение объектов.

    Итак, при создании экземпляра класса оператором New вызывается соответствующий метод-конструктор New из определения класса (также может быть вызван общий конструктор, если он есть). Версия конструктора выбирается в соответствии с типом переданных параметров.
  • Структурные типы

    Традиционно в объектно-ориентированных языках возникало немало проблем с простейшими типами данных – такими, как обычные целые числа. Дело в том, что в объектно-ориентированном языке все данные должны быть объектами.
  • Перечисляемые типы

    Перечисляемые типы обычно используются для определения набора именованных целочисленных констант. При определении перечисляемого типа используется пара ключевых слов Enum-End Enum вместе с модификатором доступа.
  • Структуры. Определение структур в программе.

    Некоторые полагают, что структуры VB.NET аналогичны пользовательским типам прежних версий VB или многих других языков программирования. Конечно, структуры VB.NET могут использоваться как пользовательские типы, но этим область их возможного применения не исчерпана.
  • Пространства имен для создаваемых классов

    Классы, перечисляемые типы, структуры или модули включаются в пространства имен. Конечно, создать экземпляр модуля невозможно – только экземпляры классов, определяемых в модуле. В диалоговом окне Project Properties, показанном на рис.
  • Окно классов

    Теперь, когда вы знаете, как определять собственные классы, вам будет проще работать с окном классов, в котором члены классов вашего решения отображаются в виде удобного иерархического дерева. Окно классов помогает ориентироваться в коде вашего решения: при двойном щелчке в одной из строк окна классов в окне программы автоматически открывается код соответствующего члена.
  • Отладка объектно-ориентированных программ

    Отладка объектно-ориентированных программ всегда начинается с анализа объектных переменных и проверки того, соответствует ли их состояние предполагаемому. Именно по этой причине в VS IDE предусмотрены средства для получения информации о закрытых полях ваших классов – окна просмотра (Watch) и локальных переменных (Locals). Применение этих средств отладки будет рассмотрено на простом примере.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.