NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2
JAVA DA PROGRAM DENETİMİ VE OPERATÖRLER Java programlama dilinde temel tipleri ve nesneleri yönlendirmek ve değiştirmek için operatörler kullanılır. Atamalar sağ taraftaki değerin sol taraftaki değişkene atanması ile gerçekleşir.
Temel Tiplerde Atama Atama işlemi, temel (ilkel) tipler için basittir. int x, y, z; int a = 3, b, c = 5; double pi= 3.14159; char x='x'; x, y ve z olan üç tamsayıyı bildirir. a ve c nin başlangıç değerleriyle üç tamsayıyı daha bildiriyor. Pi sayısını (tam olmasa da yaklaşık olarak) bildirir. x değişkeni 'x' değerine sahip. Temel tipler, değerleri doğrudan kendileri üzerlerinde tuttukları için, bir temel tipi diğerine atadığımız zaman değişen sadece içerikler olur. int a, b ; a=4 ; b=5 ; a=b ; Sonuç olarak a ve b değişkenleri içerikleri aynı olur. a=5, b=5
Nesneler ve Atamalar Nesneler için atama işlemleri, temel tiplere göre biraz daha karmaşıktır. Nesneleri yönetmek için referanslar kullanılır. Nesneler için bir atama işlemi söz konusu ise, akla gelmesi gereken ilk şey, bu nesnelere bağlı olan referansın gösterdiği hedeflerde bir değişiklik olacağıdır.
Nesneler ve Atamalar 2 adet Sayi nesnesi oluşturuldu Bunlar Sayi tipindeki referanslara bağlı durumdalar s1 ve s2 s1 referansının işaret ettiği Sayi nesnesinin i alanına 9 değeri atandı. s2 referansının işaret ettiği Sayi nesnesinin i alanına 47 değeri atandı.
Nesneler ve Atamalar Ekran çıktısı 1: s1.i: 9, s2.i: 47
Nesneler ve Atamalar s1 artık s2 nin işaret ettiği nesneyi gösteriyor
Nesneler ve Atamalar Kısım-1 s2 nin s1 e atanmadan önceki hali Kısım-2 s2 nin s1 e atandıktan sonraki hali
Nesneler ve Atamalar Şimdi s1 ve s2 nin değerleri ekrana yazdırılırsa, s1.i ve s2.i alanlarının aynı içeriği taşıdığı görülür. Ekran çıktısı 2: s1.i: 47, s2.i: 47 Bunun nedeni ise bu iki referansın (s1 ve s2) aynı nesneyi göstermeleridir.
Nesneler ve Atamalar Son olarak s1 referansının işaret ettiği nesnenin i alanı değiştiriliyor. Ekran çıktısı 3: s1.i: 27, s2.i: 27 Bunun nedeni ise yine s1 ve s2 referanslarının aynı nesneyi göstermeleridir.
Nesneler ve Atamalar s1 referansının daha önceden işaret etmiş olduğu Sayi nesnesine ne olacaktır? Bu nesne kullanılmayacağından dolayı çöp haline gelecektir ve çöp toplayıcısı (Garbage Collector) tarafından temizlenecektir.
Nesneler ve Atamalar s1 referansının s2 nin işaret etmiş olduğu nesneyi göstermesini istemeyip yalnızca s2.i alanı değerinin s1.i alanı değerine atanması istenmiş olsaydı: s1.i = s2.i; referansların gösterdikleri nesnelerde herhangi bir değişiklik yapılmadan sadece s1.i alanının değeri değişir.
Yordamların (Method) Çağrılması 2 sınıf Harf ve Pas Pas sınıfı public fiziksel dosyanın ismi Pas.java
Yordamların (Method) Çağrılması Harf nesnesi oluşturuluyor. Harf nesnesinin char tipinde olan c alanına a karakteri atanıyor.
Yordamların (Method) Çağrılması Harf nesnesine bağlanmış olan Harf sınıfı tipindeki x referansı f() yordamına gönderiliyor
Yordamların (Method) Çağrılması f() yordamı içerisinde daha önceden oluşturulan Harf nesnesinin char tipinde olan c alanına z karakteri atanıyor.
Yordamların (Method) Çağrılması Bilgiler yeniden ekrana yazdırıldığında Harf nesnesinin char tipinde olan c alanındaki değerin değişmiş olduğu görülür.
Yordamların (Method) Çağrılması Burada yapılan işlem, kesinlikle, Harf nesnesinin yer değiştirmesi değildir; nesnenin bellekteki yeri her zaman sabittir.
Yordamların (Method) Çağrılması f() yordamı içerisinde Harf nesnesine toplam iki referans bağlı olmaktadır biri x diğeri ise h
Yordamların (Method) Çağrılması Uygulamanın sonucu
Yordamların (Method) Çağrılması double tipindeki a değişkenine 5 değeri atanıyor. bu değişkenimiz double tipinde parametre kabul eden f() yordamına gönderiliyor.
Yordamların (Method) Çağrılması Bu iki değişken birbirlerinden tamamen farklıdır.
Yordamların (Method) Çağrılması Uygulamanın sonucu 5.0 gönderildi gönderilen parametrenin değeri 10 a eşitlendi a --> 5.0
Java Operatörleri Aritmetik Operatörler İlişkisel Operatörler Mantıksal Operatörler Bit düzeyinde (bitwise) Operatörler
Aritmetik Operatörler
Aritmetik Operatörler Uygulamanın sonucu Degisken Degerleri... a = 57 b = 42 c = 27.475 d = 7.22 Toplama... a + b = 99 c + d = 34.695
Aritmetik Operatörler Uygulamanın sonucu Cikartma... a - b = 15 c - d = 20.255000000000003 Carpma... a * b = 2394 c * d = 198.36950000000002
Aritmetik Operatörler Uygulamanın sonucu Bolme... a / b = 1 c / d = 3.805401662049862
Aritmetik Operatörler Uygulamanın sonucu Kalan sayiyi hesaplama... a % b = 15 c % d = 5.815000000000002 Karisik tipler... b + d = 49.22 a * c = 1566.075
Operatörlerin veri tipini etkilemesi/dönüştürmesi + ve operatörleri, aynı zamanda, karakter tipindeki verileri sayısal tipe dönüştürme misyonları da vardır.
Operatörlerin veri tipini etkilemesi/dönüştürmesi char için girilen değer a harfi + operatörü kullanılarak char değeri int tipine dönüştürülüyor int değeri - operatörüyle eksi hale getiriliyor Uygulama sonucu kr = a b = 97 c = -97
Dönüştürme (Casting) İşlemi Uygulamanın sonucu b = 5.0 y = 4 z = 4
Bir Arttırma ve Azaltma
Bir Arttırma ve Azaltma Uygulamanın sonucu : i : 1 ++i : 2 i++ : 2 i : 3 --i : 2 i-- : 2 i : 1
İlişkisel Operatörler
İlişkisel Operatörler Uygulamanın sonucu Degisken degerleri... i = 37 j = 42 k = 42 Buyuktur... i > j = false j > i = true k > j = false
İlişkisel Operatörler Uygulamanın sonucu Buyuktur veya esittir... i >= j = false j >= i = true k >= j = true
İlişkisel Operatörler Uygulamanın sonucu Kucuktur... i < j = true j < i = false k < j = false
İlişkisel Operatörler Uygulamanın sonucu Kucuktur veya esittir... i <= j = true j <= i = false k <= j = true
İlişkisel Operatörler Uygulamanın sonucu Esittir... i == j = false k == j = true Esit degil... i!= j = true k!= j = false
Mantıksal Operatörler Mantıksal operatörlerden && (VE), (VEYA) operatörleri sırasıyla tek karakterli olarak ta kullanılabilmektedir. Örneğin a&&b şeklinde bir ifade a&b şeklinde de yazılabilir. Tek karakterli ( & veya ) ise operatörün her iki yanındaki işlemler/karşılaştırmalar mutlaka yapılır. Çift karakterli ( && veya ) ise işleme soldan başlanır; eğer tüm ifade bitmeden kesin sonuca ulaşılırsa ifadenin geri kalan kısmı gözardı edilir. Örneğin VE işleminde sol taraf yanlış (false) ise sonuç kesinlikle yanlış olacaktır ve ifadenin sağına bakmaya gerek yoktur.
Mantıksal Operatörler Uygulama çıktısı
Bit Düzeyinde (bitwise) Operatörler
Bit Düzeyinde (bitwise) Operatörler 9 sayısı ikili karşılığı 1001 a >> 1 (bitler sağa doğru 1 basamak kaydırılır) (0100) 2 = (4) 10 a >> 2 (bitler sağa doğru 2 basamak kaydırılır) (0010) 2 = (2) 10 a << 1 (bitler sola doğru 1 basamak kaydırılır) (10010) 2 = (18) 10 a << 2 (bitler sola doğru 2 basamak kaydırılır) (100100) 2 = (36) 10 a >>> 2 (a >> 2 ile arasında sonuç olarak bir fark yoktur) sonuç: 2
Atama Operatörleri
Bitişik atama operatörleri
String (+) Operatörü "+" operatörü String verilerde birleştirme görevi görür; eğer ifade String ile başlarsa, onu izleyen veri tipleri de kendiliğinden String e dönüştürülür. Uygulama çıktısı Sonuc = 012
Nesnelerin Karşılaştırılması iki farklı Integer nesnesi var ve bu nesnelerin taşıdıkları değerler birbirlerine eşittir. a1==a2 a1 ve a2 referanslarının işaret etmiş oldukları nesneler aynı mı? false a1 ve a2 ayrı Integer nesnelerini işaret etmektedirler; eşit olan tek şey, bu iki ayrı nesnenin tuttukları değerin 47 olmasıdır (-ki bu eşitliği a1=a2 ifadesi ile yakalayamayız)
Nesnelerin Karşılaştırılması Temel (primitive) tipler değerleri doğrudan kendi üzerlerinde taşıdıkları için == operatörüyle s1 ve s2 değişkeleri değerleri karşılaştırıldı ve doğru (true) yanıtı döndürüldü. Benzer şekilde!= operatörü de s1 ve s2 değişkenleri değerlerini karşılaştırdı ve yanlış (false) döndürüldü.
Akış Kontrol Yapıları Döngü Karşılaştırma Dallanma : while, do-while, for : if-else, switch-case : break, continue, label:, return
Döngüler Döngü deyimleri aynı işlemin farklı parametre değerleri üzerinde yapılması için kullanılan yineleme/tekrarlama işleri için kullanılır. Java programlama dilinde bulunan döngüler şunlardır: while do-while for
while Deyimi Belirli bir grup kod öbeğini döngü koşulu doğru (true) olduğu sürece devamlı yineler. Genel yazım şekli aşağıdaki gibidir: while (koşul) { çalışması istenen kod bloğu }
Örnek
do-while Deyimi Bu döngü deyimde koşul sınaması döngü sonunda yapılır; dolayısıyla çevrim kod öbeği en az birkez yürütülmüş olur. Genel yazım şekli ve çizimsel gösterimi aşağıdaki gibidir: do { çalışması istenen kod bloğu } while (koşul);
Örnek
for Deyimi for deyiminde çevrim işlemleri daha bir derli toplu yapılabilir; bu döngü deyiminde koşulda kullanılan çevrim değişkeni, koşul ifadesi ve çevrim sayacı artımı for ifadesi içerisinde verilir. Genel yazım şekli ve çizimle gösterilmesi aşağıdaki gibi verilebilir: for (başlangıç; koşul; artış) { çalışması istenen kod bloğu }
Örnek Görüldüğü gibi for deyimi içerisinde ; ile ayrılmış 3 parametre vardır; çevrim sayacı koşul ifadesi sayacın artım miktarı ifadesi Eğer, kodun daha önceki kısımlarda sayaç değişkeni halihazırda varsa başlangıç, artışı kod öbeği kısmında yapılıyorsa artış bilgisi verilmeyebilir. Bu durumda bu alanlar boş bırakılır.
Karşılaştırma Deyimleri Karşılaştırma deyimleri belirli bir koşula göre farklı işlemler yaptırılacağı zaman kullanılır. Örneğin adet adlı değişken değeri 5 ten küçük olduğundan farklı, 5 ten büyük veya eşit olduğunda farklı işler kodlar yürütülecekse bu işi yapabilmek için karşılaştırma deyimlerine gereksinim duyulur. Java da olmak üzere iki farklı karşılaştırma deyimi vardır. if-else switch-case
if-else Deyimi Koşula göre program akışı değiştirilmek isteniyorsa if kullanılabilir. Genel yazım ifadesi aşağıdaki gibidir: if (koşul) { durum true olduğunda çalışması istenen kod bloğu } else { durum false olduğunda çalışması istenen kod bloğu }
Örnek
switch-case Deyimi Tamsayıların karşılaştırılması ile doğru koşulların elde edilmesini sağlayan mekanizmadır. switch deyimi içersindeki tamsayı ile, bu tamsayıya karşılık gelen koşula girilir ve istenen kod bloğu çalıştırılır. Kod bloklarından sonra break koymak gerekir aksi takdirde uygun koşul bulduktan sonraki her koşula girilecektir. Eğer tamsayımız koşullardan hiçbirine uymuyorsa default koşulundaki kod bloğu çalıştırılarak son bulur. switch (tamsayı) { case uygun-tamsayı-deger1 : çalışması istenen kod bloğu; break; case uygun-tamsayı-deger2 : çalışması istenen kod bloğu; break; //... default: çalışması istenen kod bloğu ; }
Örnek Varsayılan (default) değerler
Örnek-2 Uygulama, break anahtar kelimeleri kaldırılıp yeniden yazılırsa:
Örnek-3 Uygulamada, varsayılan değer geçerli olduğunda:
Dallanma Deyimleri Java programlama dilinde dallandırma ifadeleri toplam 3 adettir. break continue return
break Deyimi break deyiminin 2 farklı uyarlaması bulunur; etiketli etiketsiz Etiketsiz break switch deyiminde kullanılan break deyimi gibidir. Koşul sağlandığında switch deyiminin sonlanmasını sağlar. break deyimi aynı şekilde while, do-while veya for deyimlerinden çıkılması için de kullanabilir.
Örnek
Örnek-2
continue Deyimi continue ifadesi, döngü içersinde o anki devir işleminin pas geçilmesini ve bir sonraki devir işleminin başlamasını sağlayan bir mekanizmadır. continue ifadeleri de break ifadeleri gibi iki çeşide ayrılır. Etiketsiz continue Etiketli continue Etiketsiz continue en içteki döngü içersinde etkili olurken, etiketli continue ise başına konulduğu döngü sisteminin etkiler.
Örnek
Örnek-2
return Deyimi return deyiminin 2 tür kullanım şekli vardır: değer döndürmek için eğer yordamın dönüş tipi buna izin vermiyorsa (void ise), ilgili yordamı terk etmek için
Örnek
Genel Örnekler
Örnek
Örnek
Örnek