Java'da Polimorfizm: Kavramlar, Türler, Karakteristikler ve Örnekler

Yayınlanan: 2022-04-18

Javascript, C#, PHP, Python, C++ vb. ile birlikte en popüler ve yaygın olarak kullanılan Nesne Yönelimli Programlama dillerinden biridir. Her şey bir nesne olarak temsil edildiğinden, kullanıcıların programlama yoluyla gerçek yaşam kavramlarını sergilemelerini ve ele almalarını sağlar. Java'nın bir programlama dili olarak özellikleri, kodları daha dinamik hale getirerek ve bakımı kolaylaştırarak yazılım geliştirmeyi basitleştirmek için çeşitli yollar sunar.

Bu makalede, Java'yı Nesne Yönelimli Programlama dili olarak keşfedeceğiz ve kalıtım, soyutlama, polimorfizm ve veri kapsülleme kavramlarını anlayacağız. Ayrıca Java'daki polimorfizm türlerini, avantajlarını ve dezavantajlarını inceleyeceğiz.

İçindekiler

Nesne Yönelimli Programlamaya Genel Bakış

Nesne yönelimli programlama (OOP) dilleri, kodlamada gerçek zamanlı 'nesneler' kavramını kullanan bilgisayar dillerini ifade eder. Kalıtım, polimorfizm, döngüler, veri soyutlama vb. gibi dünyevi varlıkları programlama yoluyla uygulamayı amaçlar.

Programcıların aşina olması gereken birkaç temel Nesne Yönelimli Programlama kavramı vardır. Bu kavramsal terimler, kapsülleme, polimorfizm vb. gibi OOP'nin özel ve benzersiz özelliklerini öğrenmek için gereklidir.

1. Sınıf

Bir 'sınıf', sınıf içindeki tüm belirtilen 'nesneler' için geçerli olan bir dizi özellik ve yöntemi temsil eder. Nesneler, tamsayı, dizi veya dize gibi farklı türlerde olabilir. Bir sınıf, kullanıcı tarafından tanımlanan ve hangi farklı 'nesnelerin' oluşturulabileceği bir prototip gibidir.

2. Nesne

Nesne, gerçek hayatta gerçek verileri temsil eden OOP dillerinin en temel birimidir. Nesneler, çağrıldıkları sınıf(lar)ın özelliklerini taşır.

3. Yöntem

Yöntem, belirli bir görevi gerçekleştirmek için bir araya getirilen farklı işlevleri içeren bir dizi ifadedir. Kullanıcı tarafından tanımlanan yönergeleri tamamladıktan sonra çıktıyı döndürür. Ayrıca çıktı sağlamayan görevleri de gerçekleştirebilir. Yöntemler, programcıların kodları yeniden yazmadan yeniden kullanmalarına olanak tanır. Java, C++, C veya Python gibi dillerin aksine, tüm yöntemlerin bir sınıfa ait olmasını gerektirir.

OOP Kavramları

Nesne Yönelimli programlamanın dört temel ilkesi vardır – Java bu özelliklerin tümünü sergiler:

1. Soyutlama

Veri Soyutlama, nesnenin diğer alakasız ayrıntılarını uygulama kodu gibi kullanıcı tarafından görünürlükten korurken gerekli ayrıntıları gösteren OOP dillerinin bir özelliğidir. Geliştiricilerin bir sınıfın işlevselliğinde uygun değişiklikleri hızla yapmasına yardımcı olan bu özellik tarafından yalnızca temel ve ilgili ayrıntılar görüntülenir.

2. Kapsülleme

Veri kapsülleme, verilerin birimler içinde kaydırılması anlamına gelir. OOP dillerinin bu özelliği, kapsüllenmiş verileri diğer işlevlerden ve yöntemlerden korur. İşlemleri tekil birimlerde gerçekleştirmek için kodu ve belirtilen yöntemleri birbirine bağlar, böylece bunların dış yöntemlerle manipüle edilmesini veya bunlara erişilmesini önler. Bu aynı zamanda Veri Gizleme olarak da bilinir.

3. Miras

Kalıtım, bir sınıfın diğer sınıflardan özellikleri miras almasına izin veren OOP dillerinin bir başka önemli özelliğidir. Kodların yeniden kullanılabilirliği kavramı üzerinde çalışır, böylece sınıf özelliklerini tekrar tekrar yazma ihtiyacını azaltır. Başka bir sınıftan miras alan sınıf, alt sınıf olarak bilinir ve miras alınan sınıf, üst sınıf olarak bilinir.

4. Polimorfizm

Polimorfizm, bir nesnenin birçok biçim almasına ve benzer görevleri yerine getirmesine veya farklı yöntemlerde benzer davranışlar sergilemesine izin verir.

Java'da polimorfizm

