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.
Tantangan
MudahMari 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 bernamaIControllabledi namespaceSmartHome. Interface ini mewakili perangkat yang dapat dinyalakan dan dimatikan. Interface ini harus mendeklarasikan dua method:TurnOn()danTurnOff(), yang keduanya mengembalikan string.INetworkConnected.cs: Definisikan interface bernamaINetworkConnecteddi namespaceSmartHome. Interface ini mewakili perangkat yang dapat terhubung ke jaringan. Interface ini harus mendeklarasikan methodConnect(string network)yang mengembalikan string.SmartTV.cs: Definisikan classSmartTVdi namespaceSmartHomeyang mengimplementasikanIControllabledanINetworkConnected. TV ini harus memiliki propertyBrand(string) dan propertyScreenSize(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, buatSmartTVmenggunakan nilai input. Tunjukkan fleksibilitas beberapa interface dengan menyimpan object TV yang sama dalam tiga tipe variabel yang berbeda: tipe konkretSmartTV, variabelIControllable, dan variabelINetworkConnected. 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 HomeWiFiPerhatikan 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)
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalNamespace & DirektifPengantar class & objectKata Kunci 'this'Method dan ParameterField vs PropertyKonstruktorInisialisasi objectRingkasan: Kalkulator Sederhana4Pewarisan
Sintaks Dasar Pewarisan (:)Kata Kunci 'base'Kata Kunci Virtual & OverrideClass SealedBase Class 'object'Rangkuman: Hierarki Karyawan7Fitur Lanjutan
Overloading OperatorIndexer (this[])Penimpaan ToString()Extension methodRingkasan: Custom list2Property & Anggota Statis
Property yang Diimplementasikan OtomatisProperty Hanya Baca dan Hanya TulisField dan method StatisClass StatisAnggota Berbentuk Ekspresi5Polimorfisme & Antarmuka
Polimorfisme saat kompilasi vs runtimeAntarmuka vs kelas abstrakBeberapa antarmukaAntarmuka eksplisitUpcasting & DowncastingRingkasan, Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi daripada PewarisanGenerics (class dan method)Delegate dan EventAtribut dan ReflectionIDisposable dan Pernyataan usingDasar-Dasar Dependency Injection11Pola Desain Bagian 2
Pola PerintahPola AdapterPola DecoratorPola Template MethodPola StatePola CompositeLatihan sendiri: Compiler C# online