# Abstraction & Encapsulation

หลังจากที่เข้าใจหลักการของ **Abstraction** กับ **Encapsulation** กันไปเรียบร้อยแล้ว ดังนั้นเรามาสรุปความเข้าใจเจ้า 2 ตัวนี้ก่อนว่ามันเกี่ยวเนื่องกันยังไง

## 🔥 **Abstraction**

> เป็นการแปลงโจทย์ให้เป็น **Models** เพื่อให้เราเอาไปเขียนโค้ดต่อ

![](/files/-M-ZPtcxY1Aj4Zw-ylEd)

## 🔥 **Encapsulation**

> เป็นการ **ควบคุมสิทธิ์** และทำให้ของต่างๆทำงานร่วมกัน

![https://www.scientecheasy.com/2018/06/encapsulation-in-java-real-time-examples-advantages.html](/files/-LvAGsst7RsDTJixGDJl)

## 💖 Abstraction + Encapsulation

เมื่อเราเอาทั้ง 2 แนวคิดนี้มารวมกัน เราจะได้ **Models ที่มีการควบคุมสิทธิ์ในการเข้าใช้งาน** นั่นเอง ซึ่งประโยชน์ที่เราจะได้ก็คือ Model ของเราจะเป็น **Component ที่สามารถเอาไปใช้งานได้** โดยที่คนอื่นไม่จำเป็นต้องสนใจเลยว่าจริงๆมันทำงานยังไง ยกตัวอย่างเช่น **ทีวี**

![iconarchive.com](/files/-LugdGDeuoky9nXVX1y_)

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

เมื่อมองย้อนกลับมาเราจะเห็นว่าทีวีมันมีความเป็น **Abstraction** ก็คือเราสามารถใช้งานมันได้โดยที่ไม่จำเป็นต้องรู้ว่าภายในมันทำงานยังไง และในแง่ของ **Encapsulation** มันก็ซ่อนวงจรต่างๆไว้ภายในไม่ให้เราต้องไปรับรู้ แต่ถ้าเราอยากเชื่อมทีวีกับของอย่างอื่น เช่นลำโพง เขาก็จะมีช่องด้านหลังทีวีให้เราไปจิ้มใช้งานกับเขาได้เลย เพราะเขาเปิดมันให้เราใช้งานได้แค่นั้น ส่วนในแง่ของ **Component** นั้นจะเห็นว่าทีวีที่มันสมบูรณ์แบบในตัวมันเอง เรามีหน้าที่ใช้มันก็พอ ดังนั้นเราก็สามารถนำทีวี ไปใช้งานร่วมกับ Component อื่น เช่น ต่อ AppleTv ต่อลำโพง ต่อเครื่องเกม Nintendo, Xbox, PS4 เข้าไปก็จะสามารถทำงานร่วมกันของอื่นๆได้ทันทีเลย

## 🎯 บทสรุป

Models ที่ดีจะต้องมีการทำ Abstraction เพื่อให้มันใช้งานได้ง่าย แต่จะต้องคิดถึง Sensitive Data ด้วย ดังนั้นเราก็ต้องนำหลักของ Encapsulation เข้ามาร่วมในการออกแบบด้วยนั่นเอง


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://www.saladpuk.com/beginner-1/oop/abs-n-enc.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
