กก Object-Oriented Programming (OOP) · Public Class Car Public color As String Private Speed...

Post on 30-Mar-2020

1 views 0 download

Transcript of กก Object-Oriented Programming (OOP) · Public Class Car Public color As String Private Speed...

�������� ���กก�� Object-Oriented Programming (OOP)

� "#�$�$�%&�'�����(" (Object)

� "#�$�$�%&�'")�* (Class)

� "#�$�$�%ก���.��/��0�.1 (Inheritance)

� "#�$�$�%&�' Object-Oriented Programming (OOP)

� 4�56%7�0&�' OOP

� Polymorphism

� Overloading

� Overriding

� ���กก�� Abstract Class

� Shared Members

� Interfaceก��4�5ก�?�.��@��0�A*

4�56%7�0&�' OOP

� ก���&B%�64�Cก�$C�� OOP 1#% VB.NET� ��.J$@�*��'")�*

� *��'K�(�K�K��0@B�L�")�*

� *��'�����("��ก")�*

� �K.J$�$M�1L�")�*

� �K.J$K�(�K�K��0@B�C)5�$M�1L�"��

� Inheritance

� ก��4�5ก�?�.��@��0�A*

� ก����B%กL7'���.��@��0�A*

� Namespace

���กก�� Object-Oriented Programming (OOP)

