Evrim Ağacı Soru & Cevap
Reklamı Kapat
Puan Ver
0
Puan Ver

Nesne tabanlı programlamada polymorphism nedir?

Farklı yerlerden araştırmama rağmen özet olarak bir objenin başka bir obje gibi davranması denmiş ama neden ihtiyaç duyulmuş yani neden gidip başka bir kalıtımlı classın metodunu objemiz'de kullanıyoruz neden metodu objemizi o main sınıfta tanımlamıyoruz bide programlamaya girmeden benzetimle anlatabilir misiniz?

1
Teşekkür
Hatırla
Takip
Paylaş
Reklamı Kapat
1 Cevap

Objenin başka bir obje gibi davranmasından ziyade bir objenin bir den fazla formunun olması demek daha doğru olur. SOLID prensiplerinde open-closed ile güzel uyuşuyor. Genel olarak verilen bir örnek üzerinden gidecek olursak bir Shape (Şekil) classımız olsun, bu shape birden fazla formda olabilir: kare, daire, üçgen vs. Shape classında alan hesabı yapmak istersek her bir şekil için type belirtip eğer o type ise o şekil için alan hesabı yaptırabiliriz. if type=="square" a*a else if type=="üçgen a*h/2. Fakat bu tarz bir yola girmek hem gereksiz bir if else (ya da switch) bloğu yaratıyor. Ve ne zaman yeni bir type eklersek şekil classına, onun için classı "modify" etmemiz gerekiyor. Bunun yerine her bir şekil için ayrı class yaparsak shape classından inherit eden. Her class da alan hesaplayan methodu o class a özel yazabiliriz. Yeni bir şekil eklencek olursa, onun için ayrı bir class oluşturup kolay bir şekilde "extend" etmiş oluruz.

Diğer bir güzel yanı da: elinde bir shape objesi varsa ve onun alanına ihtiyacın varsa, shape.getArea() demen yeterli. Onun hangi typeda olduğu seni çok da ilgilendirmiyor oluşu.

class Shape {
float getArea();
}
class Square extends Shape{
float getArea(){
// hesaplama
}
}
class Circle extends Shape{
float getArea(){
// hesaplama
}
}
main:
Shape square = Square()
Shape circle = Circle()
square.getArea()
circle.getArea()
Puan Ver
1
Puan Ver
Teşekkür
Paylaş
1

Kaynaklar

  • Refactoring Guru. Replace Conditional With Polymorphism. (17 Ekim 2020). Alındığı Tarih: 17 Ekim 2020.
Cevap Ver
Bu soruya cevap vermek için lütfen
Evrim Ağacı Soru & Cevap Platformu, Türkiye'deki bilimseverler tarafından kolektif ve öz denetime dayalı bir şekilde sürdürülen, özgür bir ortamdır. Evrim Ağacı tarafından yayınlanan makalelerin aksine, bu platforma girilen soru ve cevapların içeriği veya gerçek/doğru olup olmadıkları Evrim Ağacı yönetimi tarafından denetlenmemektedir. Evrim Ağacı, bu platformda yayınlanan cevapları herhangi bir şekilde desteklememekte veya doğruluğunu garanti etmemektedir. Doğru olmadığını düşündüğünüz cevapları, size sunulan denetim araçlarıyla işaretleyebilir, daha doğru olan cevapları kaynaklarıyla girebilir ve oylama araçlarıyla platformun daha güvenilir bir ortama evrimleşmesine katkı sağlayabilirsiniz.
Reklamı Kapat
Reklamsız Deneyim

Evrim Ağacı'nın çalışmalarına Kreosus, Patreon veya YouTube üzerinden maddi destekte bulunarak hem Türkiye'de bilim anlatıcılığının gelişmesine katkı sağlayabilirsiniz, hem de site ve uygulamamızı reklamsız olarak deneyimleyebilirsiniz. Reklamsız deneyim, Evrim Ağacı'nda çeşitli kısımlarda gösterilen Google reklamlarını ve destek çağrılarını görmediğiniz, daha temiz bir site deneyimi sunmaktadır.

Kreosus

Kreosus'ta her 10₺'lik destek, 1 aylık reklamsız deneyime karşılık geliyor. Bu sayede, tek seferlik destekçilerimiz de, aylık destekçilerimiz de toplam destekleriyle doğru orantılı bir süre boyunca reklamsız deneyim elde edebiliyorlar.

Kreosus destekçilerimizin reklamsız deneyimi, destek olmaya başladıkları anda devreye girmektedir ve ek bir işleme gerek yoktur.

Patreon

Patreon destekçilerimiz, destek miktarından bağımsız olarak, Evrim Ağacı'na destek oldukları süre boyunca reklamsız deneyime erişmeyi sürdürebiliyorlar.

Patreon destekçilerimizin Patreon ile ilişkili e-posta hesapları, Evrim Ağacı'ndaki üyelik e-postaları ile birebir aynı olmalıdır. Patreon destekçilerimizin reklamsız deneyiminin devreye girmesi 24 saat alabilmektedir.

YouTube

YouTube destekçilerimizin hepsi otomatik olarak reklamsız deneyime şimdilik erişemiyorlar ve şu anda, YouTube üzerinden her destek seviyesine reklamsız deneyim ayrıcalığını sunamamaktayız. YouTube Destek Sistemi üzerinde sunulan farklı seviyelerin açıklamalarını okuyarak, hangi ayrıcalıklara erişebileceğinizi öğrenebilirsiniz.

Eğer seçtiğiniz seviye reklamsız deneyim ayrıcalığı sunuyorsa, destek olduktan sonra YouTube tarafından gösterilecek olan bağlantıdaki formu doldurarak reklamsız deneyime erişebilirsiniz. YouTube destekçilerimizin reklamsız deneyiminin devreye girmesi, formu doldurduktan sonra 24-72 saat alabilmektedir.

Diğer Platformlar

Bu 3 platform haricinde destek olan destekçilerimize ne yazık ki reklamsız deneyim ayrıcalığını sunamamaktayız. Destekleriniz sayesinde sistemlerimizi geliştirmeyi sürdürüyoruz ve umuyoruz bu ayrıcalıkları zamanla genişletebileceğiz.

Giriş yapmayı unutmayın!

Reklamsız deneyim için, maddi desteğiniz ile ilişkilendirilmiş olan Evrim Ağacı hesabınıza üye girişi yapmanız gerekmektedir. Giriş yapmadığınız takdirde reklamları görmeye devam edeceksinizdir.

Destek Ol
Türkiye'deki bilimseverlerin buluşma noktasına hoşgeldiniz!

Göster

Şifrenizi mi unuttunuz? Lütfen e-posta adresinizi giriniz. E-posta adresinize şifrenizi sıfırlamak için bir bağlantı gönderilecektir.

Geri dön

Eğer aktivasyon kodunu almadıysanız lütfen e-posta adresinizi giriniz. Üyeliğinizi aktive etmek için e-posta adresinize bir bağlantı gönderilecektir.

Geri dön

Close
“Eğitim, bilimin öğretebileceği en önemli dersi öğretmekte ciddi anlamda başarısız oldu: şüpheciliği.”
David Suzuki