ผู้เขียน หัวข้อ: OOP Begin  (อ่าน 5655 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ กรรมกรไอที

  • Hero Member
  • *****
  • กระทู้: 584
  • เมื่อเทคโนโลยีคือลมหายใจของเรา
  • Respect: +6
    • ดูรายละเอียด
OOP Begin
« เมื่อ: กันยายน 25, 2008, 10:19:51 AM »
0
สวัสดีครับ วันนี้หยิบเรื่องการเขียนโปรแกรมแบบ OOP มาพูดให้ฟัง เอาแบบง่าย ๆ สำหรับใครที่อยากเริ่มรู้จักการเขียนโปรแกรมแบบ OOP ครับ
OOP : Object Oriented Programming เป็นรูปแบบการเขียนโปรแกรมซึ่งมองสิ่งต่าง ๆ เป็นวัตถุ และมีการกำหนดรูปแบบการจัดการกับวัตถุนั้น ๆ คล้ายกับชีวิตจริงของคนเรา ก่อนจะเริ่มต้น เราต้องมารู้จักองค์ประกอบต่าง ๆ ที่เกี่ยวข้องกับการเขียนโปรแกรมแบบ OOP ก่อนครับ
Class : คลาส หรือพิมพ์เขียวของวัตถุ จริง ๆ จะว่าไปแล้วคลาสจะถูกมองเป็นนามธรรมซึ่งจะต้องถูกสร้างให้เป็นวัตถุซึ่งเป็นรูปธรรม ตรงนี้มีใครงงบ้างไหมครับ ค่อย ๆ ดูกันต่อไปนะครับ องค์ประกอบของคลาสหลัก ๆ ได้แก่ Property, Method, Variable, Interface ซึ่งจริงๆ แล้ว ในบางคลาสอาจมีเพียง variable เพียงอย่างเดียวก็ไม่แปลกครับ เพราะจัดเป็น entities class หรืออาจจะมีเฉพาะ method อย่างเดียวก็ได้
 

ออฟไลน์ กรรมกรไอที

  • Hero Member
  • *****
  • กระทู้: 584
  • เมื่อเทคโนโลยีคือลมหายใจของเรา
  • Respect: +6
    • ดูรายละเอียด
Re: OOP Begin
« ตอบกลับ #1 เมื่อ: กันยายน 25, 2008, 10:33:23 AM »
0
ต่อนะครับ.... :)
เมื่อกี้ผมลืมบอกไปว่าองค์ประกอบของคลาสเรียกว่า 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
 

ออฟไลน์ กรรมกรไอที

  • Hero Member
  • *****
  • กระทู้: 584
  • เมื่อเทคโนโลยีคือลมหายใจของเรา
  • Respect: +6
    • ดูรายละเอียด
Re: OOP Begin
« ตอบกลับ #2 เมื่อ: กันยายน 25, 2008, 11:18:05 AM »
0
ประโยชน์อย่างหนึ่งของการเขียนโปรแกรมแบบ 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
« แก้ไขครั้งสุดท้าย: กันยายน 25, 2008, 11:33:49 AM โดย เภสัชกร »
 

doramon

  • บุคคลทั่วไป
Re: OOP Begin
« ตอบกลับ #3 เมื่อ: กันยายน 25, 2008, 12:50:15 PM »
0
 ;D

สุดยอด อ.  ............... เทพ VB



ออฟไลน์ กรรมกรไอที

  • Hero Member
  • *****
  • กระทู้: 584
  • เมื่อเทคโนโลยีคือลมหายใจของเรา
  • Respect: +6
    • ดูรายละเอียด
Re: OOP Begin
« ตอบกลับ #4 เมื่อ: กันยายน 25, 2008, 12:59:42 PM »
0
 :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
 

ออฟไลน์ กรรมกรไอที

  • Hero Member
  • *****
  • กระทู้: 584
  • เมื่อเทคโนโลยีคือลมหายใจของเรา
  • Respect: +6
    • ดูรายละเอียด
