สัปดาห์ที่ 13 Advanced Programming Structure

จุดประสงค์การเรียนรู้

  1. ใช้ Generic/Template เพื่อสร้างโค้ดที่นำกลับมาใช้ซ้ำได้
  2. เลือกใช้ Collection ให้เหมาะกับข้อมูลได้
  3. อธิบาย Lambda และ Design Pattern เบื้องต้นได้

เนื้อหา

Generic/Template

Generic หรือ Template ช่วยเขียนโค้ดที่รองรับข้อมูลหลายชนิดโดยไม่ต้องเขียนซ้ำ เหมาะกับฟังก์ชันหรือโครงสร้างข้อมูลที่มีพฤติกรรมเหมือนกันแต่ชนิดข้อมูลต่างกัน

Collection

Collection คือโครงสร้างข้อมูลมาตรฐาน เช่น List, Stack, Queue, Set และ Map การเลือกใช้ควรพิจารณาวิธีเพิ่ม ลบ ค้นหา และเรียงข้อมูล

Lambda

Lambda คือฟังก์ชันนิรนามที่ใช้ส่งพฤติกรรมเป็นค่า เช่น callback, filter, map หรือ sort ทำให้โค้ดกระชับและยืดหยุ่นขึ้น

Design Pattern

Design Pattern เป็นแนวทางแก้ปัญหาการออกแบบที่ใช้ซ้ำได้ เช่น MVC, Singleton และ Factory ซึ่งช่วยให้โครงสร้างโปรแกรมชัดเจนขึ้น

Workshop

ปรับ Mini Project ให้ใช้ Collection, Lambda หรือ Pattern ที่เหมาะสมอย่างน้อย 1 จุด

รายละเอียดการเรียนรู้

ผู้เรียนเรียนรู้การยกระดับโครงสร้างโปรแกรมให้ยืดหยุ่นและนำกลับมาใช้ซ้ำได้ Generic/Template ช่วยลดการเขียนโค้ดซ้ำเมื่อ logic เหมือนกันแต่ชนิดข้อมูลต่างกัน Collection ช่วยเลือกโครงสร้างข้อมูลให้ตรงกับลักษณะการใช้งาน เช่น ต้องค้นหาเร็ว ต้องรักษาลำดับ หรือไม่ต้องการค่าซ้ำ

Lambda ช่วยส่งพฤติกรรมเป็นค่า เช่น การกรอง การเรียง หรือ callback ส่วน Design Pattern ช่วยให้มีภาษากลางในการออกแบบ เช่น MVC แยกหน้าที่ของข้อมูล การประมวลผล และการแสดงผล Factory ช่วยสร้าง Object โดยซ่อนรายละเอียด และ Singleton ใช้กับทรัพยากรที่ควรมีชุดเดียวอย่างระมัดระวัง

แนวปฏิบัติ

  1. เลือก Collection จากรูปแบบการใช้งาน ไม่เลือกจากความคุ้นเคยเท่านั้น
  2. ใช้ Generic/Template เมื่อพบโค้ดซ้ำต่างกันแค่ชนิดข้อมูล
  3. ใช้ Pattern เพื่อแก้ปัญหาจริง ไม่ใช้เพื่อให้โค้ดดูซับซ้อน
  4. เขียนตัวอย่างใช้งานให้เห็นประโยชน์ชัดเจน

แบบฝึกหัด

ปรับโค้ดเดิมให้ใช้ Collection ที่เหมาะสม และอธิบายเหตุผลการเลือก พร้อมใช้ Lambda หรือ Pattern อย่างน้อย 1 จุด

รูปแบบการนำเสนอเพิ่มเติมตามแม่แบบ

Advanced Programming Structure คือการเลือกโครงสร้างและรูปแบบการเขียนโปรแกรมที่ช่วยให้โค้ดยืดหยุ่น นำกลับมาใช้ซ้ำได้ และขยายต่อได้ง่าย

%%{init: {'theme': 'base', 'themeVariables': {'background': '#282828','primaryColor': '#3c3836','primaryTextColor': '#fbf1c7','primaryBorderColor': '#fabd2f','lineColor': '#b8bb26','secondaryColor': '#504945','tertiaryColor': '#665c54'}}}%%
flowchart TD
  A[Problem
ปัญหา] --> B[Collection
เลือกโครงสร้างข้อมูล] B --> C[Generic/Template
ลดโค้ดซ้ำ] C --> D[Lambda
ส่งพฤติกรรม] D --> E[Design Pattern
รูปแบบออกแบบ]

สมการเลือก Collection จากต้นทุนการค้นหา

C=n×q

ตัวอย่างโค้ดทดลอง

#include <iostream>
#include <vector>
using namespace std;

template <typename T>
T maxValue(T a, T b) {
    return (a > b) ? a : b; // generic function
}

int main() {
    cout << maxValue<int>(3, 7) << endl;       // expected: 7
    cout << maxValue<double>(2.5, 1.5) << endl; // expected: 2.5
    return 0;
}
แนวคิด ใช้เมื่อ ตัวอย่าง
Template logic เหมือนกันแต่ชนิดข้อมูลต่างกัน maxValue
Collection ต้องเก็บข้อมูลหลายรายการ vector, map
Lambda ต้องส่งพฤติกรรมสั้น ๆ sort/filter
Pattern มีปัญหาออกแบบซ้ำ ๆ Factory, MVC

กลับรายวิชา