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