# Abstraction & Encapsulation

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

## 🔥 **Abstraction**

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

![](https://479516123-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lm0_idNbY6k1lwp6hm4%2F-M1lfqlFTvI3gmheTI_q%2F-M-ZPtcxY1Aj4Zw-ylEd%2Fimage.png?generation=1583529169710112\&alt=media)

## 🔥 **Encapsulation**

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

![https://www.scientecheasy.com/2018/06/encapsulation-in-java-real-time-examples-advantages.html](https://479516123-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lm0_idNbY6k1lwp6hm4%2F-M1lfqlFTvI3gmheTI_q%2F-LvAGsst7RsDTJixGDJl%2Fimage.png?generation=1583529128016032\&alt=media)

## 💖 Abstraction + Encapsulation

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

![iconarchive.com](https://479516123-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lm0_idNbY6k1lwp6hm4%2F-M1lfqlFTvI3gmheTI_q%2F-LugdGDeuoky9nXVX1y_%2Fimage.png?generation=1583529155360001\&alt=media)

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

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

## 🎯 บทสรุป

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