Yan yana
SınıfvsNesne
Sınıf (class) ile nesne (object) arasındaki fark nedir?
Güncellendi 2 dk okuma7 fark
Kısaca
Sınıf, bir türdeki şeylerin hangi veri ve davranışlara sahip olduğunu tarif eden plandır; nesne ise o plandan üretilen, kendi değerleri olan somut bir şeydir.
Sınıf
Sınıf, nesne yönelimli programlamada bir grup nesnenin paylaştığı veri ve davranışı tanımlayan, nesnelerin örnek olarak ondan oluşturulduğu bir plandır.
Sınıf sayfasını okuNesne
Nesne, ilgili veriyi ve davranışı bir arada tutan yapıdır: değerleri özellik denen adlandırılmış alanlarda, onları işleyen fonksiyonları metot olarak taşır.
Nesne sayfasını okuSınıf ve Nesne karşılaştırması
| Özellik | Sınıf | Nesne |
|---|---|---|
| Ne olduğu | Bir plan ya da tür | O türün somut bir örneği |
| Var olduğu yer | Kodda, program çalışmadan önce | Bellekte, program çalışırken |
| Kaç tane | Tek bir tanım | Programın oluşturduğu kadar |
| Tuttuğu | Alanların ve metotların tanımları | Bu alanlar için gerçek değerler |
| Nasıl oluşur | Kaynak kodda yazılarak | new ile ya da sınıfın constructor'ı çağrılarak |
| Bellek | Tanımı bir kez yüklenir | Her nesne kendi belleğini kullanır |
| Örnek | User, Order, Button | Ada'nın hesabı, 1042 numaralı sipariş, Kaydet butonu |
Fark, açıklamalı
Nesne yönelimli programlamada sınıf bir tür tanımlar: nesnelerinin tutacağı alanları ve çalıştırabileceği metotları. Örnek (instance) de denen nesne bir sınıftan oluşturulur ve gerçek değerleri tutar. User bir sınıftır; adı Ada, e-postası ada@example.com olan kullanıcı ise o sınıfın bir nesnesidir.
Sınıf kodda bir kez yazılır ve program ondan bir şey oluşturmadan önce de vardır. Nesneler ise program çalışırken, genellikle new ile ya da sınıf çağrılarak oluşturulur ve gerektiği kadar çok olabilir: tek bir Order sınıfı, binlerce sipariş nesnesi. Her nesne kendi durumunu tutar; bu yüzden bir siparişin toplamını değiştirmek diğerlerine dokunmaz, ama hepsi aynı metotları paylaşır.
Yaygın benzetme kurabiye kalıbı ve kurabiyelerdir: kalıp şekli belirler, her kurabiye ise farklı süsleyebileceğiniz ayrı bir şeydir. Ya da bir ev planı ve ondan yapılan evler: tek plan, her birinin kendi adresi ve eşyaları olan pek çok ev.
Bazı dillerde kavramlar iç içe geçer. JavaScript'te sınıflar büyük ölçüde prototiplerin üzerine kurulu daha temiz bir sözdizimidir ve { } ile hiç sınıf kullanmadan nesne oluşturabilirsiniz. Python'da sınıfın kendisi de oradan oraya aktarılabilen bir nesnedir. Fikir yine aynıdır: sınıf tarif eder, nesne ise vardır.
Hangisini kullanmalısınız?
Sınıf şu durumlarda doğru seçim:
- Bir türdeki her şeyin neye sahip olduğunu ve ne yapabildiğini tarif ediyorsunuz.
- Kodun birkaç yerinde aynı yapıya ve davranışa sahip şeylere ihtiyaç var.
- Kuralları tek bir yerde tutulan yeni bir tür tanımlamak istiyorsunuz.
Nesne şu durumlarda doğru seçim:
- Bu kullanıcı ya da şu sipariş gibi, kendi değerleri olan belirli bir şeye ihtiyacınız var.
- Program çalışıyor ve veriyi tutması, değiştirmesi ya da aktarması gerekiyor.
- Tanımıyla değil, şu anda var olan veriyle çalışıyorsunuz.
Tek sınıf, iki nesne
# The class: written once, describes every account
class Account:
def __init__(self, owner):
self.owner = owner
self.balance = 0
def deposit(self, amount):
self.balance += amount# The objects: created at runtime, each with its own state
ada = Account("Ada")
linus = Account("Linus")
ada.deposit(50)
print(ada.balance) # 50
print(linus.balance) # 0, untouchedSık sorulan sorular
Örnek (instance) ile nesne aynı şey mi?
Günlük kullanımda evet. "Örnek" sözcüğü nesnenin hangi sınıftan geldiğini vurgular, "ada bir Account örneğidir" der gibi; ama iki sözcük de aynı şeyi anlatır.
Sınıf olmadan nesne olabilir mi?
Evet. JavaScript'te { name: "Ada" } gibi bir nesne literal'ini hiç sınıf olmadan yazabilirsiniz; bazı diller de sınıflar yerine prototipler üzerine kuruludur. Sınıflar nesne oluşturmanın yollarından biridir, tek yolu değil.
Bir sınıfın bütün nesneleri veriyi paylaşır mı?
Her nesnenin kendi alanları vardır; ama bir sınıfın, kaç nesne oluşturulduğunu sayan bir sayaç gibi, sınıfın kendisine ait olan ve herkesin paylaştığı static alanları da olabilir.