การเขียนโปรแกรม Object-oriented
| English | ไทย |
|---|---|
| object/ˈɒbdʒekt/ | 物体本身 |
| encapsulation/ɪnˌkæpsjʊˈleɪʃn/ | การห่อหุ้มข้อมูล |
| class/klæs/ | class |
| instance/ˈɪnstəns/ | instance object |
| constructor/kənˈstrʌktə/ | constructor |
| inheritance/ɪnˈherɪtəns/ | การสืบทอด |
| subclass/ˈsʌbklæs/ | subclass inheritance |
| superclass/ˈsuːpəklæs/ | superclass |
| polymorphism/ˈpɒlɪmɔːfɪzəm/ | polymorphism concept |
| abstraction/əbˈstrækʃn/ | การห่อหุ้ม (abstraction) |
| containment/kənˈteɪnmənt/ | การครอบครอง |
| aggregation/ˌæɡrɪˈɡeɪʃn/ | aggregation |
การเปลี่ยนแปลงที่จุดเดียวที่เคยหมายถึงการเปลี่ยนแปลงห้าสิบจุด
- โปรแกรมเก็บยอดเงินลูกค้าเป็นตัวเลขสาธารณะ มี twenty routines อ่านและ fifteen เขียน ตอนนี้ยอดเงินไม่ควรติดลบเลย
- โดยไม่มี Objects กฎนี้ต้องเพิ่มที่十五 places และเมื่อมีคนเพิ่มผู้เขียนคนที่十六ในวันหนึ่ง กฎก็พังอีกครั้ง
- สำหรับวัตถุ ความสมดุลคือ ส่วนตัว และวิธีเดียวที่จะเปลี่ยนแปลงได้คือวิธีการที่บังคับใช้กฎนั้น มีเพียงจุดเดียวที่เพิ่มเข้าไปได้และไม่มีทาง绕过
- นั่นคือ การห่อหุ้ม (encapsulation) และเป็นเหตุผลว่าทำไมการเขียนโปรแกรมเชิงวัตถุจึงมีอยู่ บทเรียนนี้เกี่ยวกับวัตถุ คลาส และสี่เสาหลัก
วัตถุและคลาส
- วัตถุ รวม คุณสมบัติ (attributes) ซึ่งเป็นข้อมูลของมัน เข้ากับ เมทოდ (methods) ซึ่งเป็นการทำงานที่ทำต่อข้อมูลนั้น มันคือหน่วยของสถานะและพฤติกรรมรวมกัน
- คลาส คือแบบร่าง: มันกำหนดว่าทุกวัตถุชนิดนี้จะต้องมีคุณสมบัติและเมทอดอะไรบ้าง วัตถุ เป็น อินสแตนซ์ (instance) ของคลาส โดยมีค่าของตัวเอง
- คลาสหนึ่ง
Taxiและแท็กซี่จริงแต่ละคันเป็นวัตถุที่มีเลขทะเบียนและความจุของตัวเอง

