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.
Tantangan
MudahMari 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 bernamaPatternCategoryyang 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"
- method virtual murni
PatternClassifier.h: Buat classPatternClassifieryang dapat mengidentifikasi kategori suatu pola.Classifier-mu harus memiliki method
classifyyang menerima nama pola (string) dan mengembalikan pointer kePatternCategoryyang 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.- Creational:
main.cpp: Baca satu input, yaitu nama pola desain.Buat
PatternClassifierdan 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 mechanismsDengan input Observer:
Observer is a Behavioral pattern
Purpose: Object interaction and responsibilityDengan input Proxy:
Unknown pattern: ProxyTantangan 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;
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Object
1Dasar-Dasar OOP
File EksternalBuild dan Kompilasi C++File Header dan File SourceNamespace dan CakupanPengantar OOP dalam C++class vs objectPointer 'this'method (Fungsi Anggota)Atribut (Anggota Data)Dasar Ctor dan DtorRingkasan: Kalkulator Sederhana4Properti class
Anggota instance vs staticGetter dan setterFungsi anggota constKata kunci mutableMethod dan variabel staticFungsi dan class friendRangkuman, Pengelola Rekening Bank7Pewarisan
Pewarisan DasarTingkat Akses pada PewarisanUrutan Pemanggilan Ctor & DtorPenimpaan methodFungsi Virtual & VTablePewarisan BergandaPewarisan VirtualRangkuman: Hierarki Karyawan10Gambaran Umum STL
Gambaran Umum dan Filosofi STLKontainer STLIteratorAlgoritma STLFunctor dan Ekspresi LambdaRangkuman: Frekuensi Kata13Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonFactory dan Abstract FactoryPola BuilderPola ObserverPola Strategy2Manajemen Memori
Memori Stack vs HeapPointer dan ReferenceMemori Dinamis (new/delete)Smart Pointer di C++RAII di C++Rangkuman: Pengelola Array Dinamis5Enkapsulasi
Penentu Akses dalam C++Penentu Akses secara MendalamPenyembunyian Informasistruct vs classNested dan Inner classRangkuman, Sistem Catatan Siswa8Polimorfisme
Polimorfisme saat Compile vs RuntimeOverloading FungsiMeninjau Kembali Fungsi VirtualFungsi Virtual MurniKelas AbstrakDesain Interface di C++Casting Dinamis & RTTIRangkuman: Kalkulator Bentuk3Konstruktor & Destruktor
Konstruktor DefaultKonstruktor BerparameterKonstruktor SalinKonstruktor PindahDaftar Inisialisasi KonstruktorKonstruktor DelegasiKupas Tuntas DestruktorAturan Tiga, Lima, dan NolRangkuman: class String6Overloading Operator
Pengantar Overloading OperatorOverloading Operator AritmetikaOverloading Operator PerbandinganOperator StreamOverloading Operator PenugasanOverloading Operator [] dan ()Operator Konversi TipeRingkasan, class Matrix9Template
Template FungsiTemplate classSpesialisasi TemplateTemplate VariadikDasar SFINAE & Type TraitsRangkuman, Container GenerikLatihan sendiri: Compiler C++ online