คือ ถ้าเราเขียนโปรแกรมโดยมี object ใหญ่ๆ แต่ทำงานได้หลายๆ อย่าง กับแยกงานหลายๆ อย่างนั้นมาเป็น object ย่อยๆ หลายๆ อัน มันจะมีผลต่อประสิทธิภาพของโปรแกรมหรือไม่ครับ เพราะถ้าเราแยกมาหลายๆ ไฟล์ก็ต้องสร้าง object หลายๆ อัน เวลาจะเรียกใช้
รบกวนผู้รู้ด้วยครับ
มีผลนะมีผลแน่นอนคับ เช่น ใช้ RAM เพิ่มขึ้น ฯลฯ แต่ทางที่ผมแนะนำคือ เขียนให้มัน Balance กันก็พอ เช่น อะไรที่มันสมควรจะแยกคลาสก็ควรจะแยก เพื่อให้ดูแล Code ได้ง่าย อะไรที่มันไม่สมควรแยกก็ไม่ต้องแยก ซึ่งก็น่าจะต้องใช้ประสบการณ์ในการตัดสินว่าอะไรควรแยกอะไรไม่ควรแยก ถ้าทำแบบนี้ เราจะได้ Code ที่ทั้งดูแลง่าย และ Performance สูงไปด้วย (ถึงมันจะไม่สูงเท่าแบบ Optimize สุดๆจนดูแล Code ยากก็เถอะ) ซึ่งมันเป็นทางที่ดีที่สุดสำหรับผม เพราะถ้าให้ผมเขียนแบบทำงานได้เร็วที่สุด แล้วดูแล Code ยาก สิ่งที่จะตามมาคือ Bug เยอะ แก้บั๊กยาก เพิ่ม Feature อื่นๆยาก ฯลฯ ซึ่ง ผมคงไม่เอาด้วย - -'
ส่วนการ Optimize ก็น่าจะต้องใช้ประสบการณ์และความรู้เหมือนกัน ซึ่งก็น่าจะต้องใช้การไฝ่รู้ร่วมด้วย เพราะเท่าที่ผมเห็นคนไทยส่วนมากจะเขียน Code แบบขอให้เสร็จและใช้ได้พอ Performance ช่างหัวมัน
ยกตัวอย่างสั้นๆของ .NET ก็ เลี่ยงการ Boxing/Unboxing ให้ได้มากที่สุด ฯลฯ
โดยทั่วไปแล้วคุณไม่จำเป็นต้องกังวลกับเรื่องนี้ครับ
ในทางกลับกัน ถ้าคลาสมีขนาดใหญ่ แล้วมีฟังก์ชั่นการทำงานเยอะมาก ... มักจะเป็นจุดบ่งชี้ว่าการออกแบบมีปัญหาครับ
มีผลกับ Performance โดยตรงครับ ซึ่งมันจะกิน heap ram ไปเรื่อย ๆ และไม่ยอมคลายหน่วยความจำทิ้ง เพราะโปรแกรมจะถือว่า Object ตัวนี้ยังมีการเข้าถึงอยู่
และถ้ายังเขียนต่อไปเรื่อย ๆ จะเหนื่อยครับ ถ้าหากการทำงานมันหน่วงขึ้นเรื่อย ๆ
ทีนี้คุณจะมีงานใหม่เข้ามาให้ทำ คือการ Tuning ระบบ ซึ่งต้องมานั่งไล่ว่า Object ที่จำเป็น/ไม่จำเป็น ตัวไหนปล่อยหน่วยความจำทิ้งให้ Garbage ได้บ้าง
แบ่งเป็น class ให้หมดครับ เพราะ ถ้าคุณมามัวแต่คิดว่า ตรงนี้ควรแบ่ง ตรงนี้ไม่ควรแบ่ง คุณจะเจอปัญหาใหม่และหนักกว่า คือ bug กิน ถ้า bug ไม่กินคนใหม่มาก็เขียนต่อคุณลำบากครับ เพราะเขาไม่รู้หลอกว่า logic ในการแบ่งแยก class หรือ code ของคุณเอาlogic อะไรแบ่งปัญหาระยะยาวจะเกิด เพราะ การออกแบบที่ไม่เป็น standard เดียวกันครับ
ผมก็ทำแบบนี้แหละครับ แต่เจอปัญหาว่า บางหน้า (pane) มันต้องเรียกหลายฟังก์ชั่นมากๆ แล้วถ้าแยกกันทำงาน มันก็มีหลาย obj ก็เลยกลัวว่าจะเป็นปัญหาในอนาคตอ่ะครับ
เลยอยากทราบว่า obj น้อยๆ แต่ method เยอะหน่อย (ที่มันเกี่ยวข้องกัน) ไว้ใน obj เดียวกัน หรือ แยกแบบเด็ดขาดไปเลย อันไหนจะดีกว่ากัน
ถ้า RAM มันจำกัดจริงๆและทุก Method ต้องใช้ object ร่วมกันก็คลาสเดียวพอครับ
ประสบการณ์ตรงจากการเขียนลง NET MF แยกกันก็บรรลัย -*-
Micro-optimization is the root of all evil. อ่านง่ายไว้ก่อนครับ :D
+1 ครับ และการพยายาม optimize ไปพร้อมๆกับออกแบบโปรแกรม มันจะทำให้ทุกอย่างยุ่งยากขึ้น
OOP เป็นการเลียนแบบธรรมชาติ
ด้วยการแยกวัตถุออกเป็นอิสระต่อกัน ประมวลผล และทำงานแยกกัน
OOP ในอุดมคติ ตามความคิดของผมแล้ว คือการแยกวัตถุออกย่างชัดเจน และให้วัตถุแต่ละวัตถุประมวลผล
ด้วยตัวเองอย่างชัดเจน ซึ่งจะมีประโยชน์ในการออกแบบโปรแกรม ด้วยความราบรื่น สะดวก และง่ายดาย
แต่ว่า อย่าลืมว่า ในธรรมชาติแล้ว มนุษย์แต่ละคน หรือวัตถุแต่ละชิ้น
ต่างมีสมองของตัวเอง มีหน่วยประมวลผลของตัวเอง มีความจำของตัวเอง
ดังนั้นในโลกจริงๆ วัตถุจึงสามารถแยกกันได้ชัดเจน ยิ่งเยอะยิ่งดี
แต่สำหรับในคอมพิวเตอร์แล้ว ทุกวัตถุ ต้องแชร์หน่วยประมวลผลซึ่งกันและกัน
แชร์หน่วยความจำ แชร์ทรพยากรณ์กันใช้
หากจะทำโปรแกรมให้เร็วแล้ว
ทางออกก็คือ เราจะต้องทำ กึ่ง ระหว่าง OOP ล้วน และการเขียนโค้ดเชิงฟังชั่น
ซึ่งสิ่งที่จะอธิบายได้ดี ก็คือ Design Pattern ต่างๆ
จะสังเกตุว่า Design pattern ต่างๆนั้น บางชนิดก็ไม่ได้แยกวัตถุกันชัดเจน จนเป็นตัวใครตัวมันซะทีเดียว
(โดยเฉพาะ กรณีวัตถุจำนวนเยอะมากจนเกินไป)