Bagikan melalui


Abstraksi (Jenis dan Antarmuka Abstrak)

Catatan

Konten ini dicetak ulang oleh izin Pearson Education, Inc. dari Panduan Desain Kerangka Kerja: Konvensi, Idiom, dan Pola untuk Pustaka .NET yang Dapat Digunakan Kembali, Edisi ke-2. Edisi itu diterbitkan pada tahun 2008, dan buku tersebut telah sepenuhnya direvisi pada edisi ketiga. Beberapa informasi di halaman ini mungkin sudah kedaluarsa.

Abstraksi adalah jenis yang menjelaskan kontrak tetapi tidak memberikan implementasi penuh kontrak. Abstraksi biasanya diimplementasikan sebagai kelas atau antarmuka abstrak, dan dilengkapi dengan serangkaian dokumentasi referensi yang terdefinisi dengan baik yang menjelaskan semantik yang diperlukan dari jenis yang mengimplementasikan kontrak. Beberapa abstraksi terpenting dalam .NET Framework termasuk Stream, IEnumerable<T>, dan Object.

Anda dapat memperluas kerangka kerja dengan menerapkan jenis konkret yang mendukung kontrak abstraksi dan menggunakan jenis konkret ini dengan API kerangka kerja yang mengonsumsi (beroperasi pada) abstraksi.

Abstraksi yang bermakna dan berguna yang mampu menahan uji waktu sangat sulit dirancang. Kesulitan utama adalah mendapatkan himpunan anggota yang tepat, tidak lebih dan tidak lebih sedikit. Jika abstraksi memiliki terlalu banyak anggota, itu menjadi sulit atau bahkan tidak mungkin untuk diterapkan. Jika memiliki terlalu sedikit anggota untuk fungsionalitas yang dijanjikan, itu menjadi tidak berguna dalam banyak skenario menarik.

Terlalu banyak abstraksi dalam kerangka kerja juga berdampak negatif pada kegunaan kerangka kerja. Seringkali cukup sulit untuk memahami abstraksi tanpa memahami bagaimana itu cocok dengan gambaran yang lebih besar dari implementasi konkret dan API yang beroperasi pada abstraksi. Selain itu, nama abstraksi dan anggotanya selalu abstrak, yang sering membuat mereka kriptografis dan tidak dapat dijangkau tanpa terlebih dahulu memahami konteks penggunaannya yang lebih luas.

Namun, abstraksi memberikan ekstensibilitas yang sangat kuat bahwa mekanisme ekstensibilitas lainnya sering tidak dapat dicocokkan. Mereka adalah inti dari banyak pola arsitektur, seperti plug-in, inversion of control (IoC), alur, dan sebagainya. Mereka juga sangat penting untuk uji coba kerangka kerja. Abstraksi yang baik memungkinkan untuk membagi dependensi yang berat untuk tujuan pengujian unit. Singkatnya, abstraksi bertanggung jawab atas kekayaan yang dicari dari kerangka kerja berorientasi objek modern.

❌ JANGAN memberikan abstraksi kecuali diuji dengan mengembangkan beberapa implementasi konkret dan API yang mengonsumsi abstraksi.

✔️ LAKUKAN dengan memilih secara hati-hati antara kelas abstrak dan antarmuka saat merancang abstraksi.

✔️ PERTIMBANGKAN untuk menyediakan pengujian referensi untuk implementasi abstraksi yang konkret. Pengujian tersebut harus memungkinkan pengguna untuk menguji apakah implementasi mereka menerapkan kontrak dengan benar.

Portions © 2005, 2009 Microsoft Corporation. Semua hak dilindungi undang-undang.

Dicetak ulang dengan izin dari Pearson Education, Inc. dari Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition oleh Krzysztof Cwalina dan Brad Abrams, diterbitkan 22 Okt 2008 oleh Addison-Wesley Professional sebagai bagian dari Seri Pengembangan Microsoft Windows.

Lihat juga