Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LABVB10.doc
Скачиваний:
33
Добавлен:
16.03.2016
Размер:
704 Кб
Скачать

Практическое занятие

Задание 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]