รายวิชานี้เป็นจุดเปลี่ยนสำคัญ จากการเขียนโค้ดแบบ Procedural (เขียนตามลำดับ) มาเป็น Object-Oriented Programming (OOP) ซึ่งเป็นแนวคิดหลักในการพัฒนาซอฟต์แวร์สมัยใหม่
ใช้ภาษา Java เพราะ:
- Strong Typing: บังคับประกาศ Type ทำให้โค้ดปลอดภัยและหา Bug ง่าย
- Pure OOP: ทุกอย่างใน Java คือ Object (ยกเว้น Primitive Types)
- Platform Independent: เขียนครั้งเดียว รันได้ทุก OS (Write Once, Run Anywhere)
- Industry Standard: ใช้งานจริงในองค์กรขนาดใหญ่ทั่วโลก
เมื่อโปรแกรมใหญ่ขึ้น การเขียนโค้ดแบบเดิม (Procedural) จะ:
- ซับซ้อน: โค้ดยาวยืด อ่านยาก แก้ยาก
- ซ้ำซ้อน: Copy-Paste Code ซ้ำๆ
- แก้ไขยาก: เปลี่ยน 1 ที่ พังทั้งโปรแกรม
OOP แก้ปัญหาเหล่านี้ด้วยการ:
- แบ่งโค้ดเป็น Objects (วัตถุ) ที่มีหน้าที่ชัดเจน
- Reuse Code ผ่าน Inheritance
- ปกป้องข้อมูล ด้วย Encapsulation
- Class & Object - การออกแบบ Blueprint และสร้าง Instance
- Encapsulation - การซ่อนข้อมูลด้วย Access Modifiers
- Inheritance - การสืบทอดคุณสมบัติ (Parent-Child)
- Polymorphism - Method Overloading & Overriding
- Abstraction - Abstract Class & Interface
- Exception Handling - การจัดการข้อผิดพลาด
- Collections Framework - ArrayList, HashMap
- Private Fields: ซ่อนข้อมูลภายใน Class
- Public Methods (Getters/Setters): ควบคุมการเข้าถึงข้อมูล
- Data Hiding: ป้องกันการแก้ไขข้อมูลโดยตรง
ตัวอย่าง:
class BankAccount {
private double balance; // ซ่อนไว้ภายใน
public void deposit(double amount) { // ควบคุมผ่าน Method
if (amount > 0) balance += amount;
}
}- Abstract Class: Class ที่ไม่สามารถสร้าง Object ได้โดยตรง
- Interface: สัญญาที่กำหนดว่า Class ต้องมี Method อะไรบ้าง
- Hide Complex Logic: แสดงเฉพาะสิ่งที่จำเป็น
- extends keyword: สืบทอดจาก Parent Class
- Code Reusability: ไม่ต้องเขียนซ้ำ
- IS-A Relationship: Dog IS-A Animal
ตัวอย่าง:
class Animal {
void eat() { }
}
class Dog extends Animal {
void bark() { } // Dog มีทั้ง eat() และ bark()
}- Method Overloading: Method ชื่อเดียวกัน แต่ Parameter ต่างกัน
- Method Overriding: Child Class เขียน Method ทับของ Parent
- Dynamic Binding: Java เลือก Method ที่ถูกต้องตอน Runtime
- Class: แบบแปลน (Blueprint) ของ Object
- Object: สิ่งที่สร้างจาก Class (Instance)
- Constructor: Method พิเศษสำหรับสร้าง Object
- this keyword: อ้างอิงถึง Object ปัจจุบัน
public: เข้าถึงได้จากทุกที่private: เข้าถึงได้เฉพาะใน Class เดียวกันprotected: เข้าถึงได้ใน Class และ Subclassdefault(ไม่ระบุ): เข้าถึงได้ใน Package เดียวกัน
- Stack: เก็บ Primitive Types และ Reference Variables
- Heap: เก็บ Objects จริงๆ
- Garbage Collection: Java ลบ Object ที่ไม่ใช้แล้วอัตโนมัติ
- ArrayList: List แบบขยายขนาดได้
- HashMap: Key-Value Pairs
- Generics:
<T>กำหนด Type ล่วงหน้า
Object-Oriented-Programming/
├── README.md ← ไฟล์นี้
├── lab/ ← Lab ปฏิบัติการ
│ ├── Basic Apps/ → ฝึกพื้นฐาน Java (Input/Output/Logic)
│ ├── Logic and Math/ → คำนวณทางคณิตศาสตร์ด้วย OOP
│ ├── OOP Shapes/ → Workshop: Shapes (Inheritance, Polymorphism)
│ └── Sorting Demo/ → ฝึก Algorithm + OOP
└── mini-project/ ← โปรเจกต์ใหญ่
└── [Various Projects] → ระบบตัดเกรด, ระบบจัดการ, etc.
พื้นฐาน Java Programming
- ฝึก Java Syntax และโครงสร้างพื้นฐาน
- การรับและแสดงผล (Scanner, System.out)
- Primitive Types vs Reference Types
- การประกาศตัวแปรและ Method
การคำนวณและ Logic ด้วย OOP
- การคำนวณทางคณิตศาสตร์
- การใช้ Math Library
- ฝึกเขียน Logic แบบ Object-Oriented
- การแก้ปัญหาด้วย Algorithm
Workshop: Object-Oriented Design with Shapes
- สร้าง Class: Circle, Rectangle, Triangle
- Inheritance: Shape (Parent) → Circle, Rectangle, Triangle (Child)
- Polymorphism: Method
calculateArea()ทำงานต่างกันตาม Shape - Encapsulation: Private Fields + Public Getters/Setters
- ฝึกการออกแบบ Class Hierarchy
Algorithms + OOP Integration
- ฝึกการเรียงลำดับ (Bubble Sort, Selection Sort)
- ประยุกต์ใช้ OOP ในการจัดการข้อมูล
- การใช้ Arrays และ Collections
- การเปรียบเทียบประสิทธิภาพของ Algorithm
ระบบตัดเกรดนักเรียน - ประยุกต์ใช้ OOP แบบเต็มรูปแบบ
Features:
- จัดการข้อมูลนักเรียนและคะแนน
- คำนวณเกรดอัตโนมัติตามเกณฑ์
- แสดงรายงานผลการเรียน (Report Card)
OOP Concepts ที่ใช้:
- Class Design: Student, Grade, Course
- Encapsulation: Private score fields + validation
- Arrays/Collections: จัดเก็บนักเรียนหลายคน
- Methods: calculateGPA(), displayReport()
Files:
StudentGradeReport.java- เวอร์ชันพื้นฐานStudentGradeReportV2.java- เวอร์ชันปรับปรุงStudentGradeReport2D.java- ใช้ 2D Array
ระบบจัดการการยืม-คืน - Inheritance & Polymorphism
Features:
- บันทึกการยืม/คืนสิ่งของ
- ตรวจสอบสถานะการยืม
- คำนวณค่าปรับ (ถ้าคืนช้า)
OOP Concepts ที่ใช้:
- Inheritance: Item → Book, Equipment
- Polymorphism: การคำนวณค่าปรับต่าง Type
- Encapsulation: ข้อมูลการยืมเป็น Private
- Class Relationships: Member, Item, Transaction
Files:
Main.java- Entry pointSupermain.java- Extended version
- Java JDK - Java Development Kit (แนะนำ JDK 11 หรือ 17)
- IDE:
- IntelliJ IDEA (Community Edition ฟรี - แนะนำ)
- หรือ Eclipse
- หรือ VS Code + Java Extension Pack
ส่วนใหญ่ใช้ Java Standard Library (มาพร้อมกับ JDK):
java.util.*- Collections (ArrayList, HashMap)java.io.*- File I/Ojava.lang.*- พื้นฐาน (Math, String)
-
ติดตั้ง Java JDK:
- Download จาก Oracle
- ตั้งค่า
JAVA_HOMEEnvironment Variable
-
ตรวจสอบว่าติดตั้งสำเร็จ:
java -version javac -version
วิธีที่ 1: Command Line
# Compile (แปลเป็น Bytecode)
javac Filename.java
# Run
java Filenameวิธีที่ 2: ใช้ IDE (แนะนำ)
- เปิด Project ใน IntelliJ IDEA / Eclipse
- คลิกขวาที่ไฟล์ที่มี
main()method - เลือก "Run"
ตัวอย่าง:
cd Object-Oriented-Programming/lab/Basic\ Apps/
javac HelloWorld.java
java HelloWorldjavacไม่ทำงาน: ตรวจสอบว่าเพิ่ม JDK/bin ใน PATH แล้ว- Class not found: ตรวจสอบว่า Compile แล้ว (มีไฟล์
.class) - Package errors: ให้สอน Package Structure ให้ถูกต้อง
- เข้าใจ Class & Object ก่อน: นี่คือหัวใจของ OOP
- ฝึกวาด Diagram: UML Class Diagram ช่วยให้เห็นภาพ
- เริ่มจาก Lab ง่ายๆ: Basic Apps → Shapes → Mini Project
- เปรียบเทียบกับ Python: ดูว่า OOP ใน Java ต่างยังไง
- ตั้งชื่อ Class ตัวใหญ่:
BankAccountไม่ใช่bankaccount - ตั้งชื่อ Method ตัวเล็ก:
calculateTotal()ไม่ใช่CalculateTotal() - 1 Class = 1 File: ไฟล์ชื่อเดียวกับ Class (เช่น
Student.java) - ใช้ Encapsulation เสมอ: ทำ Fields เป็น private + สร้าง Getters/Setters
- อ่าน Error Message: Java บอกข้อผิดพลาดละเอียดมาก
- Oracle Java Tutorials - เอกสารทางการ
- Java OOP Concepts - W3Schools
- Head First Java - หนังสือแนะนำ
- Java Visualizer - ดูการทำงานของโค้ดแบบ Step-by-step
- ❌ ลืมใส่ Semicolon
;ท้ายบรรทัด - ❌ เขียน
public static void Mainแทนmain(ตัวเล็ก!) - ❌ เข้าถึง Private Field จากนอก Class
- ❌ ลืม
newตอนสร้าง Object:Student s = new Student(); - ❌ เปรียบเทียบ String ด้วย
==แทน.equals()
| Python | Java |
|---|---|
def func(): |
void func() { } |
x = 5 |
int x = 5; |
my_list = [] |
ArrayList<Integer> myList = new ArrayList<>(); |
if x == 5: |
if (x == 5) { } |
class Dog: |
class Dog { } |
โค้ดในโปรเจกต์นี้เป็นส่วนหนึ่งของการเรียนการสอนในรายวิชา COM 3302 Object Oriented Programming
Happy Coding! ☕️💻
"OOP is not just about code, it's about thinking in objects."