Polimorfizm, tek bir görevin çeşitli şekillerde gerçekleştirilmesine izin verir. Benzer kod varlıklarını tanımlamaya ve ayırt etmeye yardımcı olan, dolayısıyla OOP dillerinin verimliliğini artıran bir özelliktir.

Java'da polimorfizm, nesneleri ayrı varlıklar olarak bildirerek sergilenir. Bu şekilde, aynı eylem birden fazla şekilde gerçekleştirilebilir. Polimorfizm, kalıtımla birlikte etkinleştirilir ve nesnelerin farklı sınıfların kalıtsal özelliklerini kullanarak farklı görevleri gerçekleştirmesini sağlar. Yöntemlerin veya nesnelerin belirlenmesindeki farklılıklar iki varlığı birbirinden ayırır.

Dünyanın En İyi Üniversitelerinden Online Yazılım Geliştirme Kursları öğrenin . Kariyerinizi hızlandırmak için Yönetici PG Programları, Gelişmiş Sertifika Programları veya Yüksek Lisans Programları kazanın.

Polimorfizmin Özellikleri

1. Zorlama

Derleme süresi boyunca tür hatalarını önlemek için veri türlerinin örtük olarak dönüştürülmesi zorlamadır. Açık veri türü dönüşümlerini içermez, ancak yalnızca Java'nın izin verdiği dönüştürme hiyerarşisini takip eder. Örneğin, bir işlenen yüzer durumdaysa ve operatör bir tam sayıysa, sonuç yüzer durumda olacaktır.

2. Polimorfik parametreler/değişkenler

Yürütme süresi boyunca çeşitli türlerde değerleri tutabilen bir nesne veya değişken, polimorfik değişken veya parametre olarak bilinir. Bir sınıf bildirirken, aynı değişken adlarının farklı veri türlerini tutabileceğini ve aynı yöntem adlarının farklı parametreleri ve dönüş türlerini tutabileceğini belirtir.

3. Dahili Operatör Aşırı Yüklemesi

Operatör aşırı yüklemesi, kullanıcının gerektirdiği şekilde bir operatör sembolü kullanır. Java, Dahili Operatör Aşırı Yüklemesini destekler. Aynı zamanda statik polimorfizmin bir örneğidir.

Java'da Polimorfizm Türleri

Java'da polimorfizm aşağıdakiler kullanılarak çağrılabilir:

1. Yöntem Aşırı Yüklemesi

Yöntem aşırı yükleme, aynı adı taşıyan ve aynı sınıfa ait olan birden çok nesne veya yöntem oluşturma işlemidir. Bir sınıf içinde çalışır.

2. Yöntem Geçersiz Kılma

Yöntem geçersiz kılma, bir alt sınıfın üst sınıfta bildirilen yöntemlerin aynısını nasıl oluşturduğudur. Sınıflar arasında işlev görür. Alt sınıf, üst sınıfta zaten mevcut olan aynı yöntemleri içeriyorsa, alt sınıftaki işlev geçersiz kılınır.

Java'da Alt Tip Polimorfizmi

Alt tip polimorfizmi, Upcasting ve Late Binding'e bağlıdır.

  • Upcasting, bir nesnenin veya Yöntemin, bir veri türünü (kayan, tamsayı, vb.) kalıtım hiyerarşisinde yukarı taşıyarak bir alt türden bir üst türe yükseltebildiği bir süreçtir.
  • Geç bağlama, nihai olmayan örnekler olan yöntemleri çağırmak için kullanılır.

Alt türün kendisi üst türün bir üyesi olduğu için buna hiçbir operatör dahil değildir. Örneğin, bir sınıf renkler olarak adlandırılmışsa, alt türleri kırmızı, mavi, turuncu, yeşil vb. olabilir. Alt tür polimorfizmi, üst türün özelliklerini sergilemek için alt türleri içerir. Ancak, her bir alt türün bireysel özelliklerine erişim kaybolur.

Java'da Çalışma Zamanı Polimorfizmi

Java'da çalışma zamanı polimorfizmi, Dinamik Yöntem Gönderimi veya Dinamik Bağlama olarak da bilinir. Çalışma zamanında dinamik olarak çözümlenmesini sağlamak için geçersiz kılınan bir yöntemin çağrılmasıyla Yöntem geçersiz kılma yoluyla elde edilir. Nesnelerle değil, işlevlerle elde edilebilir.

Java'da çalışma zamanı polimorfizmine bir örnek:

sınıf Araba{

void run(){System.out.println(“sürüş”);}

}

sınıfı Volkswagen Arabayı genişletiyor{

void run(){System.out.println(“90km ile güvenli sürüş”);}

public static void main(String args[]){

Araba c = yeni Volkswagen();//yükseltme

b.run();

}

}

çıktı :

90km ile güvenli sürüş

Java'da Derleme Zamanı Polimorfizmi

