Menu
Coddy logo textTech

Instance ve Statik Üyeler

Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 17 / 110.

Dart sınıflarında, üyeler (değişkenler ve metotlar) ya bireysel nesnelere ya da sınıfın kendisine ait olabilir. Bu ayrımı anlamak, kodunuzu etkili bir şekilde düzenlemek için temeldir.

Örnek üyeleri oluşturduğunuz her nesneye aittir. Her nesne, örnek değişkenlerinin kendi kopyasını alır ve örnek metotları o belirli nesnenin verileri üzerinde çalışır:

class Dog {
  String name;  // Örnek değişkeni
  
  Dog(this.name);
  
  void bark() {  // Örnek metodu
    print('$name says woof!');
  }
}

Dog dog1 = Dog('Buddy');
Dog dog2 = Dog('Max');

dog1.bark();  // Buddy says woof!
dog2.bark();  // Max says woof!

Her Dog nesnesinin kendine ait bir name alanı vardır. Bir köpeğin ismini değiştirmek diğerini etkilemez.

Statik üyeler herhangi bir nesneye değil, sınıfın kendisine aittir. Tüm örnekler arasında paylaşılırlar ve sınıf adı kullanılarak erişilirler:

class Dog {
  String name;
  static int totalDogs = 0;  // Statik değişken
  
  Dog(this.name) {
    totalDogs++;
  }
}

Dog dog1 = Dog('Buddy');
Dog dog2 = Dog('Max');

print(Dog.totalDogs);  // 2

totalDogs değişkeni paylaşılır; kaç tane Dog nesnesi mevcut olursa olsun yalnızca tek bir kopya vardır. Ona bir örnek üzerinden değil, Dog.totalDogs sınıf adı aracılığıyla erişirsiniz.

challenge icon

Görev

Kolay

Bir müze için hem bireysel sergi ziyaretlerini hem de genel müze istatistiklerini takip eden bir ziyaretçi sayacı sistemi kuralım.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • exhibit.dart: Bir müze sergisini temsil eden bir Exhibit sınıfı tanımlayın. Her sergi şunlara sahip olmalıdır:
    • Serginin adı için bir örnek değişken name (String)
    • Bu belirli sergiyi kaç kişinin ziyaret ettiğini takip etmek için 0'dan başlayan bir örnek değişken visitorCount (int)
    • Tüm sergilerdeki toplam ziyaretleri takip etmek için 0'dan başlayan bir statik değişken totalVisitors (int)
    • Sergi adını alan bir yapıcı (constructor)
    • Hem serginin visitorCount değerini hem de sınıfın totalVisitors değerini artıran bir recordVisit() metodu
    • Serginin bilgilerini yazdıran bir displayStats() metodu
  • main.dart: Sergi sınıfınızı içe aktarın ve iki sergi oluşturun:
    • Bir 'Dinosaur Bones' sergisi
    • Bir 'Ancient Egypt' sergisi
    Dinosaur Bones sergisi için 3 ziyaret kaydedin, ardından Ancient Egypt sergisi için 2 ziyaret kaydedin. Tüm ziyaretlerden sonra, her sergi üzerinde oluşturulma sırasına göre displayStats() metodunu çağırın, ardından tüm sergilerdeki toplam ziyaretçi sayısını yazdırın.

displayStats() metodu tam olarak şu formatta yazdırmalıdır:

[name]: [visitorCount] visitors

Toplam ziyaretçi satırı için şunu yazdırın:

Total museum visitors: [totalVisitors]

Statik değişkene sınıf adını kullanarak erişin: Exhibit.totalVisitors.

Beklenen çıktı:

Dinosaur Bones: 3 visitors
Ancient Egypt: 2 visitors
Total museum visitors: 5

Kopya kağıdı

Dart'taki sınıf üyeleri ya örnek üyeleri (bireysel nesnelere ait) ya da statik üyeler (sınıfın kendisine ait) olabilir.

Örnek üyeleri her nesneye özgüdür. Her nesnenin kendi örnek değişken kopyası vardır:

class Dog {
  String name;  // Örnek değişken
  
  Dog(this.name);
  
  void bark() {  // Örnek metot
    print('$name says woof!');
  }
}

Statik üyeler tüm örnekler arasında paylaşılır ve static anahtar kelimesi ile sınıf adı kullanılarak erişilir:

class Dog {
  String name;
  static int totalDogs = 0;  // Statik değişken
  
  Dog(this.name) {
    totalDogs++;
  }
}

// Statik üyelere sınıf adı üzerinden erişin
print(Dog.totalDogs);  // 2

Statik değişkenler, kaç nesne oluşturulduğuna bakılmaksızın paylaşılan tek bir değeri korur.

Kendin dene

import 'exhibit.dart';

void main() {
  // TODO: Bir 'Dinosaur Bones' sergisi oluşturun
  
  // TODO: Bir 'Ancient Egypt' sergisi oluşturun
  
  // TODO: Dinosaur Bones sergisi için 3 ziyaret kaydedin
  
  // TODO: Ancient Egypt sergisi için 2 ziyaret kaydedin
  
  // TODO: Her sergi üzerinde sırasıyla displayStats() fonksiyonunu çağırın
  
  // TODO: Exhibit.totalVisitors kullanarak toplam müze ziyaretçi sayısını yazdırın
  // Format: Total museum visitors: [totalVisitors]
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler