Tags:

คือ ถ้าเราเขียนโปรแกรมโดยมี object ใหญ่ๆ แต่ทำงานได้หลายๆ อย่าง กับแยกงานหลายๆ อย่างนั้นมาเป็น object ย่อยๆ หลายๆ อัน มันจะมีผลต่อประสิทธิภาพของโปรแกรมหรือไม่ครับ เพราะถ้าเราแยกมาหลายๆ ไฟล์ก็ต้องสร้าง object หลายๆ อัน เวลาจะเรียกใช้

รบกวนผู้รู้ด้วยครับ

Get latest news from Blognone
By: UltimaWeapon
Windows PhoneRed HatWindowsIn Love
on 19 April 2012 - 19:40 #410039
UltimaWeapon's picture

มีผลนะมีผลแน่นอนคับ เช่น ใช้ RAM เพิ่มขึ้น ฯลฯ แต่ทางที่ผมแนะนำคือ เขียนให้มัน Balance กันก็พอ เช่น อะไรที่มันสมควรจะแยกคลาสก็ควรจะแยก เพื่อให้ดูแล Code ได้ง่าย อะไรที่มันไม่สมควรแยกก็ไม่ต้องแยก ซึ่งก็น่าจะต้องใช้ประสบการณ์ในการตัดสินว่าอะไรควรแยกอะไรไม่ควรแยก ถ้าทำแบบนี้ เราจะได้ Code ที่ทั้งดูแลง่าย และ Performance สูงไปด้วย (ถึงมันจะไม่สูงเท่าแบบ Optimize สุดๆจนดูแล Code ยากก็เถอะ) ซึ่งมันเป็นทางที่ดีที่สุดสำหรับผม เพราะถ้าให้ผมเขียนแบบทำงานได้เร็วที่สุด แล้วดูแล Code ยาก สิ่งที่จะตามมาคือ Bug เยอะ แก้บั๊กยาก เพิ่ม Feature อื่นๆยาก ฯลฯ ซึ่ง ผมคงไม่เอาด้วย - -'

ส่วนการ Optimize ก็น่าจะต้องใช้ประสบการณ์และความรู้เหมือนกัน ซึ่งก็น่าจะต้องใช้การไฝ่รู้ร่วมด้วย เพราะเท่าที่ผมเห็นคนไทยส่วนมากจะเขียน Code แบบขอให้เสร็จและใช้ได้พอ Performance ช่างหัวมัน

ยกตัวอย่างสั้นๆของ .NET ก็ เลี่ยงการ Boxing/Unboxing ให้ได้มากที่สุด ฯลฯ

By: soginal
AndroidIn Love
on 20 April 2012 - 00:23 #410150
soginal's picture

โดยทั่วไปแล้วคุณไม่จำเป็นต้องกังวลกับเรื่องนี้ครับ

By: mr_tawan
ContributoriPhoneAndroidWindows
on 20 April 2012 - 02:47 #410177
mr_tawan's picture

ในทางกลับกัน ถ้าคลาสมีขนาดใหญ่ แล้วมีฟังก์ชั่นการทำงานเยอะมาก ... มักจะเป็นจุดบ่งชี้ว่าการออกแบบมีปัญหาครับ


  • 9tawan.net บล็อกส่วนตัวฮับ
By: xenogew
ContributorAndroidWindows
on 20 April 2012 - 11:20 #410303
xenogew's picture

มีผลกับ Performance โดยตรงครับ ซึ่งมันจะกิน heap ram ไปเรื่อย ๆ และไม่ยอมคลายหน่วยความจำทิ้ง เพราะโปรแกรมจะถือว่า Object ตัวนี้ยังมีการเข้าถึงอยู่

และถ้ายังเขียนต่อไปเรื่อย ๆ จะเหนื่อยครับ ถ้าหากการทำงานมันหน่วงขึ้นเรื่อย ๆ

ทีนี้คุณจะมีงานใหม่เข้ามาให้ทำ คือการ Tuning ระบบ ซึ่งต้องมานั่งไล่ว่า Object ที่จำเป็น/ไม่จำเป็น ตัวไหนปล่อยหน่วยความจำทิ้งให้ Garbage ได้บ้าง

By: polawing on 20 April 2012 - 13:00 #410407

