Her şeyden önce, Java değil, C ++ ve Python olduğumu unutmayın, bu yüzden bunların bir kısmı tamamen geçerli olmayabilir. Java’da sınıfların nasıl çalıştığı hakkında bazı yanlış varsayımlar yaparsam lütfen beni düzeltin.
Sınıflar, başlatıldıklarında öncelikli olarak yararlıdır. Hiçbir örneği yaratılmayan bir sınıf, gerçekten yalnızca yüceltilmiş bir ad alanıdır. Tüm sınıflarınızı bu şekilde kullanırsanız, aslında, şeyleri ad alanından ad alanına taşımanın faydaları önemsiz gibi görünebilir - en fazla, her birinde bazı özel veriler bulundurarak kazanacaksınız ve bu sayede olayları biraz kaplayacaksınız.
Ancak, burası sınıfların parladığı yer değil. String
Sınıfı düşünün : char
dizileri ve bazı statik işlevleri kullanarak aynı özelliklere sahip olabilirsiniz . Bu noktada, fonksiyonlar size biraz ekstra güvenlik ve sözdizimsel şeker sağlar. Sen yazabilir string.length()
yerine length(char_array)
; Bu çok büyük bir anlaşma değil, ama çoğu insan hala hoşuna gidiyor. Dahası, eğer biri size bir şey verdiyse String
, String
yapıcı ile yaratıldığını ve length
işlevle çalışması gerektiğini - dizi sürümü bazı karakterleri işleyemiyorsa, oraya yerleştirmenizi engellemenin bir yolu olmadığını biliyorsunuz. .
Yine de öyle değil. Temel nokta, sınıfların üzerinde çalışan ve her ikisini de soyutlayan ve üzerinde çalışan verileri bir araya getirmesidir. void f(Builder b)
Bildiğiniz bir yönteminiz olduğunda, bir şey elde Builder
edersiniz ve bunun belirli bir davranışı destekleyeceğini bekleyebilirsiniz. Ancak, hiçbir veri veya yürütülen işlev hakkında hiçbir şey bilmiyorsunuz - aslında, her ikisinin tanımları da yazarken ve derlerken yazılmayabilir f
.
Anlaması gereken ilk nokta, sınıfların, verilerin kırılmadığından emin olmak için veri dolaşmasını kolaylaştırmasıdır. İkinci nokta, bir nesnenin hem hangi verileri, hem de hangi işlevi (uygulamaları) içerdiği, nesne ile ilgili bir şey olduğudur, sadece türünden anlatabileceğiniz bir şey değildir.