Тема 3. программирование алгоритмов линейной структуры. создание классов и объектов.
Вопросы (задачи), подлежащие исследованию:
Ø Понятие объектно-ориентированного программирования;
Ø Создание классов, их методы и свойства;
Ø Создавать в классе новый метод;
Ø Создавать в классе новое свойство.
В последнее время становится необходимым при создании практических программ умение понимать и использовать технику объектно-ориентированного программирования (ООП). Изменения, связанные с ООП, набирают силу: в последних версиях Visual Basic2010 и Visual Basic 2010 перестали отставать от языка C++, поскольку теперь они также поддерживают наследования – механизм, при котором один класс дает возможность приобрести интерфейс и поведение другого класса.
Классы являются стандартными блоками в программах Visual Basic. При изучении классов имеется потенциальная опасность непонимания из-за перегрузки терминологии, вместе с тем в данной работе рассматривается материал, в котором предпринимается попытка свести к минимуму эти трудности.
Классв Visual Basic 2010 – это представление или описание, которое определяет структуру какой-либо сущности реального мира. Класс является кодом, определяющим объектом; используя класс, можно создать любое количество объектов, которое называются экземплярами(instance) класса.
Объект– это код, создаваемый на основе абстракций рассматриваемой сущности. Это могут быть существующие процессы или явления, или любые технические системы или отношения, определяющие их поведение. Например, объектом может быть Лектор созданный на основе реального лектора, такого как преподаватель Морского университета, или объектом может быть Файл, представляющий файл C:\bd.mdb на жестком диске компьютера.
Visual Basic 2012 поддерживает все четыре основные определяющие концепции, при которых язык остановится полностью объектно- ориентированным.
Абстракция– метод решения задачи, при котором объекты разного рода объединяются общим понятием, а затем рассматриваются как элементы единой категории. Абстракция – это возможность языка создавать код какого либо понятия в виде «черного ящика» для реализации этого понятия внутри программы. Например, можно создать объект Customer («Клиент»), который будет являться абстрактным представление клиентов реального мира.
Инкапсуляция– техника, при которой несущественная с точки зрения интерфейса объекта информация прячется внутри него. Основная идея инкапсуляции состоит разделении интерфейса и реализации, т. е. можно создавать интерфейс (методы, свойства, события в классе), и пока этот интерфейс существует, приложение может взаимодействовать с объектами. Это будет выполняться, даже если полностью переписать код внутри какого то метода – таким образом, интерфейс не зависит от реализации.
Полиморфизм– свойство, позволяющее использовать один и тот же интерфейс для различных действий; полиморфной переменой, например, может соответствовать несколько различных методов.
Наследованиепредставляет собой идею, что любой класс может получить интерфейс и поведение созданного ранее класса.
В предыдущих работах под словом «интерфейс» понимался графический интерфейс однако этот термин имеет более широкое значение. Интерфейсопределяется как множество методов (Sub-или Function-процедур), свойств (Property-процедур), событий полей, которые объявлены как Public.
Например, имеется следующий код некоторого класса:
Public Function Routine () As Single
End Function,
Этот метод объявлен с помощью ключевого слова Public, поэтому является частью интерфейса и может быть назван приложением, использующим объект этого класса.
Если же методы или свойства объявлены как Private, они не будут частью интерфейса и не смогут вызываться программами, написанными для использования какого либо объекта; например, метод Schedule () может быть вызван только в коде класса, где он объявлен
Private Sub Schedule ()
…
End Sub
В тоже время можно создать еще один метод Routine ():
Public Sub Routine ()
Schedule ()
End Sub,
который позволит вызывать метод Schedule () за пределами класса, где он объявлен. В этом случае удается вызвать Private метод Schedule () изнутри Public метода.
Код внутри метода называется реализацией (implementation).
Интерфейс используется для доступа к данным и поведению объекта. Клиентское приложение можно рассматривать как объект, подобный черному ящику, с доступом к нему только через интерфейс. Это ключевая идея объектно-ориентированной концепции, и именно ее называют инкапсуляцией. Идея состоит в том, что любая программа, которая использует данный объект, не будет иметь прямого доступа к его поведению или данным; более точно можно сказать, что программа скорее имеет возможность использовать интерфейс этого объекта.
Инкапсуляцией является синтаксическим инструментом – она дает возможность коду выполняться без изменений. Однако это не семантика, означающая, что если код работает, то это обязательно нужно.
Важной частью объекта является его данным. Каждый экземпляр класса является абсолютно идентичным с точки зрения его реализации; единственное, что может изменяться – это данные внутри этого конкретного объекта.
Поляявляются переменными, которые объявляются с тем, чтобы они были доступными всем кодам в пределах класса. Они будут доступными для каждого индивидуального объекта, при запуске приложения. Каждый объект получают собственный набор данных - в основном, каждый объект получает собственную копию из полей.
При создании новой формы в проекте Visual Basic 2010 всегда создается класс (Public Class Form 1), определяющий внешний вид этой формы. Начинающие пользователи обычно и используют этот класс формы (или нескольких форм) для написания в нем своих процедур. Однако, как правило, это всего лишь имитация объектно-ориентированного программирования, поскольку в этом случае не продумываются ни назначение объектов, ни их поведение. Такое программирование не в состоянии учитывать и динамические свойства решаемой задачи, т. Е. такой проект имеет все те недостатки, для преодоления которых и была разработана методология объектно – ориентированного программирования. Фактически в таком проекте объектно – ориентированный язык применяется как традиционный процедурный язык, с той только разницей, что используется графический интерфейс Visual Studio, но этого совершенно недостаточно, чтобы реализовать все возможности современной технологии программирования.
Создание собственного класса.Классы в Visual Basic. NET объявляются в файл *.vb (в одном файле может быть более одного класса). Синтаксис объявления класса:
Public ClassИмя Класса
Переменные класса
Свойства класса
Методы класса
События класса
End Class
Кроме ключевого слова Public иногда применяются и другие модификаторы доступа элементам класса, такие как Private, Protected или Friend.
Рассмотрим, например, следующий код класса mClass:
Public Class mClass
Private fox As String
Private fox1 As Integer
End Class
Здесь объявлены две закрытые (Private) переменных Fox и Fox 1, при этом Fox имеет символьный тип, а Fox 1является числовой переменной целого типа.
Можно управлять зоной видимости поля с помощью следующих ключевых слов:
● Private – доступно только для кода внутри класса;
● Friend – доступно только коду в рамках проекта;
● Protected – доступно только классам, наследующим другие классы;
● Public – для кода вне класса и любых проектов, которые ссылаются на сборки.
В большинстве случаев поля объявляются с помощью ключевого слова Propert тогда они доступны только для кода в пределах каждого экземпляра класса. Другую видимость поля надо выбирать очень аккуратно, поскольку она позволяет коду за пределами класса непосредственно взаимодействовать с любыми переменами, а это означает, что значение переменной может измениться, но код класса не будет знать об этих изменениях.
Не следует путать поля со свойствами (Property). В Visual Basic 2010 Property представляет собой метод, направленный на получение и установку значений, тогда как поля– это переменные внутри класса, которые могут содержать значения, объявленные как свойства.
Если необходимо, чтобы значение поля было доступно за пределами объекта, тогда надо использовать свойство,например:
Public Class mClass
Private Fox As String
Private Fox 1 As Integer
Public Property Name ( ) As String
Get
Return fox
End Get
Set (BuVal Value AS String)
Fox=Value
End Set
End Property
End Class ……………….
Внутри тела свойства используются специальные процедура Get..
ЛАБОРАТОРНАЯ РАБОТА №3
Продолжительность 1,5 часа
Цельюработы является освоение техники объектно-ориентированного программирования.
Вопросы, которые должны быть изучены:
1. Что такое класс?
2. Для чего следует использовать закрытые переменные в классе?
3. Что такое свойство класса и как оно создаётся?
4. Что такое метод класса и способ создания нового метода?
5. Как объявить переменную объекта при использовании класса?
6. Как установить свойства для переменного объекта?
7. В чём разница между ключевыми словами Private и Public?
8. Как наилучшим способом сохранить внутреннее значение свойства класса?
Задание
1. Выбрать вариант индивидуального задания из таблицы 3.
2. Написать код программы для этого задания.
3. Запустить Visual Studio 2012. В меню Visual Studio File щёлкнуть New Project.
4. В окне New Project выбрать шаблон Windows Application.
5. В поле Name ввести lab2 и нажать кнопку ОК. Открывается новый проект.
6. Из области элементов (Toolbox) перенести на форму необходимые для выполнения работы кнопки, метки и текстовые поля.
7. Выбрать команду Add New Item (Добавить новый элемент) в меню Project. Откроется диалоговое окно.
8. Выбрать шаблон Class. Имя по умолчанию Class1.vb. Щёлкнуть на кнопке Add. Класс отображается в редакторе кода. Объявить переменные класса, создать свойства и метод.
9. Дважды щёлкнуть Button1, чтобы открыть редактор кода. Создать объект на основе нового класса и, наконец, создать код для индивидуального задания.
10. В меню Debug интегрированной среды разработки Visual Basic 2012 нажать кнопку Start Debugging.
11. Получить результаты на компьютере.
12. Проверить правильность результатов.
13. Составить отчёт о проделанной работе.
Индивидуальное задание
Создать проект для реализации алгоритма с простой линейной структурой. Интерфейс пользователя должен включать форму со следующими элементами:
1) Panel;
2) элементы управления Button;
3) элементы управления Label;
4) Элементы управления TextBox.
Программная часть должна иметь класс и объект на основе класса. Хороший стиль программирования подразумевает объявление переменных в классе как Private, например:
Private p As Single
В этом случае переменная p будет недоступна для изменений вне класса.
Необходимо также создать свойство класса, используя процедуру Property. Объявление процедуры свойства является аналогичным объявлению стандартной процедуры, но с некоторыми различиями. Первое слово в объявлении процедуры свойства просто назначает область видимости свойства (обычно Private или Public). Свойства, объявленные как Public, доступны для кода вне класса.
После создания свойства надо запрограммировать методы и объявить объективные переменные для использования класса.
Таблица 3 Задание
С любой квадратной матрицей порядка 2 , элементы, которой вещественные числа, можно связать вещественное число которое называется определителем матрицы. Создать класс для вычисления определителя порядка 2 и проверить следующее свойство определителей = | |
Пусть точки , , - координаты вершины треугольника. Создать класс для определения его площади по формуле , где в правой части формулы записан определитель порядка 2. | |
С матрицей порядка 3 свяжем вещественное число , которое называется её определителем (разложением матрицы по первой строке). Используя класс для вычисления определителя порядка 2 и данное разложение, найти значение определителя порядка 3. | |
С матрицей порядка 3 свяжем вещественное число , которое называется её определителем (разложением матрицы по второй строке). Используя класс для вычисления определителя порядка 2 и данное разложение, найти значение определителя порядка 3. | |
Для матрицы из задачи 4 можно написать выражение . Оно называется разложением матрицы по второму столбцу. Используя класс для вычисления матрицы порядка 2 и данное разложение, вычислить определитель матрицы порядка 3. | |
Для матриц из задачи 4 можно также написать выражение . Оно называется разложением матрицы по первому столбцу. Используя класс для вычисления матрицы порядка 2 и данное разложение, вычислить определитель матрицы порядка 3. | |
Пусть и корни квадратного уравнения , . Тогда сумма корней , а произведение корней Создать класс для определения суммы и произведения корней. Кроме того, найти корни с помощью формулы . Найти сумму и произведение этих значений и сравнить результаты. | |
Создать класс для определения расстояния d от точки до прямой Ax+By+C=0, где d равно абсолютной величине Отобразить в текстовом окне расстояние от точки (-2;4) до прямой 4х-7у+2=0. | |
Создать класс для определения координат (х; у) точки пересечения двух прямых и при . Для этого необходимо решить систему двух уравнений (приравняв их друг к другу). | |
Создать класс для нахождения площади окружности . Используя этот класс, найти площадь кольца с внутренним и внешним ресурсами . | |
Даны длины сторон треугольника a, b, c. Создать класс для определения его по площади по формуле Герона , где . Найти значение радиуса описанной окружности и значение радиуса вписанной в него окружности . | |
Даны два вектора, определяемые их координатами и . Создать класс для определения их длины найти их скалярное произведение . Длина вектора d выражается через его координаты как . | |
Создать класс для определения скалярного произведения двух векторов , где d длина вектора (см. предыдущую задачу) и угол должен быть введён в текстовое поле. | |
Создать класс, содержащий числитель и знаменатель простой дроби, и найти сумму двух дробей . | |
Создать класс, содержащий числитель и знаменатель простой дроби, и найти разность двух дробей . | |
Создать класс, содержащий числитель и знаменатель простой дроби, и использовать его для определения значения простой дроби . | |
Создать класс для определения алгебраической формы комплексного числа z = a + bi. Использовать этот класс для определения суммы двух комплексных чисел . | |
Создать класс для определения алгебраической формы комплексного числа z = a + bi. Используя его, вычесть из : . Пример. Вычесть (2 + i) из (6 – 5i) Решение: (6 – 5i) – (2 + i) = (6 – 2) + (- 5 – 1) = 4 – 6i или (6 – 5i) – ( 2 + 1) = (6i) – 5 + ( - 2 – i) = (6 – 2) + ( - 5 – 1) i = 4 – 6i. | |
Создать класс для определения алгебраической формы комплексного числа z = a + bi. Используя этот класс для поиска произведения двух комплексных чисел . | |
Создать класс с определение алгебраической формы комплексного числа z = a + bi. Использовать его для деления комплексных чисел . Пример. Разделите 5 – 5i на – 1 +3i Решение: . | |
Выпуклый пятиугольник задан координатами его вершин. Используя класс из задачи 2, найти площадь этого пятиугольника. | |
Трапеция задана координатами её вершин. Используя класс из задачи 2, найти её площадь. |
Содержание отчёта
1. Название отчёта.
2. Титульный лист.
3. Индивидуальное задание.
4. Класс и программы, которые использованы в проекте.
5. Форма проекта с элементами управления.
6. Результаты выполнения приложения.
7. Доказательство правильности работы программы.
ПРИМЕР ВЫПОЛНЕНИЯ ИНДИВИДУАЛЬНОГО ЗАДАНИЯ
Задание на разработку проекта.Создать проект для решения следующей задачи:
Создать класс для определения расстояния между двумя точками плоскости заданными своими координатами. Ввести координаты треугольника и рассчитать его периметр.
РЕШЕНИЕ
1. Создать новый проект.
2. Создать графический интерфейс пользователя.
3. Установить свойства элементов управления.
4. Создать базовый класс.
5. Написать программный код.
6. Запустить Visual Basic 2010 и получить результаты.
7. Выполнить анализ результатов.
Для решения задачи надо найти длины всех сторон треугольника, используя формулу определения расстояния d между двумя точками плоскости и :
Для этого создадим класс distanceClassсо свойством d1,которое будем использовать для передачи длины каждой стороны в программу, и методом length(), реализующим указанную формулу.
Создадим для класса distanceClass объект с именем distance.Чтобы обратиться к свойствам класса, надо указать имя объекта и через точку – имя свойства, т.е. distance.dl.Для обращения к методу класса с именем lengthнадо также указать имя объекта и через точку – имя метода с перечисление всех его параметров, заключённые в круглые скобки: distance.length(x1,y1,x2,y2). Для разработки проекта нужно нажать кнопку File вменю и New Project, а за тем выбрать Windows From Appliсation, и присвоить ему имя tab3.
Нажать за тем команду Project и выбрать Add Class (добавить класс). Диалоговое окно Add New Item (добавление нового элемента) предоставляет возможность изменить имя класса по умолчанию. Пусть это новое имя будет distanceCiass.vb; и его надо напечатать в поле имени и нажать кнопку Add (добавить). Visual Studio откроет пустой класс в Редакторе кода. После этого надо объявлять переменную класса
Private d As Single
Переменная d является закрытой, и чтобы получить ее за пределами класса вводиться свойство d1() для передачи значения расстояния в основную программу:
Public Property d1() As String
Get
Return d
End Get
Set(ByVal value As String)
d=value
End Set
End Property
Затем надо написать код метода, позволяющего находить расстояние между точками X(a, b) и Y(a1, b1):
Public Sub Length(ByRef a As Single, ByRef As Single, ByRef al As single, ByRef bl As Single)
End Sub
Блок схема алгоритма для процедуры Sub Button_Click изображена на рисунке 1.
Создание объектаdistance Для класса distanceClass |
Ввод координат вершин треугольника |
Вывод координат в текстовые окна |
Вызов метода length() |
Определение текста |
Отображение результатов |
exit |
Рисунок 5
При разработке проекта следует использовать графический пользовательский интерфейс, представленный на рисунке 6.
Рисунок 6 – Графический пользовательский интерфейс
В таблице 4 приведены элементы управления, используемые в форме на рисунке 6.
Объект | Свойство | Параметр |
Panel | Dock | Вверх |
Button1 | Text | “Ввод координат вершин треугольника и расчёт его периметра” |
Button2 | Text | “Выход” |
Label1 | Text Dock | “x1” |
Label2 | Text | “y1” |
Label3 | Text | “x2” |
Label4 | Text | “y2” |
Label5 | Text | “x3” |
Label6 | Text | “y3” |
Label7 | Text | “периметр=” |
Label8 | Text | “координаты вершин треугольника” |
TextBox1 | Multiline Dock | True Right |
TextBox2 | Multiline | False |
TextBox3 | Multiline | False |
TextBox4 | Multiline | False |
TextBox5 | Multiline | False |
TextBox6 | Multiline | False |
TextBox7 | Multiline | False |
Form1 | Font Text | Лабораторная работа №2. Создание собственного базового класса. |
Программы на Visual Basic 2012. Класс distanceClass включает в себя закрытую переменную d, свойства d1() b метод length(). В редакторе кода distanceClass выглядит следующим образом (рисунок 7).
Рисунок 7 – Диалоговое окно редактора кода distanceClass
Программа для элементов управления Button1 и Button2 представлены на рисунке 8.
Рисунок 8 – Диалоговое окно редактора кода Button1 и Button2
Результат работы приложения показан на рисунке
Рисунок 9 – Результаты работы
СОДЕРЖАНИЕ ОТЧЁТА.
8. Название отчёта.
9. Титульный лист.
10. Индивидуальное задание.
11. Запись математической формулы на языке Visual Basic 2012.
12. Форма проекта с элементами управления.
13. Результаты выполнения приложения.
Доказательство правильности работы программы.