Java

Java’ya Genel Bir Bakış

Bir önceki yazımız Java ile Programlama – Başlangıç kısmında genel olarak programlamaya dair kısaca bahsedip Java’nın programlama dilleri arasındaki konumuna değinmiştik.

Şimdi ise daha teknik olarak Java’ya genel bir giriş yapacağız.

Java, Nesne Yönelimli (Object-Oriented Programming ~ OOP) bir programlama dilidir. Nesne temeli üzerine inşa edilmiştir.

Yordamsal programlamada önceki yazımızda bahsettiğimiz gibi karmaşıklaştıkça problemleri çözmek zorlaşır hale geliyordu. Dolayısıyla nesne yönelimli programlama ortaya çıkmıştı.

Nesne yönelimli demek şudur; kullandığımız bilgisayarı düşünelim. Bilgisayarımız bir nesne. İçerisinde onlarca parça var, yüzlerce kablo var. Fakat biz bunların hiçbiri ile ilgilenmiyoruz. Tuşa basıyoruz, çalışıyor ve kullanıyoruz. Birçok parçadan oluşan bir nesnemiz var, ve biz sadece bütünü kullanıyoruz.

Tabii nesnemiz hiyerarşik bir yapıda. Örneğin bilgisayarımızı oluşturan en temel parçalar, klavye, fare, ekran gibi direk temasa geçtiğimiz parçalar. Ancak bunların altında örneğin farenin üç tuşu, lazer algılayıcısı, içerisinde kartı mevcut. Aynı şekilde ekranımızda bir cam, likit sıvı, kart, bağlantı kabloları var. Ana kasamızda ise GPU, CPU, RAM gibi parçalarımız mevcut. Bunların daha da derinine inersek, CPU’da sayısız transistörler, fan, bağlantı kabloları, soğutma sistemi mevcut. RAM’de ise birçok bellek bölümü, bunların içerisinde mantıksal devreler, yazmaçlar var.

Gördüğünüz gibi bizim hiç ilgilenmediğimiz parçalar bir araya gelerek ilgilendiğimiz bir nesne oluşturmuş durumda. İşte bu mantık aslına bakarsanız hayatın her köşesine uygulanabilir. Programlama dillerine de uygulanabilir. Java dünyasına daha çok daldıkça, bunun nasıl yapıldığını öğreneceğiz.

Üç temel prensibe dayalıdır OOP:

1 – Sarmalama (Encapsulation)

Adından da anlaşılacağı üzere sarmalama prensibi güvenliğe dayalıdır. Yazdığınız kodlara başka hangi kodların, paketlerin, sınıfların erişip erişemeyeceklerini belirleyebilirsiniz. Bu sayede dışarıdan gelecek herhangi bir müdaheleye karşı programınızı güvence altına alabilirsiniz.

Bu prensibi şu şekilde örneklemek mümkün: Klavye ve fare bilgisayarın iki parçası. Bu iki parça kendilerine özel iki yapıda oluşturulmuştur ve sarmalanmıştır. Siz farenin sol tuşuna tıklayınca sol tıklamış olursunuz. Yani klavye tuşuna basarak fareye sol tıklatamazsınız veya bilgisayarı açma tuşuna basarak klavyedeki “a” harfini yazmanız mümkün değildir. Çünkü bu parçalar kendilerine özel yapılarında sarmalanmış, korunmuştur.

2 – Kalıtım (Inheritance)

Kalıtım prensibi tamamen doğadakine benzer. Örneğin hayvan sınıfı omurgalı ve omurgasız olmak üzere ikiye ayrılır. omurgalı hayvanlar da balıklar, kurbağalar, kuşlar, sürüngenler, memeliler olarak ayrılırlar. Tüm alt sınıflar üst sınıflarının özelliklerini taşır. Mesela balık, kurbağa, kuş, sürüngen ve memelilerin tamamında omurga vardır. Hayvanlar nefes aldıkları için, doğal olarak bu sınıfların tamamı da nefes alır. Yani alt sınıf en üstteki sınıfa kadar olan tüm özelliklere sahiptir.

