Rumah >pembangunan bahagian belakang >C++ >Prinsip 'Beritahu, Jangan Tanya' Diterangkan dalam Beberapa Saat
Prinsip Tell, Don't Ask, asas pengaturcaraan berorientasikan objek (OOP), menyokong untuk mereka bentuk objek yang merangkum kedua-dua data mereka dan kaedah yang memanipulasi data tersebut. Pendekatan ini memupuk sistem yang lebih boleh diselenggara dan teguh dengan mempertingkatkan enkapsulasi.
Prinsip "Beritahu, Jangan Tanya" menekankan mengarahkan objek tentang perkara yang perlu dilakukan, dan bukannya mendapatkan semula data mereka dan memprosesnya secara luaran. Ia menggalakkan mengekalkan logik dan keadaan dalam objek itu sendiri.
Daripada mengakses data objek untuk membuat keputusan luaran, anda secara langsung mengarahkan objek untuk melakukan tindakan dalaman. Strategi ini memudahkan kod, meminimumkan kebergantungan dan meningkatkan kebolehlanjutan dan kebolehselenggaraan sistem.
Mari kita periksa senario yang melibatkan nilai penderia dan penggera yang dicetuskan apabila nilai ini melebihi ambang.
<code>class AskMonitor { private int value; private int limit; private String name; private Alarm alarm; public AskMonitor(String name, int limit, Alarm alarm) { this.name = name; this.limit = limit; this.alarm = alarm; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public int getLimit() { return limit; } public String getName() { return name; } public Alarm getAlarm() { return alarm; } }</code>
Penggunaan:
<code>AskMonitor monitor = new AskMonitor("Temperature Sensor", 100, alarm); monitor.setValue(120); if (monitor.getValue() > monitor.getLimit()) { monitor.getAlarm().warn(monitor.getName() + " is too high"); }</code>
Dengan "Beritahu, Jangan Tanya," tingkah laku disepadukan ke dalam kelas Monitor
.
<code>class TellMonitor { private int value; private int limit; private String name; private Alarm alarm; public TellMonitor(String name, int limit, Alarm alarm) { this.name = name; this.limit = limit; this.alarm = alarm; } public void setValue(int value) { this.value = value; if (this.value > this.limit) { alarm.warn(name + " is too high"); } } }</code>
Penggunaan:
<code>TellMonitor monitor = new TellMonitor("Temperature Sensor", 100, alarm); monitor.setValue(120);</code>
Versi "Tell" menghapuskan pembuatan keputusan luaran dengan merangkum logik dalam kaedah setValue
.
✅ Ekapsulasi yang lebih kuat: Data dan gelagat digandingkan dengan ketat.
✅ Kod Ringkas: Logik luaran diminimumkan dengan menginternalisasi tingkah laku.
✅ Kebolehselenggaraan yang Dipertingkat: Lebih mudah untuk mengubah suai dan melanjutkan fungsi.
✅ Tingkah Laku Berkapsul: Apabila objek sememangnya mengetahui cara memproses datanya.
Contoh: Objek
Monitor
, menyedari hadnya, harus secara autonomi mencetuskan penggera apabila melebihi had tersebut.
✅ Tindakan Dicetuskan Negeri: Apabila perubahan keadaan memerlukan tindakan seterusnya (cth., pemberitahuan, pengelogan).
Contoh: Objek
UserProfile
mengemas kini log aktiviti secara automatik semasa pengubahsuaian profil.
✅ Pendapatan Data: Apabila data diperlukan tanpa mengubah keadaan objek.
Contoh: Mendapatkan semula
User
alamat e-mel objek.
✅ Membuat Keputusan Luaran: Apabila keputusan bergantung pada faktor luaran.
Contoh: Mendapatkan nama
Person
untuk secara luaran menentukan sapaan yang sesuai.
✅ Perwakilan Tanggungjawab: Apabila objek bekerjasama dan seseorang memerlukan data daripada yang lain untuk membuat keputusan.
Contoh: A
Router
menanyakan bebanServer
untuk pengurusan trafik.
Berminat? ? Terokai siaran lain dalam siri prinsip pengaturcaraan saya!
Kekal dikemas kini pada siaran akan datang:
Atas ialah kandungan terperinci Prinsip 'Beritahu, Jangan Tanya' Diterangkan dalam Beberapa Saat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!