this ve static

Gün 2: Nesne Yönelimli Programlama (OOP) | this anahtar kelimesi, statik değişkenler ve metodlar

Kaynak Kod

// =============================================================================
// GUN 2 - Konu 3: this Anahtar Kelimesi, Statik Degiskenler ve Metodlar
// =============================================================================

class Transaction;
  // Statik degisken: Tum nesneler arasinda paylasilir
  static int count = 0;
  static int total_data = 0;

  // Nesne degiskenleri
  int id;
  int data;
  string name;

  // Constructor: 'this' ile parametre/ozellik ayrimi
  function new(int id, int data, string name = "txn");
    this.id   = id;       // this.id = nesne ozelligi, id = parametre
    this.data = data;
    this.name = name;
    count++;              // Her yeni nesne sayaci artirir
    total_data += data;
  endfunction

  function void display();
    $display("  [%s] id=%0d, data=%0d", this.name, this.id, this.data);
  endfunction

  // Statik metod: Nesne olmadan cagrilabilir
  static function int get_count();
    return count;
  endfunction

  static function int get_total_data();
    return total_data;
  endfunction

  static function void reset_stats();
    count = 0;
    total_data = 0;
  endfunction

  // Zincirleme metod (method chaining benzeri): this dondur
  function Transaction set_data(int data);
    this.data = data;
    total_data += data;
    return this;
  endfunction

  function Transaction set_name(string name);
    this.name = name;
    return this;
  endfunction

endclass

module this_ve_static;
  initial begin
    Transaction t1, t2, t3;

    $display("=== this ve static Kullanimi ===\n");

    // --- Statik: Nesne olusmadan erisim ---
    $display("--- static: Baslangic ---");
    $display("  Nesne sayisi = %0d", Transaction::get_count());

    // --- Nesne olustur ---
    $display("\n--- Nesne Olusturma (this ile) ---");
    t1 = new(1, 100, "paket_A");
    t2 = new(2, 200, "paket_B");
    t3 = new(3, 300, "paket_C");

    t1.display();
    t2.display();
    t3.display();

    // --- Statik degiskenlere erisim ---
    $display("\n--- static Degiskenler ---");
    $display("  Toplam nesne = %0d", Transaction::get_count());
    $display("  Toplam veri  = %0d", Transaction::get_total_data());
    // Nesne uzerinden de erisilebilir (ayni deger)
    $display("  t1.count     = %0d (statik, tum nesneler ayni)", t1.count);

    // --- Statik reset ---
    $display("\n--- static Reset ---");
    Transaction::reset_stats();
    $display("  Reset sonrasi sayac = %0d", Transaction::get_count());

    // Yeni nesneler
    t1 = new(10, 500);
    t2 = new(20, 600);
    $display("  2 yeni nesne sonrasi sayac = %0d", Transaction::get_count());
    $display("  Toplam veri = %0d", Transaction::get_total_data());

    $display("\n=== this ve static Sonu ===");
    $finish;
  end
endmodule