Buku "Pola desain berorientasi objek"

gambarHalo, habrozhiteli! Lebih dari 25 tahun telah berlalu sejak cetakan pertama dari Pola Desain. Selama waktu ini, buku dari populer berubah menjadi sekte. Di seluruh dunia, dianjurkan untuk membacanya kepada siapa saja yang ingin menghubungkan kehidupan dengan teknologi informasi dan pemrograman. Bahasa "Rusia" yang digunakan oleh orang-orang IT telah berubah, banyak istilah bahasa Inggris telah menjadi akrab, pola telah memasuki kehidupan kita.

Ini adalah edisi ulang tahun dengan terjemahan buku yang diperbarui, yang telah menjadi bacaan wajib bagi setiap programmer. "Pola Desain Berorientasi Objek" menggantikan "Teknik Desain Berorientasi Objek".

Empat pengembang kelas satu - geng beranggotakan empat - menghadirkan pengalaman OOP dalam bentuk dua puluh tiga pola. Pola muncul karena pengembang mencari cara untuk meningkatkan fleksibilitas dan tingkat penggunaan kembali program mereka. Para penulis tidak hanya memberikan prinsip untuk menggunakan pola desain, tetapi juga menyusun informasi. Anda akan belajar tentang peran pola dalam arsitektur sistem yang kompleks dan akan dapat dengan cepat dan efisien membuat aplikasi Anda sendiri, dengan mempertimbangkan semua batasan yang muncul ketika mengembangkan proyek besar. Semua templat diambil dari sistem nyata dan didasarkan pada praktik nyata. Kode C ++ atau Smalltalk ditampilkan untuk setiap pola, menunjukkan kemampuannya.

Kata pengantar


Buku ini menjelaskan solusi sederhana dan elegan untuk masalah khas yang muncul dalam desain berorientasi objek.

Pola muncul karena banyak pengembang mencari cara untuk meningkatkan fleksibilitas dan tingkat penggunaan kembali program mereka. Solusi yang ditemukan diwujudkan dalam bentuk yang ringkas dan mudah dipraktikkan. Geng Empat menjelaskan setiap pola dengan contoh sederhana dalam bahasa yang jelas dan dapat dimengerti. Penggunaan pola dalam pengembangan sistem perangkat lunak memungkinkan perancang untuk pergi ke tingkat pengembangan proyek yang lebih tinggi. Sekarang arsitek dan pemrogram dapat beroperasi dengan nama kiasan pola dan berkomunikasi dalam satu bahasa.

Dengan demikian, buku ini memecahkan dua masalah.

Pertama, ini memperkenalkan peran pola dalam menciptakan arsitektur sistem yang kompleks.

Kedua, ini memungkinkan desainer untuk dengan mudah mengembangkan aplikasi mereka sendiri menggunakan pola-pola yang terkandung dalam manual.

Apa yang berubah di edisi 2020?

  • Terminologi telah diperbarui (misalnya, istilah "refactoring" telah berakar untuk "reorganisasi" kode, untuk bagian itu "berbagi", bukan "pemisahan", dan untuk mixin itu adalah "pencampuran");
  • gaya yang diperbarui;
  • kata-kata besar yang tidak perlu telah dihilangkan (misalnya, "spesifikasi" atau "instantiasi." Yang pertama dapat cukup memadai diganti dengan "definisi", yang kedua dengan "membuat contoh");
  • buku ini akhirnya disebut "Pola Desain Berorientasi Objek".

METODE TEMPLATE POLA (METODE TEMPLATE)


Nama dan klasifikasi pola

Metode templat adalah pola perilaku kelas.

Tujuan

Metode template mendefinisikan dasar dari algoritma dan memungkinkan subclass untuk mendefinisikan kembali beberapa langkah dari algoritma tanpa mengubah strukturnya secara keseluruhan.

Motivasi

Pertimbangkan kerangka kerja aplikasi, yang memiliki kelas Aplikasi dan Dokumen. Kelas Aplikasi bertanggung jawab untuk membuka dokumen yang ada yang disimpan dalam format eksternal (misalnya, dalam file). Objek kelas Dokumen mewakili informasi dokumen setelah membacanya dari file.

Aplikasi yang dibangun atas dasar kerangka kerja ini dapat menelurkan subclass dari kelas Aplikasi dan Dokumen yang memenuhi kebutuhan spesifik.

Misalnya, editor grafis mendefinisikan subclass dari DrawApplication dan DrawDocument, dan spreadsheet mendefinisikan subclass dari SpreadsheetApplication dan SpreadsheetDocument.

gambar

Aplikasi kelas abstrak mendefinisikan algoritma untuk membuka dan membaca dokumen dalam operasi OpenDocument:

void Application::OpenDocument (const char* name) {
      if (!CanOpenDocument(name)) {
          //   
          return;
      }

      Document* doc = DoCreateDocument();

      if (doc) {
          _docs->AddDocument(doc);
          AboutToOpenDocument(doc);
          doc->Open();
          doc->DoRead();
      }
}

Operasi OpenDocument mendefinisikan semua langkah untuk membuka dokumen. Ia memeriksa apakah mungkin untuk membuka dokumen, membuat objek kelas Dokumen, menambahkannya ke kumpulan dokumen, dan membaca dokumen dari file.

Suatu operasi dari bentuk OpenDocument akan disebut metode templat yang menggambarkan algoritma dalam kategori operasi abstrak yang diganti dalam subkelas untuk mendapatkan perilaku yang diinginkan. Subclass dari kelas Aplikasi memverifikasi bahwa mereka dapat membuka (CanOpenDocument) dan membuat dokumen (DoCreateDocument). Subkelas kelas Dokumen membaca dokumen (DoRead). Metode template juga mendefinisikan operasi yang memungkinkan subkelas Aplikasi untuk mendapatkan informasi bahwa suatu dokumen akan dibuka (AboutToOpenDocument).

Menentukan beberapa langkah algoritma menggunakan operasi abstrak, metode template menangkap urutan mereka, tetapi memungkinkan mereka untuk diimplementasikan dalam subkelas dari kelas Aplikasi dan Dokumen.

Penerapan Ketentuan

dasar untuk menerapkan metode templat pola:

  • penggunaan tunggal dari bagian invarian dari algoritma, sementara implementasi dari perilaku yang berubah tetap pada kebijaksanaan subkelas;
  • kebutuhan untuk mengisolasi dan melokalisasi dalam satu kelas perilaku yang umum untuk semua subclass untuk menghindari duplikasi kode. Ini adalah contoh yang baik dari teknik “bracketing to generalisasi” yang dijelaskan oleh William Opdyke dan Ralph Johnson [OJ93]. Pertama, perbedaan dalam kode yang ada terungkap, yang kemudian ditransfer ke operasi terpisah. Pada akhirnya, fragmen kode yang berbeda digantikan oleh metode templat dari mana operasi baru dipanggil;
  • manajemen ekstensi subkelas. Metode templat dapat ditentukan sehingga akan memicu kait - lihat bagian Hasil - pada titik-titik tertentu, yang memungkinkan ekstensi hanya pada titik-titik tersebut.

Struktur

gambar

Peserta

AbstractClass (Aplikasi) - kelas abstrak:

  • mendefinisikan operasi primitif abstrak yang diganti dalam subkelas spesifik untuk mengimplementasikan langkah-langkah algoritma;
  • mengimplementasikan metode templat yang mendefinisikan kerangka suatu algoritma. Metode template memanggil operasi primitif, serta operasi yang didefinisikan dalam kelas AbstractClass atau objek lainnya;

ConcreteClass (MyApplication) - kelas khusus:

  • mengimplementasikan operasi primitif yang melakukan langkah-langkah algoritma dengan cara yang tergantung pada subkelas.

Hubungan

ConcreteClass mengasumsikan bahwa langkah-langkah invarian dari algoritma akan dilakukan dalam AbstractClass. Metode Templat

Hasil

adalah salah satu teknik dasar untuk menggunakan kembali kode. Mereka memainkan peran yang sangat penting di perpustakaan kelas, karena mereka menyediakan kemampuan untuk mengeluarkan perilaku umum di kelas perpustakaan.

Metode template mengarah ke struktur kode terbalik, yang kadang-kadang disebut prinsip Hollywood, menyiratkan ungkapan "Jangan panggil kami, kami akan memanggil Anda" yang sering digunakan dalam kerajaan film ini [Swe85]. Dalam hal ini, ini berarti bahwa kelas induk memanggil operasi subkelas, dan bukan sebaliknya.

Metode template memanggil operasi dari jenis berikut:

  • operasi spesifik (baik dari kelas ConcreteClass, atau dari kelas klien);
  • operasi spesifik dari kelas AbstractClass (yaitu, operasi yang berguna untuk semua subclass);
  • operasi primitif (mis. operasi abstrak);
  • metode pabrik (lihat pola metode pabrik (135));
  • operasi kait yang menerapkan perilaku default yang dapat diperluas dalam subkelas. Seringkali, operasi standar seperti itu tidak melakukan apa-apa.