คุณสมบัติอยู่ด้านบน เมทოდอยู่ด้านล่าง และมีเครื่องหมายแสดงระดับการเข้าถึง
ห้องปฏิบัติการแนวคิดการเขียนโปรแกรม
เชื่อมโยงตัวอย่างเข้ากับแนวคิดการเขียนโปรแกรมที่แสดงออก
ออบเจกต์ประกอบด้วย:
ออบเจกต์รวมข้อมูล (Attributes) เข้ากับ Operations (Methods) ที่กระทำต่อมัน
ความสัมพันธ์ระหว่าง Class และ Object เป็นอย่างไร?
คลาส One Taxi กำหนดคุณลักษณะและวิธีการ; รถแท็กซี่จริงแต่ละคันเป็นวัตถุที่มีความจุและหมายเลขทะเบียนของตนเอง
ตัวสร้าง, getter และ setter
- ตัวสร้าง (constructor) เป็นเมทอดพิเศษที่ทำงาน เมื่อมีการสร้างวัตถุ เพื่อตั้งค่าคุณสมบัติให้เป็นค่าเริ่มต้นที่ถูกต้อง
- เนื่องจากคุณสมบัติเป็นส่วนตัว คลัสจึงจัดให้มี getメソッドเพื่ออ่านค่า และ setメソッドเพื่อเปลี่ยนค่าметод setメソດ là nơi mà một quy tắc như "không bao giờ âm" được thực thi.
- นั่นคือสิ่งที่ทำให้คุณสมบัติส่วนตัวมีค่า: กฎถูกบังคับใน ทุก การเปลี่ยนแปลง เพราะไม่มีเส้นทางอื่นไปยังข้อมูล
CLASS Taxi
PRIVATE Capacity : INTEGER
PUBLIC PROCEDURE NEW(StartCapacity : INTEGER)
Capacity ← StartCapacity
ENDPROCEDURE
PUBLIC FUNCTION GetCapacity() RETURNS INTEGER
RETURN Capacity
ENDFUNCTION
ENDCLASS
A constructor is a special method that:
ตัวสร้างเริ่มต้นคุณลักษณะของวัตถุใหม่ createTime ที่เวลาสร้าง
เสาหลักที่ 1: การห่อหุ้ม
- การห่อหุ้ม หมายถึงข้อมูลของวัตถุถูก ซ่อนไว้เบื้องหลังเมทอด คุณสมบัติเป็นส่วนตัว; โค้ดภายนอกใช้เมทოდสาธารณะ
- ประโยชน์สองประการ และข้อสอบต้องการทั้งสองอย่าง: วัตถุสามารถ บังคับใช้กฎของตัวเอง ในทุกการเปลี่ยนแปลง และการแสดงออกภายในสามารถ ถูกเปลี่ยนแปลงได้อย่างปลอดภัย ในภายหลัง เนื่องจากไม่มีโค้ดภายนอกขึ้นอยู่กับมัน
- เก็บความ saldo ในปอนด์วันนี้และในเพนนิสพรุ่งนี้: ผู้ใช้ทุกคนของคลาสยังคงเรียก
GetBalance()และไม่มีการทำลายภายนอกอะไรเลย
Encapsulation means:
การห่อหุ้มซ่อนข้อมูล; โค้ดภายนอกใช้วิธีการสาธารณะ ดังนั้นส่วนภายในจึงสามารถเปลี่ยนแปลงได้อย่างปลอดภัย
What does encapsulation buy? Select ทั้งหมด that apply.
การห่อหุ้ม (Encapsulation) เกี่ยวข้องกับการบำรุงรักษาและความถูกต้อง ไม่ใช่ความเร็ว การมีข้อมูลส่วนตัวและเมทოდสาธารณะคือสิ่งที่ทำให้ทั้งสองอย่างนี้เป็นไปได้
เสาหลักที่ 2: การสืบทอด
- การสืบทอด ทำให้สามารถกำหนด ซับคลาส (subclass) โดยอ้างอิงจาก ซูเปอร์คลาส (superclass) โดยรับคุณสมบัติและเมทอดทั้งหมดของมันมา แล้วเพิ่มของตัวเองหรือ **แทนที่ (overriding)**它们
- มันจำลองความสัมพันธ์ "เป็น-ของ" (is-a): ผู้จัดการ เป็น พนักงาน ดังนั้น
ManagerสืบทอดมาจากEmployeeและเพิ่มแผนก - ประโยชน์คือโค้ดที่ซ้ำซ้อนถูกเขียน ครั้งเดียว ในซูเปอร์คลาส และการเปลี่ยนแปลง它对它会到达每一个子类。

ส่วนที่ร่วมกันอยู่ด้านบน; ส่วนต่าง ๆ อยู่ด้านล่าง
การสืบทอด (Inheritance) สร้างความสัมพันธ์แบบ "เป็น" (is-a) เช่น ผู้จัดการเป็นพนักงาน ดังนั้นคลาสลูกจะสืบทอดและขยาย superclass ของมัน
การสืบทอดคือ "เป็น" แบบจำเพาะ; ส่วนความสัมพันธ์แบบ "มี" (has-a) จะถูกจำลองด้วย composition แทน
การสืบทอดสร้างความสัมพันธ์แบบ "____ a" เช่นผู้จัดการเป็นพนักงาน
รถยนต์มีเครื่องยนต์ ซึ่ง это composition ไม่ใช่ inheritance การแยกแยะความแตกต่างนี้ได้ถูกต้องคือสิ่งที่ข้อทดสอบนี้วัดผล
เสาหลักที่ 3 และ 4: พอลิโมर्फिซึมและนามธรรม
- พอลิโมर्फิซึม หมายถึงวัตถุที่แตกต่างกันตอบสนองต่อการ เรียกเมทოდเดียวกัน ด้วยวิธีของตนเอง ทุก
ShapeมีメソッドArea();CircleและRectangleนำเสนอมันต่างกัน - ค่าของมัน: โค้ดสามารถวนลูปผ่านรายการของรูปร่างโดยเรียก
Area()กับแต่ละตัวโดยไม่จำเป็นต้องรู้หรือสนใจว่าแต่ละตัวเป็นประเภทใด เพิ่มคลาสTriangleในภายหลังและวงลูปนั้นไม่ต้องการการเปลี่ยนแปลงเลย - นามธรรม (Abstraction) หมายถึงการแสดงอินเทอร์เฟซที่เรียบง่ายและซ่อนความซับซ้อนไว้เบื้องหลัง: ผู้เรียก
Area()ไม่จำเป็นต้องรู้เรื่องเรขาคณิตเลย
Polymorphism ทำให้เกิด:
การเรียกใช้เดียวกัน (เช่น Area()) ทำงานได้อย่างถูกต้องสำหรับแต่ละประเภท — ผู้เรียกไม่จำเป็นต้องรู้คลาสที่แน่นอน
เรียงลำดับผลกระทบของ Polymorphism ตามลำดับ จากนิยามไปจนถึงประโยชน์
การเรียกใช้ครั้งเดียว มีหลายการนำไปใช้ และโค้ดที่ใช้ไม่เคยต้องรู้เกี่ยวกับการนำไปใช้ใหม่ๆ
ตัวอย่างทำโจทย์: ชื่อกองหลัก
- คลาส
BankAccountรักษาความ saldoส่วนตัวของตนและจัดให้Deposit()และWithdraw()メソッドที่ปฏิเสธไม่ให้มันติดลบ การห่อหุ้ม: ข้อมูลถูกซ่อนและกฎถูกบังคับโดยเส้นทางเดียว menuju与之关联的数据。 - A
SavingsAccountclass ถูกนิยามว่าเป็นBankAccountที่เพิ่มอัตราดอกเบี้ยเข้าไป การสืบทอด (Inheritance): ความสัมพันธ์ is-a นำโค้ดจาก super class มาใช้ซ้ำ - วงลูปเรียก
Print()กับเอกสารทุกชิ้นในรายการ และแต่ละประเภทพิมพ์ตัวเองแตกต่างกัน พอลิโมर्फิซึม: การเรียกเดียว, การนำไปใช้หลายรูปแบบ - ระบุชื่อเสาหลัก และ คุณสมบัติของสถานการณ์ที่แสดงออกถึงมัน
จับคู่เสาหลัก OOP แต่ละอันกับความหมายของมัน
Encapsulation = การซ่อน; Inheritance = การจำเพาะแบบ "เป็น"; Polymorphism = อินเทอร์เฟซเดียวกัน แต่พฤติกรรมหลากหลาย
ตัวอย่างทำโจทย์: ทำไม OOP สำหรับระบบขนาดใหญ่
- ยกข้อดีสองประการของการใช้การเขียนโปรแกรมเชิงวัตถุสำหรับระบบขนาดใหญ่ [4]
- การห่อหุ้มหมายความว่ารายละเอียดภายในของแต่ละคลาสสามารถเปลี่ยนแปลงได้โดยไม่ส่งผลกระทบต่อส่วนอื่นๆ ของโปรแกรม ทำให้ระบบบำรุงรักษาง่ายขึ้นและทีมสามารถทำงานบนคลาสได้พร้อมกัน
- การสืบทอดหมายความว่าพฤติกรรมที่ร่วมกันถูกเขียนครั้งเดียวและใช้ซ้ำ ทำให้มีโค้ดซ้ำน้อยลงและการแก้ไขจะครอบคลุมทุกที่ในคราวเดียว
- พอลิโมर्फิซึมหมายถึงสามารถเพิ่มประเภทใหม่ได้โดยไม่ต้องเปลี่ยนแปลงโค้ดที่ใช้มัน คำตอบแต่ละข้อคือคุณสมบัติ และ ผลกระทบ
ทีมมีผู้เล่น; แต่มันไม่ใช่ผู้เล่น
- Containment หมายถึงวัตถุหนึ่งถือวัตถุอื่นไว้เป็นหนึ่งในคุณสมบัติของมัน ใน aggregation วัตถุที่ถูกถือไว้สามารถดำรงอยู่ได้อย่างอิสระ:一个
Teamholds references toPlayerobjects that can move to another team. - เลือกตามความสัมพันธ์:一个
Goalkeeperis aPlayer, ดังนั้นใช้ inheritance;一个Teamhas players, ดังนั้นใช้ aggregation. A team inheriting a player'sKick()method is a design error, even if the team would enjoy taking a penalty.
ทีมจัดเก็บการอ้างอิงไปยังวัตถุของผู้เล่น เมื่อทีมถูกลบออก ผู้เล่นยังคงอยู่ Which relationship fits? (ความสัมพันธ์ใดเหมาะสม?)
ทีมประกอบด้วยวัตถุของผู้เล่นที่เป็นอิสระ การสืบทอด (Inheritance) จะต้องการความสัมพันธ์แบบ is-a
ตัวอย่างแบบฝึกหัด: ออกแบบทีมโดยไม่คัดลอกผู้เล่น
- Known: a
Playerhas a private name and aGetName()method. DesignTeamwith a private collectionMemberscontaining references toPlayerobjects and anAddPlayer(NewPlayer)method that adds a reference. - A
Playercan exist before the team, and a team can be removed while its players remain. This is aggregation. Changing a player's name through the player's own method is visible to every object holding that player; a copied name string would become stale.
Player object: name = "Sam"
Team object: Members = [reference to Sam's Player object]
Goalkeeper class: inherits the Player attributes and methods
ในการออกแบบนี้ การลบทีมต้อง销毁ทุกผู้เล่นที่มันประกอบด้วยด้วย
ผู้เล่นดำรงอยู่อย่างอิสระ การลบทีมจะลบเพียงการอ้างอิงของมัน ไม่ใช่จำเป็นต้อง销毁วัตถุของผู้เล่น
จับคู่การออกแบบแต่ละแบบกับความสัมพันธ์ของมัน
Inheritance สร้างความสัมพันธ์ is-a; Aggregation สร้างความสัมพันธ์ has-a กับวัตถุที่เป็นอิสระ; Encapsulation ควบคุมการเข้าถึงข้อมูล
คะแนนที่หลุดหายไป
- คลาสคือแบบร่าง, วัตถุคืออินสแตนซ์ ของมัน อย่าใช้คำเหล่านี้แทนกันได้
- การห่อหุ้มคือการซ่อนข้อมูลไว้เบื้องหลังเมทოდ และประโยชน์ของมันคือ การบังคับใช้กฎ และ การเปลี่ยนแปลงภายในอย่างปลอดภัย phrase "มีความปลอดภัยมากขึ้น" กว้างเกินไป
- การสืบทอดคือความสัมพันธ์ is-a รถ มีเครื่องยนต์ ซึ่งเป็นการประกอบ (composition) ไม่ใช่การสืบทอด
- พอลิโมर्फิซึมคือการเรียกเดียวกันที่แสดงพฤติกรรมต่างกันตามคลาส ซึ่งเป็นสิ่งที่ทำให้สามารถเพิ่มซับคลาสใหม่ได้โดยไม่ต้องเปลี่ยนแปลงโค้ดเดิม
คุณเข้าใจแล้ว
- วัตถุรวม คุณสมบัติและメソด; คลาสคือแบบร่างและวัตถุเป็นอินสแตนซ์, ตั้งค่าโดยตัวสร้าง
- การห่อหุ้ม: ข้อมูลส่วนตัวเบื้องหลังメソดสาธารณะ, เพื่อให้กฎถูกบังคับในทุกการเปลี่ยนแปลงและรายละเอียดภายในสามารถเปลี่ยนแปลงได้อย่างปลอดภัย
- การสืบทอด: ซับคลาสรับสมาชิกของซูเปอร์คลาสและเพิ่มหรือแทนที่มัน, จำลอง is-aและเขียนโค้ดที่ร่วมกันครั้งเดียว
- พอลิโมर्फิซึม: การเรียกเดียวกันที่นำเสนอต่างกันตามคลาส, เพื่อให้ประเภทใหม่ไม่ต้องเปลี่ยนแปลงโค้ดเดิม; นามธรรม: อินเทอร์เฟซที่เรียบง่ายที่ซ่อนความซับซ้อน