เรียน Java ผ่าน Case Study Smart Factory Machine Monitor โดยพัฒนาโค้ดชุดเดียวอย่างต่อเนื่องจากโปรแกรม Console ไปสู่ Business Logic แบบ OOP และ Dashboard ด้วย JavaFX
ทุกบทใช้รูปแบบ สร้างโครงไฟล์ → เพิ่มโค้ดทีละช่วง → รันดูผล → ทำ Challenge จึงไม่ต้องคัดลอกโค้ดก้อนใหญ่ในครั้งเดียว ส่วนโค้ดฉบับเต็มเก็บไว้ในโฟลเดอร์ src สำหรับใช้ตรวจคำตอบและต่อยอด โปรเจกต์ใช้ JDK 21, Maven Wrapper และ JavaFX 21
Repo นี้วางเส้นทางจาก Java Console ไปสู่ระบบ Smart Factory แบบ Full Stack และ IoT โดยสามระยะแรกมีบทเรียนแล้ว ส่วนระยะที่ 4–7 และ Optional Track 4V เป็น Roadmap สำหรับพัฒนาในอนาคต ยังไม่มี EP หรือ Source Code ให้ทำตาม
| ระยะ | Track | ผลลัพธ์ปลายทาง | สถานะ |
|---|---|---|---|
| 1 | Java Basic | Smart Factory Console | มีบทเรียนแล้ว |
| 2 | Java OOP | Smart Factory Core | มีบทเรียนแล้ว |
| 3 | Java Desktop Application | JavaFX Dashboard | มีบทเรียนแล้ว |
| 4 | Spring Boot REST API | นำ OOP Core ให้บริการผ่าน HTTP และ JSON | Roadmap — ยังไม่มีบทเรียน |
| 4V | Vaadin Flow Web UI | ทางเลือก Java-first หลัง Spring Boot สำหรับ Dashboard ภายใน | Optional Roadmap — ยังไม่มีบทเรียน |
| 5 | Angular และ TypeScript | สร้าง Frontend ที่มี Component, Service และ DI | Roadmap — ยังไม่มีบทเรียน |
| 6 | Smart Factory Web Dashboard | เชื่อม Angular กับ Java API เป็นระบบเดียว | Roadmap — ยังไม่มีบทเรียน |
| 7 | MQTT, Database และ IoT Device | รับข้อมูลจริง บันทึกประวัติ และอัปเดต Dashboard | Roadmap — ยังไม่มีบทเรียน |
Angular ยังคงเป็นเส้นทางหลักสำหรับ Full-stack แบบแยก Frontend/Backend ส่วน Vaadin เป็น Optional Track สำหรับผู้ที่ต้องการพัฒนา Web UI ด้วย Java และ OOP ต่อเนื่องจาก JavaFX
หัวข้อในอนาคตจะสอนด้วยแนวทาง Modern OOP โดยใช้ Composition เป็นหลัก ใช้ Inheritance เฉพาะความสัมพันธ์แบบ is-a แยก Business Rule ออกจาก Framework และใช้ Interface, Value Object, Dependency Injection รวมถึง Test เพื่อให้ระบบเปลี่ยน UI, Database หรือช่องทางรับข้อมูลได้โดยไม่ต้องรื้อ Domain Core
ดูขอบเขต Future Roadmap และหลัก Modern OOP
Playlist 1 — Java Basic Lab: Smart Factory Console
พื้นฐานที่จำเป็นสำหรับสร้างโปรแกรมตรวจอุณหภูมิเครื่องจักรจากไฟล์ Java เพียงไฟล์เดียว
| EP | เนื้อหา | เปิดบทเรียน |
|---|---|---|
| 1.1 | ติดตั้ง JDK และโปรแกรมแรก | เริ่มโปรแกรม Java |
| 1.2 | Variable, Data Type และ Constant | เก็บข้อมูลให้ถูกชนิด |
| 1.3 | Operator และ Type Casting | คำนวณค่า Sensor |
| 1.4 | String และ Output Formatting | สร้างรายงาน Console |
| 1.5 | รับข้อมูลด้วย Scanner | รับค่าจากผู้ใช้ |
| 1.6 | if/else และ Logical Operator | สร้างกฎแจ้งเตือน |
| 1.7 | switch และเมนูคำสั่ง | สร้าง Console Menu |
| 1.8 | for, while และ do-while | ทำงานซ้ำด้วย Loop |
| 1.9 | Array และ Enhanced for | เก็บเครื่องจักรหลายเครื่อง |
| 1.10 | Method และ Console Capstone | รวมเป็น Mini Project |
ผลลัพธ์ของ Playlist: โปรแกรม Console แสดงเครื่องจักรและแจ้ง WARNING เมื่ออุณหภูมิสูง
Playlist 2 — Java OOP in Action: Smart Factory Core
เปลี่ยนข้อมูลแบบ Array เป็น Object และออกแบบ Business Logic ที่ Console กับ Desktop App ใช้ร่วมกันได้
| EP | เนื้อหา | เปิดบทเรียน |
|---|---|---|
| 2.1 | Class และ Object | จาก Array สู่ Object |
| 2.2 | Field, Method และ Constructor | สร้าง Object ที่พร้อมใช้ |
| 2.3 | Encapsulation และ Validation | รักษากติกาของ Object |
| 2.4 | Enum และ State | จำกัดสถานะเครื่องจักร |
| 2.5 | Composition และ Value Object | รวม SensorReading กับ Machine |
| 2.6 | Inheritance และ Abstract Class | สร้าง FactoryDevice |
| 2.7 | Interface | กำหนดสัญญา Maintainable |
| 2.8 | Polymorphism | ใช้ Type กลางร่วมกัน |
| 2.9 | Collection, Optional และ Stream | ค้นหาและสรุปข้อมูล |
| 2.10 | Service, Exception และ Test | จบ Smart Factory Core |
ผลลัพธ์ของ Playlist: โมเดล OOP ที่ตรวจ Sensor, เปลี่ยนสถานะ และวางแผนบำรุงรักษาได้
Playlist 3 — Java Desktop Workshop: Smart Factory Dashboard
นำ OOP Core มาสร้าง Desktop Window App ที่เพิ่มเครื่องจักร รับค่า Sensor และอัปเดต Dashboard ได้
| EP | เนื้อหา | เปิดบทเรียน |
|---|---|---|
| 3.1 | JavaFX, Maven, Stage และ Scene | เปิดหน้าต่าง JavaFX แรก |
| 3.2 | Layout Pane | แบ่งพื้นที่หน้าจอ |
| 3.3 | JavaFX CSS | สร้าง Theme |
| 3.4 | Controls และ Form | รับข้อมูลเครื่องจักร |
| 3.5 | Event, Property และ Binding | อัปเดต UI อัตโนมัติ |
| 3.6 | Validation และ Alert | ตรวจข้อมูลก่อนบันทึก |
| 3.7 | TableView และ ObservableList | แสดงรายการเครื่องจักร |
| 3.8 | CellFactory และ Summary Card | แยกสีและสรุปสถานะ |
| 3.9 | เชื่อม Service และ CRUD | ใช้ OOP Core กับ UI |
| 3.10 | Task, Thread และ Timeline | จำลอง Sensor แบบ Live |
| 3.11 | FXML และ Controller | แยก View จาก Logic |
| 3.12 | ภาษาไทย Runtime Image และ IoT | เตรียมส่งมอบและต่อยอด |
ผลลัพธ์ของ Playlist: Smart Factory Desktop Dashboard ที่ใช้งานและต่อยอดได้
ดูภาพรวมโปรเจกต์และหัวข้อ Java ที่ใช้
ระบบติดตามเครื่องจักรในโรงงานที่ทำได้ดังนี้
- แสดงรหัส ชื่อ ตำแหน่ง และสถานะของเครื่องจักร
- รับค่าอุณหภูมิและแรงสั่นสะเทือนจากเซนเซอร์จำลอง
- เปลี่ยนสถานะเป็น
WARNINGเมื่อค่าผิดปกติ และเป็นEMERGENCY_STOPเมื่ออุณหภูมิตั้งแต่ 100 °C - แจ้งเตือนบำรุงรักษาเมื่อทำงานครบ 500 ชั่วโมงหรือมีสถานะผิดปกติ
- เพิ่ม ลบ และบำรุงรักษาเครื่องจักรผ่านหน้าต่าง Desktop
- จำลองค่าเซนเซอร์ครั้งเดียวหรืออัปเดตอัตโนมัติทุก 2 วินาที
- ทดสอบ Business Logic ด้วยสคริปต์เดียว โดย Maven Wrapper จัดการ Dependency ให้
| ระดับ | หัวข้อ | สิ่งที่เห็นในโครงการ |
|---|---|---|
| Basic | ตัวแปร, Data Type, Array | ชื่อเครื่องและค่าอุณหภูมิ |
| Basic | if/else, switch, loop |
ตรวจค่าเตือน เลือกเครื่อง วนแสดงข้อมูล |
| Basic | Method | แยกกฎตรวจอุณหภูมิออกจาก main |
| OOP | Class และ Object | Machine, SensorReading |
| OOP | Encapsulation | field เป็น private และแก้ค่าผ่าน method |
| OOP | Inheritance | Machine extends FactoryDevice |
| OOP | Interface | Machine implements Maintainable |
| OOP | Polymorphism | รับ Machine เป็น FactoryDevice หรือ Maintainable |
| Java API | Enum, List, Optional, Stream | สถานะ คลังข้อมูล การค้นหา และสรุปผล |
| Desktop | JavaFX, FXML, CSS | Stage, Scene, TableView, Binding, Task และ Timeline |
| Quality | Exception และ Test | ตรวจข้อมูลผิด กรณีรหัสซ้ำ และกฎแจ้งเตือน |
ดูวิธีติดตั้ง โครงสร้างไฟล์ และคำสั่งรัน
- JDK 21 LTS
- Terminal หรือ PowerShell
- Editor ใดก็ได้ เช่น VS Code, IntelliJ IDEA หรือ Apache NetBeans
ไม่ต้องติดตั้ง Maven แยก เพราะ mvnw.cmd จะดาวน์โหลด Apache Maven รุ่นที่โครงการกำหนดและตรวจ Checksum ก่อนใช้งานครั้งแรก
ตรวจสอบว่า Java พร้อมใช้งาน:
java -version
javac -versionถ้าคำสั่ง javac หาไม่เจอ แสดงว่าติดตั้งเฉพาะ Java Runtime หรือยังไม่ได้เพิ่มโฟลเดอร์ bin ของ JDK ลงใน PATH
Java_OOP_DesktopApp/
├─ README.md
├─ docs/
│ ├─ FUTURE_ROADMAP.md # ขอบเขตระยะที่ 4–7 และ Optional Track 4V
│ ├─ playlist-01-java-basic/ # EP 1.1–1.10
│ ├─ playlist-02-java-oop/ # EP 2.1–2.10
│ └─ playlist-03-java-desktop/ # EP 3.1–3.12
├─ mvnw.cmd # Maven Wrapper สำหรับ Windows
├─ pom.xml # JavaFX และ Build Configuration
├─ scripts/
│ ├─ build.ps1
│ ├─ check-encoding.ps1
│ ├─ run-basic.ps1
│ ├─ run-oop.ps1
│ ├─ run-desktop.ps1
│ └─ test.ps1
└─ src/
├─ main/java/
│ ├─ module-info.java
│ └─ smartfactory/
│ ├─ basic/BasicDemo.java
│ ├─ model/
│ ├─ oop/OopDemo.java
│ ├─ service/SmartFactoryService.java
│ └─ ui/
├─ main/resources/smartfactory/ui/ # FXML และ CSS
└─ test/java/smartfactory/SmartFactoryTest.java
เปิด PowerShell ที่โฟลเดอร์โปรเจกต์ แล้วเลือกคำสั่งตามตอนที่ต้องการ
powershell -ExecutionPolicy Bypass -File .\scripts\run-basic.ps1โปรแกรมจะให้เลือกเครื่องจักรหมายเลข 1–3 ตัวอย่างผลลัพธ์:
=== KOPES Smart Factory ===
1. Mixer อุณหภูมิ 65.5 °C -> NORMAL
2. Conveyor อุณหภูมิ 82.3 °C -> WARNING
3. Water Pump อุณหภูมิ 58.0 °C -> NORMAL
เลือกเครื่องจักรที่ต้องการดู (1-3): 2
คุณเลือก: Conveyor
powershell -ExecutionPolicy Bypass -File .\scripts\run-oop.ps1ผลลัพธ์ส่วนท้ายควรเป็น:
ทั้งหมด 3 เครื่อง | ต้องตรวจ/บำรุงรักษา 2 เครื่อง
powershell -ExecutionPolicy Bypass -File .\scripts\run-desktop.ps1หน้าต่าง Dashboard จะเปิดขึ้นมา จากนั้นทดลองตามลำดับนี้:
- เลือก
M-001ในตาราง - ใส่อุณหภูมิ
85และแรงสั่น3 - กด อัปเดต Sensor แล้วสังเกตสถานะเปลี่ยนเป็น ต้องตรวจสอบ
- กด บำรุงเสร็จแล้ว แล้วสถานะจะเป็น ปิดเครื่อง
- กด เริ่ม Auto Sensor เพื่อดูข้อมูลเปลี่ยนทุก 2 วินาที
powershell -ExecutionPolicy Bypass -File .\scripts\test.ps1ผลลัพธ์ที่ถูกต้อง:
PASS: 5 tests
โปรเจกต์ JavaFX มี Module และ Dependency จึงใช้ Maven แทนการต่อ --module-path ด้วยตนเอง:
.\mvnw.cmd clean compile
.\mvnw.cmd javafx:run
.\mvnw.cmd -Dexec.mainClass=smartfactory.SmartFactoryTest -Dexec.classpathScope=test exec:javaดูแผนที่บทเรียนและซอร์สโค้ด
เริ่มจากไฟล์เดียวและเห็นผลทันที ครอบคลุมตัวแปร String, double, array, loop, method, if/else, switch และ Scanner
- สารบัญ 10 EP: playlist-01-java-basic
- โค้ด: BasicDemo.java
แก้ปัญหา array หลายชุดที่ต้องจำ index ให้ตรงกันด้วย Machine และ SensorReading แล้วต่อยอด Encapsulation, Inheritance, Interface, Polymorphism, Collection และ Exception
- สารบัญ 10 EP: playlist-02-java-oop
- จุดเริ่มรัน: OopDemo.java
ใช้ OOP และ Service ชุดเดิม สร้าง UI ด้วย JavaFX Stage, Scene, Layout Pane, TableView, Property Binding, CSS, FXML และ Background Task
- สารบัญ 12 EP: playlist-03-java-desktop
- จุดเริ่มรัน: DesktopApp.java
- View: dashboard-view.fxml
- Theme: smart-factory.css
ทดสอบกฎที่สำคัญ ได้แก่ ค่าปลอดภัย ค่าอุณหภูมิสูง การบำรุงรักษา และรหัสซ้ำ จากนั้นต่อยอดเป็นฐานข้อมูลหรือรับข้อมูลจริงจาก IoT
- Test: SmartFactoryTest.java
- บท Test: EP 2.10
- บทส่งมอบและ IoT: EP 3.12
ดู Architecture กติกา และแนวทางต่อยอด
flowchart LR
Sensor[SensorReading] --> Machine
Device[FactoryDevice] -->|extends| Machine
Contract[Maintainable] -->|implements| Machine
Machine --> Service[SmartFactoryService]
Service --> Console[OopDemo]
Service --> Controller[DashboardController]
FXML[FXML View] --> Controller
CSS[JavaFX CSS] --> FXML
แนวคิดสำคัญคือ หน้าจอไม่ควรเป็นเจ้าของกฎธุรกิจ กฎว่าอุณหภูมิเท่าไรจึงเตือนอยู่ใน Machine ส่วนการค้นหา เพิ่ม ลบ และสรุปผลอยู่ใน SmartFactoryService ดังนั้น Console และ Desktop App จึงใช้ logic ชุดเดียวกันได้
| เงื่อนไข | ผลลัพธ์ |
|---|---|
| อุณหภูมิต่ำกว่า 80 °C และแรงสั่นต่ำกว่า 7 mm/s | RUNNING |
| อุณหภูมิตั้งแต่ 80 °C แต่ต่ำกว่า 100 °C | WARNING |
| อุณหภูมิตั้งแต่ 100 °C | EMERGENCY_STOP |
| แรงสั่นตั้งแต่ 7 mm/s โดยอุณหภูมิต่ำกว่า 100 °C | WARNING |
| ชั่วโมงทำงานตั้งแต่ 500 | ควรบำรุงรักษา |
| บำรุงรักษาเสร็จ | ชั่วโมงกลับเป็น 0 และสถานะ OFFLINE |
| เพิ่มรหัสเดิมซ้ำ แม้ตัวพิมพ์เล็ก/ใหญ่ต่างกัน | แสดงข้อผิดพลาด |
กติกาเหล่านี้เป็นค่าจำลองสำหรับการเรียน ไม่ใช่มาตรฐานความปลอดภัยของเครื่องจักรจริง
โครงสร้างเดิมสามารถเปลี่ยนชื่อและกฎได้โดยไม่ต้องเปลี่ยนแนวคิด Java
| Smart Factory | Smart Farm | Smart Home | IoT Environment |
|---|---|---|---|
Machine |
Greenhouse |
RoomDevice |
MonitoringStation |
| อุณหภูมิ/แรงสั่น | ความชื้นดิน/แสง | อุณหภูมิ/พลังงาน | PM2.5/CO₂ |
WARNING |
ต้องรดน้ำ | ใช้พลังงานสูง | คุณภาพอากาศอันตราย |
| Maintenance | เติมน้ำ/ปุ๋ย | ตรวจอุปกรณ์ | เปลี่ยน Sensor |
ตัวอย่างโจทย์ต่อยอด:
- เพิ่ม
EnergyMeter extends FactoryDevice - ให้
EnergyMeter implements Maintainable - เพิ่มค่า power consumption และกฎแจ้งเตือนของตัวเอง
- เก็บ
FactoryDeviceหลายชนิดใน collection เดียวกัน - ใช้ Polymorphism วนแสดงข้อมูลโดยไม่ต้องถามชนิดทุกครั้ง
- รัน Basic Demo และอธิบายทุก Data Type ได้
- เปลี่ยนค่าอุณหภูมิแล้วทำนายผลก่อนรันได้
- อธิบายความต่างระหว่าง Class กับ Object ได้
- บอกได้ว่า field ใดถูก Encapsulation และเพราะอะไร
- อธิบาย
extendsกับimplementsได้ - เพิ่มเครื่องจักรจากหน้าจอได้
- ทำให้เกิดสถานะ WARNING ด้วยตนเองได้
- รัน Test ผ่านทั้ง 5 กรณี
- เพิ่มกฎธุรกิจใหม่พร้อม Test อย่างน้อย 1 ข้อ
ดูวิธีแก้ปัญหาที่พบบ่อย
ติดตั้ง JDK และเพิ่ม <ตำแหน่ง JDK>\bin ลงใน PATH จากนั้นปิดและเปิด Terminal ใหม่
ใช้รูปแบบนี้ ซึ่งเปลี่ยนนโยบายเฉพาะ process ที่กำลังรัน:
powershell -ExecutionPolicy Bypass -File .\scripts\run-desktop.ps1chcp 65001
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new()แล้วรันคำสั่งอีกครั้ง ไฟล์ script ในโปรเจกต์ตั้งค่านี้ให้อัตโนมัติแล้ว
โปรเจกต์ตั้ง Locale เป็น th-TH และเลือกฟอนต์ภาษาไทยให้อัตโนมัติ โดยตรวจตามลำดับ Leelawadee UI, Tahoma, Noto Sans Thai และฟอนต์สำรองของ Java
ตรวจ Encoding ของไฟล์ทั้งหมดก่อน Build:
powershell -ExecutionPolicy Bypass -File .\scripts\check-encoding.ps1ถ้ายังไม่แสดงภาษาไทย ให้ติดตั้งฟอนต์ภาษาไทยอย่างน้อยหนึ่งชุดแล้วเปิดโปรแกรมใหม่ ห้ามแก้ข้อความไทยที่อ่านไม่ออกด้วยการเปลี่ยนเป็น Unicode escape เพราะจะทำให้โค้ดในบทเรียนอ่านยาก
JavaFX ต้องใช้ระบบที่มีหน้าจอ Desktop ถ้าทำงานบนเครื่องแบบ headless ให้รันเฉพาะ Basic, OOP, Build และ Test
สามารถนำโค้ดไปใช้เรียน ทำ Workshop และต่อยอดเป็นโครงการส่วนตัวได้ ปรับชื่อโครงการ เกณฑ์แจ้งเตือน และรูปแบบหน้าจอให้เข้ากับงานได้ตามต้องการ