‫Bu derste, somut bir örnekle kendi arayüzlerinizi nasıl oluşturacağınızı ve uygulayacağınızı öğrenecek ve özellikle
‫sınıflarımızın birbirleriyle bir ilişkisi olmadığında ve dolayısıyla bir temel sınıfı paylaşmadıklarında arayüzlerin
‫neden kullanıldığına dair bir fikir edineceksiniz.
‫Dolayısıyla, miras bu şekilde bir seçenek değildir.
‫Oyuncunun bir şeyleri yok edebileceği bir video oyunu üzerinde çalıştığımızı düşünün, ancak yok ettiğimiz
‫her şey yok edilen şeye bağlı olarak farklı davranışlara sahip olacaktır.
‫Örneğin, bir sandalyeyi yok etmek bazı yıkım sesleri çalacak ve yıkılan sandalye parçaları ortaya çıkacaktır.
‫Ancak bir arabayı yok etmek bir patlama sesi çıkaracak, yangın çıkaracak ve yakındaki diğer nesneleri yok edecektir.
‫Oyunumuz için, mobilya sınıfından miras alan bir sandalye ve araç sınıfından miras alan
‫bir araba sınıfımız var.
‫Şimdi bu sınıflara hızlıca bir göz atalım.
‫Dolayısıyla, mobilyadan miras alınan bu sandalyemiz var ve sandalyenin burada, oluşturulan
‫nesneye verilene göre rengi ve malzemeyi ayarladığımız basit bir kurucusu var.
‫Ama şimdi, tabii ki, bu sınıf mobilyadan miras alınıyor, bu yüzden burada az önce sandalye sınıfında
‫kullandığımız renk ve malzeme özelliklerine sahibiz.
‫Ve sonra burada, bu değerlerin varsayılan olarak ayarlanacağı varsayılan kurucu olan
‫kurucumuz var.
‫Böylece renk ve malzeme varsayılan olarak beyaz ve ahşap olacaktır.
‫Ayrıca, varsayılan olarak ayarlamak için rengin yanı sıra malzemeyi de kullanan basit bir kurucumuz
‫var.
‫Tamam, süslü bir şey yok ama tabii ki bir de arabamız var ve daha önce de belirttiğim gibi sandalyeyi ve arabayı
‫yok edebilmek istiyoruz.
‫Şimdi arabaya hızlıca bir göz atalım.
‫Burada da aynı hikayeye sahibiz, aracın hızının yanı sıra rengini de ayarladığımız vehicle'ı genişleten bir alt
‫sınıf car.
‫Şimdi burada yaptığımız gibi basit bir kurucu kullanıyoruz.
‫Ama tabii ki burada da bazlı kullanabilirdik, hem hızı hem de rengi geçirebilirdik.
‫Dolayısıyla bu da geçerli bir seçenektir ve bunu burada kullanmak zorunda kalmayız.
‫Yani bu konuda iki farklı yol var elbette.
‫Tamam.
‫Ve sonra bu araba, elbette hız ve rengin tanımlanması gereken araçtan miras alıyor.
‫Şimdi araç sınıfına bakalım ve burada bu temel sınıf aracın bir hıza, bir renge ve bu iki değeri, saatte
‫120 kilometre hız ve beyaz renk olarak ayarlayan varsayılan bir kurucuya sahip olduğunu görebiliriz.
‫Ve sonra araç nesnesine verilen değerlere göre hızı ve rengi ayarlayan
‫basit bir kurucumuz var.
‫Ayrıca, elbette, örneğin bir araba gibi miras alınan nesnelere de.
‫Tamam.
‫Şimdi tüm bu farklı sınıflara sahip olduğumuza ve nasıl yapılandırıldıklarını gördüğümüze göre,
‫asıl yıkım özelliğine bakalım.
‫Peki böyle bir yıkım özelliği oluşturmak için en iyi yaklaşım nedir?
‫Bunu düşünürsek, sınıflarımızın ondan miras almasını sağlamak için bir sınıf ekleyemeyiz çünkü
‫C-sharp tek bir miras alma dilidir ve çoklu bir miras alma dili değildir, hepimiz zaten bir sınıftan miras alırız,
‫yani araba zaten araçtan miras alır ve sandalye zaten mobilyadan miras alır.
‫Dolayısıyla başka bir şeyden miras alınamaz.
‫Örneğin, buradaki araç gibi, görüyorsunuz, C-sharp buna izin vermiyor çünkü birden fazla temel
‫sınıfa sahip olamıyor.
‫C-sharp'ta bir sınıf birden fazla temel sınıfa sahip olamaz.
‫Ayrıca, bir araba ile bir sandalye arasında zaten bir temel sınıfı paylaşacak somut bir ilişki yoktur çünkü
‫bunlar tamamen farklı iki şeydir, değil mi?
‫Örneğin, burada sahip olduğumuz sınıfların her birinde yok etme yöntemi olarak adlandırılan normal yöntemleri
‫uygularsak, bakımı zor olacaktır.
‫Ya gelecekte yıkım sistemini tamamen değiştirmeye veya yıkılabilir nesnelerimize görsel efektler eklemeye
‫karar verirsek?
‫Her bir sınıfı gözden geçirmek ve değiştirmek gerçekten acı verici olacaktır.
‫Çünkü bu durumda, tabiri caizse sadece iki alt sınıfımız var.
‫Doğru.
‫Ancak oyununuzda 50 hatta 100 farklı sınıf, 100 farklı nesne türü olduğunu düşünün.
‫O zaman her birini tek tek gözden geçirmeniz ve kodu buna göre ayarlamanız gerekir.
‫Yani bu gerçekten bir yük ve biz bunu yaşamak istemiyoruz.
‫Bu yüzden daha iyi bir çözüm bulmamız gerekiyor.
‫İhtiyacımız olan şey, tıpkı bir sözleşme gibi, onu kullanan her sınıf üzerinde dikkat dağıtıcı davranışımızı uygulamanın
‫bir yoludur.
‫Ve eğer arayüzlerle ilgili videomuzu izlediyseniz, bunların bizim yaratabileceğimiz sözleşmeler olduğunu biliyorsunuzdur.
‫Bu durumda en iyi yaklaşım bir arayüz kullanmaktır ve biz buna I Destroy Able adını vereceğiz.
‫Ve bu arayüzü uygulayan herhangi bir sınıf, yıkım gereksinimlerimizi takip etmek ve aynı zamanda sınıfın
‫kendisine bağlı olarak özelleştirmek zorunda kalacaktır.
‫Öyleyse devam edelim ve böyle bir arayüz oluşturalım.
‫Bu nedenle, buradan projenize gidebilir, yeni bir öğe ekleyebilir ve ardından buradan arayüzü seçip ona bir isim
‫verebilirsiniz.
‫Bu yüzden bunu arayacağım.
‫Arayüzleri kullanırken bunun bir arayüz olacağını belirtmek için dosya adının başına I eklediğinizi
‫görebilmeniz için ble'yi yok ediyorum.
‫Öyleyse bu arayüzü ekleyelim.
‫Dolayısıyla bu arayüz, yıkımı gerçekleştirdiğimizde çalıştırılacak olan ses dosyasını saklamak için bir özelliğe
‫sahip olacaktır, bu da yıkım sesi olacaktır.
‫Ve sonra bir nesneyi yok edecek bir yöntemimiz var ve bu yöntemi destroy olarak adlandıracağız.
‫Hiçbir şeyi geri getirmeyecek, sadece bir şeyleri yok edecektir.
‫Böylece, örneğin, sahip olduğunuz grafikleri döndürebilir.
‫Dolayısıyla, öğe yok edildiğinde görüntülemek istediğiniz nesneler, örneğin araba yok edildi
‫veya sandalye yok edildi vb.
‫Şimdi sınıflarımızın aslında bu arayüzü uygulayacağından emin olalım ve ardından elbette arayüzlerin
‫içeriğini, yani yok etme sesini ve yok etme yöntemini uygulayalım.
‫Bunu nasıl yapabiliriz?
‫Örneğin, arabamıza gidelim ve burada arabamızın sınıf tanımının en üstüne bir virgül eklemesi ve bu I destroy able arayüzünü
‫kullanması gerekecek, bu yüzden şimdi eklerseniz, arabanın arayüz üyesini yok etme sesini ve yok etmeyi uygulamadığını
‫söyleyen bir hata aldığınızı görebilirsiniz, böylece potansiyel düzeltmeleri
‫gösterebilir ve tüm üyeleri uygulayabiliriz.
‫Örneğin, bu bizim için bu otomatik kodu oluşturacaktır.
‫Böylece boşluğu yaratacak, yok edecek, yok edebilecek ve bizim için bir yıkım sesi yaratacaktır.
‫Yani bu otomatik oluşturulan versiyon olacaktır, ancak bunu manuel olarak da yapabiliriz.
‫Bunda bir sorun yok.
‫Yani burada, örneğin, yıkım sesini uygulayabiliriz.
‫Ve sonra yapmak istediğim şey, yakındaki yok edilen nesneleri saklamak için bir özelliğe sahip olmak istiyorum.
‫Yani bir araba yok edildiğinde, yakındaki nesneyi de yok etmelidir.
‫Ve bu liste de bir tür liste olacak.
‫Yok edebilirim, yani bu arayüzü uygulayan herhangi bir nesneyi saklayabilir ve yalnızca bu arayüzdeki
‫özelliklere ve yöntemlere erişebiliriz.
‫Bunu oluşturmak için, tüm nesneleri yok ettiğim genel bir liste oluşturacağım ve onlara
‫yakındaki topları yok et diyeceğim.
‫Şimdi devam edebilir ve yapıcımızı genişletebiliriz.
‫Yani bir yandan sesi başlattığımızdan emin olmak istiyoruz.
‫Bu yüzden bir patlama sesimiz olduğundan emin oluruz.
‫Örneğin, diyelim ki araba patlama sesi amfisi üç adında bir sesimiz var.
‫Ve sonra yok edilebilir nesnelerin listesini başlatmak istiyoruz.
‫Örneğin, bu sadece yok edilen nesnelerin yeni bir listesi olacaktır ve sonra sadece destroy yöntemini
‫uygulamamız gerekir.
‫Bu yüzden bunu yok ediyorum.
‫Burada, en üstte hala mutlu olmadığını görebilirsiniz, hala yok etme yöntemini uygulamamızı
‫bekliyor.
‫Gördüğünüz gibi, bir arayüzü uyguladığınızda üyelerini de uygulamanız gerekir, çünkü buradaki arayüzün
‫iki üyesi vardır, her ikisini de uygulamamız gerekir.
‫Bu da buraya geri dönmemiz ve destroy yöntemini uygulamamız gerektiği anlamına gelir.
‫Bu yüzden bunu yapmak için gerçekten hızlıca yapalım.
‫Burada eklemek istediğim şey, öncelikle iki ifade olacak.
‫Sadece doğru satır ifadelerini kullanacağım.
‫Basit tutacağım çünkü burada bir oyun yaratmıyoruz, sadece arayüz kavramlarını
‫anlamaya çalışıyoruz.
‫Yani bir araba tahrip olduğunda, tahrip sesini çalmalı ve bir yangın efekti yaratmalıyız.
‫Yani burada sadece sesi gerçekten çalacakmışız gibi taklit ediyoruz ve sadece tamam, araba
‫patlaması amfi üç sesini çalıyor diyecek ve sonra yangını yaratacağız.
‫Yani her şey ateş altında.
‫Araba yok olduğu için her şey yanıyor.
‫Şimdi yakındaki her bir yok ediciyi gözden geçirelim ve gerçekten yok edelim.
‫Bu yüzden burada, yakınlardaki yok edilen toplar listemizin içinde bulunan her bir I destroy nesnesini inceleyeceğiz.
‫Biz buna her şeyi yok etmek diyoruz.
‫Yani her bir öğe yok edilmiş bir top olacak, bu da temelde sadece yerel bir değişken adıdır.
‫Bu yüzden diyoruz ki, tamam, ID Storable arayüzünü uygulayacak olan yok edilen nesne, for each döngümüzde sadece destroy ball
‫olarak adlandırılacaktır.
‫Yani koleksiyonda yineleme yapıyoruz, yakındaki topları yok ediyoruz, bu yok ettiğim
‫nesnelerin bir listesi, temelde ID stretchable arayüzünü uygulayan nesneler ve sonra sadece
‫yok etme yöntemini çağırıyoruz.
‫Yani temelde burada zincirleme bir reaksiyon yaratıyoruz, yok olan her şeyin etrafındaki her şeyi yok ediyoruz
‫ve bu da bir araba ve benzeri.
‫Bu durumda, diyelim ki yan yana iki arabamız var ve yanlarında bir sürü sandalye
‫var.
‫Böylece arabalar bu yok etme yöntemini çağıracak ve buradaki eşyaları yok edeceklerdir çünkü bu büyük
‫bir patlamadır.
‫Doğru.
‫Bir ses geliyor ve her öğe bir ses yaratıyor.
‫Şimdi, elbette, bir şey alev aldıktan sonra gerçek patlama gerçekleşene kadar ihtiyaç duyduğu bir zamanlayıcı
‫oluşturabilirsiniz.
‫Ama biz burada basit tutacağız.
‫Yani hem diğer arabaları hem de diğer sandalyeleri yok ediyoruz.
‫Böylece her araba, etrafındaki diğer öğeleri etkileyecektir.
‫Ve bu, diyelim ki, on metre veya beş metre uzaklıktaki her şey olabilir veya burada Amerikan sistemini
‫almak istiyorsanız, kaç inç uzakta olursa olsun.
‫Ama temelde olacak olan bu.
‫Şimdi sandalyelere bakalım, çünkü sandalyelerin de benzer bir yaklaşımdan geçmesi gerekecek, çünkü biz de bir sandalyenin
‫yok edildiğinden emin olmak istiyoruz, ancak bir sandalyenin yok edilmesi çok farklı olacaktır.
‫Bu yüzden buraya arayüzü de ekleyeceğiz.
‫Bu yüzden tüm arayüzü yok ediyorum ve tabii ki yıkım sesini uygulamamız gerekiyor
‫ve bu çok farklı bir yıkım olacak çünkü sandalye parçalanacak ve duyduğunuz ahşap parçalanacak.
‫Yani burada çok farklı bir ses olacak.
‫Ve tabii ki, yıkım sesini de yapıcımızın içinde tanımlamak istiyoruz.
‫Bu yüzden sandalye yıkım sesinin çalınması gerektiğini söyleyeceğim.
‫Her zaman aynı olacak.
‫Bu nedenle Başkan'ın beyanını buraya eklemiyorum.
‫Bu yüzden burada basit tutuyorum.
‫Elbette, farklı patlama seslerine sahip farklı sandalyeleriniz olabilir.
‫Daha sonra bunu yapıcınız için bir parametre olarak buraya en üste eklersiniz.
‫Tamam, şimdi de destroy yöntemini uygulayalım.
‫Bu durumda, bir şeyi yok edeceğiz ve öncelikle sandalyenin sahip olduğu renge bağlı olarak renkli
‫sandalyeyi yok edeceğiz.
‫Bunu yazacağız, sonra yıkım sesini çalacağız.
‫Ve son olarak sandalye parçalarını ortaya çıkaracağız.
‫Yani bizim durumumuzda bunu sadece konsola yazıyoruz.
‫Ancak gerçek bir oyunda bunu nasıl yapacağınızı hayal edin, çünkü bir video oyununda bir şeyi yok etmenin en
‫iyi yolu, tüm yıkımı yaptığınız fiziksel şeyi gerçekten yapmak değildir, ki bu özellikle
‫de inşa edilmesi çok zordur.
‫Her türlü işi yapan büyük bir ekibiniz olmasın.
‫Sonra temel olarak büyük bir patlama veya yıkım animasyonu yaparsınız ve sonra etrafta duran parçaların
‫yıkılmış kısımlarını ortaya çıkarırsınız.
‫Gördüğünüz gibi bu yok etme yönteminden kaynaklanan zincirleme bir reaksiyon yok.
‫Dolayısıyla, sandalye için yok etme yöntemi uygulaması araç için olandan çok farklıdır, ancak
‫her ikisi de I destroy able arayüzünden miras alır ve yok etme yöntemini uygulamak zorundadır ve bunu kendi yollarıyla
‫yapabilirler.
‫Yani temelde arayüzler, gerçekte çoklu kalıtım olmasa da bize bir tür çoklu kalıtım
‫sağlar.
‫Tamam.
‫Şimdi programımız CSS'e gidelim ve yeni oluşturduğumuz sınıfları kullanalım çünkü aksi takdirde
‫sıkıcı olur, değil mi?
‫Şimdi devam edelim ve iki sandalye oluşturalım.
‫Yani kahverengi ve plastik olacak bir ofis koltuğumuz var ve ardından kırmızı ve ahşap olacak
‫bir oyun koltuğumuz var.
‫Ve sonra da yeni bir araba yaratalım.
‫Yani bu arabanın hızı 80 olacak, mavi olacak ve hasarlı bir araba olacak.
‫Ve sonra yakındaki iki sandalyeyi, bu hasarlı arabayı ekleyeceğiz.
‫Bu yüzden onları hasarlı aracımızın yanına tahrip olmuş tekerlekler olarak ekliyoruz.
‫Yani ofis koltuğunun yanı sıra oyun koltuğu da artık burada yok edilmiş olarak görünecek, yakınlarda çünkü
‫bir araba oluştururken bu liste boş olacak.
‫Ama sonra, elbette, burada herkese açık bir liste olduğu için, ona öğeler ekleyebiliriz, ki bunu yapıyoruz.
‫Yok edilen tüm öğeleri buna ekliyoruz.
‫Ve neden yıkılan toplarımızın yanına sandalye ekleyebiliyoruz?
‫Çünkü bir sandalye bu arayüzü uygular.
‫Biz ona kabile dedik.
‫Bu, bir sandalyenin artık yok ettiğim türden bir nesne olarak kabul edileceği anlamına gelir.
‫Bu da artık onu yakındaki rahatsızlığımız olarak ekleyebileceğimiz anlamına geliyor.
‫Şimdi devam edip arabayı yok edebiliriz.
‫Öyleyse hasarlı aracımız için destroy metodunu çağıralım ki patlama gerçekleşebilsin.
‫Patlama sesi ve tüm iyi şeyler başlayabilir.
‫Hadi şunu çalıştıralım.
‫Ve elbette, bu daha çok bir macera oyunu olacak ve gerçek 3D grafikleri veya başka bir şeyi gördüğünüz bir
‫oyun olmayacak.
‫Böylece yıkım sesini, araba patlama sesini çalıyoruz, yangını yaratıyoruz.
‫Kahverengi sandalye yok edildi.
‫Sandalye yıkım sesi amfisi üçün yıkım sesini çalıyoruz.
‫Ardından kahverengi sandalyemiz için sandalye parçalarını üretiyoruz.
‫Sonra kırmızı sandalye yok edildi.
‫Sandalye imha ses amfisi üçün imha sesini çalıyoruz ve ardından kırmızı sandalyemiz için
‫sandalye parçaları üretiyoruz.
‫Gördüğünüz gibi, hepsi bu kadar.
‫İşte kendi arayüzlerinizi bu şekilde oluşturabilir ve bunları nasıl kullanabilirsiniz.
‫Umarım artık arayüzlerin sizin için neler yapabileceğini ve arayüzlerin avantajlarını anlamışsınızdır.
‫Burada önemli bir not: arayüzler, arayüzü uygulayan sınıfın türünü önemsemeyen benzer veya
‫benzer olmayan iki sınıf arasındaki iletişim için kullanılır.
‫Tıpkı arabamızın yok etme yöntemini çağırmak için sandalye ile iletişim kurması gibi, çünkü daha önce belirttiğim
‫gibi aynı arayüzü uyguladılar.
‫Dolayısıyla arayüzler ilk bakışta anlaşılması zor gibi görünse de bize büyük avantajlar sağlıyor.
‫Bu avantajlar kod okunabilirliğidir.
‫Dolayısıyla bir arayüz, niyetler hakkında bir bildirim oluşturur, bu nedenle sınıfınızın kapasitesini tanımlar.
‫Dolayısıyla, sınıfınızın yapabildikleri, örneğin AI sortable'ı uygularsanız, sınıfınızın nesnelerinin
‫sıralanabileceğini açıkça belirtmiş olursunuz ve ardından kod semantiği.
‫Arayüzler sağlayarak ve bunları uygulayarak, kavramları aktif bir şekilde ayırırsınız ve arayüz bir davranış
‫modeli, bir nesnenin ne yapabileceğinin bir tanımını tanımlar ve bu kavramları ayırmak kodunuzun anlamını çok
‫daha net tutar.
‫O zaman kodunuz var.
‫Sürdürülebilirlik arayüzleri bağlantıyı azaltmaya yardımcı olur ve altta yatan kod etkilenmeden aynı kavram
‫için uygulamaları kolayca değiştirmenize olanak tanır.
‫Ve sonra tasarım modellerimiz var.
‫Nesne yönelimli programlama, dolayısıyla insan anlayışı ve karmaşık sistem mimarisi için çok önemli olan sözleşmeler,
‫soyutlama ve arayüzleri kullanmanın büyük resmidir.
‫Yani temelde sadece bir insan olarak daha iyi anlamak ve ardından çoklu kalıtım.
‫Dolayısıyla arayüzler, C-sharp'ta çoklu kalıtım kullanmak için geçidimiz olabilir.
‫Bir kütüphane yazdığınızı ve bunun kullanıcılar tarafından değiştirilebilir olmasını istediğinizi varsayalım.
‫Arayüz ve onun sınıf uygulamasını yazarsınız.
‫Kütüphanenizi kullanacak diğer geliştiriciler, aynı sonucu elde etmek için farklı teknolojiler veya
‫algoritmalar kullanabilecekleri kendi uygulama sınıflarını yazabilirler.
‫Kullandığımız kütüphanelerde bu kadar çok arayüzle karşılaşmamızın, ancak kütüphaneleri kendimiz yazmadığımız
‫için kendi arayüzlerimizi yazma ihtiyacını nadiren hissetmemizin nedeni de budur.
‫Son bir not olarak, önemli olan bu noktada arayüzlerin nasıl uygulandığını anlamaktır.
‫Tabii ki, WPF ve ASP gibi farklı teknolojilerden geçtikçe. NET ve C sharp ana sınıfında, gelecekte onları
‫daha iyi anlamanıza yardımcı olacak arayüzleri daha fazla kullanmaya başlayacağız.
‫Tamam.
‫Bu videoyu izlediğiniz için çok teşekkürler.
‫Bir sonrakinde görüşürüz.