Научная статья на тему 'Объектно-ориентированное программирование в MS Visual Studio 2005 на примере Visual basic. Net'

Объектно-ориентированное программирование в MS Visual Studio 2005 на примере Visual basic. Net Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
440
77
i Надоели баннеры? Вы всегда можете отключить рекламу.
i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Объектно-ориентированное программирование в MS Visual Studio 2005 на примере Visual basic. Net»

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В MS VISUAL STUDIO 2005 НА ПРИМЕРЕ VISUAL BASIC.NET

А.Ю. Веселков, А.Ю. Лагунов

Поморский государственный университет имени М.В.Ломоносова, г. Архангельск, Россия

Технология ООП (объектно ориентированного программирования) основана на трех основополагающих концепциях: инкапсуляция, наследование и полиморфизм [1; 2]. Основная проблема при обучении ООП -эффектные примеры для демонстрации данных концепций.

Инкапсуляция - объект представляет собой контейнер, содержащий в себе данные и программы по управлению данным объектом. Класс объединяет объекты, имеющие одинаковый набор свойств и схожее поведение (методы).

Проект «Приветствие»

Public Class Sudar 'поля (все закрыты)

Private NameValue, StatusValue As String Private AgeValue As Integer 'методы - свойства

'стратегия: Read,Write (Чтение, запись) Property Name() As String Set(ByVal value As String)

NameValue = value End Set Get

Return NameValue End Get End Property

'стратегия: Read-only(Только чтение) Property Status() As String Set(ByVal value As String)

End Set Get

Return StatusValue End Get End Property

'стратегия: Read,Write (Чтение, запись) Property Age() As Integer Set(ByVal value As Integer)

AgeValue = value Select Case AgeValue Case Is < 7

StatusValue = "ребенок"

Case 8 To 17

StatusValue = "школьник"

Case 18 To 22

StatusValue = "студент"

Case Else

StatusValue = "служащий"

End Select End Set Get

Return AgeValue End Get End Property End Class

Public Class frmPrivet Dim User As New Sudar()

Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click End End Sub

Private Sub txtInput_TextChanged(ByVal sender As System.Object, ByVal e As Sys-tem.EventArgs) Handles txtInput.TextChanged User.Name = txtInput.Text lblOutput.Text = "Здравствуй, " & Us-er.Name & "!"

End Sub

Private Sub txtAge_TextChanged(ByVal sender As System.Object, ByVal e As Sys-tem.EventArgs) Handles txtAge.TextChanged If txtAge.Text = "" Then User.Age = 0 Else

User.Age = txtAge.Text End If

lblStatus.Text = "Вы " & User.Status End Sub End Class

Приветствие

Введите свое имя

Сколько Вам лет?

Вы ребенок

Выход

Наследование - одна из самых важных черт ООП. Вкратце она представляет из себя следующее - вы создаете один класс как потомок другого. Эти два класса называется потомок и предок соответственно. Часто говорят еще о дочернем и родительском классе. Созданный вами класс автоматически получает все способности своего родительского класса. Плюс в классе-потомке вы добавляете еще что-нибудь, чего не было в классе родительском - какие-нибудь методы или поля.

Проект «Дом»

‘Родительский класс Public Class Dom Protected picGr As Graphics Protected X, Y, Shirina As Integer Protected Pen As Pen ' Констуктор

Public Sub SetDom(ByVal posX As Integer, ByVal posY As Integer, ByVal A As Integer, ByVal picG As Graphics, ByVal PenDraw As Pen) MyClass.X = posX MyClass.Y = posY MyClass.Shirina = A MyClass.picGr = picG MyClass.Pen = PenDraw End Sub

Public Overridable Sub Show() picGr.DrawRectangle(Pen, X, Y - Shirina, Shirina, Shirina)

Dim pointsKrisha As Point() = _

{New Point(X + Convert.ToInt16(-Shirina / 10), Y - Shirina), _

New Point(X + Convert.ToInt16(0.5 * Shirina),

Y - 2 * Shirina), _

New Point(X + Convert.ToInt16(1.1 * Shirina),

Y - Shirina), _

New Point(X + Convert.ToInt16(-Shirina / 10),

Y - Shirina)}

picGr.DrawLines(Pen, pointsKrisha) picGr.DrawRectangle(Pen, X + Con-vert.ToInt16(0.25 * Shirina), Y - Con-

vert.ToInt16(0.75 * Shirina), Convert.ToInt16(0.5 * Shirina), +Convert.ToInt16(0.5 * Shirina))