Re: OOP Begin
« ตอบกลับ #5 เมื่อ: กันยายน 25, 2008, 13:14:04 PM »
0
เดี่ยววันนี้พอแค่นี้ หากดึกๆๆถ้าพอมีเวลาจะมาต่อหลักการของ OOP ที่เหลือ เช่น การทำ Encapsulation , Polymophism ใครอ่านแล้วงงยังไง หรือมีความคิดเห็นอย่างแสดงความคิดเห็นได้นะครับ ;D
 

ออฟไลน์ กรรมกรไอที

  • Hero Member
  • *****
  • กระทู้: 584
  • เมื่อเทคโนโลยีคือลมหายใจของเรา
  • Respect: +6
    • ดูรายละเอียด
Re: OOP Begin
« ตอบกลับ #6 เมื่อ: ตุลาคม 02, 2008, 10:20:42 AM »
0
วันนี้ขอใช้เวลาประมาณหนึ่งชม.มานั่งเขียนบทความต่อครับ ... จริงๆๆ ส่วนแรกที่เขียนไปผมก็ยังอ่านแล้วงงตัวเองครับ ... แถมรู้สึกว่ายาวแต่ไม่ค่อยได้ใจความสักเท่า วันนี้ผมตั้งใจขอเขียนแบบย่อ ๆ สั้น ๆ แต่ขอเอาเนื้อหานะครับ
ย้อนกลับไปตั้งแต่ตอนแรก ผมพูดถึงลักษณะของการเขียนโปรแกรมแบบ 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 คือ วัตถุซึ่งเกิดจากการรวมกลุ่มกันของวัตถุต่าง ๆ เช่น "ยา" อาจประกอบด้วย "ตัวยาสำคัญ" หลาย ๆ ตัวรวมกัน จนกลายเป็น "ยา" ตัวหนึ่ง .... ยกตัวอย่างแบบใกล้ตัวมากๆๆครับ ไม่รู้ใครไม่เข้าใจไหมครับ
 

doramon

  • บุคคลทั่วไป
Re: OOP Begin
« ตอบกลับ #7 เมื่อ: ตุลาคม 05, 2008, 16:10:57 PM »
0
แนะนำทำเป็น blog ไว้ดีกว่าครับ จะได้เป็นวิชาให้ลูกหลาน รุ่นต่อไปได้ศึกษา มันจะอยู่กับ โลกนี้ตลอดไป

ถึงแม้ว่า  ms จะปิด บริษัท มันก็จะยังอยู่

 ;D ;D ;D


ออฟไลน์ กรรมกรไอที

  • Hero Member
  • *****
  • กระทู้: 584
  • เมื่อเทคโนโลยีคือลมหายใจของเรา
  • Respect: +6
    • ดูรายละเอียด
Re: OOP Begin
« ตอบกลับ #8 เมื่อ: ตุลาคม 06, 2008, 09:45:41 AM »
0
อืมมม น่าคิดครับ .. แต่.. เอาเป็นว่าผมเขียนทิ้งไว้แถวนี้ก่อนแล้วกัน ว่าง ๆ จะเข้ามาเขียนต่อ ... คิดว่าทำเป็นวิทยาทานเพื่อชาวสาสุขดีกว่า หุหุหุ ... เดี่ยวว่าง ๆ จะมาพูดเรื่องการเขียน VB.NET แบบ OOP โดยอ้างอิงตาม .NET FX 2.0/3.5 ต่อครับ ผมเคยพูดในบอร์ดนี้เรื่องของ Generic (นานมากๆๆแล้ว) แล้วก็ใครว่าง ๆ ลองไปหาอ่านเรื่อง Spring ครับ ผมอ่านแล้วน่าสนใจมาก มันเป็น Application FX ครับ ง่ายดี ทำให้เราเขียนโปรแกรมแบบไม่ต้องมานั่งคิดถึงเรื่อง Pattern ให้ปวดศรีษะ