บทเรียนที่ 1 • Concept of Object-Oriented Technology

หลักการเชิงวัตถุเบื้องต้น

บทเรียนนี้ปูพื้นฐานให้ผู้เรียนเข้าใจว่า “ทำไม” เราจึงต้องพัฒนาโปรแกรมแบบเชิงวัตถุ และ “อย่างไร” แนวคิดเชิงวัตถุจึงช่วยให้การออกแบบระบบมีความยืดหยุ่น ดูแลรักษาง่าย และรองรับซอฟต์แวร์ขนาดใหญ่ได้ดีกว่าแนวคิดแบบเดิม

Algorithmปูพื้นฐานก่อนเข้า OO
Class/Objectหัวใจของ OOP
3 PrinciplesEncap • Inherit • Poly
Lesson Roadmap

จากพื้นฐาน → สู่ OOP

1
ทบทวนพื้นฐาน
Algorithm, Flowchart, Database, SDLC
2
มองเห็นปัญหาของแนวคิดเดิม
Traditional Development & Software Crisis
3
เข้าใจโลกของวัตถุ
Class, Object, Attribute, Method, Message
4
เรียน 3 หลักการสำคัญ
Encapsulation, Inheritance, Polymorphism
ผู้สอน
ผู้ช่วยศาสตราจารย์ ดร. นัฐพงศ์ ส่งเนียม
xnattapong@gmail.com
Chapter Introduction

บทที่ 1 เรียนเรื่องอะไร และสำคัญอย่างไร

บทที่ 1 ของรายวิชา การวิเคราะห์และออกแบบระบบเชิงวัตถุ (Object-Oriented Analysis and Design: OOAD) ทำหน้าที่เป็น “ฐานราก” ของทั้งรายวิชา เพราะก่อนที่ผู้เรียนจะเริ่มใช้ UML, วิเคราะห์ Requirement, หรือออกแบบระบบจริง ผู้เรียนต้องเข้าใจแนวคิดพื้นฐานของการพัฒนาซอฟต์แวร์เสียก่อนว่า ระบบหนึ่ง ๆ ถูกคิดอย่างไร ถูกแบ่งส่วนอย่างไร และเหตุใดแนวคิดเชิงวัตถุจึงเกิดขึ้นมาแทนแนวคิดแบบเดิม

เนื้อหาในบทนี้จึงเริ่มจากการทบทวนความรู้เดิม เช่น Algorithm, Flowchart, Programming Language, Database, ERD และ System Analysis & Design เพื่อเชื่อมจากสิ่งที่ผู้เรียนคุ้นเคยไปสู่การมองระบบแบบใหม่ จากนั้นจึงอธิบายแนวคิดของ Traditional Software Development เปรียบเทียบกับ Object-Oriented Software Development พร้อมชี้ให้เห็นปัญหาในโลกจริง เช่น ระบบใหญ่ขึ้น ซับซ้อนขึ้น แก้ไขยากขึ้น และมีต้นทุนการบำรุงรักษาสูงขึ้น

ตอนท้ายของบทจะลงลึกไปยังแนวคิดสำคัญที่สุดของ OOP ได้แก่ Class, Object, Attribute, Method, Message, Encapsulation, Inheritance และ Polymorphism ซึ่งเป็นศัพท์หลักที่ต้องใช้ต่อเนื่องไปตลอดรายวิชา และเป็นพื้นฐานโดยตรงของการวาด UML Diagram ในบทถัดไป

ผลลัพธ์การเรียนรู้ของบทนี้
  • อธิบายความหมายของ Algorithm และการนำเสนอด้วย Pseudocode หรือ Flowchart ได้
  • เข้าใจความเชื่อมโยงระหว่าง Data, Process และ Object ในการออกแบบระบบ
  • เปรียบเทียบแนวคิด Traditional และ Object-Oriented ได้อย่างมีเหตุผล
  • อธิบายองค์ประกอบของ Class และ Object พร้อมยกตัวอย่างจากสิ่งรอบตัวได้
  • อธิบาย Encapsulation, Inheritance และ Polymorphism ได้ทั้งเชิงแนวคิดและเชิงตัวอย่าง
Reviews

ทบทวนความรู้พื้นฐานก่อนเข้าสู่ OOAD