Bu programlamada da geçerlidir. Bir sınıftan türetilen alt sınıf, türetildiği sınıfın bütün özelliklerine sahip olur. Hiyerarşik bir yapıyla birbirlerine bağlanırlar. Sonraki yazılarımızda bu konuyu ayrı bir başlık olarak ele alacağımız için şimdilik bu kadar bahsediyorum.

3 – Çok Biçimlilik (Polymorphism)

Çok biçimlilik tek bir ara birimden birçok metod yazılabilmesidir. Bu prensibin anlaşılması adına şu örnek yeterli olacaktır: Koku alma duyumuzu düşünelim. Eğer lezzetli bir yemeğin kokusunu alırsak karnımızın acıktığını hissederiz. Simit kokusunu alırsak aklımıza simit gelir. Aynı şekilde kötü bir koku aldığımızda hoşumuza gitmez.

Mesele çok basit. Koku alma ara birimimiz tek bir tane; burnumuz ama tek bir burunla onlarca, yüzlerce hatta binlerce farklı kokuyu alabilmemiz mümkün. Yeter ki hepsini yorumladığımız ana mekanizma olan beynimize kokular gelsin ve yorumlansın.

Buraya kadar bahsettiğimiz OOP’a ait üç temel prensip ortak hareket ederek çalışırlar. Hepsinin birbiri ile bağlantısını ilerledikçe göreceğiz.

İlk Basit Program

Genel olarak Java’ya biraz baktıktan sonra ilk basit programımızı yazarak başlayalım:

Öncelikle programı merhaba.java olarak kaydetmemizin sebebi, uzantısı derleyici tarafından okunması için . java olmalıdır. Dosya adına rastgele bir isim veremiyoruz. Her Java Programı bir main class ve main metod bulundurur. Ana sınıfımız bu örnekte “public class merhaba” olduğu için dosyamıza merhaba.java ismini vermek zorundayız.

Programı komut satırından şu şekilde derlememiz mümkün:

[well]

C:>javac merhaba.java

C:>java merhaba[/well]

Javac programımızın bytecodeunu içeren bir merhaba.class dosyası oluşturur. Bu dosyayı da çalıştırmak için java yazarak dosyamızın ismini veriririz. Sonuç olarak ekrana “Merhaba Java!” cümlesi yazdırılır.

Programımıza daha yakından bakarsak ilk olarak /* */ ifadeleri arasında iki cümle kullandık. Bu ifadeler yorum yazmak için kullanılan ifadelerdir. İkisi arasına istediğiniz kadar yorum satırı yazabilirsiniz.

public class merhaba kısmı ise ana sınıfımızın ismini gösteren kısımdır. Bahsettiğimiz üzere her Java programı bir ana sınıf bulundurmak zorundadır. Sınıf ismi dosya ismiyle aynı olmalıdır. Bu ifadedeki public anahtar kelimesi bir erişim belirtecidir. Bu sınıfın herkes tarafından erişilebilir olduğunu gösterir. class anahtar sözcüğü ise bir sınıf oluşturduğumuzu belirtir.

Bir sonraki satırda // ile başlayan cümle ise bir başka yorum ifadesidir. Bu şekilde yorum yazmak istersek sadece tek bir satırlık yorum yazabiliriz.

Sonraki satırda yazan public static void main(String [] args) ifadesine bir göz atalım. public biraz önce bahsettiğimiz gibi erişim belirtecidir. static ahatar sözcüğü ise main() metodunun sınıfa ait belirli bir nesne oluşturmadan çağrılabilmesi için gereklidir. main() metodunu kesinlikle static tanımlamak zorundayız. void anahtar sözcüğü ise metodun herhangi bir değer döndürmeyeceğini belirtir. main() metodu bir tane parametre alır: String [] args. Bu ifade main metodu için String tipinde değerler alan args isminde bir diziyi parametre olarak tanımlar. String tipini ilerleyen konularda detaylı olarak ele alacağız.

Sonraki satırda System.out.println(“Merhaba Java!”); ifadesi ekrana parametre olarak aldığı cümleyi yazar. Burada System sınıfının bir alt sınıfı olan out sınıfına ait println() metodu çalıştırılmıştır. Dikkat ederseniz sınıflar arasındaki iletişim aralarına “.” konularak sağlanıyor.