Penting bahwa operasi template jelas membedakan antara operasi hook (yang dapat diganti) dan operasi abstrak (yang harus diganti). Untuk menggunakan kembali kelas abstrak dengan efisiensi maksimum, penulis subkelas perlu memahami operasi apa yang dimaksudkan untuk diganti.

Subclass dapat memperluas perilaku operasi dengan menggantinya dan secara eksplisit menjalankan operasi dari kelas induk:

void DerivedClass::Operation () {
      //   DerivedClass
      ParentClass::Operation();
}

Sayangnya, sangat mudah untuk melupakan kebutuhan untuk memohon operasi yang diwariskan. Operasi semacam itu dapat ditransformasikan menjadi metode boilerplate untuk memberikan kontrol induk terhadap bagaimana subclass memperpanjangnya. Idenya adalah untuk memohon operasi hook dari metode templat di kelas induk. Kemudian subclass akan dapat mendefinisikan ulang operasi ini dengan tepat:

void ParentClass::Operation () {
      //  ParentClass
      HookOperation();
}

Di kelas induk ParentClass, operasi HookOperation tidak melakukan apa-apa:

void ParentClass::HookOperation () { }

Subkelas mengesampingkan HookOperation untuk memperluas perilaku mereka:

void DerivedClass::HookOperation () {
   //    
}

Implementasi

Ketika menerapkan metode templat pola, Anda harus memperhatikan aspek-aspek berikut:

  • C++. , , . , . , , . , -;
  • . , . , ;
  • Konvensi penamaan. Anda dapat menyorot operasi yang perlu diganti dengan menambahkan awalan ke nama mereka. Misalnya, dalam kerangka kerja MacApp untuk aplikasi Macintosh [App89], nama metode templat dimulai dengan Do prefix: DoCreateDocument, DoRead, dan sebagainya.

Contoh Kode Contoh

C ++ berikut menunjukkan bagaimana kelas induk dapat memaksakan invarian pada subkelasnya. Contoh diambil dari perpustakaan NeXT AppKit [Add94]. Pertimbangkan kelas View, yang mendukung menggambar di layar, semacam invarian, yang terdiri dari fakta bahwa subclass dapat mengubah tampilan hanya ketika fokus. Ini mengharuskan konteks gambar tertentu diatur (misalnya, warna dan font).

Anda dapat menggunakan metode Tampilan templat untuk mengatur negara. Kelas tampilan mendefinisikan dua operasi spesifik (SetFocus dan ResetFocus), yang masing-masing mengatur dan mengatur ulang konteks gambar. Operasi kait Lihat dari kelas Lihat melakukan gambar itu sendiri. Tampilkan panggilan SetFocus sebelum DoDisplay untuk menyiapkan konteks, dan ResetFocus setelah DoDisplay untuk meresetnya:

void View::Display () {
      SetFocus();
      DoDisplay();
      ResetFocus();
}

Untuk mendukung yang invarian, Lihat klien selalu memanggil Tampilan, dan Lihat subkelas selalu ganti DoDisplay.

Di kelas tampilan, operasi DoDisplay tidak melakukan apa-apa:

void View::DoDisplay () { }

Subclass menimpanya untuk menambahkan perilaku menggambar spesifik mereka:

void MyView::DoDisplay () {
      //   
}



Metode Templat Aplikasi yang Diketahui sangat mendasar sehingga ditemukan di hampir setiap kelas abstrak. Rebecca Wirfs-Brock et al. [WBWW90, WBJ90] mendiskusikan metode templat secara rinci.

Pola Terkait

Metode pabrik (135) sering disebut dari metode boilerplate. Pada contoh di bagian Motivasi, templat metode OpenDocument disebut metode pabrik DoCreateDocument.
Strategi (362): metode templat menggunakan pewarisan untuk memodifikasi bagian dari algoritma. Strategi menggunakan delegasi untuk memodifikasi algoritma secara keseluruhan.

"Untuk informasi lebih lanjut tentang buku ini tersedia di situs web penerbit
" Daftar Isi
" Ekstrak

Ke Habrozhiteley Kupon diskon 25% - PLO

Setelah pembayaran versi kertas buku, sebuah buku elektronik dikirim melalui email.

All Articles