Menu
CoddyTech

Pengantar Pola Desain

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 90 dari 104.

Design patterns adalah solusi yang telah teruji dan dapat digunakan kembali untuk masalah umum yang muncul dalam desain perangkat lunak. Solusi ini bukanlah kode yang kamu salin langsung, melainkan templat atau cetak biru yang menjelaskan cara menyusun class dan object untuk menyelesaikan tantangan tertentu dengan elegan.

Konsep ini dipopulerkan oleh "Gang of Four" (GoF) dalam buku mereka pada tahun 1994, yang mengatalogkan 23 pola dasar. Pola-pola ini biasanya dikelompokkan ke dalam tiga kategori:

Kategori Tujuan Contoh
Penciptaan Mekanisme pembuatan object Singleton, Factory, Builder
Struktural Komposisi class dan object Adapter, Decorator, Composite
Perilaku Interaksi dan tanggung jawab object Observer, Strategy, Command

Mengapa mempelajari pola desain? Pola desain menyediakan kosakata bersama bagi para pengembang. Ucapan "gunakan Factory di sini" langsung menyampaikan gagasan yang kompleks. Pola desain juga membantumu menghindari menciptakan ulang solusi dan membuat kodemu lebih fleksibel serta mudah dipelihara.

Di C++, design pattern memanfaatkan fitur OOP yang sudah kamu pelajari: pewarisan, polimorfisme, abstract class, dan template. Dalam beberapa pelajaran berikutnya, kamu akan mengimplementasikan beberapa design pattern penting dan memahami kapan masing-masing menjadi pilihan yang tepat.

challenge icon

Tantangan

Mudah

Mari buat classifier pola sederhana yang menunjukkan pemahamanmu tentang tiga kategori pola desain. Kamu akan membuat sistem yang menerima nama pola, lalu mengidentifikasi kategorinya, Creational, Structural, atau Behavioral, beserta deskripsi singkat tentang tujuan kategori tersebut.

Kamu akan mengatur kodemu dalam tiga file:

  • PatternCategory.h: Definisikan class dasar abstrak bernama PatternCategory yang mewakili kategori pola desain. Class ini harus memiliki:
    • method virtual murni getName() yang mengembalikan nama kategori sebagai string
    • method virtual murni getPurpose() yang mengembalikan deskripsi tentang fungsi pola dalam kategori ini
    • destruktor virtual

    Lalu buat tiga class turunan yang mewarisi PatternCategory:

    • CreationalCategory: mengembalikan nama "Creational" dan tujuan "Object creation mechanisms"
    • StructuralCategory: mengembalikan nama "Structural" dan tujuan "Class and object composition"
    • BehavioralCategory: mengembalikan nama "Behavioral" dan tujuan "Object interaction and responsibility"
  • PatternClassifier.h: Buat class PatternClassifier yang dapat mengidentifikasi kategori suatu pola.

    Classifier-mu harus memiliki method classify yang menerima nama pola (string) dan mengembalikan pointer ke PatternCategory yang sesuai. Gunakan pointer pintar (std::unique_ptr) untuk pengelolaan memori.

    Classifier harus mengenali pola berikut:

    • Creational: Singleton, Factory, Builder
    • Structural: Adapter, Decorator, Composite
    • Behavioral: Observer, Strategy, Command

    Jika nama pola tidak dikenali, kembalikan nullptr.

  • main.cpp: Baca satu input, yaitu nama pola desain.

    Buat PatternClassifier dan gunakan untuk mengklasifikasikan pola yang menjadi input. Jika pola dikenali, cetak:

    [PatternName] is a [CategoryName] pattern
    Purpose: [CategoryPurpose]

    Jika pola tidak dikenali, cetak:

    Unknown pattern: [PatternName]

Contohnya, dengan input Singleton:

Singleton is a Creational pattern
Purpose: Object creation mechanisms

Dengan input Observer:

Observer is a Behavioral pattern
Purpose: Object interaction and responsibility

Dengan input Proxy:

Unknown pattern: Proxy

Tantangan ini memperkuat pemahamanmu tentang tiga kategori pola desain sambil melatih pewarisan, polimorfisme, dan pointer pintar, yaitu semua konsep yang sudah kamu kuasai. Struktur yang terdiri dari beberapa file ini mencerminkan cara proyek nyata mengatur class yang saling berkaitan.

Coba sendiri

#include <iostream>
#include <string>
#include "PatternClassifier.h"

int main() {
    // Baca nama pola
    std::string patternName;
    std::cin >> patternName;
    
    // TODO: Buat instance PatternClassifier
    
    // TODO: Gunakan classifier untuk mengklasifikasikan pola input
    
    // TODO: Jika pola dikenali, tampilkan:
    // "[PatternName] is a [CategoryName] pattern"
    // "Purpose: [CategoryPurpose]"
    
    // TODO: Jika pola tidak dikenali (nullptr), tampilkan:
    // "Unknown pattern: [PatternName]"
    
    return 0;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler C++ online