เนื้อหาในสไลด์ช่วงต้นได้ทบทวนแนวคิดพื้นฐานหลายเรื่อง ซึ่งเป็นสะพานเชื่อมจากการเขียนโปรแกรมแบบเดิมไปสู่การออกแบบเชิงวัตถุ

01
Algorithm

ลำดับขั้นตอนการแก้ปัญหาอย่างเป็นระบบ ระบุว่าเริ่มต้นอย่างไร รับข้อมูลอะไร ประมวลผลอย่างไร และได้ผลลัพธ์อะไร

Step-by-step thinking
02
Flow Chart

การนำเสนอ Algorithm ด้วยสัญลักษณ์ เช่น เริ่มต้น รับข้อมูล ประมวลผล ตัดสินใจ และสิ้นสุด เพื่อมองตรรกะได้ชัดเจน

Visual logic
03
Programming Language

เครื่องมือสำหรับแปลงแนวคิดจาก Algorithm ไปเป็นโปรแกรมจริง เช่น C, Java, Visual Basic, Pascal หรือภาษาเชิงวัตถุอื่น ๆ

Implementation
04
ERD

ใช้วิเคราะห์โครงสร้างข้อมูลและความสัมพันธ์ระหว่าง Entity ก่อนนำไปออกแบบฐานข้อมูลเชิงสัมพันธ์

Data relationship
05
Database

ระบบจัดการฐานข้อมูล เช่น MySQL, Oracle, SQL Server, SQLite และ MongoDB ซึ่งใช้เก็บและจัดการข้อมูลของระบบงาน

DBMS
06
System Analysis & Design

การวิเคราะห์ความต้องการผู้ใช้ ออกแบบกระบวนการ ข้อมูล และส่วนติดต่อ ก่อนจะลงมือพัฒนาเป็นระบบจริง

ISAD
Algorithm

Algorithm: ความหมายและการนำเสนอขั้นตอนวิธี

Algorithm หรือ “ขั้นตอนวิธี” หมายถึง ลำดับขั้นตอนในการแก้ปัญหาที่ชัดเจน เข้าใจง่าย และสามารถทำตามได้ทีละขั้น จุดสำคัญของ Algorithm คือ ต้องบอกให้ได้ว่า เริ่มต้นอย่างไร รับข้อมูลอะไร ประมวลผลอย่างไร และสิ้นสุดที่ผลลัพธ์ใด ในทางวิชาการ Algorithm จึงเป็นแกนกลางระหว่าง “โจทย์ปัญหา” และ “โปรแกรม” เพราะก่อนเขียนโค้ด นักพัฒนาต้องคิดขั้นตอนให้เป็นระบบก่อนเสมอ

จากสไลด์ได้ยกตัวอย่างว่าขั้นตอนวิธีสามารถเขียนได้หลายรูปแบบ ได้แก่ Pseudo-code, Flowchart และ Structure Chart แต่ไม่ว่ารูปแบบใด แนวคิดหลักยังคงเหมือนเดิม คือให้ผู้อ่านเข้าใจตรรกะของงานได้โดยไม่สับสน

คุณลักษณะของ Algorithm ที่ดี
  • มีลำดับขั้นตอนที่ชัดเจน ไม่คลุมเครือ
  • รับข้อมูลนำเข้า (Input) และให้ผลลัพธ์ (Output) ที่ตรวจสอบได้
  • สามารถสิ้นสุดได้ภายในจำนวนขั้นตอนที่จำกัด
  • เขียนให้สั้น กระชับ และหนึ่งขั้นตอนควรทำหนึ่งงาน
ภาพรวม INPUT → PROCESS → OUTPUT
START
INPUT
PROCESS
OUTPUT
STOP
// Pseudocode : คำนวณพื้นที่สี่เหลี่ยมผืนผ้า
START
SET width ← 0
SET height ← 0
READ width, height
COMPUTE area ← width * height
DISPLAY area
STOP
// Java Example
public class CalRecArea {
  public static void main(String[] args) {
    int width = 5;
    int height = 8;
    int result = width * height;
    System.out.println(result);
  }
}
การเขียน Algorithm ที่ดีควรอ่านแล้วสามารถ “แปลงเป็นโปรแกรม” ได้ทันที หรืออย่างน้อยต้องทำให้เห็นตรรกะของปัญหาได้ชัด
ภาพประกอบ: ผังงานตัวอย่างการหาพื้นที่สี่เหลี่ยมผืนผ้า
START INPUT width, height PROCESS area = width × height OUTPUT area STOP
ภาพนี้ช่วยให้ผู้เรียนเห็นการแปลงตรรกะจากข้อความไปเป็นแผนภาพอย่างชัดเจน ซึ่งเป็นแนวเดียวกับตัวอย่างในสไลด์
ภาพประกอบ: ตัวอย่างแนวคิด shortest path
Shortest Path Example แนวคิด Graph Theory และการหาทางที่สั้นที่สุด 4 2 10 5 3 4 11 9 ABCDEF เส้นทางที่สั้นที่สุดจาก A ไป F ในภาพตัวอย่างคือ A → C → E → D → F แนวคิดนี้ถูกใช้ในระบบนำทาง, Google Maps, ระบบขนส่ง และงานวางแผนเส้นทางต่าง ๆ
สไลด์ต้นฉบับได้ยกตัวอย่าง Graph Theory / Tree เพื่อชี้ให้เห็นว่า Algorithm ไม่ได้มีเฉพาะงานคำนวณทั่วไป แต่ยังใช้กับการวางแผนและการตัดสินใจในระบบจริงด้วย
คำสั่งควบคุมพื้นฐานใน Pseudocode
Sequence ทำงานตามลำดับจากบนลงล่าง
Selection เลือกทำงานตามเงื่อนไข เช่น if-else
Repeat การทำซ้ำ เช่น for, while, do-while
Modular แบ่งงานเป็นฟังก์ชันหรือโปรแกรมย่อย

สไลด์ได้ย้ำว่าโปรแกรมย่อย เช่น Function และ Procedure/Subroutine ช่วยให้การออกแบบตรรกะชัดเจนขึ้น และสามารถนำกลับมาใช้ซ้ำได้

ตัวอย่าง Function และ Subroutine
// Example : Function คำนวณราคารวมสินค้า
Public Function calTotalProduct1(ByVal proPrice, ByVal proQTY) As Double
  Return proPrice * proQTY
End Function

// Main Program เรียกใช้
x = Pow(2,3)
total = calTotalProduct1(100, 3)

แนวคิดนี้ชี้ให้เห็นว่าแม้ก่อนเข้าสู่ OOP เราก็เริ่มเห็นการแบ่งหน้าที่ของโปรแกรมเป็นส่วนย่อย ๆ แล้ว ซึ่งต่อไปจะพัฒนาไปสู่แนวคิดของ Object และ Method

Data & Database

การออกแบบและจัดการฐานข้อมูล

สไลด์บทนี้ไม่ได้ทบทวนเฉพาะ Algorithm เท่านั้น แต่ยังเชื่อมโยงไปถึงฐานข้อมูลเชิงสัมพันธ์ การเขียน SQL และ Data Dictionary

ฐานข้อมูลเชิงสัมพันธ์ (Relational Database)

ในระบบสารสนเทศส่วนใหญ่ ข้อมูลจะถูกเก็บในลักษณะของ “ตาราง” และกำหนดความสัมพันธ์ระหว่างตารางผ่านคีย์ต่าง ๆ เช่น Primary Key และ Foreign Key ตัวอย่างในสไลด์ได้ยกตารางสินค้า ตารางหน่วยนับ และตารางประเภทสินค้า เพื่อให้ผู้เรียนเห็นภาพของการเชื่อมโยงข้อมูลในงานจริง

  • ตัวอย่าง DBMS: MS SQL Server, MySQL, Oracle, DB2, SQLite, MongoDB
  • คำสั่ง SQL แบ่งเป็น DDL, DML และ DCL
  • Data Dictionary คือเอกสารกำหนดความหมายของแต่ละฟิลด์ในตาราง
ตัวอย่าง SQL ในสไลด์
SELECT * FROM TbProducts WHERE proPrice > 20000
SELECT ProName FROM TbProducts WHERE proName LIKE 'C%'
ภาพประกอบ: โครงสร้างข้อมูลสินค้าเชิงสัมพันธ์
TbProducts ProID (PK) ProName ProPrice ProUnit (FK) p0000001 Computer 35000.75 u1 p0000002 Printer 7900.00 u2 p0000003 Speaker 2500.00 u3 TbUnit UnitID (PK) Detail u1 เครื่อง TbProductType TypeID (PK) Detail t01 Computer
ภาพตัวอย่างนี้สรุปแนวคิดที่สไลด์ใช้ในการอธิบาย relational database และการเชื่อมโยงตารางด้วย key
Software Development Paradigm

แนวทางการพัฒนาซอฟต์แวร์: จาก Traditional สู่ Object-Oriented

สไลด์ในช่วงกลางของบทได้อธิบายว่าโลกซอฟต์แวร์พัฒนาจากการมองระบบแบบ “ข้อมูล + กระบวนการ” ไปสู่การมองระบบเป็น “กลุ่มของวัตถุ”

Traditional / Structural Software Development

แนวคิดแบบดั้งเดิมมักเน้นการพิจารณาระบบโดยแยก “ข้อมูล” ออกจาก “กระบวนการ” จึงใช้เครื่องมืออย่าง DFD, ER Model, FSM หรือเทคนิคเชิงโครงสร้างอื่น ๆ ในการออกแบบ จากนั้นจึงพัฒนาโปรแกรมด้วยภาษาเชิงกระบวนการ เช่น BASIC, Pascal หรือ C

วิธีนี้ยังคงใช้ได้ แต่เมื่อระบบมีขนาดใหญ่และซับซ้อนมากขึ้น การแยกข้อมูลกับกระบวนการออกจากกันมากเกินไปอาจทำให้ระบบยากต่อการดูแลรักษาและขยายต่อยอด

Object-Oriented Software Development

แนวคิดเชิงวัตถุมองว่าในโลกจริง เราไม่ได้เห็นแต่เพียง “ข้อมูล” หรือ “คำสั่ง” แต่เราเห็น “สิ่งของ” หรือ “หน่วยงาน” ที่มีคุณลักษณะและพฤติกรรมอยู่ในตัวเอง เช่น ลูกค้า สินค้า รถยนต์ หรือโทรศัพท์มือถือ

ดังนั้น Object-Oriented จึงรวม data + behavior ไว้ด้วยกันในรูปของ Object และจัดแบบแผนของ Object ด้วย Class วิธีคิดเช่นนี้ทำให้ระบบมีความใกล้เคียงโลกจริงมากขึ้น และเหมาะกับซอฟต์แวร์ขนาดใหญ่ที่ต้องดูแลระยะยาว

เปรียบเทียบ Traditional กับ Object-Oriented
ประเด็น Traditional / Structural Object-Oriented
หน่วยที่ใช้คิด Process, Function, Data Flow Object, Class, Attribute, Method
มุมมองข้อมูล ข้อมูลถูกแยกจากกระบวนการ ข้อมูลถูกห่อรวมกับพฤติกรรมภายใน Object
เครื่องมือหลัก DFD, ERD, FSM, Structured Chart UML, Object Model, Use Case, Class Diagram
การนำกลับมาใช้ซ้ำ ทำได้บ้าง แต่ไม่เด่นชัด เด่นชัดผ่าน Class, Inheritance และ Composition
ความเหมาะสม เหมาะกับงานที่ไม่ซับซ้อนมาก หรือระบบขนาดเล็กถึงกลาง เหมาะกับระบบที่ซับซ้อน ขยายต่อได้ และดูแลระยะยาว
Software Crisis

ทำไมโลกซอฟต์แวร์จึงต้องเปลี่ยนวิธีคิด

สไลด์ได้อธิบายถึง Software Crisis หรือภาวะวิกฤตของซอฟต์แวร์ ซึ่งเกิดจากการที่ฮาร์ดแวร์พัฒนาเร็วมาก แต่การพัฒนาซอฟต์แวร์กลับไม่ทันต่อความซับซ้อนที่เพิ่มขึ้น เมื่อซอฟต์แวร์มีขนาดใหญ่ขึ้น มีโมดูลมากขึ้น และมีผู้ใช้งานหลากหลายขึ้น ปัญหาที่พบคือ bug มากขึ้น ใช้เวลาพัฒนานาน และมีค่าใช้จ่ายในการแก้ไขหรือบำรุงรักษาสูง

