Erişim denetimi, sınıfın iç verilerini kapsüllemek ve korumak için temel bir OOP ilkesidir.
Konu Tarihi:
Klasik C++ üç erişim belirleyicisi destekler: public, protected, private. Bu fikir, sınıfın içsel uygulamasını korumak ve arayüzü uygulamadan ayırmak için ortaya çıkmıştır.
Sorun:
Doğru erişim denetimi olmadan, sınıf kullanıcıları nesnelerin iç durumunu yanlışlıkla değiştirebilir veya sınıfın değişmezliğini ihlal edebilir. Kötü tasarlanmış erişim, kodun bakımını ve ölçeklendirilmesini zorlaştırır.
Çözüm:
Dış dünyanın erişebileceği ile yalnızca nesnenin hizmet amaçları için tasarlanan arasındaki net ayrımı yapmak için belirleyicileri kullanın.
Kod örneği:
class Sample { private: int secret; protected: void setSecret(int s) { secret = s; } public: Sample(int s) : secret(s) {} int getSecret() const { return secret; } };
Anahtar özellikler:
protected erişebilir (ancak private erişemez).Arkadaş (friend) işlevi veya arkadaş sınıfı başka bir sınıfın özel üyelerine erişebilir mi?
Evet, friend anahtar kelimesi sınıfın özel ve korumalı üyelerine tam erişim sağlar. Bu yaklaşım, kapsüllemeyi ihlal etmemek için çok dikkatli kullanılmalıdır.
Örnek:
class PrivData { private: int secret; friend void accessSecret(const PrivData& d); }; void accessSecret(const PrivData& d) { std::cout << d.secret; }
İsmini bildiğiniz bir private üyeye işaretçiler veya tür dönüştürmeleri ile erişmek mümkün mü?
Evet, tür dönüştürmesi veya bellek ile manipüle etme (örneğin, "pointer-to-member trick") ile mümkündür, ancak bu dil standartlarını ihlal eder ve belirsiz davranışa yol açar. Bunu yapmak doğru değildir.
Miras alındığında: ebeveyn sınıfının private üyeleri çocuk sınıfa erişilebilir mi?
Hayır, private üyeler doğrudan türetilmiş sınıf için erişilebilir değildir, erişim yalnızca temel sınıfın public/protected erişim yöntemleri aracılığıyla mümkündür.
Olumsuz Durum
Büyük bir projede, tüm sınıf üyeleri hızlı prototipleme için public olarak ilan edildi.
Artıları:
Eksileri:
Olumlu Durum
Erişim düzeyleri net bir şekilde ayrılmıştır, arkadaş (friend) işlevleri sadece birim testleri için kullanılır.
Artıları:
Eksileri: