Paylaşım Yap
Tüm Reklamları Kapat
Sorulara Dön
0

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 ?
257 görüntülenme
0
  • Paylaş
  • Alıntıla
  • Alıntıları Göster
  • Dış Sitelerde Paylaş
  • Soruyu Takip Et
  • Raporla
  • Mantık Hatası Bildir
Tüm Reklamları Kapat
1 Cevap
Berkay Özkan
Yazılım Mühendisi

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.

Tüm Reklamları Kapat

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()
107 görüntülenme

Kaynaklar

  1. Refactoring Guru. Replace Conditional With Polymorphism. (17 Ekim 2020). Alındığı Tarih: 17 Ekim 2020. Alındığı Yer: | Arşiv Bağlantısı
2
0
  • Paylaş
  • Alıntıla
  • Alıntıları Göster
  • Dış Sitelerde Paylaş
  • Raporla
  • Mantık Hatası Bildir
Daha Fazla Cevap Göster
Cevap Ver
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.
Popüler Yazılar
30 gün
90 gün
1 yıl
Evrim Ağacı'na Destek Ol

Evrim Ağacı'nın %100 okur destekli bir bilim platformu olduğunu biliyor muydunuz? Evrim Ağacı'nın maddi destekçileri arasına katılarak Türkiye'de bilimin yayılmasına güç katın.

Evrim Ağacı'nı Takip Et!
Aklımdan Geçen
Komünite Seç
Aklımdan Geçen
Fark Ettim ki...
Bugün Öğrendim ki...
İşe Yarar İpucu
Bilim Haberleri
Hikaye Fikri
Video Konu Önerisi
Başlık
Gündem
Bugün Türkiye'de bilime ve bilim okuryazarlığına neler katacaksın?
Bağlantı
Kurallar
Komünite Kuralları
Bu komünite, aklınızdan geçen düşünceleri Evrim Ağacı ailesiyle paylaşabilmeniz içindir. Yapacağınız paylaşımlar Evrim Ağacı'nın kurallarına tabidir. Ayrıca bu komünitenin ek kurallarına da uymanız gerekmektedir.
1
Bilim kimliğinizi önceleyin.
Evrim Ağacı bir bilim platformudur. Dolayısıyla aklınızdan geçen her şeyden ziyade, bilim veya yaşamla ilgili olabilecek düşüncelerinizle ilgileniyoruz.
2
Propaganda ve baskı amaçlı kullanmayın.
Herkesin aklından her şey geçebilir; fakat bu platformun amacı, insanların belli ideolojiler için propaganda yapmaları veya başkaları üzerinde baskı kurma amacıyla geliştirilmemiştir. Paylaştığınız fikirlerin değer kattığından emin olun.
3
Gerilim yaratmayın.
Gerilim, tersleme, tahrik, taciz, alay, dedikodu, trollük, vurdumduymazlık, duyarsızlık, ırkçılık, bağnazlık, nefret söylemi, azınlıklara saldırı, fanatizm, holiganlık, sloganlar yasaktır.
4
Değer katın; hassas konulardan ve öznel yoruma açık alanlardan uzak durun.
Bu komünitenin amacı okurlara hayatla ilgili keyifli farkındalıklar yaşatabilmektir. Din, politika, spor, aktüel konular gibi anlık tepkilere neden olabilecek konulardaki tespitlerden kaçının. Ayrıca aklınızdan geçenlerin Türkiye’deki bilim komünitesine değer katması beklenmektedir.
5
Cevap hakkı doğurmayın.
Bu platformda cevap veya yorum sistemi bulunmamaktadır. Dolayısıyla aklınızdan geçenlerin, tespit edilebilir kişilere cevap hakkı doğurmadığından emin olun.
Ekle
Soru Sor
ve seni takip ediyor

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