Menu
CoddyTech

Beberapa antarmuka

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

Meskipun sebuah class hanya dapat mewarisi satu class dasar, class tersebut dapat mengimplementasikan sebanyak mungkin interface sesuai kebutuhan. Inilah salah satu keunggulan utama interface dibandingkan class abstrak, yaitu interface memungkinkan sebuah class menerapkan beberapa perilaku.

Untuk mengimplementasikan beberapa interface, cukup cantumkan semuanya setelah titik dua, pisahkan dengan koma:

public interface IFlyable
{
    void Fly();
}

public interface ISwimmable
{
    void Swim();
}

public class Duck : IFlyable, ISwimmable
{
    public void Fly()
    {
        Console.WriteLine("Flying through the air");
    }
    
    public void Swim()
    {
        Console.WriteLine("Swimming in the pond");
    }
}

class Duck harus mengimplementasikan semua anggota dari kedua interface. Ini secara alami memodelkan skenario dunia nyata: bebek memang bisa terbang dan berenang, jadi masuk akal jika bebek memenuhi kedua kontrak tersebut.

Saat menggabungkan pewarisan dengan beberapa antarmuka, class dasar harus ditulis terlebih dahulu:

public class Duck : Bird, IFlyable, ISwimmable
{
    // Mewarisi Bird dan mengimplementasikan kedua interface
}

Fleksibilitas ini memungkinkan kamu menyusun perilaku dari berbagai sumber. Sebuah Robot dapat mengimplementasikan IMovable, IChargeable, dan ISpeakable. Setiap interface mewakili satu kemampuan, dan class-mu dapat memadukan tepat hal-hal yang dibutuhkan.

challenge icon

Tantangan

Mudah

Mari buat sistem perangkat rumah pintar yang menunjukkan cara satu class dapat mengimplementasikan beberapa interface untuk memperoleh kemampuan yang berbeda. Kamu akan membuat perangkat yang dapat dikendalikan sekaligus memiliki fitur manajemen daya.

Kamu akan mengatur kodemu dalam empat file:

  • IControllable.cs: Definisikan interface bernama IControllable di namespace SmartHome. Interface ini mewakili perangkat yang dapat dinyalakan dan dimatikan. Interface ini harus mendeklarasikan dua method: TurnOn() dan TurnOff(), yang keduanya mengembalikan string.
  • INetworkConnected.cs: Definisikan interface bernama INetworkConnected di namespace SmartHome. Interface ini mewakili perangkat yang dapat terhubung ke jaringan. Interface ini harus mendeklarasikan method Connect(string network) yang mengembalikan string.
  • SmartTV.cs: Definisikan class SmartTV di namespace SmartHome yang mengimplementasikan IControllable dan INetworkConnected. TV ini harus memiliki property Brand (string) dan property ScreenSize (int, yang menunjukkan ukuran dalam inci). Buat constructor yang menerima kedua nilai tersebut. Implementasikan semua method interface:
    • TurnOn() mengembalikan "{Brand} {ScreenSize}-inch TV is now ON"
    • TurnOff() mengembalikan "{Brand} {ScreenSize}-inch TV is now OFF"
    • Connect(string network) mengembalikan "{Brand} TV connected to {network}"
  • Program.cs: Di file utama, buat SmartTV menggunakan nilai input. Tunjukkan fleksibilitas beberapa interface dengan menyimpan object TV yang sama dalam tiga tipe variabel yang berbeda: tipe konkret SmartTV, variabel IControllable, dan variabel INetworkConnected. Panggil method yang sesuai melalui setiap referensi untuk menunjukkan bagaimana object yang sama dapat diperlakukan secara berbeda, bergantung pada interface yang kamu gunakan.

Kamu akan menerima tiga input:

  • Nama merek TV
  • Ukuran layar dalam inci
  • Nama jaringan yang akan dihubungkan

Cetak output dalam format ini:

Via SmartTV:
{TurnOn() result}
{Connect(network) result}
Via IControllable:
{TurnOff() result}
Via INetworkConnected:
{Connect(network) result}

Misalnya, jika inputnya adalah Samsung, 55, dan HomeWiFi, outputnya akan seperti ini:

Via SmartTV:
Samsung 55-inch TV is now ON
Samsung TV connected to HomeWiFi
Via IControllable:
Samsung 55-inch TV is now OFF
Via INetworkConnected:
Samsung TV connected to HomeWiFi

Perhatikan bagaimana object SmartTV yang sama dapat diakses melalui referensi interface yang berbeda. Saat disimpan sebagai IControllable, kamu hanya dapat memanggil method kontrol. Saat disimpan sebagai INetworkConnected, kamu hanya dapat memanggil method jaringan. Inilah kekuatan mengimplementasikan beberapa interface: satu class memperoleh beberapa kemampuan sambil tetap fleksibel dalam penggunaannya!

Coba sendiri

using System;
using SmartHome;

class Program
{
    public static void Main(string[] args)
    {
        // Baca input
        string brand = Console.ReadLine();
        int screenSize = Convert.ToInt32(Console.ReadLine());
        string network = Console.ReadLine();
        
        // TODO: Buat object SmartTV dengan nilai input
        
        // TODO: Simpan object TV yang sama dalam tiga tipe variabel berbeda:
        // 1. Tipe SmartTV (class konkret)
        // 2. Tipe IControllable (referensi interface)
        // 3. Tipe INetworkConnected (referensi interface)
        
        // TODO: Cetak output dalam format yang diminta:
        // Via SmartTV:
        // - Panggil TurnOn() dan Connect(network)
        // Via IControllable:
        // - Panggil TurnOff()
        // Via INetworkConnected:
        // - Panggil Connect(network)
        
    }
}
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