Java Static olan global değişkenler encapsulation ilkesine göre get ve set metodlarına ihtiyaç duyar mı?

BeyazEsya

Picopat
Katılım
1 Mayıs 2021
Mesajlar
184
Daha fazla  
Cinsiyet
Erkek
Meslek
Öğrenci
Merhaba, static olan global değişkenler encapsulation ilkesine göre get ve set metodlarına ihtiyaç duyar mı? Örneğin kapsülleme ilkesinden faydanalabilmek için nitelikleri private yaparız ve get ile set metodları kullanırız. Peki static olarak tanımlanan bir değişken için (Örneğin bir online oyunda oyuncu sayısını tutsun.) kapsülleme ilkesine uymak gerekir mi? Yani get ve set metodları oluşturmak gerekir mi?
 
Son düzenleyen: Moderatör:
Basit bir sayaç olarak kullanılacağı için doğrudan değişkenin kendisini public static olarak tanımlayarak kullanmak daha mantıklı duruyor.
 
Teknik bir engel yok, ben best practice olarak soyluyorum. Global variable i mutate etmemelisin, edeceksen global olmamali.
Mesela şöyle bir örnek üzerinden gitsek: Şu an tamamen sallıyorum, örneğin oyuncuya ait bir sınıfımız var ve burada oyuncunun toplam araba sayısını global bir değişkende tutuyoruz. Bir de oyuncunun hile yapıp yapmadığını kontrol eden bir sınıf olsun. Eğer hile yapılırsa oyuncunun arabaları elinden alınsın ve toplam araba sayısı 0'a düşsün. Bunu yapmak için ordaki global değişkeni set etmek gerekmez mi? Böyle bir durumda dediğinize göre olduğunda 0 yapamayız.
 
Statik değişkenlerin takibi, bakımı zorlaştığı için genelde büyük uygulamalarda tercih edilmiyorlar. Bunun yerine tek bir nesne uygulamanın her yerinden ulaşılabilecek şekilde oluşturuluyor. Singleton pattern ile ya da Spring Dependency Injection'da bu işlem yapılıyor. Temel sorun statik değişkenlerin OOP paradigmasına uymaması ve kodun bakımını zorlaştırması. Açıkçası tamamen kendi geliştirdiğiniz ufak/orta çaplı uygulamalarda bunun hiç bir önemi yok. Bir değişkeni statik ile global olarak tanımlayıp ona doğrudan erişebilirsiniz. Çok işlemcili multi-thread bir uygulama geliştirmediğiniz sürece bir sorun yaşayacağını sanmıyorum.
 
Statik değişkenlerin takibi, bakımı zorlaştığı için genelde büyük uygulamalarda tercih edilmiyorlar. Bunun yerine tek bir nesne uygulamanın her yerinden ulaşılabilecek şekilde oluşturuluyor. Singleton pattern ile ya da Spring Dependency Injection'da bu işlem yapılıyor. Temel sorun statik değişkenlerin OOP paradigmasına uymaması ve kodun bakımını zorlaştırması. Açıkçası tamamen kendi geliştirdiğiniz ufak/orta çaplı uygulamalarda bunun hiç bir önemi yok. Bir değişkeni statik ile global olarak tanımlayıp ona doğrudan erişebilirsiniz. Çok işlemcili multi-thread bir uygulama geliştirmediğiniz sürece bir sorun yaşayacağını sanmıyorum.
Neden bakimi zor oluyor? Madem get ve set metodlari var kullansak diğerleri gibi olmaz mi? Ama iste @bitwise hocanin dedigini isin içine katınca kafam karıştı. Halen neden global degiskenlerin set edilmemesi gerektiğini anlamadim.
 
Değeri değişecekse static yapmak yerine bir nesnesinin fieldı içerisinde tutabilirsiniz.

Oyuncu sayısını global olarak tutmak yerine Oyun gibisinden bir class oluşturup içerisinde private bir değişken olarak tutabilirsiniz.

Nesne oluşturmadan doğrudan erişmek istiyorsanız veya Singleton gibi patternleri uygulamak için static tercih edilebilir. Onun dışında static olarak tutulan değerlerin C'deki #define gibi final yani readonly constant değerler olması beklenir.
 
Değeri değişecekse static yapmak yerine bir nesnesinin fieldı içerisinde tutabilirsiniz.

Oyuncu sayısını global olarak tutmak yerine Oyun gibisinden bir class oluşturup içerisinde private bir değişken olarak tutabilirsiniz.

Nesne oluşturmadan doğrudan erişmek istiyorsanız veya Singleton gibi patternleri uygulamak için static tercih edilebilir. Onun dışında static olarak tutulan değerlerin C'deki #define gibi final yani readonly constant değerler olması beklenir.
Peki neden global değişkenlerden kaçılıyor genelde? Sebebi bellekte fazla mı yer kaplaması? Yani neden değerinin değiştirilmesi pek tercih edilmiyor? Normalde nesne daha fazla bellekte yer işgal etmez mi? Örnegin oyuncu sayısını static yapmayıp nesne ile çağırsak daha fazla ram kullanılmaz mı?
 

Geri
Yukarı