51468

Создание и выполнение Windowsпроектов с несколькими формами. Стандартные модули и модульная структура приложений в VB

Лекция

Информатика, кибернетика и программирование

Диалоговое окно Добавление нового элемента dd New Item предлагает несколько шаблонов доступных для использования в проектах. Окно Обозреватель решений Solution Explorer в списке компонент проекта содержит модуль который был добавлен в программу.

Русский

2015-01-29

843.34 KB

5 чел.

Тема 5.1. Стандартные модули и
модульная структура приложений в VB

5.1.1.  Стандартные модули и их использование

5.1.2.  Создание и выполнение Windows-проектов с несколькими формами

5.1.3.  Структура приложений в VB

5.1.4.  Задачи для самостоятельного решения по теме  «Архитектура .NET и

          модульная структура приложений в VB»  

5.1.5.  Тестовые задания по теме  «Архитектура .NET и модульная  структура   

           приложений в VB»

5.1.1. Стандартные  модули и их использование

Стандартный модуль – это специальный файл, имеющий расширение  *.vb и содержащий объявления переменных и описание процедур, которые могут быть  использованы в любом  месте программного кода проекта.

Как и модули формы, стандартные модули отображаются в окне Обозреватель решений (Solution Explorer), и могут быть сохранены на диске с помощью команды
Сохранить  ModuleName.vb как (Save ModuleName.vb As) элемента главного меню Файл (File).  ModuleName.vb   является  элементом проекта.  В отличие от модуля форм,  стандартные модули содержат только программный код и не имеют интерфейса пользователя. И хотя стандартные модули имеют некоторые сходства с классами (и те и другие являются контейнерами для данных и процедур), они отличаются от классов тем, что не являются объектно-ориентированными, стандартные модули не определяют структуры и характеристики объектов и не могут наследоваться.

 

Рис. 5.1.1-1

Чтобы создать в программе новый стандартный модуль, необходимо  щелкнуть на кнопке Добавление нового элемента  (Add  New  Item)  стандартной панели инструментов или на команде  Добавить новый элемент… (Add New Item…) элемента  главного меню Проект (Project). Также можно использовать команду   Добавить модуль… (Add Module…) элемента главного меню Проект (Project).  В результате выполнения одной из этих команд откроется диалоговое окно  Добавление нового элемента … (Add New Item…) , в котором следует выбрать шаблон  Module  и указать имя модуля (рис. 5.1.1-1).

После нажатия на кнопку Добавить (Add) в окне Редактор кода (Code Editor) появится новый пустой модуль. Первый модуль программы по умолчанию имеет имя  Module1.vb,  но это имя можно изменить, сделав щелчок правой кнопкой мыши на модуле в окне Обозреватель решений (Solution Explorer) и введя новое имя модуля, или с помощью команды Сохранить  Module1.vb  как (Save Module1.vb As) элемента меню Файл (File). 

Рассмотрим пример создания в проекте пустого модуля.

Пример 5.1.1-1. Создать пустой стандартный модуль.

  1.  Запустить VS и создать новый проект  с именем  Пример 5.1.1-1.

Будет создан новый проект, и в окне Конструктор (Designer) появится пустая форма.

  1.  Выполнить команду   Добавить новый элемент… (Add New Item…) элемента главного меню Проект (Project).

Появится диалоговое окно Добавление нового элемента  (Add New Item).

  1.  Выбрать шаблон Module.

В текстовом поле  Имя (Name) появится имя по умолчанию Module1.vb. (рис. 5.1.1-1).

Диалоговое окно Добавление нового элемента… (Add New Item…) предлагает несколько шаблонов, доступных для использования в проектах. Каждый из этих шаблонов имеет различные характеристики и включает начальный код, который облегчает их использование. Visual Studio содержит много  шаблонов-форм Windows.

Щелкнуть на кнопке   Добавить (Add).

VB добавит в проект модуль Module1. Этот модуль появится в окне Редактор кода                   (Code Editor), как показано на рис. 5.1.1-2.

Рис. 5.1.1-2

  1.  Чтобы увидеть окно Обозреватель решений (Solution Explorer),  дважды щелкните мышью на строке заголовка окна Обозреватель решений (Solution Explorer), а затем выберите Module1.vb.

Окно Обозреватель решений будет выглядеть так, как на рис. 5.1.1-2.

Рис. 5.1.1-2

Окно Обозреватель решений (Solution Explorer) в списке компонент проекта содержит модуль, который был добавлен в программу. Имя Module1 указывает на имя файла модуля по умолчанию. Впоследствии можно изменить это имя файла.

  1.  Чтобы увидеть полный размер окна Свойства (Properties),  дважды следует щелкнуть на строке его заголовка.

Как показано на рис.  5.1.1-3,  окно  Свойства (Properties) отображает свойства Module1.vb.

Так как модуль содержит только код, он имеет всего несколько свойств. Используя наиболее важное его свойство – File Name (Имя файла) – можно указать другое имя файла модуля, сделав его более описательным в будущем. Обдумайте это название, так как в дальнейшем может возникнуть необходимость встроить этот модуль в еще один проект.

Рис. 5.1.1-3

  1.  Изменить свойство File Name на МатематическиеФункции.vb или другое имя файла и нажать на <Enter>. 

Имя файла модуля в окнах Свойства (Properties), Обозреватель решений (Solution Explorer) и в окне Редактор кода (Code Editor) обновится.

  1.   Вернуть окна Свойства (Properties)  и Обозреватель решений (Solution Explorer) в их нормальные прикрепленные положения, дважды щелкнув мышью на их заголовках.

Как вы можете видеть, работа с модулями в проекте очень похожа на работу с формами. В следующем примере необходимо будет  добавить в модуль открытую переменную.

  1.   Чтобы удалить модуль из проекта, следует щелкнуть на модуле в окне Обозреватель решений (Solution Explorer), а затем щелкнуть на команде  Исключить из проекта (Exclude From Project) элемента  главного меню Проект (Project). 

Команда   Исключить из проекта (Exclude From Project) не удаляет модуль с жесткого   

диска, а удаляет связь между указанным модулем и текущим проектом. Чтобы отменить  

эффект этой команды, щелкнуть на команде  Добавить существующий элемент
(Add  Existing Item)
элемента главного меню Файл (File), выбрать файл, который требуется

добавить в проект, и затем щелкнуть на кнопке Добавить (Add).

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

Например, оператор

Public  Global  As  Integer

объявляет открытую переменную с именем  Global  типа Integer.

Следующий пример демонстрирует, как можно использовать в модуле открытую переменную с именем Wins. Для этого необходимо дополнить проект Счастливая семерка  из Темы 4.1, в которой будет использована переменная Wins для записи числа выигрышей.

Пример 5.1.1-2. Переработать проект примера 4.3.2-1  Счастливая семерка.

В программном коде проекта примера 4.3.2-1  переменную Wins – число выгрышей, процедуру-функцию с именем HitRate( ), которая вычисляет долю выигрышей в игре, т. е. другими словами, процентное выражение игр, в которых появляется хотя бы одна семерка, и открытую переменную Spins переместим из  модуля формы в стандартный модуль. Причем форма останется такой же,  как на рис. 4.3.2-1, а программный код примет вид, как на рис. 5.1.1-4.

Module Module1

   Public Spins As Short

   Public Wins As Short

   Function HitRate(ByVal Hits As Short, ByVal Tries As Short) As String

       Dim Percent As Single

       Percent = CSng(Hits / Tries)

       Return Format(Percent, "0.0%")

   End Function

End Module

Public Class Form1

   

  Private Sub Button2_Click(ByVal sender As System.Object, _

                             ByVal e As System.EventArgs) _

                             Handles Button2.Click

       End

   End Sub

Private Sub Button1_Click(ByVal sender As System.Object, _

                             ByVal e As System.EventArgs) _

                             Handles Button1.Click

       PictureBox1.Visible = False         ' скрыть картинку

       Label1.Text = CStr(Int(Rnd() * 10)) ' выбрать числа

       Label2.Text = CStr(Int(Rnd() * 10))

       Label3.Text = CStr(Int(Rnd() * 10))

       Spins = Spins + 1

       If (Label1.Text = "7") Or (Label2.Text = "7") _

                              Or (Label3.Text = "7") Then

           PictureBox1.Visible = True       'скрыть рисунок

           Beep()

           Wins = Wins + 1

           Label5.Text = "Побед:" & Wins

       End If

       Label6.Text = HitRate(Wins, Spins)

   End Sub

   Private Sub Form1_Load(ByVal sender As System.Object, _

               ByVal e As System.EventArgs) Handles MyBase.Load

       Randomize()

   End Sub