แบ่งเป็น class ให้หมดครับ เพราะ ถ้าคุณมามัวแต่คิดว่า ตรงนี้ควรแบ่ง ตรงนี้ไม่ควรแบ่ง คุณจะเจอปัญหาใหม่และหนักกว่า คือ bug กิน ถ้า bug ไม่กินคนใหม่มาก็เขียนต่อคุณลำบากครับ เพราะเขาไม่รู้หลอกว่า logic ในการแบ่งแยก class หรือ code ของคุณเอาlogic อะไรแบ่งปัญหาระยะยาวจะเกิด เพราะ การออกแบบที่ไม่เป็น standard เดียวกันครับ

By: shikima
Windows PhoneAndroidUbuntu
on 20 April 2012 - 16:32 #410516 Reply to:410407

ผมก็ทำแบบนี้แหละครับ แต่เจอปัญหาว่า บางหน้า (pane) มันต้องเรียกหลายฟังก์ชั่นมากๆ แล้วถ้าแยกกันทำงาน มันก็มีหลาย obj ก็เลยกลัวว่าจะเป็นปัญหาในอนาคตอ่ะครับ
เลยอยากทราบว่า obj น้อยๆ แต่ method เยอะหน่อย (ที่มันเกี่ยวข้องกัน) ไว้ใน obj เดียวกัน หรือ แยกแบบเด็ดขาดไปเลย อันไหนจะดีกว่ากัน

By: Architec
ContributorWindows PhoneAndroidWindows
on 20 April 2012 - 19:01 #410626 Reply to:410516

ถ้า RAM มันจำกัดจริงๆและทุก Method ต้องใช้ object ร่วมกันก็คลาสเดียวพอครับ

ประสบการณ์ตรงจากการเขียนลง NET MF แยกกันก็บรรลัย -*-

By: KnightBaron
ContributoriPhoneAndroidRed Hat
on 21 April 2012 - 01:30 #410874
KnightBaron's picture

Micro-optimization is the root of all evil. อ่านง่ายไว้ก่อนครับ :D

By: soginal
AndroidIn Love
on 21 April 2012 - 01:35 #410875 Reply to:410874
soginal's picture

+1 ครับ และการพยายาม optimize ไปพร้อมๆกับออกแบบโปรแกรม มันจะทำให้ทุกอย่างยุ่งยากขึ้น

By: heart
ContributoriPhone
on 22 April 2012 - 16:34 #411264
heart's picture

OOP เป็นการเลียนแบบธรรมชาติ

ด้วยการแยกวัตถุออกเป็นอิสระต่อกัน ประมวลผล และทำงานแยกกัน

OOP ในอุดมคติ ตามความคิดของผมแล้ว คือการแยกวัตถุออกย่างชัดเจน และให้วัตถุแต่ละวัตถุประมวลผล
ด้วยตัวเองอย่างชัดเจน ซึ่งจะมีประโยชน์ในการออกแบบโปรแกรม ด้วยความราบรื่น สะดวก และง่ายดาย

แต่ว่า อย่าลืมว่า ในธรรมชาติแล้ว มนุษย์แต่ละคน หรือวัตถุแต่ละชิ้น
ต่างมีสมองของตัวเอง มีหน่วยประมวลผลของตัวเอง มีความจำของตัวเอง
ดังนั้นในโลกจริงๆ วัตถุจึงสามารถแยกกันได้ชัดเจน ยิ่งเยอะยิ่งดี

แต่สำหรับในคอมพิวเตอร์แล้ว ทุกวัตถุ ต้องแชร์หน่วยประมวลผลซึ่งกันและกัน
แชร์หน่วยความจำ แชร์ทรพยากรณ์กันใช้

หากจะทำโปรแกรมให้เร็วแล้ว
ทางออกก็คือ เราจะต้องทำ กึ่ง ระหว่าง OOP ล้วน และการเขียนโค้ดเชิงฟังชั่น
ซึ่งสิ่งที่จะอธิบายได้ดี ก็คือ Design Pattern ต่างๆ

จะสังเกตุว่า Design pattern ต่างๆนั้น บางชนิดก็ไม่ได้แยกวัตถุกันชัดเจน จนเป็นตัวใครตัวมันซะทีเดียว
(โดยเฉพาะ กรณีวัตถุจำนวนเยอะมากจนเกินไป)