BMS-HOSxP Community
HOSxP => นอกเรื่อง => ข้อความที่เริ่มโดย: กรรมกรไอที ที่ กันยายน 25, 2008, 10:19:51 AM
-
สวัสดีครับ วันนี้หยิบเรื่องการเขียนโปรแกรมแบบ OOP มาพูดให้ฟัง เอาแบบง่าย ๆ สำหรับใครที่อยากเริ่มรู้จักการเขียนโปรแกรมแบบ OOP ครับ
OOP : Object Oriented Programming เป็นรูปแบบการเขียนโปรแกรมซึ่งมองสิ่งต่าง ๆ เป็นวัตถุ และมีการกำหนดรูปแบบการจัดการกับวัตถุนั้น ๆ คล้ายกับชีวิตจริงของคนเรา ก่อนจะเริ่มต้น เราต้องมารู้จักองค์ประกอบต่าง ๆ ที่เกี่ยวข้องกับการเขียนโปรแกรมแบบ OOP ก่อนครับ
Class : คลาส หรือพิมพ์เขียวของวัตถุ จริง ๆ จะว่าไปแล้วคลาสจะถูกมองเป็นนามธรรมซึ่งจะต้องถูกสร้างให้เป็นวัตถุซึ่งเป็นรูปธรรม ตรงนี้มีใครงงบ้างไหมครับ ค่อย ๆ ดูกันต่อไปนะครับ องค์ประกอบของคลาสหลัก ๆ ได้แก่ Property, Method, Variable, Interface ซึ่งจริงๆ แล้ว ในบางคลาสอาจมีเพียง variable เพียงอย่างเดียวก็ไม่แปลกครับ เพราะจัดเป็น entities class หรืออาจจะมีเฉพาะ method อย่างเดียวก็ได้
-
ต่อนะครับ.... :)
เมื่อกี้ผมลืมบอกไปว่าองค์ประกอบของคลาสเรียกว่า member ครับ ต่อมาเราจะนำคลาสไปใช้งานนั้น เราต้องทำให้เป็นวัตถุก่อน เราเรียกว่า instance ยกตัวอย่างเช่น ผมมีคลาส ชื่อว่า car
Public Class Car
#Region "ตัวแปร"
Private _Wheels As Integer
Private _EngineSize As Integer
Private _Color As String
#End Region
#Region "คุณสมบัติ"
Public Property Wheel() As Integer
Get
Return _Wheels
End Get
Set(ByVal value As Integer)
_Wheels = value
End Set
End Property
Public Property EngineSize() As Integer
Get
Return _EngineSize
End Get
Set(ByVal value As Integer)
_EngineSize = value
End Set
End Property
Public Property Color() As String
Get
Return _Color
End Get
Set(ByVal value As String)
_Color = value
End Set
End Property
#End Region
#Region "วิธีการ"
Public Function GoForword() As Integer
Return GoForword
End Function
Public Function GoBackword() As Integer
Return GoBackword
End Function
Public Function Brake() As Integer
Return Brake
End Function
#End Region
End Class
-
ประโยชน์อย่างหนึ่งของการเขียนโปรแกรมแบบ OOP คือการนำกลับมาให้อีก ดังนั้นคลาสที่เราสร้างขึ้น เราสร้างประกาศใช้เท่าไรก็ได้ และสร้างนำไปต่อยอดเป็นคลาสอื่น ๆ ก็ได้ โดยการสืบต่อไปให้คลาสอื่นเราเรียกว่า Inheritance โดยคลาสต้นแบบเราเรียกว่า parent class หรือ base class และคลาสที่สืบทอดต่อไปเรียกว่า child class หรือ derived class โดยการเราสามารถกำหนดให้คลาสหนึ่ง ๆ อาจมีรูปแบบให้ต้องสืบทอดต่อไปเท่านั้น ตามตัวอย่าง
Public MustInherit Class Car
....................................
End Class
ตัวอย่างในส่วนของ child class
Public Class Sedan
Inherits Car
End Class
-
;D
สุดยอด อ. ............... เทพ VB
-
:P อายจังครับ พี่อ๊อดเล่นพูดซะเกินไปครับ ผมยังแค่ลูกหมาอยุ่เลยครับ ไปกินข้าวเสร็จกลับมาต่อนะครับ
เมื่อพูดถึงวัตถุ สิ่งที่เราจะไม่พูดถึงเลยไม่ได้ก็คือ interface เพราะ interface เป็นส่วนที่ใช้ในการเชื่อมต่อระหว่างคลาสกับคลาสหรือวัตถุอื่น ๆ โดยทั่วไปเราจะ implement property, method ของคลาสให้เป็น interface ของคลาสนั้น ๆ ซึ่งเป็นวิธีที่ง่ายและสะดวก แต่หากเราต้องการสร้าง interface หนึ่งเพื่อมาใช้ร่วมกัน หลาย ๆ คลาส เราสามารถสร้าง interface แยกออกมาแล้วนำไป implement ในคลาสต่าง ๆ ได้ตามตัวอย่างครับ
Public Interface IMDChild
Function ProcessNew() As Boolean
Function ProcessOpen() As Boolean
Function ProcessSave() As Boolean
End Interface
ผมสร้าง interface สำหรับ implement ให้กับคลาสของ child form ในกรณีที่ปุ่มคำสั่งอยู่ที่ฟอร์มแม่ แต่เราต้องการสั่งงาน method ของฟอร์มลูก ซึ่งเป็นวิธีที่นิยมกันอีกวิธีหนึ่ง
Public Class Employee
Implements IMDChild
Public Function ProcessNew() As Boolean Implements IMDChild.ProcessNew
End Function
Public Function ProcessOpen() As Boolean Implements IMDChild.ProcessOpen
End Function
Public Function ProcessSave() As Boolean Implements IMDChild.ProcessSave
End Function
End Class
ตัวอย่างข้างต้นผมทำคลาส employee ออกมาเพื่อทำงานร่วมกับฟอร์มข้อมูลบุคคล จะเห็นว่าผม implement IMDChild ลงไป ทำให้เราสามารถเขียน method ของแต่คลาสตามที่เราต้องการแล้วค่อย return ค่าที่ต้องการไปแจ้งให้กับ sender
-
เดี่ยววันนี้พอแค่นี้ หากดึกๆๆถ้าพอมีเวลาจะมาต่อหลักการของ OOP ที่เหลือ เช่น การทำ Encapsulation , Polymophism ใครอ่านแล้วงงยังไง หรือมีความคิดเห็นอย่างแสดงความคิดเห็นได้นะครับ ;D
-
วันนี้ขอใช้เวลาประมาณหนึ่งชม.มานั่งเขียนบทความต่อครับ ... จริงๆๆ ส่วนแรกที่เขียนไปผมก็ยังอ่านแล้วงงตัวเองครับ ... แถมรู้สึกว่ายาวแต่ไม่ค่อยได้ใจความสักเท่า วันนี้ผมตั้งใจขอเขียนแบบย่อ ๆ สั้น ๆ แต่ขอเอาเนื้อหานะครับ
ย้อนกลับไปตั้งแต่ตอนแรก ผมพูดถึงลักษณะของการเขียนโปรแกรมแบบ OOP ผมพูดถึง Object หลายคนคงพอเข้าใจนะครับ ที่นี้เข้ามาประเด็นของลักษณะ (Characteristics) ของ OOP ก่อนนะครับ ส่วนที่ผมจะพูดต่อมาคือ Abstraction คือการจัดประเภทหรือหมวดหมู่ของวัตถุนั้นเองครับ ว่าง่าย ๆ ของชิ้นเดียวกัน จะถูกจัดให้อยู่คนละประเภทหรืออยู่ในประเภทเดียวกัน ก็ขึ้นอยู่กับจุดประสงค์ของเราในการจำแนกประเภท เช่น แมว กับ ต้นกุหลาบ อาจเป็น "สิ่งมีชีวิต" เหมือนกัน แต่ในขณะเดียวกัน แมว เป็น "สัตว์" แต่ กุหลาบ เป็น "ต้นไม้"
Encapsulation คือ ลักษณะการปกปิดการเข้าถึงองค์ประกอบหรือข้อมูลภายในวัตถุ ซึ่งเป็นหัวใจที่สำคัญมากสิ่งหนึ่งสำหรับการเขียนโปรแกรม ดังนั้นคนที่จะเขียนโปรแกรมให้เก่ง จะต้องมีความเข้าใจในการกำหนด access level ที่ถูกต้อง ในส่วนของ VB.NET จะมี 5 ระดับ private, friends, protected, protected friend, และ public ซึ่งกำหนดขอบเขตการเข้าถึงไว้คือ ภายในคลาสเดียวกันเท่านั้น, ภายในกลุ่มคลาสที่อยู่ใน assembly เดียวกัน, ภายในคลาสเดียวกัน หรือคลาสที่สืบทอดต่อออกไป, และจากที่ไหนก็ได้ ตามลำดับ
Polymorphism คือ การกำหนดรูปแบบ method ของวัตถุให้สามารถตอบสนองต่อการสั่งงานในรูปแบบต่าง ๆ ซึ่งเป็นที่มาของกระบวนการที่เรียกว่า Overloading เช่น ถ้าเรามีวัตถุ "สินค้า" เราสามารถเขียน method ที่ใช้ในการค้นหาราคาสินค้า ซึ่งค้นหาได้จากหลายช่องทาง เช่น ค้นหาจากรหัสสินค้า, ค้นหาจากชื่อสินค้า เป็นต้น แต่สุดท้าย method เหล่านั้นก็ส่งค่ากลับมาเป็นราคาของสินค้าที่เราต้องการ .... ลองนึกถึงเวลาเปิด Visual Studio ครับ แล้วเราคีย์ syntax ใดๆลงไป จะมีตัวช่วยเหลือขึ้นมาให้เรา แล้วจะเห็นว่า input variable นั้นมีใส่ได้หลายรุปแบบ ... นี้แหละครับคือลักษณะของ Overloading
Aggregation คือ วัตถุซึ่งเกิดจากการรวมกลุ่มกันของวัตถุต่าง ๆ เช่น "ยา" อาจประกอบด้วย "ตัวยาสำคัญ" หลาย ๆ ตัวรวมกัน จนกลายเป็น "ยา" ตัวหนึ่ง .... ยกตัวอย่างแบบใกล้ตัวมากๆๆครับ ไม่รู้ใครไม่เข้าใจไหมครับ
-
แนะนำทำเป็น blog ไว้ดีกว่าครับ จะได้เป็นวิชาให้ลูกหลาน รุ่นต่อไปได้ศึกษา มันจะอยู่กับ โลกนี้ตลอดไป
ถึงแม้ว่า ms จะปิด บริษัท มันก็จะยังอยู่
;D ;D ;D
-
อืมมม น่าคิดครับ .. แต่.. เอาเป็นว่าผมเขียนทิ้งไว้แถวนี้ก่อนแล้วกัน ว่าง ๆ จะเข้ามาเขียนต่อ ... คิดว่าทำเป็นวิทยาทานเพื่อชาวสาสุขดีกว่า หุหุหุ ... เดี่ยวว่าง ๆ จะมาพูดเรื่องการเขียน VB.NET แบบ OOP โดยอ้างอิงตาม .NET FX 2.0/3.5 ต่อครับ ผมเคยพูดในบอร์ดนี้เรื่องของ Generic (นานมากๆๆแล้ว) แล้วก็ใครว่าง ๆ ลองไปหาอ่านเรื่อง Spring ครับ ผมอ่านแล้วน่าสนใจมาก มันเป็น Application FX ครับ ง่ายดี ทำให้เราเขียนโปรแกรมแบบไม่ต้องมานั่งคิดถึงเรื่อง Pattern ให้ปวดศรีษะ