End Class

 Рис. 5.1.1-4

5.1.2. Создание проектов с несколькими формами

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

Рассмотрим примеры проектов,  как создать  вторую форму и организовать взаимодействие между этими формами.

 Пример 5.1.2-1. Создать проект с двумя формами.

  1.  Создать новый проект с именем Проект-5-1-2-1.

Автоматически будет создана форма Form1.

  1.  Чтобы добавить в проект  еще одну форму, необходимо поступить так же,  как при добавлении модуля, но выбирая при этом элемент Windows Form в окне
    Добавить новый элемент (Add New Item).

После этого в окне  Обозреватель решений (Solution Explorer) появится информация о том, что в проект добавлена форма Form2.

  1.  Запустить проект на выполнение.

На экране отобразится  Form1, а вторая нет.

Обратите внимание, что в качестве стартовой формы можно выбрать любую в окне Свойства Проекта-5-1-2-1, щелкнув на элементе главного меню Проект и выполнив команду  Свойства: Проекта-5-1-2-1.

  1.  Разместить на формах элементы управления (кнопки и одно текстовое поле), как показано на рис. 5.1.2-1 и рис. 5.1.2-2.

 Рис. 5.1.2-1            Рис. 5.1.2-2

  1.  Добавить  в проект стандартный модуль.
  2.  Поместить в окна кода модуля и обеих форм программный код (рис. 5.1.2-3- 5.1.2-5).

     

     

     Рис. 5.1.2-3

Рис. 5.1.2-4

     

Рис. 5.1.2-5

 

Проанализируем вышеприведенный программный код.

Прежде всего, несколько слов о том, видны ли модульные переменные F1 и F2 из других модулей. Если они объявлены, как обычно, словом Dim или Private, то не видны, а если словом Public - то видны.

 Модули, как известно, используются в качестве общедоступного контейнера для переменных,  констант, процедур, функций и других элементов VB. В нашем случае модуль используется  для объявления двух общедоступных переменных: F1 и F2. Переменная F1 объявляется как объект класса Form1. Это значит, что после загрузки формы Form1 мы хотим к ней обращаться по имени F1. С этой же целью в процедуру Form1_Load( ) вставлен оператор F1= Me, что позволяет ссылаться переменной  F1 на этот "экземпляр" формы.

После запуска проекта форма Form1 появляется на экране. Чтобы появилась и форма Form2, необходимо нажать кнопку Button3. Оператор  F2=Form2 или F2=New порождает форму Form1 как объект класса Form2. А чтобы форма стала видна, должен выполниться оператор F2.Show().

Теперь на экране обе формы, и можно работать с каждой из них, нажимая кнопки и вводя текст в текстовые поля

Посмотрим на содержимое процедур Button1_Click( ) в обоих окнах кода. Первая строка обеих процедур красит своего хозяина, вторая - соседа. Таким образом, в каждом окне кода можно, как обычно, писать операторы, приказывающие что-то сделать в форме-хозяине данного окна, а можно с таким же успехом писать операторы, приказывающие что-то сделать в любой другой форме проекта. Чтобы VB понимал, о какой форме идет речь, перед именем свойства, принадлежащего чужой форме, нужно писать имя этой формы (в нашем случае F1 или F2) с точкой. Если же форма своя, то вместо имени хозяина можно писать слово Me или вообще ничего не писать. Так,  в процедуре Button1_Click( )  первой формы  вместо

Me.BackColor = Color.Blue

‘ можно написать

F1.BackColor = Color.Blue

или просто

BackColor = Color.Blue

  Теперь посмотрите на содержимое процедур Button2_Click( ) в обоих окнах кода. Очевидно, что первая строка обеих процедур выводит текст в текстовое поле TextBox1 своего хозяина, вторая - в текстовое поле TextBox1 соседа. Третья строка обеих процедур при помощи метода Focus( ), принадлежащего соседу, переводит фокус на соседа. Таким образом, можно обращаться не только к свойствам чужой формы, но и к ее элементам управления, и к методам. К ним тоже применимо соглашение об имени хозяина с точкой.

 

Рассмотрим структуру проекта Проект-5.1.2-1. Ее можно увидеть в окне Обозреватель решений (Solution Explorer) (рис. 5.1.2-6).

Рис. 5.1.2-6

Строки окна Обозреватель решений отражают тот факт, что проект Проект-5.1.2-1 (он выделен на рисунке полужирным шрифтом) состоит из трех модулей: формы Form1, формы Form2 и стандартного модуля Module1, причем  каждый из трех упомянутых модулей сохраняется в своем файле.

Щелкая в окне Обозреватель решений по нужному модулю, а затем (для форм) по одной из двух кнопок слева на панели окна   Перейти к коду и Открыть в конструкторе (View Code и View Designer), мы можем удобно переключаться между различными окнами модулей.

Щелкая правой клавишей мыши в окне  Обозреватель решений по нужному модулю, а затем в открывшемся контекстном меню выбирая нужный пункт, вы можете этот модуль переименовывать (Rename), копировать (Сору), вырезать (Cut), удалять из проекта (Exclude From Project), удалять с диска (Delete), просматривать и изменять его свойства (Properties). Обратите внимание, что  переименовав форму  в окне свойств формы, вы не сможете запустить проект, если он с этой формы стартует. Вам понадобится зайти в окно  Проект-5.1.2-1 Properties.

5.1.3. Структура приложений в VB 

 Для лучшего понимания материала, связанного со структурой приложнения  рекомендуется еще раз обратиться к п.п. 5.B.1.6.

В VB  можно создавать различные приложения. Кратко охарактеризуем три основных шаблона проектов:

  1.  Приложение с Windows Form (Windows FormApplication) – основной вид проектов, строящихся на языке VB. Интерфейс таких приложений строится  в визуальном стиле на основе форм Windows. Приставка Visual в названии языка во многом определяется возможностями этого типа проектов.
  2.  Библиотека классов (Class Library) – проект, позволяющий построить DLL (Dynamic Link Library) – динамически подключаемую библиотеку классов. Дело в том, что всегда полезно отделять содержательную часть приложения от ее интерфейса. Классы, определяющие содержание приложения, могут собираться в DLL, которая затем будет подключаться к проекту, описывающему интерфейс приложения. Такой подход в наибольшей степени соответствует повторному использованию. Один раз созданные содержательные классы, собранные в DLL, могут использоваться в разных приложениях.
  3.  Консольное приложение (Console Application) – этот тип проектов не используется в программных продуктах, для которых интерфейс играет крайне важную роль. Тем не менее, это весьма популярный у разработчиков тип проектов, используемый для внутренних целей в ходе разработки. Этот тип проектов довольно часто будет использоваться  в примерах, когда для понимания тех или иных возможностей языка VB достаточно весьма простого интерфейса – ввода и вывода данных на консоль.    

           Рис. 5.1.3-1. Диалоговое окно Создать проект (New Project)

Как известно, для создания любого проекта в VS используется диалоговое окно Создание проекта (New Project) (рис. 5.1.3-1). Для его открытия необходимо выполнить одно из следующих действий:

  1.  выбрать ссылку Создать: проект... (Create: Project...) в окне Начальная  страница (Start Page);
  2.  выполнить команду  Создать проект… (New Project…) из элемента   главного меню Файл (File);
  3.  нажать    кнопку    Создать    проект    (New    Project),    расположенную    на стандартной панели инструментов.

Еще раз дадим определение основных понятий, которые будут использоваться при создании  примеров  в данной теме и а дальнейшем.

Класс (Class) – это центральное понятие объектно-ориентированного программирования и языка VB. Разработчик проектов на VB использует стандартные классы из библиотеки FCL и создает собственные классы. У класса две различные роли.

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

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

Хороший стиль программирования требует, чтобы каждый класс сохранялся в отдельном файле, имя которого совпадало бы с именем класса. Это требование стиля, которое на практике может и не выдерживаться. В наших примерах будем стараться выдерживать этот стиль.

Объект (Object). Определив класс, разработчик получает возможность динамически создавать объекты класса. Для программистов, начинающих работать в объектном стиле, типичной ошибкой является путаница понятий объекта и класса. Нужно с самого начала уяснить разницу. Класс, создаваемый разработчиком, представляет статическое описание множества объектов. Объект – это динамическое понятие, он создается в ходе выполнения программной системы, реально существует в памяти компьютера и обычно исчезает по завершении выполнения проекта. Программист может создать программную систему, включающую два - три класса, но в ходе работы такой системы могут динамически появляться сотни объектов, взаимодействующих друг с другом достаточно сложным образом. Показателен тот факт, что центральный класс в библиотеке FCL, являющийся прародителем всех классов как библиотечных, так и создаваемых разработчиком проектов VB, назван именем Object.

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

