- •Лабораторная работа n 1 Знакомство со средой разработки Visual Basic
- •Лабораторная работа n 2 Знакомство со средой разработки Visual Basic
- •Лабораторная работа n 3 Ввод и вывод данных
- •Вопрос 32,
- •Лабораторная работа n 4. Константы и переменные. Оператор присваивания. Типы данных. Диапазон действия переменных и констант.
- •Лабораторная работа n 5. Стандартные функции vb. Операции. Выражения.
- •Лабораторная работа n 6 Логический тип данных. Операторы выбора. Оператор перехода.
- •Оператор множественного выбора
- •Оператор перехода
- •Лабораторная работа n 7. Циклы
- •Лабораторная работа n 8. Массивы
- •Лабораторная работа n 9. Процедуры и функции
- •Лабораторная работа n 10.
- •Фокус ввода.
- •Обработка событий, связанных с клавиатурой и мышью
- •Технология drag -and-drop.
- •Лабораторная работа n 11. Структуры. Файлы.
- •Последовательные файлы
- •Файлы произвольного (прямого) доступа.
- •Практическое занятие
- •Практическое занятие
- •Лабораторная работа n 12 Программирование графики
- •Практическое занятие
- •Лабораторная работа n 13 Разработка пользовательских объектов Практическое занятие
- •Лабораторная работа n 13 Классы.
Практическое занятие
Задание 1. Построить в окне формы график функции y = e-pxsin(kx+) на отрезке [a,b].
Задание 2. Построить в окнах рисунков графики функций y= sin(1/x) и y = sin(x2), –10<=x<=10.
Задание 3. Построить в окне формы графики функций y= e-xsin(x) и y= e-xcos(x), 0<= x<=10.
Указание. Во всех заданиях предусмотреть возможность нахождения значения функции для заданного значения аргумента.
Лабораторная работа n 13 Разработка пользовательских объектов Практическое занятие
Задание 1. Создать модуль класса. Присвоить ему имя. Задать свойства класса, определив соответствующие переменные. Задать метод для отображения объекта. Задать метод, определяющий функциональность класса, например, вычисление некоторого значения.
Создать MDI-форму, на которой будут помещаться все создаваемые объекты. Эта форма - стартовая.
Создать форму, которая будет являться шаблоном для визуального отображения объектов. Разместить на форме две командные кнопки и текстовое окно. Эта форма должна быть дочерней для MDI-формы.
В процедуре загрузки MDI – формы создать два объекта класса, задав значения соответствующих свойств.
Проект должен работать следующим образом. При нажатии первой кнопки вызывается функциональный метод, результат отражается в текстовом окне, при нажатии второй кнопки создается новый объект с индивидуальным именем, позицией и размерами.
Задание 2. Создать в предыдущем проекте набор объектов и дополнить его процедурой, которая выполняется при двойном щелчке на MDI – форме. В результате выполнения процедуры объекты должны менять цвет. Использовать процедуры считывания и изменения свойств.
Лабораторная работа n 13 Классы.
Люди, животные, деревья, машины, самолеты, компьютеры и т.д. - мир объектов, в котором мы живем.
Классы – это группы связанных объектов. Класс определяет общий формат своих объектов, является описанием объекта. Объект является конкретным представителем (экземпляром) определенного класса. Свойства, действия и события, доступные объекту, зависят от его класса.
Языки процедурного программирования концентрировали внимание на действиях (глаголах), а не на вещах или объектах (именах существительных). С появлением объектно-ориентированных языков появилась возможность писать программы способом, отражающим естественное восприятие окружающего нас мира и повышающим производительность написания программ.
Объектная технология – это схема компоновки, помогающая создавать осмысленные программные единицы, которые сфокусированы на определенных прикладных областях. Почти любое имя существительное может быть представлено как программный объект. Объекты имеют свойства (атрибуты) и выполняют действия, то есть проявляют поведение и генерируют события.
Классы в программе – это определяемые программистом типы. Каждый класс содержит данные и набор методов, манипулирующих этими данными. Компоненты-данные класса, или данные-члены класса называются переменными экземпляра, или переменными-членами класса. Подобно тому, как экземпляр встроенного типа (например, Integer) называется переменной, экземпляр определенного пользователем типа (т.е. класса) называется объектом.
Основными понятиями объектно-ориентированного программирования (ООП) являются инкапсуляция, наследование и полиморфизм.
Инкапсуляция (лат. in в + capsula ящичек) – образование оболочки (капсулы) вокруг чуждых для организма инородных тел. В объектно-ориентированном программировании инкапсуляция означает объединение в классе данных и методов и защита их от внешнего вмешательства или неправильного использования. Каждый класс должен предоставлять некий самодостаточный (по возможности) функционал, и при этом все детали реализации должны быть скрыты внутри класса.
Наследование – это способ повторного использования программного обеспечения, при котором классы создаются путем заимствования данных и поведения уже существующих классов и обогащения этих классов новыми возможностями. Иначе говоря, наследование заключается в том, что функционал базового (родительского) класса может быть использован в производном (дочернем) классе.
Полиморфизм представляет собой способность к изменению функционала, унаследованного от базового класса.
Пример разработки обьектно-ориентированного приложения.
Программы Visual Basic хранятся в программных модулях трех видов: модуль формы, стандартный модуль и модуль класса. Простое приложение содержит, как правило, только модуль формы. Повторяющиеся процедуры, выполняемые в нескольких модулях формы можно объединить в отдельный программный код, который будет являться общим для всех. Такой программный код называется стандартным модулем. При использовании классов создаются модули классов.
Рассмотрим приложение, предназначенное для представления вводимого значения времени в универсальном и стандартном форматах.
Приложение состоит из модуля формы, модуля класса CTime и стандартного модуля modTimeTest.
На форме располагаются командная кнопка и текстовое окно. Текстовое окно служит для ввода времени, кнопка служит для запуска приложения, в соответствующей процедуре находится вызов метода Main().
Модуль формы предлагается разработать самостоятельно.
Прежде чем писать код для двух других модулей, их необходимо включить в проект.
Для того чтобы добавить в проект модуль класса, нужно выбрать пункт меню Project и затем – Add Class. Указать имя класса. Оно появится в Solution Explorer.
Добавление модуля происходит аналогично.
Класс CTime содержит информацию, необходимую для представления задаваемого времени в универсальном и стандартном форматах.
В модуле modTimeTest расположен метод Main, использующий экземпляр класса CTime для выполнения приложения.
Public Class CTime
'Класс CTime наследует класс Object из пространства имен System, на это указывает 'следующая инструкция. Вообще говоря, ее можно не включать– это сделает компилятор VB.
Inherits Object
'закрытые(недоступные из других модулей) члены класса,объявляются с модификатором 'доступа Private
Private mHour As Integer
Private mMinute As Integer
Private mSecond As Integer
'конструктор класса, специальный метод с именем New. Вызывается при создании экземпляра класса. Служит для инициализации переменных экземпляра класса( в нашем 'случае - нулевыми значениями). Объявлен с модификатором доступа Public – открытый 'член класса, доступный из любого модуля;
Public Sub New()
SetTime(0, 0, 0)
End Sub 'New
'метод SetTime получает значения в универсальном формате времени;
'проверяет допустимость данных; устанавливает недопустимые значения в нуль
Public Sub SetTime(ByVal hourValue As Integer, ByVal minuteValue As Integer, _
ByVal secondValue As Integer)
'установка часов
If (hourValue >= 0 And hourValue < 24) Then
mHour = hourValue
Else
mHour = 0
End If
'установка минут
If (minuteValue >= 0 And minuteValue <= 60) Then
mMinute = minuteValue
Else
mMinute = 0
End If
'установка секунд
If (secondValue >= 0 And secondValue <= 60) Then
mSecond = secondValue
Else
mSecond = 0
End If
End Sub
'преобразовать String в универсальный формат времени
Public Function ToUniversalString() As String
Return String.Format("{0}:{1:D2}:{2:D2}", mHour, mMinute, mSecond)
End Function 'ToUniversalString
'преобразовать String в стандартный формат времени
Public Function ToStandardString() As String
Dim Suffix As String = "PM"
Dim Format As String = "{0}:{1:D2}:{2:D2}"
Dim StandardHour As Integer
'определить, является ли время AM или PM
If mHour < 12 Then
Suffix = "AM"
End If
'преобразовать универсальный формат времени в стандартный
If (mHour = 12 Or mHour = 0) Then
StandardHour = 12
Else
StandardHour = mHour Mod 12
End If
Return String.Format(Format, StandardHour, mMinute, mSecond) & Suffix
End Function 'ToStandardString
End Class 'CTime
Imports System.Windows.Forms
Module modTimeTest
'демонстрация класса Ctime
Sub Main()
'создается экземпляр класса (объект), вызывается конструктор Ctime
Dim time As New CTime()
Dim output As String
output = "универсальное время по умолчанию: " & time.ToUniversalString() & vbCrLf & _ "стандартное время по умолчанию: " & time.ToStandardString()
Dim mH As Integer
Dim mM As Integer
Dim mS As Integer
Dim mHMS As String
'установка значений часов, минут, секунд по значению времени,заданному в формате '“чч:мм:сс”
mHMS = Form1.TextBox1.Text
mH = Val(Mid(mHMS, 1, 2))
mM = Val(Mid(mHMS, 4, 2))
mS = Val(Mid(mHMS, 7, 2))
time.SetTime(mH, mM, mS)
'проверка допустимости значений времени
If mH < 0 Or mH > 24 Or mM < 0 Or mM > 60 Or mS < 0 _
Or mS > 60 Then
output &= vbCrLf & vbCrLf & "неверная установка " & vbCrLf & _ "универсальное время : " & time.ToUniversalString() & vbCrLf & _
"стандартное время : " & time.ToStandardString()
Else
output &= vbCrLf & vbCrLf & "универсальное время : " & _
time.ToUniversalString() & vbCrLf & _
"стандартное время : " & time.ToStandardString()
End If
MessageBox.Show(output, "Testing Class Ctime")
End Sub 'Main
End Module 'modTimeTest
Свойства класса. Значения закрытых переменных (часы, минуты, секунды) экземпляра класса (объекта) time передаются в класс CTime с помощью открытого метода SetTime(). Эти значения являются параметрами метода. При этом исключена возможность работы с отдельными переменными mHour, mMinute, mSecond, т.е. нельзя установить (присвоить значение) и получить значение каждой из названных переменных.
Свойства класса позволяют решить проблему.
Установка необходимых значений элементов объекта происходит с помощью аксессора Set, получение – с помощью аксессора Get. Пусть в пользовательской программе создан экземпляр класса с именем time, тогда при выполнении оператора x=time.hour ’’работает’’ аксессор Get и переменная x получает значение time.hour; при передаче значений экземпляру класса путем вызова метода SetTime() ”работает” аксессор Set и переменная time.hour получает соответствующее значение.
Наследование. Наследование (Inheritance) позволяет использовать закрытые переменные некоторого класса в другом классе. В этом случае первый класс называется базовым, второй - наследуемым (производным). Важным является то, что наследуемый класс расширяет возможности базового класса за счет новых членов (переменных, методов, свойств, событий).
Модифицируем предыдущее приложение следующим образом. Класс CTime сделаем базовым и назовем его CTimeBase. Создадим наследуемый класс с названием CTimeDerived. Для того, чтобы показать, что этот класс является производным от класса CTimeBase, после заголовка класса CTimeDerived напишем Inherits CTimeBase. Закрытые переменные базового класса объявим как защищенные (Protected). Введем закрытую переменную addSecond и метод (функцию) remTime() для вычисления количества секунд, остающихся до конца указанного часа.
В базовом классе создадим свойства mHour, mMinute, mSecond, используя методы SetTime(), Property Hour(), Property Minute(),Property Second().
'Базовый класс CTimeBase преобразует введенное значение времени
'в универсальный и стандартный форматы,
'вычисляет количество секунд,оставшихся до конца часа
Public Class CTimeBase
Inherits Object ' Класс CTime наследует класс Object из пространства имен System
Private mTime As String ' закрытый член класса
Private mT As Integer
Protected mHour As Integer 'защищенные члены класса,
Protected mMinute As Integer 'доступные
Protected mSecond As Integer 'в наследуемом классе
Public Sub New() 'конструктор класса,
SetTime(0, 0, 0) 'инициализирует переменные экземпляра
End Sub 'New 'нулевыми(значениями)
'установка свойств класса (методы SetTime()),
'Property Hour(),Property Minute(),Property Second())
'установка недопустимых значений в нуль;
Public Sub SetTime(ByVal hourValue As Integer, ByVal minuteValue As Integer, _
ByVal secondValue As Integer)
Hour = hourValue
Minute = minuteValue
Second = secondValue
End Sub
Public Property Hour() As Integer 'свойство Hour
'возвращает значение mHour
Get
Return mHour
End Get
'устанавливает значение mHour
Set(ByVal value As Integer)
If (value >= 0 And value < 24) Then
mHour = value
Else
mHour = 0
End If
End Set
End Property
Public Property Minute() As Integer 'свойство Minute
'возвращает значение mMinute
Get
Return mMinute
End Get
'устанавливает значение mMinute
Set(ByVal value As Integer)
If (value >= 0 And value <= 60) Then
mMinute = value
Else
mMinute = 0
End If
End Set
End Property
Public Property Second() As Integer 'свойство Second
'возвращает значение mSecond
Get
Return mSecond
End Get
'устанавливает значение mSecond
Set(ByVal value As Integer)
If (value >= 0 And value <= 60) Then
mSecond = value
Else
mSecond = 0
End If
End Set
End Property
'вычислить количество секунд,оставшихся до конца часа
Public Function remTime() As String
mTime = (60 - mMinute) * 60 - mSecond
Return mTime
End Function
'преобразовать String в универсальный формат времени
Public Function ToUniversalString() As String
Return String.Format("{0}:{1:D2}:{2:D2}", mHour, mMinute, mSecond)
End Function 'ToUniversalString
'преобразовать String в стандартный формат времени
Public Function ToStandardString() As String
Dim Suffix As String = "PM"
Dim Format As String = "{0}:{1:D2}:{2:D2}"
Dim StandardHour As Integer
'определить, является ли время AM или PM
If mHour < 12 Then
Suffix = "AM"
End If
'преобразовать универсальный формат времени в стандартный
If (mHour = 12 Or mHour = 0) Then
StandardHour = 12
Else
StandardHour = mHour Mod 12
End If
Return String.Format(Format, StandardHour, mMinute, mSecond) & Suffix
End Function 'ToStandardString
End Class
'наследуемый класс позволяет увеличить указанное время на некоторое количество секунд
Public Class CTimeDerived
Inherits CTimeBase ' CTimeDerived наследует от CTimeBase
Private addSecond As Integer 'закрытая переменная наследуемого класса
'добавить несколько секунд (меньше 60 )
Public Sub AddS(ByVal addSecond As Integer)
Dim Stroka As String = ""
Dim Sec As Integer
addSecond = addSecond Mod 60
Sec = (mSecond + addSecond)
mSecond = (mSecond + addSecond) Mod 60 'выделить количество секунд
'меньше одной минуты,
'добавление одной минуты, если 60 секунд истекли
If (Sec - 60) >= 0 Then
mMinute = (mMinute + 1) Mod 60
'добавление одного часа, если 60 минут истекли
If mMinute = 0 Then
mHour = (mHour + 1) Mod 24
End If
End If
End Sub
End Class
'Тестирование классов
Public Class TestCTime
Dim time As New CTimeBase
Dim timeN As New CTimeDerived
Dim adds As Integer
Dim Stroka As String = ""
Dim mH As Integer
Dim mM As Integer
Dim mS As Integer
'выделить из строкового представления времени часы, минуты, секунды
Sub InvString(ByRef Stroka As String)
Dim output As String = ""
mH = Val(Mid(Stroka, 1, 2))
mM = Val(Mid(Stroka, 4, 2))
mS = Val(Mid(Stroka, 7, 2))
time.SetTime(mH, mM, mS)
If mH < 0 Or mH > 24 Or mM < 0 Or mM > 60 Or mS < 0 Or mS > 60 Then
'установка недопустимых значений для времени
output &= vbCrLf & vbCrLf & "неверная установка " & vbCrLf & "универсальное время : " & time.ToUniversalString() & vbCrLf & _
"стандартное время : " & time.ToStandardString()
MessageBox.Show(output, "тест", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
End Sub
'вывести результаты
Sub UpdateDisplay()
txtUniversalTime.Text = time.ToUniversalString()
txtStandardTime.Text = time.ToStandardString()
txtRemTimeString.Text = time.remTime()
End Sub
'добавить секунды
Private Sub cmdAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAdd.Click
Dim Stroka As String = ""
timeN.SetTime(mH, mM, mS)
adds = InputBox("Укажите добавляемое количество секунд", , 1)
timeN.AddS(adds)
mH = timeN.Hour
mM = timeN.Minute
mS = timeN.Second
time.SetTime(mH, mM, mS)
txtSetTime.Text = String.Format("{0}:{1:D2}:{2:D2}", mH, mM, mS)
'SetTime(timeN.Hour, timeN.Minute, timeN.Second)
UpdateDisplay()
End Sub
'ввести время
Private Sub cmdInput_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdInput.Click
lblTime.Text = "универсальное время по умолчанию: " & time.ToUniversalString() & vbCrLf & _
"стандартное время по умолчанию: " & time.ToStandardString()
Stroka = InputBox("Введите время", , "12:59:56")
InvString(Stroka)
txtSetTime.Text = String.Format("{0}:{1:D2}:{2:D2}", mH, mM, mS)
UpdateDisplay()
End Sub
End Class