Salih doğrusunu istersen bu konuyu öyle kısa bir mesajla anlatmak çok kolay değil, yinede bildiğim kadarıyla aktarmaya çalışayım yanlış veya eksiğim varsa Ali düzeltir diye düşünüyorum. Aklına takılanları zaten sen sorarsın.
class Ütü
{
private int utuSicakligi; // 0..100 derece
public this()
{
this.utuSicakligi = 0;
}
public void ÜtüyüAyarlananSıcaklığaGetir()
{
// Gerekli işlemler
}
@property void ÜtüSıcaklığıAyarla(int sıcaklık)
{
enforce (sıcaklık > 100, "Ütü sıcaklığı bu değere ayarlanamaz.");
utuSicakligi = sıcaklık;
}
}
Ben her zaman ki gibi sınıflardan devam ediyorum. Elimizde Ütü isimli bir sınıf olduğunu düşünelim. Bu bildiğimiz ütü nesnesinin bilgisayar ortamına taşınmış hali. Ütümüz 0..100 derece arasındaki bir değere kadar ısınabiliyor. Bunu biz ütüSıcaklıgı isimli bir nitelik ile belirliyoruz. Ayrıca bu ısıtma işini yapan metodumuzuda ÜtüyüAyarlananSıcaklığaGetir() ismiyle tanımladık.
Dikkat ettiysen utuSicakligi niteliğimiz private yani dış dünyadan erişime kapalı olarak tanımlandı. Ancak bu sınıfı kullanan programcı doğal olarak bu sıcaklığı ayarlamak isteyecek oysa dışarı kapalı olan bu özelliğe ulaşması mümkün değil. Bunu aşmak için şöyle bir yol kulllanılıyor. Önce dışarıya açık public bir metot tanımlanıp buna gönderilen değer sınıf içinde ilgili nitelik değerine aktarılıyor. Bu yapıya NYP'de (Nesne Yönelimli Programlama) kapsülleme veya sarma ismi verilir. Neticede bu şekilde ilgili nitelik değeri düzenlenmiş olur. Bu tür nitelikler üzerinde işlem yapan metotlar özelleştirilmiş ve property anahtar sözcüğü ile tanımlanmaya başlamıştır. Property'nin espirisi budur.
Avantajı nedir dersen, örneğin sınıf içindeki utuSicakligi niteliğine direk erişebiliyor olsan şöyle bir kod yazmanı kimse engelleyemez.
utuSicakligi = 200; // Geçersiz
Oysa kapsülleme sayesinde örneğin benim geliştirip sana verdiğim ve senin kullandığın bir ütü sınıfında utuSicakligi değerine 100 'den büyük bir değer veremezsin. Çünkü bu değer ilgili niteliğe aktarım esnasında sınıf tarafından kontrol edilir. Böylece sınıfın bütünlüğü korunmakla birlikte programcının hata yapma riskinide düşürmüş olursun. Aslında bu konu çok daha derin ve büyük bir konu ama benim bildiklerim böyle.
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]