Nesne yönelimli programlamada genel, özel ve korunan nedir?


Yanıtlar:


154

Bunlar erişim düzenleyiciler ve bize uygulamak yardım Kapsüllenmesi'nin (veya bilgi gizleme). Derleyiciye, tanımlanmakta olan alana veya yönteme hangi diğer sınıfların erişmesi gerektiğini söylerler.

private - Yalnızca mevcut sınıfın alana veya yönteme erişimi olacaktır.

protected - Bu sınıfın yalnızca mevcut sınıfı ve alt sınıfları (ve bazen aynı paket sınıfları) alana veya yönteme erişebilir.

public - Herhangi bir sınıf alana başvurabilir veya yöntemi çağırabilir.

Bu, bu anahtar kelimelerin bir sınıf tanımında bir alan veya yöntem bildiriminin parçası olarak kullanıldığını varsayar.


4
aynı paketin java üyelerinin korumalı üyelere erişebileceğini unutmayın
Landon Kuhn

2
Evet ve Java'nın da boş dize olan dördüncü bir erişim değiştiricisi vardır. Herhangi bir erişim değiştirici verilmemesi, herhangi bir paket düzeyindeki sınıftan erişime izin verecektir.
Ben S

1
"Derleyici" bölümünü seviyorum, çünkü bildiğim çoğu dil, tüm işlevlere / sınıflara, örneğin .NET'deki yansımalar aracılığıyla çalışma zamanında kolayca erişilebilir. Bu nedenle, bu erişim değiştiricilerin temelde programcılara belirli şeyleri gizleyerek aynı kod üzerinde / kodla çalışan diğer programcılara rehberlik etme konusunda yardımcı olduğunu söylemeye meyilliyim.
merkuro

1
Bazı dillerin bazı özellikleri vardır. Delphi'de olduğu gibi, özel üyeler aynı ünitedeki diğer sınıflar tarafından erişilebilir durumdadır ve bu davranışı istemiyorsanız katı özel özelliğini kullanmanız gerekir.
Fabio Gomes

1
C #, aynı paketin erişim korumalı üyelerini de yapar. Özünde, C # yalnızca Microsoft'un
Java'sıdır

7

Üçü de bir sınıfta kullanılan erişim değiştiriciler ve anahtar sözcüklerdir. Public olarak bildirilen herhangi bir şey, sınıf içindeki veya sınıf dışındaki herhangi bir nesne tarafından kullanılabilir, private içindeki değişkenler yalnızca sınıf içindeki nesneler tarafından kullanılabilir ve doğrudan erişim yoluyla değiştirilemez (arkadaş işlevi gibi işlevler aracılığıyla değişebilir) Korunan bölüm altında tanımlanan her şey, sınıf ve onların türetilmiş sınıfları tarafından kullanılabilir.


6

Bunlar gerçekten kavramlar değil, daha çok C ++ ve Java gibi popüler dillerde (biraz farklı anlambilimle) ortaya çıkma eğiliminde olan belirli anahtar kelimeler.

Esasen, bir sınıfın üyelere (alanlara veya işlevlere) erişimi kısıtlamasına izin vermek içindir. Buradaki fikir, bir türün başka bir türe ne kadar az erişmesine izin verilirse, o kadar az bağımlılık oluşturulabilir. Bu, erişilen nesnenin kendisine başvuran nesneleri etkilemeden daha kolay değiştirilmesine olanak tanır.

Genel olarak, genel, herkesin erişmesine izin verildiği anlamına gelir; özel, yalnızca aynı sınıfın üyelerinin erişmesine izin verildiği anlamına gelir ve korumalı, alt sınıf üyelerine de izin verildiği anlamına gelir. Ancak her dil buna kendi şeylerini ekler. Örneğin, C ++ herkese açık olmayan şekilde miras almanıza izin verir. Java'da ayrıca varsayılan (paket) bir erişim seviyesi vardır ve dahili sınıflar vb. İle ilgili kurallar vardır.


2

Herkese açık bir öğe, başka herhangi bir sınıftan erişilebilen bir öğedir. Sadece hangi nesne olduğunu bilmelisiniz ve ona erişmek için bir nokta operatörü kullanabilirsiniz. Korumalı, bir sınıfın ve alt sınıflarının değişkene erişimi olduğu, ancak diğer sınıfların değil, değişkenle herhangi bir şey yapmak için bir alıcı / ayarlayıcı kullanmaları gerektiği anlamına gelir. Özel, yalnızca bu sınıfın değişkene doğrudan erişime sahip olduğu, diğer her şeyin bu verilere erişmek veya bunları değiştirmek için bir yönteme / işleve ihtiyaç duyduğu anlamına gelir. Bu yardımcı olur umarım.


1

yukarıdaki gibi, ancak niteliksel olarak:

private - least access, best encapsulation
protected - some access, moderate encapsulation
public - full access, no encapsulation

Ne kadar az erişim sağlarsanız, nesnelerinizden daha az uygulama detayı sızar. Bu türden kaçakların daha azı, nesnenin istemcilerini bozmadan bir nesnenin nasıl uygulandığını değiştirme açısından daha fazla esneklik (diğer bir deyişle "daha gevşek bağlantı") anlamına gelir. bu gerçekten anlaşılması gereken temel bir şeydir.


0

Özetlemek gerekirse, nesne yönelimli programlamada her şey sınıflara ve nesnelere göre modellenir. Sınıflar, özellikleri ve yöntemleri içerir. Genel, özel ve korumalı anahtar sözcükler, diğer sınıflardan veya diğer .dll'lerden veya hatta diğer uygulamalardan bir sınıfın bu üyelerine (özellikler ve yöntemler) erişimi belirtmek için kullanılır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.