Derleme zamanı polimorfizmi, yöntem aşırı yüklemesiyle elde edilir. Derleme süresi boyunca aşırı yüklenmiş bir yöntem çağrısının gerçekleştirildiği ve çözümlendiği süreçtir. Statik polimorfizm olarak da bilinir. Java, bildirimleri ve imza özellikleri farklı kaldığı sürece, kullanıcının aynı ada sahip yöntemleri veya nesneleri kullanmasına izin verecek kadar esnektir.

Java'da derleme zamanı polimorfizmine bir örnek:

sınıf SimpleCalc

{

int ekle(int x, int y)

{

x+y'yi döndür;

}

int ekle(int x, int y, int z)

{

x+y+z'yi döndür;

}

}

genel sınıf Demosu

{

public static void main(String args[])

{

SimpleCalc nesnesi = yeni SimpleCalc();

System.out.println(obj.add(20, 30));

System.out.println(obj.add(40, 30, 20));

}

}

çıktı :

50

90

Polimorfizmin Önemi

Polimorfizm, aynı adı taşıyan farklı varlık türlerini oluşturabilecek yöntemlerin yazılmasını sağlar. Java'da polimorfizm, çeşitli kullanım avantajları ve kodu dinamik hale getirmek için sağladığı kapsam nedeniyle önemlidir:

  1. Kodların yeniden kullanılabilirliğini sağlar – aynı kodların birkaç kez yazılmasına gerek yoktur.
  2. Bir değişkenin birden fazla davranış sergilemesine izin verir – aynı ada sahip olmak ancak farklı özellikler, kodlarda tutarlılığı korumak için kapsam açabilir.
  3. Toplu kodların azaltılması - derleme süresini kısaltırken hata ayıklamaya yardımcı olur, kullanıcının belleğinden, enerjisinden ve zamanından tasarruf sağlar.

Polimorfizmi Uygulamada Olası Sorunlar

Polimorfizmin kullanımı ve uygulanması kafa karıştırıcı olabilir. Kodların okunabilirliğini azaltır, dolayısıyla birden fazla hata ve hata tehdidi oluşturur. Ayrıca işlevlerin gerektiği gibi yerine getirilmesiyle ilgili sorunlar yaratır.

Dikkat edilmesi gereken klasik bir problem var: Kırılgan Temel Sınıf problemi. Öngörülemeyen sonuçlar gösteren yöntemlerle sonuçlanan kalıtsal bir sınıfın uygunsuz montajı ve kodlanması anlamına gelir.

Sonuçlar

Kalıtımın kırılgan doğası, diğer tüm kriterlerin yerine getirilmesine rağmen işlevsiz ve bozuk kodlara yol açabilir. Bu temel mimari sorun, Kırılgan Temel Sınıf sorunu olarak kabul edilir. upGrad'ın Yazılım Geliştirme - Tam Yığın Geliştirmede Uzmanlaşma alanında Yönetici PG Programına katılarak Java'nın OOP kavramlarını nasıl sergilediği hakkında daha fazla bilgi edinin . Sektör uzmanlarından mentorluk alın ve meslektaşlarla uygulamalı, işbirlikçi projelere katılarak pratik bilgiler oluşturun.

Bugün yerinizi ayırtın!

Statik ve dinamik bağlama nedir?

Derleme sırasında belirlenen nesneler statik bağlama olarak bilinir. Öte yandan, nesnelerin dinamik bağlama türleri çalışma zamanında belirlenir. İlki, yöntemin aşırı yüklenmesi sırasında ve ikincisi, yöntemin geçersiz kılınması sırasında kullanılır.

Yöntem geçersiz kılma ve yöntem aşırı yükleme arasındaki iki temel fark nedir?

Java'da, yöntem geçersiz kılma statik, özel ve nihai yöntemleri geçersiz kılmaz, oysa yöntem aşırı yüklemesi Java'da statik, özel ve nihai yöntemleri aşırı yükler. Ayrıca, konuların yöntemlerini dinamik bağlamaya geçersiz kılma ve diğer yandan aşırı yüklenmiş yöntemler statik bağlamadan geçer.

Java'da polimorfizm ve kalıtım arasındaki farklar nelerdir?

Java'da Polimorfizm ve Kalıtım arasında birkaç fark noktası vardır:

1. Kalıtım, kodlamada gerçek dünyadaki ebeveyn-çocuk ilişkisinin bir temsilidir. Ancak polimorfizm, programı daha dinamik hale getirmek için bu ilişkiyi kullanan bir katalizördür.
2. Kalıtım, aynısını üst sınıftan devralarak alt sınıftan kodların yeniden kullanılabilirliğini sağlar. Buna karşılık polimorfizm, alt sınıfın mevcut davranışını ana sınıf içinde yeniden tanımlamasına izin verir.