Dikkat edilirse bu satır “;” noktalı virgül ile bitiyor. Genel olarak programlama dillerindeki satıların “;” ile bitmesi prensibi Java’da da aynen çalışmaktadır.

Son olarak ana sınıfımız ve ana metodumuz süslü parantez – { – ile başlayıp bitmektedir. Bu ifade diğer programlama dillerinde de kullanıldığı şekilde kullanılır. Kodun kullanım sınırını belirler. Örneğin bir süslü parantez içerisinde tanımlanan bir değişkenin kullanım ömrü, parantezin kapandığı yere kadardır. Süslü parantezin dışında doğrudan kullanılması mümkün değildir.

İkinci Basit Program

Şimdi biraz daha gelişmiş, fakat basit bir program daha yazalım:

Burada görüldüğü üzere sayi adında bir Integer tipinde değişken tanımlanıyor. (Tiplere daha ayrıntılı değineceğiz.) Daha sonra bu değişkene “=” operatörü ile bir sayı atanıp ekrana yazdırılıyor. Eşittir operatörü sağındaki veriyi solundaki değişkene atar.

Sonrasında sayımız 2 ile çarpılarak yine kendi üzerine atanıyor. Yani sayi değişkeni artık iki katının değerine sahip. Bu işlemin yapıldığı “sayi = sayi * 2” ifadesini daha profesyonel olarak “sayi *= 2” şeklinde yazabiliriz. İkisi aynı anlama geliyor. Bu yöntem toplama, çıkarma, bölme gibi diğer matematiksel işlemlerde de geçerli.

Ekrana yazdırma yaparken değişkenimiz ile ekranda göstermek istediğimiz cümle arasına + işareti koyduk. + operaötürü öğeleri birbirinden ayırmak için kullanılır. Dolayısıyla bir tek yazdırma ifadesi içerisinde birçok öğe barındırabiliriz.

Yazdırma metodumuz olarak println() kullandık fakat print() metodu da kullanılabilir. Farkı, println() metodu içerisindeki parametreyi yazdırdıktan sonra yeni bir satıra geçer, fakat print() metodu aynı satırda kalır. Bunlara ek olarak genelde kitaplarda bahsedilmeyen prinf() metodu vardır. print() ile aynı şekilde çalışır. ANSI C kodudur. Java dili C’den türemiş olduğu için gayet rahat bu ifadeyi çalıştırabiliyor. Bizzat test ettik 🙂

Basit Kontrol İfadeleri

Kısaca kontrol ifadelerine de değinelim.

if İfadesi

Diğer programlama dillerindeki gibi çalışır. Belirtilen koşulun sağlanıp sağlanmadığını kontrol eder. Koşul doğru ise ifade çalışır, değilse çalışmaz.

Örneğin;

Bu program x ve y adında iki değişkenin eşitliklerini kontrol eder. Dikkat ederseniz “eşit mi?” kontrolü yaparken “==” iki tane eşittir konulmuştur. Tek bir eşittir koymak atama yapar, eşitliğe bakmak için iki tane koymak gerekir.

for Döngüsü

Döngüler programlamanın vazgeçilmezleridir. Belli bir başlangıçtan belirli bir koşula kadar tekrarlanıp devam etmesini istediğimiz işlemleri döngüler kurarak sağlarız. İşte bir örnek:

Programı çalıştırdığınızda alt alta 0’dan 9’a kadar x değişkeninin değerini her satırda 1 artırarak yazacaktır. for yapısının içinde ilk parametre başlangıç koşulu, ikinci parametre bitiş koşulu, üçüncü parametre de artış-azalış oranıdır.

anahtarsözcüklerJava Anahtar Sözcükleri

Java’da 50 adet anahtar sözcük vardır. Bu kelimelerle hiçbir şekilde sınıf, metod veya değişken tanımlanamaz. Bu sözcüklerin listesi için yandaki resme tıklayabilirsiniz.

Bu yazımızda genel olarak Java’nın nasıl bir dil olduğunu görmüş olduk. Bir sonraki yazıda Java Geliştirme Ortamları‘nı ele alacağız.

Bilgisayar Mühendisi.