Son bir umut direği daha kaldı.
Kapsülleme, soyutlama ve kalıtım hakkında konuştuk.
Bir de oldukça zor bir kelime olan dördüncü bir kelime var, polimorfizm.
Bu ne anlama geliyor?
Poli, birçok anlamına gelir ve daha fazla izm, birçok form anlamına gelir.
Artık yöntemlerin nesnelere ait olduğunu biliyoruz, değil mi?
Örneklenen nesne üzerinde işlem yapmak için self anahtar sözcüğünü kullanırız.
Şimdi Python'da, bu çok biçimlilik fikri, nesne sınıflarının aynı yöntem adını paylaşma şeklini ifade
eder.
Ancak bu yöntem adları, hangi nesnenin onları çağırdığına bağlı olarak farklı davranabilir.
Şimdi, bu kulağa son derece kafa karıştırıcı geliyor.
Şimdi bir koda göz atalım.
Kullanıcı büyücü ve okçu sınıflarımız var.
Polimorfizmde de bahsettiğim gibi, farklı nesne sınıfları yöntem adlarını paylaşabilir.
Yani burada paylaşılan bir TAC var, ancak her biri özelliğe göre farklı bir şey yapıyor.
Örneğin, Wizard one saldırısı yaptığımda.
Hadi yapalım şunu.
Büyücü bir nokta saldırısı.
Koş'a tıklarsam 60 güçle saldırıyorum çünkü Büyücü'nün Okçu'ya karşı saldırısının özel bir anlamı
var.
Onlar farklı.
Dolayısıyla, çağıran nesne nedeniyle aynı yöntem adlarını paylaşmalarına rağmen, çıktı farklı
olacaktır.
Yani aslında burada oldukça ilginç bir şey yapabiliriz.
Diyelim ki Büyücü 1'im var ve sonra Okçu 1'imiz de olacak ve Okçu 1 de Robin olacak.
Ve Robin'in 30 saati var.
Burada yapabileceğim şey aslında onları farklı şekillerde adlandırmak.
Örneğin, oyuncu saldırısı adında tamamen yeni bir fonksiyon oluşturabilirim.
Ve bu oyuncu bir karaktere saldırıyor.
Ve burada karakter, nokta, saldırı diyebiliriz.
Ve şimdi bu kodu çalıştırırsam ve şöyle dersem.
Oyuncu saldırısı.
Sihirbaz 1.
Ve bunu çalıştırıyorum.
Tek kişilik güçle saldıracağım.
Eğer saldırımızı oynarsam, Koş'a tıkladığımda Okçu burada olsun.
Gördüğünüz gibi, aynı işlevi çağırıyor olsak bile, içine aktardığımız nesne nedeniyle aynı
işlev bana farklı bir çıktı veriyor.
Polimorfizm.
Bunu göstermenin bir başka yolu da bir for döngüsü yapmaktır.
Diyelim ki karakter için yaparsam ve Büyücü bir ve Okçu bir ve bir listeye ekleyelim.
Ve eğer buraya yazdırırsam ya da karakter nokta saldırısını çalıştırırsam.
Eğer buraya tıklarsam.
Bir kez daha, farklı nesneler nedeniyle aynı yöntemi çağırıyor olmama rağmen iki farklı çıktı elde
ediyorum.
Ve bu gerçekten güçlü bir kavram, değil mi?
Çünkü, diyelim ki kullanıcı bir saldırıya uğramış olsa bile, bunu özel ihtiyaçlarımıza
göre özelleştirebiliyoruz.
Yöntem.
Ve bu varsayılan saldırı yöntemi, diyelim ki, yazdır, hiçbir şey yapma çünkü bu sadece bir kullanıcı.
Bunları çalıştırsam ve diyelim ki bir sihirbaz yazdırsam bile.
Çalıştır'a tıkladığımda nokta saldırısı diyelim.
Orijinal saldırı neyse onu geçersiz kılacak çünkü sihirbaz sınıfımızda zaten bu yöntem
var.
Ancak diyelim ki hem kullanıcının hem de sihirbazın saldırı yöntemini çalıştırmasını istedim.
Bunu nasıl yapabilirim?
Şimdi.
Bu, bir sonraki videoda biraz daha keşfedeceğimiz bir şey.
Ama şimdilik kullanıcı nokta saldırısı diyebilirim.
Ve kendini ver.
Çünkü burada kullanıcıyı parametre olarak kabul ediyorum.
Ve sonra kullanıcı nokta saldırısını çalıştırabilirim.
Bakalım burada ne olacak.
Çalıştır'a tıklarsam.
Hiçbir şey yapmıyorum ve 60'lık güçle saldırıyorum.
Yani polimorfizm birçok forma sahip olmamızı sağlar.
Wizard ve Archer, bu türetilmiş sınıflar için yöntemleri yeniden tanımlama yeteneğidir.
Ve örneklenen bir nesne çok biçimliliğe bağlı olarak farklı şekillerde davranabilir.
Bu da sınıflarımızı özel ihtiyaçlarımıza göre değiştirebildiğimiz için faydalıdır.
Ama aynı zamanda Sihirbazın içinde kullanıcıdan saldırı gibi bir şey kullanmak istediğimizde kendimizi tekrarlamak zorunda
kalmayız.
İşte bu kadar.
OP kapsüllemesinin dört ayağı.
Soyutlama.
Kalıtım ve son olarak polimorfizm.
Şimdi.
Hiçbir video veya kitap size tam olarak neyi ne zaman kullanacağınızı öğretmeyecektir.
Ancak buradaki fikir, bu güçlerin OP ile birlikte var olduğunu anlamaktır.
Hiçbir zaman "Çok biçimliliği uygulamam gerekiyor" demeyeceksiniz.
Hayır, çoğu zaman sadece kodlama yapıyorsunuz ve polimorfizmleri vurgulayan bir şekilde kodlama
yapıyorsunuz.
Bunlar büyük kelimeler olsa da, bu sadece OP'nin gücüdür.
Günün sonunda, kodumuzu verimli ve temiz bir şekilde yapılandırmak için bunları nasıl kullanacağımızı
öğrendik.
Ve bütün mesele de bu.
Her şey kodumuzu düzenlemekle ilgili.
Şimdi, bu kullanıcı saldırısını kendim yaptığımda bazılarınızın kafası biraz karışmış olabilir.
Bir sonraki videoda bunu biraz daha incelemek istiyorum.
Onda görüşürüz.