�����(" (Object) "�� �����("4�5ก��N41#%K�(�K�K��0@B� (Property) ����"OP*$��@.�QK�5@�# C)5�$M�1 (Method) �K�J�L7RS�'���%T�'��UJ'�%T�'L1ก�������("����V

�$M�1(Method) �5RS�'��ก(@T��$�J�$B�B�#�@0(Event) L1V �ก.1&U�� �5N$TRS�61%K)ก���1(1&�1 �7T� �B�#�@0 W").ก4OX$ Change IconYZ �5RS�L��$M�1 Change Icon RS�'���7T� �B�#�@0 W").ก4OX$ Change IconYZ �5RS�L��$M�1 Change Icon RS�'��

Object

Property

Method Method

Interface

Method Method

Method

������ �� �� ��� ���������� ���������� �������������������������������������� ����

Object ����

��������

���������

� ��

Interface

��������������������� ��������

��� �����

�����

Method

������ �� �� ������ !������ก���# ������$�������%����� #�������

Object ������

���������������������

����������

Interface

����������������� ������$�������%����� #��������� ��&�'!����

��������ก���� �� ��!� �

��"��������

�����������������

��ก

#��� ��ก"�

#��� �$% "

")�* (Class) �$�%[U' @�C������K.$K0�&B%#&�'�����("

Class �5[กL7�4\�@�C��L�ก��*��'�����(" C)5�5L7'�������(" N$TN1L7'��")�*61%@�'

�������������(Inheritance) �$�%[U' ก��*��R�1"OP*$��@.��กC$T*T)ก ������ก@�C���1.$( Bse Class) N4%�'@�C��L�$T (Child Class)(Child Class)

ก���4)BJ%�C4)'CกN& �K.J$�@.$�5N�ก(@�$L� Child Class RBJ Inheritance $� �5��B%ก#T��4\�ก��RS� Overriding

")�*�*����7.�@C&�*���Base Class RB#BM��$1� �[%�@0 4 4�5@

")�*�*����7.�@C&�%�#Child Class RB#B��C�� �[*4��0@

Inherit Inherit Inherit

")�*�*����7.�@C&�%�#Child Class RB#B��C�� �[*4��0@

Object-Oriented Programming

(OOP) � �����

ก���&B%�64�Cก�$RBJ�S����C�#".1&�' Object-

Oriented (OO) $�L74�56%7�0 7T#%L�Oriented (OO) $�L74�56%7�0 7T#%L�*�$��[K�]��64�Cก�$N1�%T�'�4\��5��$�ก%.J'&U��

4�56%7�0&�' OOP

� 7T#%)1�#)�L�ก��K�]��64�Cก�$N4N1$�ก ���J�'��ก*�$��[�S���������("RBJ"���J�K�]��N#C)#$�L7'��N1 (reuseability)

� *�$��[K�]��@T�%�1 (extensibility) ��ก�����("RBJ$B�%TC)#N1� *�$��[K�]��@T�%�1 (extensibility) ��ก�����("RBJ$B�%TC)#N1

� *�$��[1C)CกN&64�Cก�$N1'T�% ���J�'��ก�����("�5$B"#�$*$��P0L�@�#$����' ก��CกN&64�Cก�$*�$��[CกN&�QK�5�����("RBJ@�'ก���RT����� UJ'�5N$Tก�5R�@T�*T#���J�V &�'64�Cก�$C@T�%T�'L1

*��'K�(�K�K��0@B�L�")�*� �����()*#�*�� Car.Vb �*�Form.Vb �+%������ก,���*�� Car

� �* ก���-���%��.+���$�,� Solution Explorer

� �* ก���/ Add->Add Class

� �*%�ก Class ,���� Templates �*�,��%�� Car

� ����� *�* ก�-�� Car.vb ,� Solution Explorer

� �+ ��+�$�+�+��# �'����(�����*�� Car->Public Color as String( ���ก�0+�$�+�+��# �' Color ���,��*�� Car)���ก�0+�$�+�+��# �' Color ���,��*�� Car)

ก�����ก�0 ���������*����1���� Public ������ก�� Field �%������22/ก���/�����(��.�� ����ก�����ก (� ���3����4�����,��*��

� 2�� Private ������ก�� Property ก�������%������ ���-!���ก.+�5�����# Get ��%� Set ���,��*���-���'�

�*�ก��� OOP -���(���(���ก����������� Field ��%� Property � ������ก���6�� Property �-���'�

*��'�����("��ก")�*� ก��4�5ก�?�����(" (Object Declaration)

� ������ [Dim|Public|Private] <7�J������("> As <7�J�")�*@�C��>

� �7T� Public TestCar As Car

� ก��*��'�����("� ������ <7�J������("> = New <7�J�")�*@�C��>()

� �7T� TestCar = New Car()

� ����*�$��[4�5ก�?�����("K��$ก��*��'�����("N1i�%L�"S�*�J'�1B%#ก�� � ����*�$��[4�5ก�?�����("K��$ก��*��'�����("N1i�%L�"S�*�J'�1B%#ก�� � �4C�� [Dim|Public|Private] <7�J������("> As New <7�J�")�*@�C��>()

� �7T� Public TestCar As New Car()

� ก����B%กL7'��� �4C�� <7�J������(">.<7�J�K�(�K�K��0@B������$M�1>

� �7T� TestCar.Color = WBlueZ

MessageBOx.Show(WTestCar $B*B = W& TestColor.Color()

%ก�).ก�����("61%กS���11�'�B� 7�J� Instance = Nothing

ก���K.J$�$M�1L�")�*� ������

[ReadOnly] property <�%��+�$�+�+��# �'>() as<�� �����/*>Get

Return < �������� Private ���,��*��>

End Get

Set(Byval Inputvalue as short)

< �������� Private ���,��*�� = InputValue< �������� Private ���,��*�� = InputValue

End Set

End Property

��������ก��������*���+%���!���&��+%'�-�������ก*�.��ก���������0����ก.���ก���*�ก

,�� Add Class Module ������,�.����$ก # (�*%�ก��ก���/ Project -> Add Class) �'��%���*����1� AreaCircle

Public Class AreaCircle

Private vArea As Long

Public WriteOnly Property Radius() As Long

Set(ByVal value As Long)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Set(ByVal value As Long)

vArea = 3.14 * value * value

End Set

End Property

Public ReadOnly Property Area() As Long

Get

Return vArea

End Get

End Property

End Class

Button1.Click

Dim Mycircle As AreaCircle

Mycircle = New AreaCircle()

Mycircle.Radius = TextBox1.Text

TextBox2.Text = Mycircle.Area

Mycircle = Nothing

End Sub

Color HorsePowerGearPosition Speed

Class Car

Property

ChangGear FillFuel

GearPosition SpeedFuelLevel

IsLMoving

Accerelate

*��'�����("��ก")�*� *��'�����(" TestCar ��ก")�* Car 1�'�4

Public Class Car

Public color As String

Private Speed As Short '4�5ก�?K�(�K�K��0@B� Speed i�%L�")�* Car

Public HorsePower As Short 'HorsePower �4\�C�� Public

Private GearPosition As String = "#T�'"

Private FuelLevel As Short

Private FuelQuantity As Short

Public Sub FillFuel(ByVal FueIQuantity As Short)

FuelLevel += FuelQuantity '�K.J$ FuelLevel @�$�S��#� FuelQuantity

End Sub

ReadOnly Property CurrentGear() As String

Get

Return GearPosition

End GetPrivate FuelQuantity As Short

Public Sub ChangeGear(ByVal NewGearPosition As String) 'sub ChangeGear()

GearPosition = NewGearPosition 'กS���1L�@�#C4� GearPosition=@�#C4�NewGearPosition

End Sub

End Get

End Property

ReadOnly Property CurrentFuelLevel() As Short

Get

Return FuelLevel

End Get

End Property

Public Function IsMoving() As Boolean

If Speed = 0 Then

IsMoving = False

Else

IsMoving = True

End If

Property CurrentSpeed() As Short

Get

Return Speed

End Get

Set(ByVal InputValue As Short)

Speed = InputValueEnd If

End Function

Public Sub Accerelate(ByVal DiffSpeed As Short)

Speed += DiffSpeed

End Sub

Speed = InputValue

End Set

End Property

End Class

�&B%�64�Cก�$ก��A��0$$B1�'�B�

Public TestCar As Car '4�5ก�?�����(" TestCar ��ก")�* Car

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

TestCar = New Car() '*��'�����(" TestCar 61%L7"S�*�J' New

End Sub

Private Sub btnAccerelate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAccerelate.Click

MessageBox.Show("Speed ��.J$@� =" & TestCar.CurrentSpeed())

TestCar.Accerelate(20)

MessageBox.Show("Speed �)�'��T'"#�$��(# =" & TestCar.CurrentSpeed())End Sub

Private Sub btnReadColor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReadColor.Click

TestCar.color = "Blue"

MessageBox.Show("TestCar $B*B =" & TestCar.color)

End Sub

TestCar.CurrentSpeed())

TestCar.Accerelate(-5)

MessageBox.Show("Speed �)�')1"#�$��(# =" & TestCar.CurrentSpeed())

End Sub

Private Sub btnChangeGear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnChangeGear.Click

MessageBox.Show("@S�C��T'�กB%�04���O��� =" & TestCar.CurrentGear())

TestCar.ChangeGear(1)

MessageBox.Show("�)�'�4)BJ%��กB%�0 @S�C��T'�กB%�0 =" & TestCar.CurrentGear())

MessageBox.Show("4�.$�P��S�$�� =" & TestCar.CurrentFuelLevel())

End Sub

Private Sub btnCheckIsMoving_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCheckIsMoving.Click�กB%�0 =" & TestCar.CurrentGear())

End Sub

Private Sub btnFillFuel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFillFuel.Click

MessageBox.Show("4�.$�P��S�$�� =" & TestCar.CurrentFuelLevel())

TestCar.FillFuel(50)

btnCheckIsMoving.Click

MessageBox.Show("�[#.J' =" & TestCar.IsMoving())

TestCar.Accerelate(10)

MessageBox.Show("�[#.J' =" & TestCar.IsMoving())

End Sub �

Polymorphism �$�%[U' ก��RBJ���*�$��[�&B%��$M�17�J��1B%#ก��L�*�$��[���K���$.�@��0N1�)�%7�.1C)5ก���&B%��$M�17�J��1B%#ก��N1�)�%7�.1C)5ก���&B%��$M�17�J��1B%#ก��")�*RBJ inherit $� C@TRS�'��"�)5�%T�'ก��

Overloading �$�%[U' ก���&B%��$M�17�J��1B%#RBJ*�$��[���"T�K���$.�@��0@T�'7�.1ก��N1������ [Public|Private|Protected] Overloads [Sub | Function]<7�J�A�'ก07��>(<7�J�K���$.�@��0> as <7�.1&�$)>]�&��

Public Overloads Sub TestPrint(ByVal Input As Integer)Public Overloads Sub TestPrint(ByVal Input As Integer)Public Overloads Sub TestPrint(ByVal Input As String) Public Overloads Sub TestPrint(ByVal Input As Boolean)

Overriding �$�%[U' ก��กS���1�$M�1��UJ'V $Bก��RS�'��RBJ�4)BJ%�C4)'N4��กL�")�*�1.$(RBJ����.��/��0�.@) �����4\�ก���4)BJ%�C4)'�4C��ก��RS�'��@�$RBJกS���1N#L� Base Class

����� � Overloading �+ ����4�� TestPrint ,��*�� SportCar �����'

Public Class SportCar

Inherits Car

Public Overloads Sub TestPrint(ByVal Input As Integer)

MessageBox.Show("�����ก TestPrint: Input As Integer =" & Input)

End Sub

Public Overloads Sub TestPrint(ByVal input As Boolean)

MessageBox.Show("�����ก TestPrint: Input As Boolean=" & input)

End Sub

End ClassPrivate Sub btnTestOverloading_Click(ByVal sender As

System.Object, ByVal e As System.EventArgs) Handles End Sub

Public Overloads Sub TestPrint(ByVal input As String)

MessageBox.Show("�����ก TestPrint: Input As String =" & input)

End Sub

System.Object, ByVal e As System.EventArgs) Handles btnTestOverloading.Click

Dim a As Integer = 10

Dim b As String = "VB.Net"

Dim c As Boolean = True

TestCar.TestPrint(a)

TestCar.TestPrint(b)

TestCar.TestPrint(c)

End Sub

� ��������� Overriding

Abstract Class �$�%[U'")�*RBJ$B�$M�1L1�$M�1��UJ'����K�(�K�K��0@B�L1K�(�K�K��0@B���UJ' �S��4\�@�'N1���ก�� Override 61%")�*RBJ*��R�1N4��ก")�*���� 1�'@�#�%T�'

Share Members

Share Method �$�%[U' L�VB.NET �5*�$��[��B%กL7�$M�1C)5K�(�K�K��0@B�&�'�����("61%N$T@�'*��'�.�*CR� 0&�'")�*กT�� 1�'@�#�%T�'

Share Members

Share Variable �$�%[U' L�ROกV�.�*CR� 0&�'")�*L7'��@�#C4��T#$ก�� �7T� [�@�'ก��L�ก���4)BJ%�C4)'@�#C4�i�%L������("��UJ' RS�L�@�#C4�����L������("(�.�*CR� 0) ��J�V �4)BJ%�C4)'"T�N41#% 1�'@�#�%T�'

Interface �$�%[U' 7T#%C%ก*T#� define class ก��*T#� implementation ��ก��กก�� Interface�54�5ก��1#%6"�'*��'&�'")�* �7T� Property,Method,Parameter@T�'V C@T�5N$T$B*T#�ก���&B%�6"164�Cก�$ *�$��[*��'")�*�)�%V")�*��ก�.��@��0�A*N1 61%RBJC@T)5")�*���L�RS�'��@T�'Vก��N4

�4C��ก��4�5ก�?�.��@��0�A*

Public Interface <7�J��.��@��0�A*>

Y.

End Interface

�4C��ก����B%กL7'���.��@��0�A*

Public Class <7�J�")�*>

Implements <7�J��.��@��0�A*>

End ClassEnd Interface

�7T�(���[�1N4)

Public Interface IManageFile �4�5ก�?�.��@��0�A*7�J� IManageFile

Sub Open(ByVal FileName As String)

Sub Close()

End Interface

End Class

Namespace �$�%[U' ก����1�$#1�$TL�ก��")�*@T�'V �%T�'�4\��5�� 61%")�*RBJ$B#�@[O4�5*'"0ก��L7'����$���ก���5[ก�#��#$N#L���$*�4`�1B%#ก��

�4C��

NameSpace <7�J���$*�47>

Public Class <7�J�")�*RBJ 1>

Y.

End ClassEnd Class

Y.

Public Class <7�J�")�*RBJ n>

Y.

End Class

End NameSpace

� �����6 *�$��[��'[U'")�* Car C)5 SportCar N161%L77�J��@($V#T�

Mycar.Car C)5 Mycar.SportCar @�$)S�1��

����������������*��!�����ก���!���&���/*����� VAT �*��� ��&�� �-�� ��������%��

��� VAT �*�� .������/*-���!���1�-�� ����������(��� �!����� ����-��5%'� (Amount), ���� ����� �*�����#�5$� # VAT .�� %VAT ��'���ก3/�,��(�ก!������,���� Default �%� 7% ���ก���������/*������ก!����,�������2���(�� 2 �� �%��� ��&-��5%'�, %VAT �*��/*��-�'������%����� VAT �*��

Public Class CBill

Private vPrice As Double

Private vAmount As Double

Private vVat As Double

Public WriteOnly Property PricePerUnit() As Double

Set(ByVal value As Double)

vPrice = value

End Set

End Property

Public Property VAT() As Double

Get

Public Property Amount() As Double

Get

Return vAmount

End Get

Set(ByVal value As Double)

vAmount = value

End Set

End Property

Public ReadOnly Property Total() As DoubleGet

Return vVat

End Get

Set(ByVal Value As Double)

If Value <> 0 Then

vVat = Value

Else

vVat = 7

End If

End Set

End Property

Get

Dim vt As Long

vt = vVat * (vPrice * vAmount) / 100

Total = (vPrice * vAmount) + vt

Return Total

End Get

End Property

End Class

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

For Each sender In Me.Controls

If TypeOf sender Is TextBox Then

sender.text = " "

End If

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim MyBill As CBill

MyBill = New CBill()

MyBill.VAT = Val(TextBox1.Text)

MyBill.PricePerUnit = Val(TextBox2.Text)

MyBill.Amount = Val(TextBox3.Text)End If

Next

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Form1_Load(sender, e)

End Sub

MyBill.Amount = Val(TextBox3.Text)

TextBox4.Text = MyBill.Total

MyBill = Nothing

End Sub

���-�� 1 �������.���ก����1��*���ก����ก��ก��9�ก (Deposit),2��(Withdraw) �*���$������ �,���:�� (Balance) ��;�.����$�,���*���+ ���*��������,�.���ก��ก!������1��%�� Cbanking.vb ����/�

���78ก��:;���

2. �'�&B%�64�Cก�$)�ก�P5&�' Abstract Class &�'ก��".1�'.�"T�RS�'��)T#'�#)�61%$BK��ก'��C��K��ก'��4�5�S�C)5C��K��ก'��7�J#"��# [�K��ก'��4�5�S�".17�J#6$')5 500 ��R C)5K��ก'��7�J#"��#7�J#6$')5 300 ��R

C����ก��1R�%�R

3. �'�&B%�64�Cก�$�4��&�"P.@RBJ$B*BJ��)BJ%$ *�$��)BJ%$ #'ก)$ #'�B �)�%��)BJ%$ �4\�@� 61%L�$Bก��RS�'��C�� Inheritance , Overloading, Overriding, Share Members, Interface C)5 Namesspace UJ'����5�K.J$*T#�RBJ�กBJ%#&�'N1@�$"#�$��$�5*$�7T� ก����K���RBJ ก���S��4$�@T�ก�� ก��"S��#P�*����#' �4\�@� �K�J�L�"��C�� OOP @�$6�R%0RBJกS���1&�'@�

C����ก��1R�%�R

�K�J�L�"��C�� OOP @�$6�R%0RBJกS���1&�'@�

4. กS���1L���ก?Uก��@��'6�R%0L�ก���&B%�64�Cก�$RBJ*�1")�'ก��MO�ก.�L�4���O��� 61%*�$��[�S��������"���'�B�4�5%Oก@0L7N1 1�'@�#�%T�'C����ก��1R�%&�RBJ1-3 K��$R��'�&B%�64�Cก�$@��6�R%0RBJ@��'1#%

C����ก��1R�%�R