Ana içeriğe geç

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ı oku

Nesne

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ı oku

Sınıf ve Nesne karşılaştırması

ÖzellikSınıfNesne
Ne olduğuBir plan ya da türO türün somut bir örneği
Var olduğu yerKodda, program çalışmadan önceBellekte, program çalışırken
Kaç taneTek bir tanımProgramın oluşturduğu kadar
TuttuğuAlanların ve metotların tanımlarıBu alanlar için gerçek değerler
Nasıl oluşurKaynak kodda yazılaraknew ile ya da sınıfın constructor'ı çağrılarak
BellekTanımı bir kez yüklenirHer nesne kendi belleğini kullanır
ÖrnekUser, Order, ButtonAda'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

Sınıfpython
# 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
Nesnepython
# 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, untouched

Sı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.

Daha fazla

Ayarlar