Java

Java’da Metodları Aşırı Yükleme (Overloading)

Bir önceki yazımız Java’da Yapılandırıcılar (Constructors) konusunda yapıcı metotları incelemiştik. Bu yazımızda ise metodları aşırı yükleme, yani overloading konusuna değineceğiz.

Java, aynı isme sahip birden fazla metodlar tanımlamamıza izin vermektedir. Bu şekilde birden fazla aynı metodun yazılmasına overloading, aşırı yükleme adı verilir.

Bunun için belirli şartlar gerekiyor. Overloading yapabilmek için aynı isimdeki metodlarımıza farklı parametreler göndermemiz gerekiyor. Burada parametrelerimiz türü ve/veya sayısının farklı olması yeterli. Örnek olarak;

Örneğimizde kareKok() metodunun aşırı yüklendiğini görüyoruz. Tek bir parametre alıyor fakat türleri farklı. Aynı türde farklı sayıda parametre göndererek de aşırı yükleme işlemi gerçekleştirebilirdik. Bu program parçası aşırı yüklenmiş metota gelen değerin türüne göre çalışıyor. Peki Java bunu nasıl anlıyor?

Java için bu işlem oldukça basit. Aşırı yükleme yaptığınızda ne kadar aşırı yüklerseniz yükleyin Java hangi metotun çalışacağını biliyor. Metotların içeriği, geri dönüş değerleri hiç önemli değil. Aşırı yükleme yaparken tek dikkat etmemiz gereken nokta parametreler. Programınız çalışırken Java metodunuza göndermek istediğiniz değere bakıyor. Diyelim ki String türünde bir değer kullanmak istiyoruz. Java bunu gördüğü anda aşırı yüklenmiş metodumuzun String parametresi alan bir durumu var mı kontrol ediyor. Eğer varsa çalıştırıyor. Yoksa zaten olmayan metodu çalıştırmak oluyor 🙂

Ancak bu noktada imkansızları başaran Java bizim yanımızda. Örneğin siz int türünde bir değeri aşırı yüklenmiş metodunuza göndermek istiyorsunuz. Java gidip bakıyor, int türünde parametre alan metodumuz var mı diye. Bir bakıyor ki; yok. Fakat double türünde aşırı yüklenmiş metot mevcut. İşte bu noktada Java otomatik olarak tip yükseltmesi gerçekleştirerek programınızın başarılı bir şekilde ilerlemesine yardımcı oluyor.

Peki  biz metodları neden aşırı yüklüyoruz?

Overloading işlemi nesne yönelimli programlamanın (OOP) en güzel yanlarından biri. Java da bu güzelliği heba etmiyor. Karşılaştırma yaparak bu işlemin nasıl bir fayda sağlayacağını görelim:

C programlama dili, fonksiyonel bir dildir. Yani her şeyin metodlar yazılarak yapıldığı bir dil. Fakat C dilinde aşırı yükleme özelliği bulunmuyor. Bu dilde eğer mutlak değer işlemi yapacaksanız, kullanmanız gereken üç ayrı metod var:

– abs(); (int için)

– labs(); (long için)

– fabs(); (float, double için)

Tek bir işlem için üç farklı isimde metod kullanmanız gerektiğinden gereksiz bir karışıklık yaşanıyor. Tabii bu örnek için herhangi bir karışıklık görünmüyor olabilir fakat devasa bir Java projesini düşündüğümüz zaman benzer işlemleri gerçekleştirmek için farklı farklı metotlar yazmanın nasıl bir karışıklığa yol açacağını tahmin etmek zor değil.

Oysa overloading işlemi sayesinde metodumuzu aşırı yükleyerek tek bir isimle mutlak değer işlemini gerçekleştirmemiz mümkün. Sadece metodumuz 3 farklı parametre ile 3 defa aşırı yüklenecek. Muazzam bir kolaylık ve rahatlık.

Bir önceki yazımızda bahsettiğimiz yapılandırıcı metodlar da aynı şekilde aşırı yüklenebilir. Hatta çoğu zaman Java programlarında yapılandırı metodlar overloading işlemine tabi tutulur.

Son olarak metodların aşırı yüklenmesiyle ilgili şu detayı göz önünde bulundurmakta fayda var. Bu işlem her ne kadar çok cazip görünse de kullanırken dikkatli olmak gerekiyor. Mümkün olduğu kadar bir metodu aşırı yüklerken aynı işlemi veya çok benzer işlemleri gerçekleştirecek şekilde aşırı yükleme yapmalısınız. Mesela yukarıdaki örneğimizde olduğu gibi sadece karekök almak için aşırı yükleme yaptık. Overloading yaparken aşırı yüklediğiniz metodu farklı parametrelerde farklı işlemleri gerçekleştirecek şekilde yazabilirsiniz ancak bu şekilde yazdığınız takdirde ortalığı iyice karıştırmış olursunuz. Daha sonradan hangi metod hangi işlemi yapıyordu diye karışıklık yaşamaktansa en başında en güzel şekilde yazmanızda fayda var.

Bu yazımızda Java’da Metotları Aşırı Yükleme (Overloading) işleminin nasıl gerçekleştirildiğini ve özelliklerini görmüş olduk. Bir sonraki yazıda ise Java’da Erişim Kontrolleri (Encapsulation) konusunu ele alacağız.

Bilgisayar Mühendisi.