Bazı diller ve çalışma zamanı çerçeveleri (örneğin, Java, .NET), belirli bir sınıf için kodu derleyen herhangi birinin, bu sınıfın herhangi bir özel üyesini, haklarına zarar verecek şekilde kullanmamaya güvenebileceğini varsaymaktadır. operasyon. Diğer diller ve çerçeveler bu konuda daha kısıtlayıcı olan ve çalışan kod tarafından haricinde bir örneğinin özel üyelerine erişim izin vermez o örneğinde . Her iki tasarımın da avantajları ve dezavantajları vardır.
Bir sınıf içindeki herhangi bir kodun herhangi bir vakanın özel üyelerine erişmesine izin vermenin en büyük avantajı, bu erişim düzeyinin uygun olduğu durumlar olması ve private
bu şekilde çalışmanın bu amaç için farklı bir erişim niteleyicisine sahip olma ihtiyacını ortadan kaldırması veya Aksi takdirde, kodları üyelerin aksi takdirde ideal olandan daha geniş bir şekilde ortaya çıkarması için zorlarlar.
Bu tür erişime izin vermemenin bir avantajı (Microsoft Ortak Nesne Modeli'nde (COM) olduğu gibi) dış kodun sınıfları arabirim olarak ele almasına izin vermesidir. Bir sınıf ImmutableMatrix
özel veya korumalı bir double[][]
yedekleme alanı içeriyorsa ve sınıf içindeki kod diğer örneklerin yedekleme dizisini incelerse, harici kodun kullanabileceği bir dizi dizisi içermeyen sınıf (ör ZeroMatrix
. IdentityMatrix
) Tanımlamak mümkün olmaz bir Immutable2dMatrix
, bu sınıfı destekleme alanını dahil etmek zorunda kalmadan. Eğer içindeki hiçbir şey , Immutable2dMatrix
başka herhangi bir örneğin özel üyelerini kullanmazsa this
, sınıfı yeniden adlandırmak ve yukarıda belirtilen dizili olmayan sınıfları ve alt türler olarak sahip olabilecek ImmutableArrayBackedMatrix
yeni bir soyut ImmutableMatrix
sınıfı tanımlamak mümkün olacaktır ImmutableArrayBackedMatrix
.
Bu tür yeniden düzenleme işlemlerinin , dilin bu yetenekten yararlanmadığı ve gerçekte dış örnekleri incelemediği durumlar dışında ImmutableMatrix
, destek dizisini incelemesi için "izin ver" seçeneğinin olması dışında engellenmeyeceğini unutmayın this
. Bir dilin olmasının birincil etkisi, bu tür bir kullanımı sınırlandırması, derleyicinin derhal bu tür yeniden düzenleme işlemlerine uygun olmayacak herhangi bir kod yazma girişiminde sıkışık hale getirmesidir.
equals
, başka bir vakanın özel alanlarını kontrol etmek zorunda olmasıdır. (Bu kısa olduğu için yorum olarak yayınlanıyor ve bu yaklaşımın OOP-si hakkında hiçbir şey yok)