Пространства имен позволяют задать древесную структуру на множестве классов большого проекта. Они облегчают независимую разработку проекта большим коллективом разработчиков, каждая группа которого работает в своем пространстве имен.

Пространства имен придают структуру библиотеке FCL, содержащей большое число различных пространств имен, объединяющих классы определенной тематики. Центральным пространством имен библиотеки FCL является пространство System, содержащее другие пространства и классы, имеющие широкое употребление в различных проектах.  

Проект (Project) – это единица компиляции. Результатом компиляции проекта является сборка. Каждый проект содержит одно или несколько пространств имен. Как уже говорилось, на начальном этапе создания проекта по заданному типу проекта автоматически строится каркас проекта, состоящий из классов, являющихся наследниками классов, входящих в состав библиотеки FCL. Так, если разработчик указывает, что он хочет построить проект типа Windows  приложение, то в состав каркаса проекта по умолчанию войдет класс Form1 – наследник библиотечного класса Form. Разработчик проекта населит созданную форму элементами управления – объектами соответствующих классов, тем самым расширив возможности класса, построенного по умолчанию.

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

В зависимости от выбранного типа проект может быть выполняемым или невыполняемым. К выполняемым проектам относятся, например,  проекты типа Console или Windows. При построении каркаса выполняемого проекта  в него включается класс, содержащий статическую процедуру с именем Main( ).  

К невыполняемым проектам относятся, например, проекты типа DLL. В результате компиляции такого проекта в сборку войдет файл с расширением *.dll. Такие проекты (сборки) непосредственно не могут быть выполнены на компьютере. Они присоединяются к выполняемым сборкам, откуда и вызываются методы классов, размещенных в невыполняемом проекте (DLL) .

                     

Сборка (Assembly) – результат компиляции проекта. Сборка представляет собой коллекцию из одного или нескольких файлов, помеченных номером версии. Каждая сборка разворачивается на компьютере как единое целое. Программист работает с проектами, CLR  работает со сборками. Сборка позволяет решать вопросы безопасности, так как содержит описание требуемых ей ресурсов и права доступа к элементам сборки. Каждая сборка содержит манифест, содержащий полное описание сборки, ее элементов, требуемые ресурсы, ссылки на другие сборки, исполняемые файлы. Благодаря этому описанию CLR  не требуется никакой дополнительной информации для развертывания сборки, трансляции промежуточного кода и его выполнения. Манифест идентифицирует сборку, специфицирует файлы, требуемые для реализации сборки, специфицирует типы и ресурсы, составляющие сборку, задает зависимости, необходимые в период компиляции для связи с другими сборками, специфицирует множество разрешений, необходимых, чтобы сборка могла выполняться на данном компьютере.

Решение (Solution). Каждый проект, создаваемый в Visual Studio 2008, помещается в некоторую оболочку, называемую Решением  (Solution).  Решение может содержать несколько проектов, как правило, связанных общей темой. Например, все проекты, рассматриваемые в данном пособии,  могут быть помещены в одно Решение.  В примерах данного раздела Решение будет содержать три проекта – DLL  с классами, определяющими содержательную сторону приложения, и два интерфейсных проекта – консольный и Windows приложения.

Заметим, что когда создается новый проект, то он может быть помещен в уже существующее Решение или может быть создано новое Решение, содержащее проект.

Решения позволяют придать структуру множеству проектов, что особенно полезно, когда проектов много.

Рассмотрим на примере  основные шаги создания основных типов проектов и решения.

Пример 5.1.3-1. Создать три проекта, которые содержат – библиотеку классов, консольный проект и Windows-проекты. Проект ClassLibraryMath  должен реализовать  класс ClassLibraryMath, аналог класса Math, причем здесь ограничимся вычислением одной функции sin(x), что позволит повторно использовать его, присоединяя к консольному и Windows проектам.

Напомним, что функцию sin(x), как и другие математические функции, можно вычислить, используя разложение в ряд Тэйлора:

 

Построим  необходимые рекуррентные соотношения. Запишем соотношения для a0, ak, ak+1:

   

Вычислив отношение  ak+1/ak, получим требуемое рекуррентное соотношение:

  1.  Создание DLL - проекта типа Библиотека классов (Class Library)

Запустим Visual Studio 2008, со стартовой страницы перейдем к созданию проекта и в качестве типа проекта укажем тип  Библиотека классов (Class Library).  В открывшемся окне создания DLL, показанном на рис. 5.1.3-1,  все поля заполнены значениями по умолчанию. Как правило, их следует переопределить.

В поле Имя (Name) задается имя строящейся DLLClassLibraryMath.

В поле Расположение (Location) указывается путь к папке проекта.

Обратите внимание и на другие установки, сделанные в этом окне  - в верхнем окошке из списка возможных каркасов выбран каркас
Framework .Net 3.5. Задав требуемые установки и щелкнув по кнопке OK, получим автоматически построенную заготовку проекта DLL, открытую в среде разработки проектов Visual Studio 2008 .

В окне проектов Обозреватель решений  (Solution Explorer) показано Решение с именем ClassLibraryMath, содержащее проект DLL  с именем ClassLibraryMath. В папке Свойства (Properties) проект содержит файл с описанием сборки – ее имя и другие характеристики. В папке  Ссылки (References) проект содержит ссылки на основные пространства имен библиотеки FCL, которые могут понадобиться в процессе работы DLL. Если содержимое этой  папки не отображается, то необходимо щелкнуть по значку Показать все файлы в верхней части Обозревателя решений  (Solution Explorer).

Поскольку всякая DLL  содержит один или несколько классов, то для одного класса, которому по умолчанию дано имя Class1, заготовка построена. Класс этот, показанный в окне кода, пока что пуст – не содержит никаких элементов.

Построенный автоматически класс вложен в пространство имен, которое по умолчанию получило имя, совпадающее с именем проекта – ClassLibraryMath.

Была рассмотрена подготовительная часть работы, которую Visual Studio 2008 выполнила для нас. Дальше предстоит потрудиться самим.  

Изменим имя Class1 на имя ClassLibraryMath.Это  продиктовано правилом стиля – имя класса и имя файла, хранящего класс, должны совпадать. Переименование имени файла делается непосредственно в окне проектов Solution Explorer.

Поскольку необходимо создать аналог класса Math, то в нашем классе должны быть аналогичные методы. Начнем, как уже говорилось, с метода, позволяющего вычислить функцию sin(x). Заголовок метода сделаем такой же, как и в классе аналоге. В результате программный код класса будет как на рис. 5.1.3-2.

Option Explicit On

Option Strict On

Public Class ClassLibraryMath

   'Константы класса

   Const EPS As Double = 0.000000001

   'Статические методы класса

   Shared Function Sin(ByVal x As Double) As Double

       Dim a, res As Double

       Dim k As Integer

       a = x

       res = 0

       k = 0

       'Основные вычисления

       Do While (Math.Abs(a) > EPS)

           res = res + a

           a = a * (-x * x / ((2 * k + 2) * (2 * k + 3)))

           k = k + 1

       Loop

       Return res

   End Function

End Class

Рис. 5.1.3-2

Поставленная цель достигнута, - создан программный код, содержащий класс, метод которого позволяет вычислять по заданному аргументу x  функцию sin(x). Метод построен в полном соответствии с алгоритмом, описанным в  п.п.4.6.

Теперь вернемся к технической стороне дела. Построим Решение, содержащее проект, для чего в Главном меню среды выберем элемент Построение (Build) и выполним команду  Построить решение (Build Solution). В результате успешной компиляции будет построен файл с уточнением *.dll. Поскольку построенная сборка не содержит выполняемого файла, то непосредственно запустить наш проект на выполнение не удастся. Далее построим консольный  проект, к которому присоединим нашу библиотеку DLL, и протестируем, насколько корректно работают созданные нами методы. Заодно разберемся с тем, как строится консольный проект и как к нему подсоединяется сборка, содержащая DLL.  

  1.  Создание консольного проекта

Вначале необходимо построить интерфейс, обеспечивающий конечному пользователю доступ к тем сервисам, которые предоставляет созданный класс ClassLibraryMath.  Начнем с построения простейшего интерфейса, позволяющего пользователю с консоли вводить исходную информацию – в нашем случае аргумент x. С исходными данными пользователь может провести вычисления, а затем полученные результаты вывести на консоль – экран дисплея.  Для организации подобного интерфейса и служит тип проекта –  Консольное приложение.

Чтобы создать новый проект, находясь в среде разработки, вовсе не обязательно начинать со стартовой страницы. Достаточно выбрать элемент Новый (New)  основного меню Файл (File) и выполнить команду Проект (Project), приводящий на страницу создания нового проекта. В этом окне, как описано ранее, зададим тип строящегося проекта, и  дадим ему имя – ConsoleToMath.  

В консольном проекте стандартный модуль Module1 создается автоматически и содержит единственный статический метод – процедуру  Main( ).  Если этот проект запустить на выполнение, то начнет выполняться код этой процедуры, пока отсутствующий и который предстоит нам создать.

Когда проект запускается на выполнение, то в него должна входить сборка, отмеченная как стартовая, содержащая класс с точкой входа – статическим методом (процедурой)  Main( ). Дальнейший сценарий зависит от содержимого точки входа. Как правило, в процессе работы метода Main( ) создаются один или несколько объектов других классов, они и вызывают методы и/или обработчики событий, происходящих с созданными объектами. В этих методах и обработчиках событий могут создаваться новые объекты, вызываться новые методы и новые обработчики. Так, начиная с одной точки, разворачивается целый мир объектов приложения.

Далее в проект добавим соответствующий программный код (Рис. 5.1.3-3).

Option Explicit On

Option Strict On

Namespace ConsoleToMath 'В данном случае можно опустить

   Module Module1

       Sub Main()

           'Входные данные

           Dim x As Double = 0

           Const INVITE As String = _

               "Введите вещественное число x" + _

               "- аргумент функции Sin(x)"

           Const CONTINU As String = _

               "Продолжим? (Yes/No)"

           Dim answer As String = "yes"

           Do 'Организация ввода данных

               Console.WriteLine(INVITE)

               Dim temp As String = Console.ReadLine()

               x = Convert.ToDouble(temp)

               'Вычисления и вывод результата

               Dim res As Double = 0

               res = Math.Sin(x)

               Console.WriteLine("Math.Sin(x) = " + _

                   res.ToString())

               res = ClassLibraryМаth.ClassLibraryМаth.Sin(x)

               Console.WriteLine("MathTools.MyMath.Sin(x) = " + _

                   res.ToString())

               'диалог с пользователем

               Console.WriteLine(CONTINU)

               answer = Console.ReadLine()

           Loop While (answer <> "No")

       End Sub

   End Module

End Namespace

Рис. 5.1.3-3

  1.  Связывание с DLL

Первым делом свяжем два построенных проекта, для чего в консольный проект добавим ссылку на проект с DLL ClassLibraryMath. Для этого в окне
Обозреватель решений  (Solution Explorer) подведем указатель мыши к имени консольного проекта и из контекстного меню, появляющегося при щелчке правой кнопки, выполним команду  Добавить ссылку (Add Reference). В открывшемся окне добавления ссылок  выберем вкладку  Проект (Projects). Поскольку проект  ClassLibraryMath  не включен в текущее Решение, то он автоматически не появится в открывшемся окне. Если ссылку нужно установить на проект, не включенный в Решение, как в нашем случае, то в окне добавления ссылок нужно задать путь к проекту.  Для  этого необходимо щелкнуть на вкладке Обзор и задать путь к проекту ClassLibraryMath, в папке …\bin\Relase\ClassLibraryMath.dll которого и находится нужный файл.   После этого добавления ссылка на DLL  появится в папке Ссылки (References) консольного проекта. Теперь проекты связаны и из консольного проекта доступны сервисы, предоставляемые соответствующей библиотекой DLL.

  1.  Организация консольного интерфейса

Задача программного кода, который  непосредственно встроен в уже созданную процедуру  Main( ), достаточно понятна. Дадим краткие комментарии к этому коду:

Входные данные устроены просто – задается лишь одна переменная x типа Double. 

Вводу значения x предшествует, как и положено для хорошего стиля программирования, приглашение к вводу. Для ввода и вывода значений используются статические методы ReadLine( ) и WriteLine( )  класса Console, входящего в библиотеку FCL и предоставляющего свои сервисы пользователям консольных приложений. Для преобразования введенных данных, представляющих собой строки текста, к нужному типу (в нашем случае к типу Double) используются статические методы класса Convert, сервисы которого позволяют проводить различные преобразования между типами данных.  

Значение функции Sin(x) вычисляется двумя разными методами – методом стандартного класса Math и методом класса ClassLibraryMath.

В коде применяется стандартный прием зацикливания  тела метода Main( ),   позволяющий пользователю самому решать, когда прервать выполнение метода.

На Рис. 5.1.3-4  показаны результаты работы консольного проекта.

Рис. 5.1.3-4.  Результаты работы консольного проекта

Анализируя эти результаты можно видеть, что два метода на всех исследуемых аргументах дают одинаковые результаты, совпадающие с точностью до 9 цифр после запятой. Точность методов в классе MyMath обеспечивается константой EPS этого класса. Достигнутая точность вполне достаточна для большинства практических задач. Остается понять, насколько написанные нами методы проигрывают методу стандартного класса по времени.

Консолью называется окно операционной системы, в котором пользователи взаимодействуют с операционной системой или текстовым консольным приложением путем набора текстового ввода с клавиатуры и чтения текстового вывода с экрана компьютера. Например, в Windows консоль называется окном командной строки и принимает команды MS-DOS. Класс Console предоставляет базовую поддержку приложениям, считывающим символы с консоли и записывающим их на консоль.

Когда консольное приложение начинает работу, операционная система автоматически связывает с консолью три потока ввода-вывода. Приложение может считывать пользовательский ввод из стандартного входного потока, записывать обычные данные в стандартный выходной поток и записывать данные об ошибках в стандартный поток сообщений об ошибках. Эти потоки представлены в приложении значениями свойств In, Out и Error.

По умолчанию значением свойства In является объект System.IO..::.TextReader, а значениями свойств Out и Error — объекты System.IO..::.TextWriter.

Члены класса Console, работающие нормально, когда базовый поток направлен на консоль, могут выбрасывать исключение, если поток перенаправлен, например, в файл. Поэтому в приложениях следует перехватывать исключение System.IO..::.IOException, если стандартный поток перенаправлен.

Двумя тесно связанными между собой элементами консоли являются буфер экрана и окно консоли. Текст в реальности считывается из потоков и записывается в потоки, принадлежащие консоли, но кажется, что он считывается из принадлежащей консоли области, называемой буфером экрана, и записывается в эту область. Буфер экрана является атрибутом консоли, он организован в виде прямоугольной сетки строки и столбцов, в которой каждое пересечение строки и столбца, или символьная ячейка, содержит один символ. Каждый символ имеет собственный цвет, и каждая символьная ячейка имеет собственный цвет фона.

Содержимое буфера экрана просматривается через прямоугольную область, называемую окном консоли. Окно консоли является еще одним атрибутом консоли; это не сама консоль, которая является окном операционной системы. Окно консоли также организовано в виде строк и столбцов, а его размер меньше или равен размеру буфера экрана; при этом окно консоли можно перемещать для просмотра разных областей буфера экрана, с которым оно связано. Если буфер экрана больше окна консоли, в этом окне автоматически отображаются полосы прокрутки, чтобы окно консоли можно было репозиционировать относительно буфера.

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

Началом координат сетки символьных ячеек в буфере экрана является его верхний левый угол, и позиция курсора в окне консоли измеряется относительно этого начала координат. Для указания позиции используются индексы, отсчитываемые от нуля, то есть самая верхняя строка, и крайний слева столбец имеют индекс 0. Максимальное значение индексов строки и столбца определяется значением свойства Int16..::.MaxValue.

Класс Console содержит методы для чтения с консоли отдельных символов или целых строк, а также несколько методов записи, автоматически преобразующие экземпляр типа значения, массив символов или набор объектов в форматированную или неформатированную строку и затем записывающие эту строку, а за ней необязательную строку, идентифицирующую конец строки данных. Также класс Console содержит методы и свойства, позволяющие получить или задать размер буфера экрана, окна консоли и курсора, изменить положение окна консоли и курсора, переместить или удалить данные в буфере экрана, изменить цвета фона и текста, изменить текст, отображаемый в строке заголовка консоли и воспроизвести звуковой сигнал.

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

Public Shared Sub Main()

   Console.Write("Hola ")

   Console.WriteLine("Mundo!")

   Console.WriteLine("What is your name: ")

   Dim name As String = Console.ReadLine()

   Console.Write("Buenos Dias, ")

   Console.Write(name)

   Console.WriteLine("!")

End Sub 'Main

  1.  Создание Windows проекта

Создадим новый проект, аналогично тому, как был добавлен консольный проект. В качестве типа проекта выберем Windows-приложения, дадим проекту имя WindowsToMath.