แนวคิดสำคัญ
ยิ่งเราพบปัญหาช้าเท่าใด ค่าใช้จ่ายในการแก้ไขก็จะสูงขึ้นมากเท่านั้น เพราะต้องกระทบทั้งการออกแบบ การพัฒนา การทดสอบ และการใช้งานจริง
ข้อผิดพลาดซับซ้อน

ระบบใหญ่ทำให้ค้นหาสาเหตุของปัญหายากขึ้น

ต้นทุนสูง

ค่าใช้จ่ายพัฒนาและบำรุงรักษาเพิ่มขึ้นตามความซับซ้อน

Time to Market ช้า

ใช้เวลานานกว่าจะได้ระบบที่ตรงความต้องการจริง

User กับ Programmer ไม่ตรงกัน

ช่องว่างในการสื่อสารทำให้ระบบอาจไม่ตอบโจทย์ผู้ใช้

Cost of ChangeMaintenance อาจสูงมากกว่าช่วง Design หลายเท่า
Design 1x
Development 1.5–6x
Maintenance 60–100x

ตัวเลขด้านบนสอดคล้องกับสาระสำคัญในสไลด์ที่ชี้ให้เห็นว่า หากไม่วางแผนออกแบบที่ดีตั้งแต่ต้น ค่าใช้จ่ายในระยะยาวจะเพิ่มขึ้นแบบทวีคูณ

Object-Oriented Concept

Class, Object, Attribute, Method และ Message

เมื่อเริ่มเข้าสู่โลกของ OOP ผู้เรียนต้องเปลี่ยนวิธีมองระบบจาก “ชุดคำสั่ง” มาเป็น “กลุ่มวัตถุที่สื่อสารกัน”

ภาพประกอบ: ความสัมพันธ์ระหว่าง Class และ Object
Class : Mobile Attributes shape color price weight Methods call(), receive(), getPrice() Object : myPhone shape = Bar color = Black price = 12900 Object : studentPhone shape = Fold color = Silver price = 24900
Class คือแม่แบบ (template/blueprint) ส่วน Object คือ instance ที่ถูกสร้างขึ้นมาจากแม่แบบนั้น

อธิบายแนวคิดสำคัญ

Class คือแบบจำลองหรือพิมพ์เขียวของสิ่งใดสิ่งหนึ่ง เช่น Class Mobile, Car, Person ภายใน Class จะกำหนดว่า Object ประเภทนั้นควรมีข้อมูลอะไรบ้าง และทำอะไรได้บ้าง

Object คือสิ่งที่ถูกสร้างขึ้นจริงจาก Class นั้น เช่น myPhone หรือ studentPhone ซึ่งมีค่าของข้อมูลแตกต่างกันได้ แม้จะมาจาก Class เดียวกัน

Attribute
ข้อมูลหรือคุณลักษณะ เช่น สี ราคา น้ำหนัก อายุ ชื่อ
Method
พฤติกรรม เช่น call(), walk(), calculateArea()
Message
การส่งคำสั่งหรือการร้องขอจาก Object หนึ่งไปยังอีก Object หนึ่ง
// ตัวอย่างการสร้าง Object ในภาษา Java
Mobile myPhone = new Mobile();
myPhone.setPrice(12900);
double p = myPhone.getPrice();
myPhone.call();

สาระสำคัญในสไลด์คือ ระบบเชิงวัตถุทำงานเหมือน “เครือข่ายของวัตถุที่สนทนากัน” โดยแต่ละวัตถุมีหน้าที่ของตัวเองและสื่อสารผ่าน message

Encapsulation

Encapsulation และ Information Hiding

Encapsulation คือการห่อหุ้มข้อมูล (Attributes) และพฤติกรรม (Methods) ไว้ภายในวัตถุเดียวกัน พร้อมกำหนดขอบเขตการเข้าถึง ว่าใครสามารถเรียกใช้หรือมองเห็นส่วนใดได้บ้าง แนวคิดนี้เชื่อมโยงโดยตรงกับ Information Hiding หรือการซ่อนรายละเอียดภายในไม่ให้ภายนอกรู้โดยไม่จำเป็น

สไลด์ได้ยกตัวอย่างว่า เราอาจไม่จำเป็นต้องรู้ว่า Object คำนวณอายุอย่างไร ขอเพียงมี getAge() ที่ให้ผลลัพธ์ถูกต้องและมี interface คงที่ ภายใน Object จะเปลี่ยนวิธีเก็บข้อมูลวันเกิด หรือปรับสูตรการคำนวณอย่างไร ก็ไม่กระทบผู้ใช้งานภายนอก

