Object-Oriented Programming (การเขียนโปรแกรมเชิงวัตถุ) คือ แนวคิดในการเขียนโปรแกรมที่เน้นการแบ่งระบบออกเป็น "วัตถุ" (Objects) โดยวัตถุแต่ละชิ้นจะเป็นตัวแทนของสิ่งของหรือแนวคิดในโลกจริง และมี "ข้อมูล" (Attributes) กับ "พฤติกรรม" (Methods) ของตัวเอง
สั้นๆ
"OOP คือแนวทางเขียนโปรแกรมโดยมอง "ปัญหา" เป็นกลุ่มของวัตถุที่สื่อสารกัน"
4 เสาหลักของ OOP ที่ต้องจำให้แม่น
🔢 | ชื่อหลักการ | คำอธิบายแบบเข้าใจง่าย |
---|---|---|
1️⃣ | Encapsulation (การห่อหุ้มข้อมูล) | ซ่อนข้อมูลภายใน object ไม่ให้เข้าถึงโดยตรง ใช้ private + getter/setter เพื่อควบคุมการเข้าถึง |
2️⃣ | Abstraction (การย่อรายละเอียด) | ซ่อนรายละเอียดการทำงานที่ซับซ้อนไว้เบื้องหลัง เผยเฉพาะสิ่งที่จำเป็น เช่น ผ่าน abstract class หรือ interface
|
3️⃣ | Inheritance (การสืบทอดคุณสมบัติ) | ให้ class ใหม่สามารถ “รับมรดก” จาก class เดิมได้ ช่วยลดการเขียนโค้ดซ้ำ เช่น ใช้ extends
|
4️⃣ | Polymorphism (ความหลากหลายของพฤติกรรม) | object สามารถตอบสนองต่อ method เดียวกันได้หลายแบบ เช่น overloading และ overriding
|
"ห่อ ย่อ สืบ หลาย"
ห่อหุ้ม (Encapsulation) → ย่อรายละเอียด (Abstraction) → สืบทอด (Inheritance) → หลากหลายพฤติกรรม (Polymorphism)
องค์ประกอบของ OOP
- Class (แม่แบบของวัตถุ) "พิมพ์เขียว" หรือ "สูตรการสร้างวัตถุ"
- Object (วัตถุจริงที่สร้างจาก class)
OOP คือการเขียนโปรแกรมแบบมองโลกเป็นวัตถุ วัตถุแต่ละตัวมี ข้อมูลของตัวเอง และ สามารถกระทำบางอย่างได้ เหมาะกับโปรเจกต์ที่ซับซ้อนเพราะช่วย จัดระเบียบโค้ดให้เข้าใจง่ายและดูแลได้ดี
Object-Oriented Programming (OOP)
- Class & Object: พิมพ์เขียวและอินสแตนซ์
- Encapsulation: ซ่อนข้อมูล (ใช้ private + getter/setter)
- Inheritance: สืบทอดคุณสมบัติ (ใช้ extends)
- Polymorphism: เมธอดเดียว ใช้ได้หลายแบบ (Overloading / Overriding)
- Abstraction: ซ่อนรายละเอียดการทำงาน (ใช้ abstract class หรือ interface)
องค์ประกอบหลักของ Class มีอะไรบ้าง?
องค์ประกอบ | คำอธิบาย |
---|---|
Fields (Attributes / Properties) | ตัวแปรที่เก็บ "ข้อมูล" ของ object เช่น ชื่อ อายุ |
Constructors | เมธอดพิเศษที่ใช้สร้าง object จาก class นั้น |
Methods (พฤติกรรม) | เมธอดที่อธิบาย "สิ่งที่ object ทำได้" |
Access Modifiers | เช่น public , private , protected – กำหนดการเข้าถึงองค์ประกอบใน class |
Static Members | ฟิลด์หรือเมธอดที่เป็นของ class ทั้งหมด ไม่ใช่เฉพาะ object ใด object หนึ่ง |
Nested Classes (ถ้ามี) | class ที่ประกาศซ้อนอยู่ภายใน class อื่น |
Annotations (ถ้ามี) | เช่น @Override , @Getter ฯลฯ เพื่อกำหนดพฤติกรรมพิเศษ |
Class = ข้อมูล + พฤติกรรม + วิธีสร้าง + การควบคุมการเข้าถึง
Class = Field + Constructor + Method (+ Access Control)
Data Types (ชนิดข้อมูล) หลัก ๆ อยู่ 2 กลุ่มใหญ่
- Primitive Data Types (ชนิดข้อมูลพื้นฐาน) Java มี 8 ชนิดที่เป็นข้อมูลดิบแบบเบา ไม่ใช่ object ใช้บ่อยมาก!
ชนิด | ขนาด | ตัวอย่าง | คำอธิบาย |
---|---|---|---|
byte |
8-bit | byte b = 127; |
เลขจำนวนเต็มขนาดเล็ก (-128 ถึง 127) |
short |
16-bit | short s = 1000; |
ตัวเลขขนาดกลาง |
int |
32-bit | int age = 30; |
จำนวนเต็มทั่วไป |
long |
64-bit | long population = 8000000000L; |
ตัวเลขใหญ่ |
float |
32-bit | float pi = 3.14f; |
ทศนิยมเบา ต้องลงท้ายด้วย f
|
double |
64-bit | double d = 3.14159; |
ทศนิยมละเอียด ใช้บ่อยกว่า float |
char |
16-bit | char c = 'A'; |
ตัวอักษร 1 ตัว (ใช้ single quote ' ) |
boolean |
1-bit | boolean flag = true; |
มีแค่ true หรือ false
|
- Reference Data Types (ชนิดข้อมูลอ้างอิง) คือข้อมูลที่ อ้างถึง object หรือคลาส เช่น:
ชนิด | ตัวอย่าง | คำอธิบาย |
---|---|---|
String |
"Hello" |
ตัวอักษรหลายตัว (เป็น object) |
Array |
int[] numbers = {1, 2, 3}; |
เก็บข้อมูลหลายค่าในตัวแปรเดียว |
Class |
Person p = new Person(); |
เก็บวัตถุที่เราสร้างจาก class |
Interface |
Runnable r = () -> {} |
ตัวแปรที่อ้างถึง interface |
List , Map , Set
|
จาก Java Collections | เก็บข้อมูลหลายแบบในรูปโครงสร้างที่ยืดหยุ่น |
Primitive Types (8 แบบ):
- byte, short, int, long
- float, double
- char, boolean
Reference Types:
- String, Array, Object, Class, List, Map ฯลฯ
การสร้างคลาส
public class Person { // Class Declaration
// Fields
private String name;
private int age;
// Constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Methods
public void sayHello() {
System.out.println("Hi, I'm " + name + " and I'm " + age + " years old.");
}
// Getter & Setter (Encapsulation)
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
// Static Method
public static void describeClass() {
System.out.println("This is a Person class.");
}
}
สร้างวัตถุจากคลาส
ชื่อคลาส ชื่อตัวแปร = new ชื่อคลาส(พารามิเตอร์);
Collections Framework
Java Collections Framework คืออะไร?
Collections Framework คือชุดของ class และ interface ที่ Java เตรียมไว้ให้สำหรับจัดการ กลุ่มข้อมูล (Group of Objects) อย่างมีประสิทธิภาพ เช่น การเก็บข้อมูล, ค้นหา, เพิ่ม, ลบ, เรียงลำดับ ฯลฯ
หมวดหมู่หลักของ Collection (แบ่งตามโครงสร้าง)
- Java แบ่ง Collection ออกเป็น 3 กลุ่มหลักใหญ่ ๆ:
กลุ่มหลัก | Interface | ตัวอย่างคลาสยอดนิยม |
---|---|---|
List (ลำดับ) | List<E> |
ArrayList , LinkedList , Vector
|
Set (ไม่ซ้ำ) | Set<E> |
HashSet , LinkedHashSet , TreeSet
|
Map (คีย์-ค่า) | Map<K, V> |
HashMap , LinkedHashMap , TreeMap
|
Queue / Deque (คิว) |
Queue<E> , Deque<E>
|
PriorityQueue , ArrayDeque , LinkedList
|
List (ลำดับข้อมูล, มี index)
- เก็บข้อมูลแบบเรียงลำดับ
- มี index (เริ่มที่ 0)
- ซ้ำกันได้
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
System.out.println(names.get(0)); // Alice
คลาสที่ใช้บ่อย:
- ArrayList – โครงสร้าง array, เข้าถึงเร็ว
- LinkedList – เพิ่ม/ลบไว (โดยเฉพาะกลางรายการ)
Set (ไม่มีข้อมูลซ้ำ)
- ❌ ไม่มี index
- ❌ ไม่เก็บข้อมูลซ้ำ
Set<String> ids = new HashSet<>();
ids.add("A001");
ids.add("A001"); // ซ้ำ → ไม่เก็บ
คลาสที่ใช้บ่อย:
- HashSet – เร็ว ไม่เรียงลำดับ
- LinkedHashSet – จำลำดับที่เพิ่ม
- TreeSet – เก็บแบบเรียงลำดับ (Sorted)
Map (เก็บแบบคู่ Key-Value)
- ใช้ key เพื่อค้นหา value
- Key ต้องไม่ซ้ำ / Value ซ้ำได้
Map<String, String> capitals = new HashMap<>();
capitals.put("Thailand", "Bangkok");
System.out.println(capitals.get("Thailand")); // Bangkok
คลาสที่ใช้บ่อย:
- HashMap – เร็วที่สุด, ไม่เรียงลำดับ
- LinkedHashMap – จำลำดับการ put()
- TreeMap – เรียงลำดับ key (Sorted)
Queue / Deque (โครงสร้างคิว)
- Queue: เข้าแรก ออกก่อน (FIFO)
- Deque: เข้า-ออกได้สองด้าน (Double Ended Queue)
Queue<String> q = new LinkedList<>();
q.add("A");
q.add("B");
q.poll(); // เอาออก → "A"
สรุป Collections Framework แบบภาพรวม
Collection
|
------------------
| | |
List Set Queue
|
SortedSet (TreeSet)
Map
|
SortedMap (TreeMap)
- List → มีลำดับ ซ้ำได้
- Set → ไม่มีซ้ำ ไม่มี index
- Map → เก็บคู่ Key-Value
- Queue → เข้าก่อนออกก่อน (FIFO)
สำหรับมือใหม่จะมีความสับสนระหว่าง Array
กับ List
Array กับ List ต่างกันชัดเจนทั้งในเรื่องโครงสร้าง ความยืดหยุ่น และวิธีใช้
- Array กับ List ต่างกันชัดเจนทั้งในเรื่องโครงสร้าง ความยืดหยุ่น และวิธีใช้
🔸 Array = โครงสร้างพื้นฐาน, ขนาดคงที่, ทำงานเร็ว
🔹 List = เป็น interface ใน Collections Framework, ขยายได้, ใช้งานยืดหยุ่น
❓ Array กับ List ต่างกันอย่างไร?
จุดเปรียบเทียบ | Array | List (เช่น ArrayList) |
---|---|---|
ประเภท | โครงสร้างข้อมูลแบบพื้นฐาน (built-in) | Interface + Class จาก Collections Framework |
ขนาด | คงที่ กำหนดตอนสร้างแล้วเปลี่ยนไม่ได้ | ยืดหยุ่น เพิ่ม/ลบได้ตามต้องการ |
การเข้าถึง | เร็วมาก (index โดยตรง) | เร็ว (แต่มี overhead จาก object management) |
การเพิ่ม/ลบข้อมูล | เพิ่ม/ลบไม่ได้ ต้องสร้าง array ใหม่ | ทำได้สะดวก (add , remove ) |
ประเภทข้อมูล | เก็บ primitive ได้ (เช่น int[] ) หรือ object |
เก็บ object (เช่น List<Integer> ) |
การใช้ memory | ใช้ memory น้อยกว่า | ใช้ memory มากกว่า เพราะเก็บ metadata |
ฟังก์ชันเสริม | ไม่มี method นอกจาก length | มี method เช่น add , remove , contains , size ฯลฯ |
📊 เปรียบเทียบ Array กับ List แบบละเอียด
หัวข้อ | Array |
List (ArrayList , LinkedList ) |
---|---|---|
คืออะไร? | โครงสร้างข้อมูลพื้นฐาน | Interface ใน Java Collections |
ขนาด | คงที่ | ยืดหยุ่น (เพิ่ม/ลบได้) |
Index | มี | มี |
รองรับ Generic | ⛔ ไม่รองรับแบบสมบูรณ์ | ✅ รองรับเต็มที่ |
เพิ่ม/ลบข้อมูล | ยุ่งยาก (ต้องสร้างใหม่) | ง่าย (add() , remove() ) |
ใช้งานจริง | เบา เร็ว เหมาะกับข้อมูลไม่เปลี่ยน | เหมาะกับโปรเจกต์จริง ใช้งานร่วมกับ Spring |
ประสิทธิภาพ | เร็วกว่าเล็กน้อย | ช้ากว่าเล็กน้อย แต่ยืดหยุ่นกว่า |
ตัวอย่าง | int[] arr = new int[3]; |
List<Integer> list = new ArrayList<>(); |
📌 Array
int[] numbers = new int[3];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
// ขนาดคงที่ เพิ่มใหม่ไม่ได้
📌 List (ArrayList)
List<Integer> numbers = new ArrayList<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40); // เพิ่มได้ไม่จำกัด
✅ เมื่อไรควรใช้?
ใช้ Array | ใช้ List |
---|---|
ข้อมูลคงที่ ไม่เพิ่ม/ลบบ่อย | ต้องเพิ่ม ลบ ค้นหา บ่อย |
ต้องการประสิทธิภาพสูงสุด (speed/memory) | ต้องการความสะดวกในการจัดการข้อมูล |
เก็บ primitive โดยตรง (เช่น int[] ) |
เก็บ object และใช้ method ที่ Collections Framework ให้มา |
✅ สรุปจำง่าย
- 📌 Array = เร็ว คงที่
- 📌 List = ยืดหยุ่น ใช้ง่าย ใช้บ่อยใน Java สมัยใหม่
🔁 ถ้าเขียนโค้ด Java ยุคใหม่ หรือใช้ Spring Boot → ใช้ List เป็นหลัก
** วิธีแปลง Array ↔ List ใน Java**
แปลง Array → List
✅ แบบง่าย (ใช้ Arrays.asList)
String[] arr = {"A", "B", "C"};
List<String> list = Arrays.asList(arr);
⚠️ หมายเหตุ: Arrays.asList() คืนค่าเป็น fixed-size list → เพิ่ม/ลบไม่ได้ (add() จะ error)
✅ แบบยืดหยุ่น (แนะนำ)
List<String> list = new ArrayList<>(Arrays.asList(arr)); // สามารถ add/remove ได้
list.add("D"); // ✅ ทำได้
คำถาม | ประเด็นที่ควรรู้ |
---|---|
Java กับ JavaScript เหมือนกันมั้ย? | ไม่เหมือนกันเลย |
เปรียบเทียบ Java vs JavaScript
หัวข้อ | Java | JavaScript |
---|---|---|
ประเภทภาษา | ภาษาเชิงวัตถุ (OOP), strongly typed | ภาษา scripting, dynamically typed |
จุดประสงค์ | พัฒนาโปรแกรมขนาดใหญ่ เช่น แอปองค์กร, Android, backend | พัฒนา UI บนเว็บ, frontend, interactivity |
รันอยู่ที่ไหน | รันบน JVM (Java Virtual Machine) | รันใน browser หรือ Node.js |
ต้อง compile ไหม | ✅ ต้อง compile (javac ) |
❌ ไม่ต้อง compile (interpret) |
Syntax | คล้าย C, เข้มงวด, มี type | ยืดหยุ่นกว่า, loosely typed |
การใช้ type |
int age = 20; (ต้องประกาศชัดเจน) |
let age = 20; (type เปลี่ยน runtime ได้) |
ใช้กับอะไรบ่อย | Spring Boot, Android, Microservices | React, Vue, Angular, Node.js |
ตัวอย่างการรัน | java HelloWorld |
รันทันทีใน browser หรือด้วย node
|
Java ≠ JavaScript
*ต่างกันเหมือน “Car” กับ “Carpet” — แค่ชื่อคล้าย แต่ไม่เกี่ยวกันเลย *
Top comments (0)