Создадим простой интерфейс (рис. 5.1.3-5) и программный код класса Form1 (рис. 5.1.3-6).

Рис. 5.1.3-5.  Интерфейс формы класса Form1

 

Option Explicit On

Option Strict On

Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, _

           ByVal e As System.EventArgs) Handles Button1.Click

       Dim x As Double

       Dim temp As String

       temp = TextBox1.Text

       x = Val(temp)

       'Вычисления и вывод результата

       Dim res As Double = 0

       res = Math.Sin(x)

       TextBox2.Text = Convert.ToString(res)

       res = ClassLibraryМаth.ClassLibraryМаth.Sin(x)

       TextBox3.Text = Convert.ToString(res)

   End Sub

   Private Sub Button2_Click(ByVal sender As System.Object, _

           ByVal e As System.EventArgs) Handles Button2.Click

       End

   End Sub

End Class

Рис. 5.1.3-6.  Программный код  класса Form1

При создании консольного проекта автоматически создавался класс, содержащий метод Main( ) с пустым кодом метода. В Windows проекте автоматически создается класс с именем Form1.  Этот класс является наследником класса Form из библиотеки FCL и наследует все свойства и поведение (методы и события) родительского класса. Класс Form поддерживает организацию интерфейса пользователя в визуальном стиле. Форма является контейнером для размещения визуальных элементов управления – кнопок (Button), текстовых полей (TextBox), списков (ListBox) и более экзотичных элементов – таблиц (DataGridView), деревьев (TreeView) и многих других элементов. С некоторыми элементами управления мы уже знакомы.

Классы в VB синтаксически не являются неделимыми, а могут состоять из нескольких частей, каждая из которых начинается с ключевого слова Partial  (частичный). Таковым является и построенный автоматически класс Form1. Возможность разбиения описания одного класса на части облегчает работу над большим классом. Каждая часть класса хранится в отдельном файле со своим именем. Одна часть класса Form1 хранится в файле с именем Form1.Designer.vb . Эта часть класса заполняется автоматически инструментарием, называемым Дизайнером формы. Когда мы занимаемся визуальным проектированием формы и размещаем на ней различные элементы управления, меняем их свойства, придаем форме нужный вид, задаем обработчиков событий для элементов управления, то Дизайнер формы транслирует наши действия в действия над объектами соответствующих классов, создает соответствующий код и вставляет его в нужное место класса Form1. Предполагается, что разработчик проекта не вмешивается в работу Дизайнера и не корректирует часть класса Form1, созданную Дизайнером. Тем не менее, понимать код, созданный Дизайнером необходимо, а иногда полезно и корректировать его. Другая часть класса Form1, хранящаяся в файле Form1.vb, предназначена для разработчика, - именно в ней располагаются автоматически создаваемые обработчики событий, происходящих с элементами управления, код которых создается самим разработчиком. Такая технология программирования, основанная на работе с формами, называется визуальной, событийно управляемой технологией программирования.

При создании  Windows-Приложений  (Windows Application)  и Консольных приложений (Console Application) программа (программный код проекта) на языке  VB    может состоять из программного кода, генерируемого средой разработки,  и программного кода,  написанного или дописанного программистом. Причем базовая структура программного кода проекта создается автоматически в тот момент, когда  пользователь выбирает в окне  Создание проекта (New Project)  соответствующий шаблон. При выборе Windows-Приложения,  базовая структура содержит модуль формы, а при выборе Console Application, базовая структура содержит стандартный модуль и метод
Main( ) внутри модуля.

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

Таким образом, программы VB  хранятся  в программных модулях в виде процедур (методов). Эти программные модули, являющиеся, по сути, контейнерами для данных и процедур, могут быть трех видов:

  1.  модуль формы;
  2.  стандартный модуль;
  3.  модуль класса.

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

Option  Explicit  on

Option  Strict on

Imports System.Math

Imports System.IO

…                 'импортирование компонент других библиотек классов

Module  Module_1

…                 'стандартный модуль 1

End  Module 

Module Module_n

…                 'стандартный модуль n    

End Module

Public Class Class1

…                   'модуль класса 1

End Class

Public Class Class_k

…                   'модуль класса k

End Class

Public Class Form1

…                   'модуль формы 1

End Class

Public Class Form_m

…                    'модуль формы m

End Class 

Обратите внимание, что каждое приложение VB должно содержать  точку входа. Этой точкой входа  является процедура с именем Main( ). Платформа .NET Framework вызывает процедуру Main( ) при загрузке приложения.    Main( ) содержит код, который будет выполняться в первую очередь. В процедуре Main( ) пользователь может определить, какая форма загружается первой при запуске программы, установить, работают ли в системе копии данного приложения, ввести набор переменных для приложения или открыть необходимую для приложения базу данных. Причем основную работу выполняет метод Run  - в процессе его вызова создается объект класса Form1 и открывается форма – визуальный образ объекта, с которой может работать конечный пользователь проекта. Если, как положено, форма спроектирована и заполнена элементами управления, то конечному пользователю остается вводить собственные данные в поля формы, нажимать на кнопки, вообще быть инициатором возникновения различных событий в мире объектов формы. В ответ на возникающие события начинают работать обработчики событий, что приводит к желаемым (или не желанным) изменениям мира объектов. Типичной ситуацией является проведение вычислений по данным, введенным пользователем и отображение результатов этих вычислений в полях формы, предназначенных для этих целей.

Файл,  запускаемый самостоятельно с расширением .exe, должен также содержать процедуру Main( ).В то время как, библиотека (например с расширением *.dll) не может быть запущена самостоятельно и не требует процедуры  Main( ). Рассмотрим  требования к процедуре  Main( ) для различных типов проектов.

  1.  Консольные приложения выполняются самостоятельно,  в них необходимо указать, по крайней мере, одну процедуру Main( ), которая создается автоматически и заполняется программным кодом пользователем.

Проще всего объявить процедуру Sub, не принимающую аргументы и не возвращающую значение.

Module mainModule

 Sub Main()

 

 End Sub

End Module

В VB  стартовым объектом всегда является процедура Main( ). Имя этой процедуры должно быть указано на вкладке Приложение (Application)  диалогового окна My Project (рис. 5.1.3-7). Диалоговое окно
My Project появляется на экране, если дважды щелкнуть по его имени в окне
Обозреватель решений  (Solution Explorer) 

Рис. 5.1.3-7. Информация о стартовой процедуре 

  1.  Приложения Windows Forms выполняются самостоятельно. Для этого VB в таких приложениях создает процедуру   Main( ) автоматически, и поэтому ее не требуется создавать. Дело в том, что в VB поддерживается концепция стартового объекта, автоматически создаваемого при запуске приложения. По умолчанию стартовым объектом всегда является исходный класс, производный от класса Form. Имя этого объекта указывается на вкладке Приложение (Application)  диалогового окна My Project (рис. 5.1.3-8). Диалоговое окно
    My Project появляется на экране, если дважды щелкнуть по его имени в окне
    Обозреватель решений  (Solution Explorer) 

Рис. 5.1.3-8. Информация о стартовом объекте 

  1.  Библиотеки классов не требуют процедуры Main( ). 

 

Программа VB построена из стандартных блоков. Решение состоит из одного или нескольких проектов. Проект в свою очередь может содержать одну или несколько сборок. Каждая сборка компилируется из одного или нескольких исходных файлов. Исходный файл включает в себя определения и реализацию классов, структур, модулей и интерфейсов, и, в конечном счете, содержит весь код.

Сборки образуют базовую единицу развертывания и принимают форму исполняемого файла (.exe) или файла библиотеки динамической компоновки (DLL); они являются стандартными блоками платформы .NET Framework. Среда CLR получает от них сведения, необходимые для реализации типов. Сборку можно представить как коллекцию типов и ресурсов, формирующих логическую единицу функциональности и собранных для совместной работы.

В VB используется содержимое сборок, и добавляются ссылки на них.  Кроме того, каждая сборка содержит манифест сборки. Подобно содержанию манифест сборки содержит  Идентификатор сборки (ее имя и версию); Таблицу файлов, в которой описаны все другие файлы, образующие сборку, например, любые другие сборки, с которыми связаны *.exe-файлы или библиотеки DLL, или даже точечные рисунки или текстовые файлы; Список ссылок на сборки, который представляет собой список всех внешних зависимостей – файлов библиотек DLL или других необходимых приложению файлов, которые могли быть созданы кем-либо еще.

Поскольку сборки содержат сведения о содержимом, отслеживании версий и зависимостях, то правильность работы приложений, создаваемых с помощью VB, не зависит от значений реестра. Сборки уменьшают конфликты библиотек DLL и делают приложение более надежным и простым для развертывания.

