Sınıflar ve Nesneler

Gün 2: Nesne Yönelimli Programlama (OOP) | OOP temelleri: sınıf tanımlama, nesne oluşturma, handle kavramı

Kaynak Kod

// =============================================================================
// GUN 2 - Konu 1: OOP Temelleri - Siniflar (Classes) ve Nesneler (Objects)
// =============================================================================

class Packet;
  // Ozellikler (Properties)
  int    id;
  bit [7:0] data;
  string name;

  // Constructor (Kurucu Metod)
  function new(int id = 0, bit [7:0] data = 0, string name = "default");
    this.id   = id;
    this.data = data;
    this.name = name;
  endfunction

  // Metod: Paketi yazdir
  function void display();
    $display("  Packet: id=%0d, data=0x%02h, name=%s", id, data, name);
  endfunction

endclass

module siniflar_ve_nesneler;
  initial begin
    Packet pkt1, pkt2, pkt3;

    $display("=== Siniflar ve Nesneler ===\n");

    // --- Nesne Olusturma (Instantiation) ---
    $display("--- Nesne Olusturma ---");
    pkt1 = new();                          // Varsayilan degerlerle
    pkt2 = new(1, 8'hAB, "veri_paketi");  // Parametreli
    pkt3 = new(2, 8'hFF, "kontrol");      // Parametreli

    pkt1.display();
    pkt2.display();
    pkt3.display();

    // --- Nesne Ozelliklerine Erisim ---
    $display("\n--- Ozellik Erisimi ---");
    pkt1.id   = 99;
    pkt1.data = 8'hDE;
    pkt1.name = "guncellenmis";
    $display("  Guncellenen pkt1:");
    pkt1.display();

    // --- Handle (Referans) Davranisi ---
    $display("\n--- Handle (Referans) ---");
    begin
      Packet pkt_ref;
      pkt_ref = pkt2;  // Kopyalama degil, ayni nesneye referans
      pkt_ref.data = 8'h00;
      $display("  pkt_ref.data = 0x%02h (degistirildi)", pkt_ref.data);
      $display("  pkt2.data    = 0x%02h (ayni nesne!)", pkt2.data);
    end

    // --- null Kontrolu ---
    $display("\n--- null Kontrolu ---");
    begin
      Packet pkt_null;  // Baslatilmamis -> null
      if (pkt_null == null)
        $display("  pkt_null henuz olusturulmadi (null)");
      
      pkt_null = new(10, 8'hBB, "yeni");
      if (pkt_null != null)
        $display("  pkt_null artik mevcut:");
      pkt_null.display();
    end

    // --- Nesne Dizisi ---
    $display("\n--- Nesne Dizisi ---");
    begin
      Packet pkt_arr [5];
      foreach (pkt_arr[i]) begin
        pkt_arr[i] = new(i, i * 16, $sformatf("pkt_%0d", i));
      end
      foreach (pkt_arr[i])
        pkt_arr[i].display();
    end

    $display("\n=== Siniflar ve Nesneler Sonu ===");
    $finish;
  end
endmodule