picGr.DrawEllipse(Pen, X + Con-

vert.ToInt16(0.4 * Shirina), Y - Convert.ToInt16(1.5 * Shirina), Convert.ToInt16(0.2 * Shirina), Con-vert.ToInt16(0.25 * Shirina))

End Sub End Class ‘Дочерний класс Public Class DomTruba Inherits Dom

Public Overrides Sub Show()

MyBase.Show()

Dim pointsTruba As Point() = _

{New Point(X + Convert.ToInt16(Shirina * 0.15), Y - Convert.ToInt16(Shirina * 1.42)), _

New Point(X + Convert.ToInt16(Shirina * 0.15), Y - 2 * Shirina), _

New Point(X + Convert.ToInt16(Shirina * 0.3),

Y - 2 * Shirina), _

New Point(X + Convert.ToInt16(Shirina * 0.3),

Y - Convert.ToInt16(Shirina * 1.66))}

picGr.DrawLines(Pen, pointsTruba)

End Sub End Class Imports System

Imports System.Windows.Forms Imports System.Drawing Public Class frmDom Dim picGraphics As Graphics Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click End End Sub

Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click

Dim whiteBrush = New Solid-Brush(Color.White)

picGraphics.FillRectangle(whiteBrush, 0,

0, picDom.Width, picDom.Height)

End Sub

Private Sub frmDom_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

picGraphics = picDom.CreateGraphics() End Sub

Private Sub btnDraw_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDraw.Click

Dim X, Y, A As Integer X = Convert.ToInt16(txtX.Text)

Y = Convert.ToInt16(txtY.Text)

A = Convert.ToInt16(txtA.Text)

Dim greenPen = New Pen(Color.Green) Dim DomN = New Dom() DomN.SetDom(X, Y, A, picGraphics,

greenPen)

DomN.Show()

Dim redPen = New Pen(Color.Red)

Dim DomM = New DomTruba() DomM.SetDom(X + 100, Y, A, picGraph-ics, redPen)

DomM.Show()

End Sub End Class

HEB

В ведите X |50 ] Введите Y 1200 ] Введите А 50

/°\ b

□ □

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

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

Проект «Площадь фигуры»

Абстрактный класс MustInherit Class Figure Public MustOverride Function Ploshad() As

Single

End Class

Класс четырехугольник Class Quadrangle Inherits Figure

'Сторона четырехугольника Private a, h As Single 'Конструктор

Public Sub New(ByVal a1 As Single, ByVal h1 As Single) a = a1 h = h1 End Sub

'Реализуем метод Ploshad

Public Overrides Function Ploshad() As Sin-

gle

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Return a * h End Function End Class

gle

Класс круг Class Circle Inherits Figure 'Радиус

Private r As Single 'Конструктор

Public Sub New(ByVal r1 As Single) r = r1 End Sub

'Реализуем метод Ploshad

Public Overrides Function Ploshad() As Sin-

r * r

Return Math.PI *

End Function End Class

Основная программа Public Class frmSFigure Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click End End Sub

Private Sub rdbQuadran-

gle_CheckedChanged(ByVal sender As Sys-tem.Object, ByVal e As System.EventArgs) Handles rdbQuadrangle.CheckedChanged

Dim SQuad As New Quadran-gle(Convert.ToSingle(txtA.Text), Con-

vert.To Single(txtH.Text))

lblS.Text = "S=" & Con-

vert.ToString(SQuad.Ploshad)

End Sub

Private Sub rdbCir-

cle_CheckedChanged(ByVal sender As Sys-tem.Object, ByVal e As System.EventArgs) Handles rdb Circle. CheckedChanged

Dim SCircle As New Cir-cle(Convert.To Single(txtR. T ext))

lblS.Text = "S=" & Con-

vert.ToString(SCircle.Ploshad)

End Sub End Class

SS Площадь фигуры

© Четырехугольник

Введите основание 10 □

Введите высоту 5 □

О Окружность

Введите радиус 10 □

Э=50

В ыксд

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

Литература

1. Самоучитель Visual C++.NET / В. Кораб-лев. СПб., 2004.

2. Современная практика программирования Microsoft на Visual Basic и Visual C#: учеб. пособие / пер. с англ. Ф. Балена, Д. Димауро. М., 2006.

i Надоели баннеры? Вы всегда можете отключить рекламу.