Как нам уже известно, при создании проекта или файла и открытии редактора кода, пользователю предоставляется уже готовая часть кода, расположенная в правильном порядке. Любой код должен создаваться в следующей последовательности:

  1.  Операторы Option
  2.  Операторы Imports
  3.  Операторы Namespace и элементы уровня пространства имен

Размещение операторов в иной последовательности может вызвать ошибки компиляции.

Операторы Option и Imports уже известны.

Операторы пространства имен помогают организовывать и классифицировать элементы программирования для облегчения их группировки и доступа к ним. Оператор Namespace используется для классификации следующих операторов в определенном пространстве имен и объявляет имя пространства имен и вызывает исходный код ниже объявления для компиляции в пределах этого пространства имен:

Namespace { name | name.name }

   [ componenttypes ]

End Namespace

Где name

Обязательный. Уникальное имя пространства имен. Должно быть допустимым идентификатором Visual Basic;

       componenttypes

Дополнительный. Элементы пространства имен. В пространство имен могут входить структуры, интерфейсы, классы, модули, делегаты, другие пространства имен и прочие элементы;

       End Namespace

Завершает блок Namespace.

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

Можно использовать инструкцию Namespace только на уровне файла или пространства имен. Это означает, что контекст объявления внутри пространства имен должен быть исходным файлом или другим пространством имен и не может быть классом, структурой, модулем, интерфейсом или процедурой.

Пространства имен обрабатываются так же, как если бы они имели уровень доступа Public. К пространству имен можно обращаться из кода в том же проекте, из других проектов, которые ссылаются на проект, и из любой сборки, построенной из проекта.

Рассмотрим  поведение элементов программного кода на различных уровнях:

  1.  Уровень доступа. Элементы программирования, объявленные на уровне пространства имен (то есть имеют смысл в пространстве имен, но не внутри какого-либо другого элемента), могут иметь доступ Public или Friend. Если данный параметр не определен, по умолчанию для элемента используется уровень доступа Friend. Элементы, которые можно объявить на уровне пространства имен, включают классы, структуры, модули, интерфейсы, перечисления и делегаты.
  2.  Компиляция. Все элементы программирования, объявленные после оператора Namespace, относятся к пространству имен. Visual Basic продолжает компилировать элементы в последнем объявленном пространстве имен до тех пор, пока он не встречает оператор End Namespace или Namespace.
  3.  Добавление к пространству имен. Если пространство имен уже определено (даже за пределами проекта), к нему можно добавить элементы программирования. Для этого следует использовать оператор Namespace, чтобы дать Visual Basic команду компиляции следующих элементов в этом пространстве имен.

В следующем примере определяется схема нового универсального списка класса и она добавляется к пространству имен System.Collections.Generic.

Namespace System.Collections.Generic

   Class specialSortedList(Of T)

       Inherits List(Of T)

       ' Insert code to define the special generic list class.

   End Class

End Namespace

  1.  Корневое пространство имен.  Все имена пространства имен в проекте основаны на корневом пространстве имен. VS задает имя проекта как корневое пространство имен по умолчанию для всего кода в проекте. Например, если проект называется Payroll, его элементы программирования относятся к пространству имен Payroll. При объявлении Namespace funding полным именем пространства имен будет являться Payroll.funding.

При необходимости указать существующее пространство имен в операторе Namespace, можно установить корневое пространство имен в значение NULL. Это можно сделать на вкладке Приложение (Application)  диалогового окна My Project (рис. 5.1.3-7 и рис. 5.1.3-7). Если это не было выполнено  с базовым списком классов, компилятор VB будет обрабатывать System.Collections.Generic в качестве нового пространства имен в пределах проекта Payroll, а полным именем будет являться Payroll.System.Collections.Generic.

Кроме того можно использовать ключевое слово Global для ссылки на элементы пространства имен, определенные вне проекта. Это позволяет сохранить имя проекта в качестве корневого пространства имен. Это уменьшает вероятность случайного слияния элементов программирования с соответствующими им элементами в существующем пространстве имен.

В следующем примере объявляются два пространства имен, причем одно из них вложено в другое.

Namespace n1

   Namespace n2

       Class a

           ' Insert class definition.

       End Class

   End Namespace

End Namespace

В следующем примере выполняется обращение к классу, определенному в предыдущих примерах.

Dim instance As New n1.n2.a

 Как известно, операторы Option создают основные правила обработки программного кода, предупреждающие синтаксические и логические ошибки

Операторы Imports, импортируют в программу компоненты библиотек, определяемые в импортируемом пространстве имен.

Кроме того, в программный код проекта могут быть включены операторы описания типов данных с ключевыми словами  Dim, Private и Public, находящиеся внутри модулей или процедур; процедуры, генерируемые средой разработки внутри модулей формы; процедуры, написанные программистом, которые могут находиться  внутри любых модулей.

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

  1.  Оператор Class  
  2.  Инструкция Structure 
  3.  Оператор Module 
  4.  Оператор Interface  

Элементы данных на уровне пространства имен являются перечислениями и делегатами.

Элементы программирования уровня модуля

Процедуры, операторы, свойства и события являются единственными элементами программирования, которые могут содержать исполняемый код (то есть выполняются во время выполнения). Они являются элементами уровня модуля программы

  1.  Оператор Function  
  2.  Оператор Sub  
  3.  Оператор Declare 
  4.  Оператор Operator 
  5.  Оператор Property 
  6.  Оператор Event 

Элементами данных на уровне модуля являются переменные, константы, перечисления и делегаты.

Элементы программирования уровня процедуры

К элементам уровня процедуры относятся в основном исполняемые операторы, которые составляют код времени выполнения программы. Весь исполняемый код должен находиться в пределах некоторой процедуры (Function, Sub, Get, Set, AddHandler, RemoveHandler, RaiseEvent).

Элементы данных на уровне процедуры ограничиваются локальными переменными и константами.

По умолчанию переменные локальны внутри процедур,  т.е. переменные, которые описаны внутри процедур,  могут быть использованы и изменены только в той  процедуре, в которой они созданы (объявлены). Также можно объявить переменные в верхней части программного кода формы, до описания процедур пользователей и процедур событий, и тем самым придать переменным более широкую область видимости, распространяющуюся на всю форму. Однако, при создании в проекте нескольких форм, переменные, объявленные в верхней части формы, будут доступны только в той форме, в которой они объявлены. Точно так же, процедуры  по умолчанию объявляются как частные (Private) и являются локальными для той формы, в которой они созданы. Например, нельзя  из второй формы с именем Form2 вызвать процедуру события Button1_Click( ), если она объявлена в Form1 как Private.

Чтобы сделать переменные и процедуры доступными для всех форм и процедур проекта, их следует объявить в одном или нескольких стандартных модулях, включенных в проект. Все вышесказанное касается и модулей классов.

Таким образом, чтобы эффективно управлять элементами, используемыми на этапе разработки, например ссылками, подключениями данных, папками и файлами, в VS предусмотрены два типа контейнеров. Эти контейнеры называются решениями и проектами. Также, VS предоставляет папки решений для того, чтобы структурировать связанные проекты по группам и затем выполнять действия над этими группами проектов. Частью интегрированной среды разработки (IDE) является интерфейс для просмотра и управления этими контейнерами и связанными с ними элементами –  Обозреватель решений.

Решения и проекты содержат элементы, которые представляют ссылки, подключения к данным, папки и файлы, необходимые для создания приложения. Решение может содержать несколько проектов, тогда как проект обычно содержит несколько элементов. Эти контейнеры позволяют воспользоваться преимуществами интегрированной среды разработки, следующими способами:

  1.  возможностью управления параметрами для решения в целом или для отдельных проектов
  2.  возможностью использования Обозревателя решений для управления параметрами управлениями файлами при более тщательной работе с элементами, необходимыми для разработки приложения
  3.  возможностью добавления необходимых элементов к нескольким проектам в решении или к решению без создания ссылки на эти элементы в каждом проекте
  4.  возможностью работы с несколькими файлами, которые независимы от решений или проектов

Элементы могут представлять собой файлы и другие составляющие проекта, например ссылки, подключения к данным или папки. В Обозревателе решений элементы можно сгруппировать следующими способами:

  1.  В виде элементов проекта, которые являются элементами, составляющими данный проект, например формами, исходными файлами и классами в пределах проекта в Обозревателе решений. Группировки и отображение зависят от выбранного шаблона проекта и от внесенных изменений.
  2.  В виде элементов решения для файлов, применимых к данному решению в целом, в папке Элементы решения в Обозревателе решений.
  3.  В виде прочих файлов для файлов, не связанных с проектом или решением, которые могут отображаться в папке  Прочие файлы.


5.1.4.  Задачи для самостоятельного решения по теме  
«Стандартные модули и модульная  структура приложений в VB»

  1. В n разных  школах г. Москвы  (номера  школ известны)  проведен анонимный опрос  m   школьников 6 классов  (числа n и m известны).  Школьникам задавался вопрос,  курят ли они.  В опросе  участвовали  как мальчики, так  и девочки. Результаты  опроса поступали  неупорядоченными  по школам.   Определить школы  с    максимальным процентом курящих отдельно по мальчикам и девочкам. Предусмотреть проверку правильности  ввода   информации.
  2. Известны фамилии n сотрудников больницы (n - заданное число). Сотрудники работают по индивидуальному графику (1-й день - утро, 2-й день - вечер, 3-й день - выходной). В первое число месяца известно, в какую смену работает каждый сотрудник или имеет выходной. Составить алгоритм и программу, которые позволяют на любое заданное число месяца напечатать пронумерованный список сотрудников, имеющих выходной. Считать, что в месяце 30 дней.
  3. Известны названия m предприятий города, производящие по n наименований различных изделий, для которых известны  количества их выпуска в год. Составить алгоритм и программу, которые  по наименованию изделия определяют название предприятия, производящего максимальное количество этого изделия, а также  печатают список предприятий, на которых это изделие производится, располагая названия этих предприятий в порядке убывания объема  выпуска данного изделия.
  4. Список n рабочих цеха (n – заданное число) содержит следующие сведения о каждом: фамилия, числовой номер бригады, зарплата. Список не имеет определенной упорядоченности. Составить алгоритм и программу, которые выводят на экран списки рабочих по бригадам, располагая фамилии в порядке убывания зарплаты, и, кроме того, определяют и печатают значения средних зарплат по бригадам.
  5. Пароходство  владеет    n  пассажирскими теплоходами (n и названия теплоходов заданы),  каждый из которых   имеет   каюты люкс на 1 и 2 палубах,  первого  класса на 2 и 3 палубах,  второго класса на 3 и 4 палубах  и третьего класса на 3 и 4 палубах. На каждом из теплоходов каюта  может быть занята,  забронирована или свободна. Составить алгоритм и программу для вывода по указанному пользователем теплоходу отдельно информации о количестве свободных кают и отдельно информации о количестве забронированных кают. Информацию выдать по каждой из палуб в порядке возрастания их номеров с указанием класса кают.
  6. В течение месяца (30 дней) абоненты международной телефонной сети производили переговоры с m странами. Каждая страна имеет свой код и тариф за 1 мин.  Составить алгоритм и программу, которые печатают счета абонентам, в которых указывается телефон абонента, код страны, количество минут, стоимость каждого разговора и итог за месяц.  В общем списке абоненты представлены телефонными номерами, а для каждого разговора известна его продолжительность.
  7. В чемпионате  по футболу приняло участие n команд (названия команд известны). Составить алгоритм и программу, которые определяют 4 команды, показавшие лучшие результаты, если известен счет каждого матча. При равных условиях лучшей считается команда, у которой разность между забитыми и пропущенными мячами лучше.
  8. В течение года (12 месяцев) отслеживалось изменение курсов n  валют. Известны названия валют и их курс по отношению к рублю на последнее число каждого месяца. Составить алгоритм и программу, которые за каждый квартал определяют валюты, у которых  наблюдался наибольший и наименьший рост относительно среднего квартального курса данной валюты.

  1. Имеются сведения о доходах пяти магазинов по дням в течение одного месяца (в месяце 30 дней). Составить алгоритм и программу, которые для каждого магазина определяют числа месяца и соответствующие им дни недели с минимальным доходом, учитывая, что по субботам и воскресеньям магазины закрыты, а первое число месяца - вторник.
  2. В отделе кадров предприятия имеется список сведений о n сотрудниках. О каждом сотруднике известно: фамилия (в списке фамилии расположены  по алфавиту), номер отдела, должность, оклад и стаж работы. Составить алгоритм и программу, которые выводят списки фамилий сотрудников по отделам с указанием занимаемой должности,  оклада и стажа.
  3. Каждый из пяти цехов завода составляет ежемесячную заявку на приобретение по M разных комплектующих деталей. В заявке указаны: наименование детали, требуемое количество и завод-изготовитель (поставщик). Составить алгоритм и программу, которые выводят сводные списки заказов деталей для рассылки по поставщикам, в которых указаны наименования деталей с указанием общего количества требуемых деталей.
  4. В бюро по трудоустройству имеются сведения о N вакансиях на предприятиях города. О каждом  вакантном месте известно: название предприятия, должность, оклад, требуемое образование (высшее или среднее), предельный возраст. Составить алгоритм и программу, которые  по данным об образовании и возрасте печатают список вакансий, располагая их в порядке убывания окладов.
  5. В префектуре имеются сведения о потребностях в улучшении жилищных условий 1500 семей. О каждой семье известно, на квартиру из скольких комнат она претендует. Составить алгоритм и программу, которые печатают список семей, получивших квартиры в новом доме, и список семей, оставшихся в очереди, если известно, что в  доме 100 квартир, из которых 30 однокомнатных, 40 – двухкомнатных и 30 – трехкомнатных.
  6. Имеются сведения об урожаях зерна в  n регионах России за m лет.  Составить алгоритм и программу, которые  определяют самый урожайный и самый неурожайный годы и для каждого года печатают список регионов в порядке убывания полученного в них урожая.
  7. Список участниц конкурса красоты содержит 12 фамилий. Каждый из 200 опрошенных называет трех претенденток, и определяет каждой из них одно из первых 3-х мест. Вывести на экран фамилию участницы, набравшей наибольшее число первых мест. Если таких участниц несколько, то вывести фамилии всех участниц.     
  8. В типографии заказано n визитных карточек. Составить алгоритм и программу, которые определяют стоимость заказа, если первые 100 визиток стоят 5 руб. за штуку, а стоимость каждой последующей карточки   уменьшается соответственно на 1 коп.  
  9. Список участниц конкурса красоты содержит 12 фамилий. Каждый из 200 опрошенных называет трех претенденток и определяет каждой из них одно из первых 3-х мест. Вывести на экран фамилию участницы, набравшей наибольшее число первых мест. Если таких участниц несколько, то вывести фамилии всех участниц.   
  10. Для  каждого из  20 классов школы известно, сколько в них мальчиков и сколько девочек. Составить алгоритм и программу, которые выводят номера классов по убыванию процентного состава мальчиков и определяют процент девочек и мальчиков по школе в целом.        
  11. В доме проводится остекление окон. Количество квартир в доме и количество комнат в каждой квартире (1, 2 или 3) известно. Составить схему алгоритма и программу, которые определяют, сколько м2  стекла надо закупить и общую стоимость стекла, если в трехкомнатной квартире площадь окон составляет 10 м2, в двухкомнатной – 7 м2, в однокомнатной – 5 м2, а стоимость 1 м2 стекла 200 руб.
  12. Составить алгоритм и программу, которые выводят список фамилий школьников по убыванию их среднего балла за год, а также определяют процент отличников (все отметки 5) и процент хорошистов (отметки 5 и 4), если для каждого из 25 школьников известны итоговые оценки по 15 предметам.
  13. Объем файла, подлежащего архивации, составляет S мегабайт. При архивации объем файла уменьшается: программой ZIP – на 30%, а программой ARJ – на 25%, после чего архив разбивается на дискеты по 1,44 мегабайт. Составить алгоритм и программу, определяющую необходимое количество дискет для архивации файла заданного объема в зависимости от типа выбранной программы архивации (тип программы архивации вводится).
  14. Известны сведения о багаже авиапассажиров одного рейса (багаж характеризуется фамилией пассажира,  количеством вещей и общим весом). Составить алгоритм и программу, которые определяют средний вес багажа авиапассажира (в самолете занято n мест, но не все пассажиры имеют багаж), подсчитывают число пассажиров, у которых отсутствует багаж, и число пассажиров, у которых вес багажа превосходит средний вес, а также напечатают список фамилий пассажиров, у которых вес багажа превысил норму – S кг.
  15. Имеется n партий микросхем одного вида. Из каждой партии отобрали  m микросхем и раздали для контроля работникам отдела в произвольном порядке, которые определяли ее годность или негодность. Для того чтобы вся партия была забракована, достаточно, чтобы из m выбранных микросхем были забракованы k. Составить алгоритм и программу, которые по итогам контроля определяют количество негодных микросхем в каждой партии и количество забракованных партий.  
  16. Каждое из n швейных предприятий области специализируется на выпуске традиционных для данного предприятия m видах швейной продукции. Составить алгоритм и программу, позволяющие для каждого вида продукции определить предприятия (их номера), выпускающие данный вид  продукции.
  17. Для обслуживания международной конференции необходимо отобрать бригаду переводчиков, обладающих навыками синхронного перевода. В оргкомитет поступили предложения от М переводчиков, каждый из которых владеет двумя языками. Составить алгоритм и программу, которые производят отбор переводчиков, руководствуясь минимизацией расходуемых средств, если в бригаде обязательно должны быть по два переводчика с каждого из пяти заявленных на конференцию языков.     
  18. Ежедневно частное предприятие по быстрой доставке почты имеет n заказов, каждый заказ характеризовался стоимостью Ti и директивным сроком доставки Li. За превышения директивного срока предприятие выплачивало из стоимости заказа штраф, размеры которого линейно пропорциональны (с коэффициентом b) количеству просроченных часов. Досрочное выполнение заказа поощрялось премией в размере а% от стоимости заказа. Составить алгоритм и программу расчета дохода, полученного предприятием  за месяц, если известны реальные сроки выполнения каждого из n заказов в каждый из 30 дней месяца.
  19. Агент 007, отправляясь на задание, формирует багаж необходимых спецсредств, каждое их которых характеризуется определенной убойной силой и объемом. В целях конспирации объем дипломатического багажа ограничен. Составить алгоритм и программу, которые помогут сформировать багаж агента, т.е. производят выбор из М вариантов каждого средства то средство, которое обладает максимальной убойной силой, при этом учитывают, что суммарный объем всех выбранных средств не должен превышать заданный (S).   


  1. При производстве радиоприемника используется n наименований элементов. На складе имеется по M элементов каждого типа, каждый из которых характеризуется эффективностью, стоимостью и весом. Составить алгоритм и программу, которые позволяют выбрать самую эффективную элементную базу, вычислив при этом стоимость и вес составляющих ее элементов.    
  2. При расчете Единого социального налога (ЕСН) придерживаются следующей схемы: если сумма дохода нарастающим итогом за расчетный период не превышает  N руб., то на эту сумму начисляют k1% налога, если превышает, то на сумму N руб. начисляют k1% налога, а на сумму превышения  начисляют k2% налога(k1>k2). Составить алгоритм и программу, которые производят начисления ЕСН за год для l сотрудников предприятия, если имеются списки сотрудников с указанием сумм доходов по месяцам года, и печатают фамилии тех сотрудников, на доходы которых сумма налога превысила S руб.
  3. В театральную кассу поступило n заявок (n задано) от школ города. Каждая заявка содержит название одного спектакля и необходимое количество билетов. Составить алгоритм и программу, которые на основании этих данных определяют популярность каждого спектакля и печатают их названия в порядке убывания количества заказанных на них билетов.   
  4. Кондитерская фабрика получила заказ на изготовление l тортов. Каждый торт изготавливается из n ингредиентов. На складе имеется по m видов каждого ингредиента, которые характеризуются сортом и ценой. Составить алгоритм и программу, которые определяют общую стоимость заказа, если для его выполнения были выбраны самые дорогие ингредиенты, и печатают список выбранных ингредиентов с указанием сорта и цены, обозначив ингредиенты номерами. Стоимость изготовления одного торта S руб.
  5. Фирма по ремонту квартир получила n заказов, каждый их которых характеризуется стоимостью Ti и сроком его выполнения Li. За превышение срока выполнения стоимость заказа уменьшается на величину, пропорциональную количеству просроченных дней, а досрочное выполнение заказа поощряется премией в размере а% от стоимости заказа. Составить алгоритм и программу, которые определяют сумму, полученную фирмой за выполнение всех n заказов, если реальные сроки их выполнения известны.
  6. При установленном счетчике расхода воды тариф составляет 35 коп. за один литр. При отсутствии счетчика, плата за воду в месяц для одной семьи составляет  150 руб.  Составить алгоритм и программу, которые по известным  данным о ежедневном потреблении воды (в литрах) одной семьей за 30 дней месяца, определяют, что выгоднее – оплата по счетчику или без счетчика, а также  среднесуточный расход воды.    
  7. Для каждого из n студентов (фамилии известны)  в архиве хранятся сведения о 60 оценках, полученных им за все время обучения в институте. Составить алгоритм и программу, определяющие, имеет ли студент право получить «красный диплом», если на «красный диплом» нельзя иметь ни одной тройки, а четверок – не более 10%. Вывести на экран список фамилий студентов с указанием его средней оценки, а также список студентов, которые имеют право получить «красный диплом».       
  8. Кабельный завод выпускает N видов кабелей. Каждый вид кабеля характеризуется маркой и стоимостью его метра. К заводу обратилось M заказчиков на поставку определенного количества каждого вида кабеля. Составить алгоритм и программу, которые для каждой марки кабеля определяют общее количество заказа, а также печатают список предприятий-заказчиков с указанием суммы договора, располагая названия предприятий  в порядке убывания суммы договора.