ภาพประกอบ: วัตถุในมุมมอง Black Box
Encapsulation : ข้างในซ่อนไว้ ข้างนอกใช้งานผ่าน Interface PERSON name, birthDate, gender jump(), walk(), talk() getAge(), setName() Internal details hidden request result
ผู้ใช้ภายนอกไม่จำเป็นต้องรู้รายละเอียดการทำงานภายใน เพียงแค่เรียกใช้ interface ที่กำหนดไว้ เช่น getAge(), walk() หรือ talk()
Maintainability

ปรับปรุงภายใน Object ได้ โดยไม่จำเป็นต้องแก้ทั้งระบบ หาก interface ยังเหมือนเดิม

Flexibility

เปลี่ยน implementation ภายในได้ง่าย เช่น เปลี่ยนวิธีคำนวณอายุหรือเปลี่ยนโครงสร้างข้อมูล

Interoperability

ระบบต่าง ๆ สามารถทำงานร่วมกันได้สะดวกขึ้น เพราะคุยกันผ่านข้อตกลงของ interface

Inheritance

Inheritance, Generalization และ Specialization

การถ่ายทอดคุณสมบัติช่วยลดความซ้ำซ้อน และทำให้เราจัดโครงสร้างของ Class เป็นลำดับชั้นได้อย่างเป็นระบบ

Inheritance คืออะไร

Inheritance คือการที่ Class ลูก (Subclass) รับคุณสมบัติหรือพฤติกรรมบางส่วนจาก Class แม่ (Superclass) เพื่อหลีกเลี่ยงการเขียนซ้ำ และทำให้เกิดโครงสร้างที่สอดคล้องกับโลกจริง เช่น Employee, Director, Worker, Driver หรือกลุ่มของ Shape ต่าง ๆ

ตัวอย่างในสไลด์ใช้ Shape เป็น Superclass และมี Circle, Triangle, Square เป็น Subclass โดยทุกชนิดมีคุณสมบัติร่วมบางอย่าง เช่น center หรือ move() แต่แต่ละชนิดก็มีข้อมูลเฉพาะและวิธีทำงานเฉพาะของตนเอง เช่น radius, base/height หรือ side

Generalization
สรุปคุณลักษณะร่วมของหลาย Class ขึ้นไปไว้ที่ Superclass (bottom-up)
Specialization
สร้าง Class ลูกจาก Class แม่ เพื่อแยกความเฉพาะของแต่ละชนิด (top-down)
ภาพประกอบ: โครงสร้าง Shape Hierarchy
SHAPE CIRCLE radius calculateArea() TRIANGLE base, height calculateArea() SQUARE side calculateArea() ทุก Subclass สืบทอดคุณสมบัติร่วมจาก SHAPE
Inheritance ช่วยจัดการคุณสมบัติร่วมไว้ในระดับบน และเปิดโอกาสให้ Class ลูกขยายรายละเอียดเฉพาะได้อย่างชัดเจน
หมายเหตุเกี่ยวกับ Multiple Inheritance

ในสไลด์ยังกล่าวถึง Multiple Inheritance ซึ่งหมายถึง Class หนึ่งอาจรับคุณสมบัติจากมากกว่าหนึ่ง Superclass ได้ เช่น Managing Director อาจมีคุณลักษณะของทั้ง Person และ Employee อย่างไรก็ตาม ในการใช้งานจริง ภาษาบางภาษาอาจรองรับตรง ๆ หรืออาจใช้แนวคิด Interface/Composition แทน

Polymorphism

Polymorphism: ชื่อเดียวกัน แต่ทำงานต่างกันได้

Polymorphism คือความสามารถที่ Object ต่างชนิดสามารถตอบสนองต่อ Method เดียวกันได้แตกต่างกันตามชนิดของตนเอง ตัวอย่างจากสไลด์คือกลุ่มของ Shape ต่าง ๆ ที่ต่างก็มี calculateArea() เหมือนกัน แต่การคำนวณจริงภายในไม่เหมือนกัน

