Results (
Indonesian) 2:
[Copy]Copied!
Mengapa penting untuk memisahkan dua tanggung jawab ini ke dalam kelas terpisah?
Karena setiap tanggung jawab adalah sumbu perubahan. Ketika perubahan persyaratan, bahwa
perubahan akan terwujud melalui perubahan dalam tanggung jawab antara kelas. Jika kelas
mengasumsikan lebih dari satu tanggung jawab, maka akan ada lebih dari satu alasan untuk itu untuk
mengubah. Jika kelas memiliki lebih dari satu tanggung jawab, maka tanggung jawab menjadi digabungkan. Perubahan salah satu tanggung jawab dapat mengganggu atau menghambat kemampuan kelas untuk memenuhi lain. semacam ini kopling menyebabkan desain rapuh yang melanggar dengan cara tak terduga ketika berubah. Sebagai contoh, mempertimbangkan desain pada Gambar 9-1. TheRectangleclass memiliki dua metode ditampilkan. Satu menarik persegi panjang di layar, yang lain menghitung luas persegi panjang. Dua aplikasi yang berbeda menggunakan theRectangleclass. Salah satu aplikasi tidak geometri komputasi. Menggunakan Rectangleto membantu dengan matematika bentuk geometris. Ini tidak pernah menarik persegi panjang di layar. Aplikasi lain adalah grafis di alam. Ini juga dapat melakukan beberapa geometri komputasi, tapi pasti menarik persegi panjang pada layar. Desain ini melanggar SRP. Kelas Rectangle memiliki dua tanggung jawab. Yang pertama jawab adalah untuk menyediakan model matematika dari geometri persegi panjang. Tanggung jawab kedua adalah untuk membuat persegi panjang pada antarmuka pengguna grafis. Pelanggaran SRP menyebabkan beberapa masalah jahat. Pertama, kita harus menyertakan theGUI dalam aplikasi geometri komputasi. Jika ini adalah ++ aplikasi C, GUI akan harus terhubung dalam, memakan waktu hubungan, waktu kompilasi, dan jejak memori. Dalam Java aplikasi, the.classfiles untuk theGUIhave akan dikerahkan untuk platform target. Kedua, jika perubahan ke theGraphicalApplicationcauses theRectangleto perubahan untuk beberapa alasan, perubahan yang mungkin memaksa kita untuk membangun kembali, tes ulang, dan memindahkan para ComputationalGeometryApplication. Jika kita lupa untuk melakukan hal ini, aplikasi yang dapat mematahkan cara tak terduga Sebuah desain yang lebih baik adalah untuk memisahkan dua tanggung jawab menjadi dua sama sekali berbeda kelas seperti yang ditunjukkan pada Gambar 9-2. Desain ini bergerak bagian komputasi Rectangleinto theGeometricRectangleclass. Sekarang perubahan dibuat dengan cara persegi panjang yang diberikan tidak dapat mempengaruhi theComputationalGeometryApplication. Apa Tanggung Jawab a? Dalam konteks Tanggung Jawab Single Prinsip (SRP) kita mendefinisikan tanggung jawab untuk menjadi "alasan untuk perubahan." Jika Anda dapat memikirkan lebih dari satu Motif untuk mengubah kelas, maka kelas yang memiliki lebih dari satu tanggung jawab. Hal ini kadang-kadang sulit untuk melihat. Kita terbiasa berpikir tanggung jawab dalam kelompok. Sebagai contoh, mempertimbangkan Modeminterface pada Listing 9-1. Sebagian besar dari kita akan setuju bahwa antarmuka ini terlihat sangat masuk akal. Keempat fungsi itu menyatakan tentu fungsi milik modem. Namun, ada dua tanggung jawab yang ditampilkan di sini. Tanggung jawab pertama adalah manajemen koneksi. Yang kedua adalah komunikasi data. Thedialandhangupfunctions mengelola koneksi modem, sedangkan thesendandrecvfunctions berkomunikasi data. Jika dua tanggung jawab ini dipisahkan? Hampir pasti mereka harus. The dua set fungsi hampir tidak ada kesamaan. Mereka pasti akan berubah untuk alasan yang berbeda. Selain itu, mereka akan dipanggil dari bagian yang sama sekali berbeda dari aplikasi yang menggunakannya. Bagian-bagian yang berbeda akan berubah untuk alasan yang berbeda juga. Oleh karena itu desain pada Gambar 9-3 mungkin lebih baik. Memisahkan dua tanggung jawab menjadi dua interface yang terpisah 3. Ini, setidaknya, membuat aplikasi client dari kopling dua tanggung jawab. Namun, pemberitahuan bahwa saya telah recoupled dua tanggung jawab menjadi satu ModemImplementationclass. Ini tidak diinginkan, tapi mungkin diperlukan. Ada sering alasan, yang berkaitan dengan rincian perangkat keras atau OS, yang memaksa kita untuk beberapa hal yang kita lebih suka tidak pasangan. . Namun, dengan memisahkan antarmuka mereka kita telah dipisahkan konsep sejauh sisa dari aplikasi yang bersangkutan Kita mungkin melihat theModemImplementationclass adalah kludge, atau kutil; Namun, perhatikan bahwa semua dependensi flowawayfrom itu. Tidak ada yang perlu tergantung pada kelas ini. Tidak ada yang exceptmainneeds tahu bahwa itu ada. Dengan demikian, kami telah menempatkan sedikit jelek di balik pagar. Ini keburukan tidak perlu bocor dan mencemari sisa aplikasi. SRP adalah salah satu yang paling sederhana dari prinsip, dan salah satu yang paling sulit untuk mendapatkan hak. Conjoining tanggung jawab adalah sesuatu yang kita lakukan secara alami. Menemukan dan memisahkan mereka tanggung jawab dari satu sama lain jauh dari apa desain software benar-benar tentang. Memang, sisa prinsip-prinsip kita akan membahas kembali ke masalah ini dalam satu atau lain cara.
Being translated, please wait..