Menu
CoddyTech

Data Instance vs Static

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 15 dari 70.

Sekarang setelah kamu memahami member static, mari kita perjelas kapan harus menggunakan data instance dan kapan menggunakan data static. Keputusan ini menentukan cara class-mu menyimpan dan berbagi informasi.

Data instance dimiliki oleh setiap object secara individual. Setiap object memiliki salinannya sendiri, dan perubahan pada satu object tidak memengaruhi object lainnya:

public class BankAccount
{
    public string Owner { get; set; }      // Instance: unik untuk setiap akun
    public decimal Balance { get; set; }   // Instance: unik untuk setiap akun
}

Setiap BankAccount memiliki pemilik dan saldo sendiri. Itu masuk akal karena akun yang berbeda menyimpan jumlah uang yang berbeda untuk orang yang berbeda.

Data statis dimiliki oleh class itu sendiri dan digunakan bersama oleh semua instance:

public class BankAccount
{
    public static decimal InterestRate = 0.05m;  // Statis, sama untuk semua akun
    public static int TotalAccounts = 0;         // Statis, melacak semua akun
    
    public string Owner { get; set; }
    public decimal Balance { get; set; }
}

Suku bunga berlaku sama untuk setiap akun, jadi tepat jika dijadikan static. Penghitung total akun melacak informasi untuk seluruh class, bukan data akun individual.

Aturan sederhana: jika data menjelaskan object tertentu, jadikan sebagai instance. Jika data menjelaskan class secara keseluruhan atau seharusnya digunakan bersama, jadikan static. Jika penggunaannya tercampur secara keliru, bug dapat muncul sehingga data berubah secara tak terduga antar-object atau tidak dapat diakses saat diperlukan.

challenge icon

Tantangan

Mudah

Mari kita buat pelacak sesi game yang menunjukkan perbedaan antara data milik masing-masing pemain dan data yang digunakan bersama oleh seluruh game.

Kamu akan membuat dua file untuk mengatur kodemu:

  • Player.cs: Definisikan class Player di namespace GameSession. Setiap pemain memiliki Username (string) dan Score (int) sendiri, yang berbeda untuk setiap pemain. Class ini juga harus melacak informasi yang berlaku untuk semua pemain: field statis GameName (string) yang menyimpan nama game yang dimainkan semua orang, dan field statis TotalPlayers (int) yang menghitung jumlah pemain yang telah bergabung. Sertakan constructor yang menerima username dan skor awal, lalu otomatis menambah jumlah total pemain. Tambahkan method statis SetGameName(string name) untuk mengatur nama game.
  • Program.cs: Di file utama, siapkan game dan buat pemain berdasarkan input. Pertama, atur nama game, lalu buat dua pemain dan tampilkan informasi masing-masing beserta data game yang digunakan bersama.

Kamu akan menerima lima input:

  • Nama game
  • Username pemain pertama
  • Skor awal pemain pertama
  • Username pemain kedua
  • Skor awal pemain kedua

Cetak output dengan format berikut:

Game: {GameName}
Player: {Username}, Score: {Score}
Player: {Username}, Score: {Score}
Total Players: {TotalPlayers}

Contohnya, jika inputnya adalah BattleArena, DragonSlayer, 1500, ShadowNinja, dan 2200, outputnya harus seperti ini:

Game: BattleArena
Player: DragonSlayer, Score: 1500
Player: ShadowNinja, Score: 2200
Total Players: 2

Pikirkan baik-baik data mana yang harus berbasis instance (berbeda untuk setiap pemain) dan mana yang harus statis (digunakan bersama oleh semua pemain). Nama game dan jumlah total pemain menggambarkan sesi secara keseluruhan, sedangkan username dan skor unik untuk setiap pemain.

Coba sendiri

using System;

namespace GameSession
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Baca input
            string gameName = Console.ReadLine();
            string username1 = Console.ReadLine();
            int score1 = Convert.ToInt32(Console.ReadLine());
            string username2 = Console.ReadLine();
            int score2 = Convert.ToInt32(Console.ReadLine());

            // TODO: Atur nama game menggunakan method statis

            // TODO: Buat dua object Player dengan data input

            // TODO: Cetak output dalam format yang diminta
            // Game: {GameName}
            // Player: {Username}, Score: {Score}
            // Player: {Username}, Score: {Score}
            // Total Players: {TotalPlayers}
        }
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C# online