5.1.5.  Тестовые задания по теме  

«Стандартные модули и модульная  структура приложений в VB»




 

А также другие работы, которые могут Вас заинтересовать

74196. Cloud computing: programming models 35 KB
  Cloud computing: progrmming models1 Cloud computing is computing in which lrge groups of remote servers re networked to llow centrlized dt storge nd online ccess to computer services or resources. Clouds cn be clssified s public privte or hybrid. Cloud computing relies on shring of resources to chieve coherence nd economies of scle similr to utility like the electricity grid over network. t the foundtion of cloud computing is the broder concept of converged infrstructure nd shred services.
74197. History of programming languages and tools 242.5 KB
  History of progrmming lnguges nd tools. PreHistory The first progrmming lnguges predte the modern computer. Figure 1 Punch crd Like mny firsts in history the first modern progrmming lnguge is hrd to identify. To some people the nswer depends on how much power nd humnredbility is required before the sttus of ldquo;progrmming lngugerdquo; is grnted.
74198. Evolution of programming languages and tools 56.5 KB
  The earliest practical form of programming was probably done by Jaquard (1804, France). He designed a loom that performed predefined tasks through feeding punched cards into a reading contraption.
74199. Programming paradigms 45 KB
  Progrmming prdigms. The word progrmming prdigm is used in severl different lthough relted menings in computer science. Progrmming prdigm – pttern tht serves s school of thoughts for progrmming of computers. Progrmming technique – relted to n lgorithmic ide for solving prticulr clss of problems.
74200. Imperative programming languages and tools 78 KB
  Impertive progrmming lnguges nd tools. Progrmming lnguges bsed on the impertive prdigm hve the following chrcteristics: 1 The bsic unit of bstrction is the PROCEDURE whose bsic structure is sequence of sttements tht re executed in succession bstrcting the wy tht the progrm counter is incremented so s to proceed through series of mchine instructions residing in sequentil hrdwre memory cells. Typiclly given vrible my ssume mny different vlues of the course of the execution of progrm just s hrdwre memory cell my contin mny different vlues.1...
74201. Imperative programming languages and tools 56.5 KB
  LGOL gretly influenced mny other lnguges – its mjor contribution is being the root of the tree tht gve rise to mny other progrmming lnguges including BCPL B Pscl PL I Simul C C nd Jv. Niklus Wirth bsed his own LGOL W on LGOL 60 before developing Pscl. This led to the doption of smller nd more compct lnguges such s Pscl...
74202. Functional programming languages and tools 55 KB
  Functional programming languages (FPL) were originally developed specifically to handle symbolic computation and list-processing applications. In FPLs the programmer is concerned only with functionality, not with memory-related variable storage and assignment sequences.
74203. Сылақ және майлау жұмыстарына арналған машиналар 717.44 KB
  Сылақ станциялары мен агрегаттары және қол ысқылауыштарының атқаратын қызметі негізгі параметрлері және қолданылу облысы. Жылжымалы сылау агрегаттары. Еден асты негіздерін дайындауға және шатыр мен гидроизоляциялауға арналған машиналар құрылымы мен жұмысы Жоспар: Сылақ станциялары мен агрегаттары және қол ысқылауыштарының атқаратын қызметі.
74204. Жер жұмыстарына арналған машиналар туралы жалпы мағлұматтар 147.63 KB
  Жұмысшы органдары мен топырақпен өзара әсерлесуі. Топырақтардың физикамеханикалық сипаттамасы Жоспар: Жер жұмыстарына арналған машиналар туралы жалпы мағлұматтар. Жұмысшы органдары мен топырақпен өзара әсерлесуі. Топырақтардың физикамеханикалық сипаттамасы.