กล่าวง่าย ๆ คือ “ภายนอกเรียกชื่อเดียวกัน แต่ภายในแต่ละ Object ทำงานตามวิธีของตัวเอง” ซึ่งทำให้การออกแบบระบบยืดหยุ่นมาก และช่วยให้เราจัดการกับ Object หลายชนิดผ่าน interface เดียวกันได้

// Example concept
Shape s1 = new Circle();
Shape s2 = new Triangle();
Shape s3 = new Square();

s1.calculateArea(); // ใช้สูตรวงกลม
s2.calculateArea(); // ใช้สูตรสามเหลี่ยม
s3.calculateArea(); // ใช้สูตรสี่เหลี่ยม
ภาพประกอบ: Method เดียวกันทำงานต่างกันตามชนิดของวัตถุ
move() Circle move() แบบวงกลม Triangle move() แบบสามเหลี่ยม Square move() แบบสี่เหลี่ยม
Polymorphism ไม่ได้หมายความว่ารูปร่างเคลื่อนที่ต่างกันจริง ๆ เสมอไป แต่หมายถึงวัตถุแต่ละชนิดสามารถ “ตีความ” และ “ทำงาน” กับคำสั่งเดียวกันได้ต่างกัน
Summary

สรุปสาระสำคัญของบทที่ 1

1) เริ่มจากการคิดเป็นลำดับ

Algorithm และ Flowchart ช่วยฝึกคิดอย่างเป็นระบบก่อนแปลงเป็นโปรแกรมจริง

2) ข้อมูลและฐานข้อมูลยังสำคัญ

การออกแบบระบบที่ดีต้องเข้าใจทั้ง data structure, SQL และการจัดเก็บข้อมูล

3) Traditional เริ่มมีข้อจำกัด

เมื่อระบบใหญ่และซับซ้อนขึ้น ต้นทุนและการบำรุงรักษาจะสูงขึ้นอย่างมาก

4) OO มองระบบเป็นวัตถุ

Class และ Object ทำให้เราจำลองโลกจริงได้ชัดเจนขึ้น

5) สามหลักการสำคัญต้องจำให้แม่น

Encapsulation, Inheritance และ Polymorphism เป็นหัวใจของ OOP

แบบฝึกหัดท้ายบท

  1. จงอธิบายความหมายของ Algorithm และเขียนตัวอย่างขั้นตอนวิธีในชีวิตประจำวัน 1 เรื่อง เช่น การชงกาแฟ การถอนเงิน หรือการสมัครสมาชิกเว็บไซต์
  2. จงเขียน Pseudocode หรือ Flowchart สำหรับการคำนวณผลรวมเลขคู่ตั้งแต่ 2 ถึง 100
  3. จงเปรียบเทียบ Traditional Software Development กับ Object-Oriented Software Development อย่างน้อย 3 ประเด็น
  4. ให้เลือกวัตถุ 1 อย่าง เช่น รถยนต์ โทรศัพท์ นักศึกษา หรือสุนัข แล้วระบุ Class, Object, Attribute, Method และ Association
  5. จงอธิบาย Encapsulation พร้อมยกตัวอย่าง interface ที่ผู้ใช้เห็น กับรายละเอียดที่ควรซ่อนไว้ภายใน
  6. จงยกตัวอย่าง Inheritance 1 ชุด เช่น Shape, Employee หรือ Vehicle พร้อมบอกว่า Superclass และ Subclass คืออะไร
  7. จงยกตัวอย่าง Polymorphism โดยใช้ method เดียวกันแต่ทำงานต่างกันใน object คนละชนิด
ข้อเสนอแนะ: เวลาตอบควรใช้ภาษาของตนเอง อธิบายเป็นลำดับ และยกตัวอย่างจากระบบจริง เช่น ระบบร้านค้า ระบบคลินิก ระบบจองห้องพัก หรือแอปพลิเคชันบนมือถือ เพื่อให้เข้าใจแนวคิดเชิงวัตถุได้ชัดเจนยิ่งขึ้น

พร้อมต่อยอดไปบทถัดไป

หลังจากเข้าใจพื้นฐาน OO แล้ว บทที่ 2 จะต่อยอดไปสู่แนวคิดเชิงนามธรรม ความสัมพันธ์ระหว่างวัตถุ และการจัดหมวดหมู่ของคลาสต่าง ๆ