Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Sayısal Türler Tamsayılar (byte, short, int, long) –Tam sayılardır –exact –Yaklaşık olarak ~10 19 rakamında sınırlıdır Kayan noktalı (float, double) –kesirli.

Benzer bir sunumlar


... konulu sunumlar: "Sayısal Türler Tamsayılar (byte, short, int, long) –Tam sayılardır –exact –Yaklaşık olarak ~10 19 rakamında sınırlıdır Kayan noktalı (float, double) –kesirli."— Sunum transkripti:

1 Sayısal Türler Tamsayılar (byte, short, int, long) –Tam sayılardır –exact –Yaklaşık olarak ~10 19 rakamında sınırlıdır Kayan noktalı (float, double) –kesirli –Genelde yaklaşma ( ) –Yaklaşık olarak ~ rakamında sınırlıdır

2 Veri Türlerinin Listesi Temel Türler Default Value boolean false char '\u0000' (null) byte (byte) 0 short (short) 0 int 0 long 0L float 0f double 0d void N/A Note: “Void “ C/C++ dillerindeki gibi temel bir tür değildir. Java ‘da void türüne doğru bir tür değişimi yapılamaz.

3 Veri Türlerinin Değer Sınırları TürBoyutEn azVarsayılan booleanfalse En fazla 1false*true* char'\u0000' (null)16 byte(byte) short(short) ,76832,767 int032 -2,147,483,6482,147,483,647 long0L64 -9,223,372,036,854,775,8089,223,372,036,854,775,807 float0.0F32 Yaklaşık olarak ±3.4E+38 ve 7 haneli double0.0D64 Yaklaşık olarak ±1.7E+308 ve 15 haneli void * En az ve en fazla gibi durumlar geçerli değildir.

4 Doğru ! derlenir Tür Dönüşümü (Casting) Bir önceki derste tür dönüşümü ile ilgili temel birkaç şey gördük. Bazen açık tür dönüşümü gerekebilir bazen de gerekmez. int x = 10; float f1 = x; float f2 = f; int y = f2; Derlenebilmesi için hangisinde tür dönüşümüne ihtiyaç vardır? Neden?HATA Açık tür dönüşümü gereklidir

5 Tür Dönüşümü (Devam) Tür dönüşümünün ne zaman gerekli olduğunu anlayabilmek için aşağıdaki örneğe bakalım. Aşğıdaki gibi iki ayrı türden iki adet değişkenimiz olsun: int x; char c; Asıl soru, Bu veri türlerinin bellekte kapladığı alan ne kadardır?

6 Recall Daha önce Java ‘daki veri türlerinin bellekte kapladığı alanları gördük. Her tamsayı (int) türünde tanımlanmış bir değişken için bellekten 4 baytlık yer ayrılır. Bize ayrılan yeri bir kutu gibi düşünebilirsiniz. java int Besin değerleri Servis miktarı 1 int Her serviste ikram edilen Kalori değeri 0 % günlük miktar Toplam bayt sayısı 4 100% tahıl kutusu

7 And recall... java char Besin değerleri Servis miktarı 1 char Her serviste ikram edilen Kalori değeri 0 % günlük miktar Toplam bayt sayısı 2 50% Karakter türünde tanımlanmış bir değişken için 2 bayt alan tahsis edilir. Tamsayı (int) türüne göre daha az bir alandır. Dolayısıyla bunu daha küçük bir kutu olarak düşünebiliriz. Ton balığı konservesi

8 Öyleyse... Bir karakter yani char veri türü 2 bayt, ve bir tamsayı yani int türü 4 bayt yer kaplar. Dolayısıyla aşağıdaki kodu incelersek: int x; char c; Aşağıdaki şekle bakarsak: x c Değişken Belleğin resmi Her bir blok 1 bayt temsil eder

9 Gerçeklik kontrolü java char java int Konserve kutusu tahıl kutusunun içine sığabilir mi? Evet, küçük olduğu için sığar. Peki, tahıl kutusu konserve kutusunun içine sığabilir mi? Düzgün bir şekilde mümkün değil, çünkü tahıl kutusu daha büyüktür.

10 Aynı mantıkla... char türündeki bir değer int türündeki bir alana sığar mı? int türündeki bir değer char türündeki bir alana sığar mı? x c Değişken Belleğin Resmi

11 Gerçeklik kontrolü java char java int Peki tahıl kutusunun yarısını konserve kutusuna yerleştirmek istersek mümkün mü? İşte bu olur ! Örneğin, eğer tahıl kutusunun yarısının boş olduğunu biliyorsak o boş kısmı atabiliriz.

12 Açık tür dönüşümü: Kasıtlı olarak yapılan duyarlılık kaybı x c Değişken Belleğin resmi int x = 45; char c = ‘A’; c = (char) x; // tür dönüşümü gereklidir Tür dönüşümü gerekli!

13 Kendinizi sınayın Eğer aşağıdakileri uygularsak ne olur: int someInt = 2000; long longNumber; longNumber = (long) someInt; Bu tür değişimi kurallara uygun mudur? Öyleyse gerek var mıdır? Boşlukları doldurun.

14 Diğer bir örnek float f; int i, j; i = 9; j = 2; f = i / j; f = (float) i / j; Sonuç 4 olur, çünkü yapılan tamsayı bölmesi sonucu kesirli kısım budanır! f = (float) i / (float) j; Eğer beklenen değer bu değilse, 3 türlü çözüm vardır f = i / (float)j;

15 Diğer bir örnek İşaret biti Veri için 31 bit ayrılır Dikkat etmemiz gereken diğer bir husus tür dönüşümü yapılırken Java ‘nın tür dönüşümü yapılan değerin işaretini korumasıdır. int türü için ayrılan 4 bayt ‘lık alanı düşünelim. En yüksek anlamlı bit işaret biti olarak kullanılır. 0 ise pozitif, 1 ise negatif anlamına gelir. int

16 Tür dönüşümü ve işaret İşaret bitini korur int bayt Tür dönüşümü sadece bir veri türünü diğerine dönüştürürken bir kısmını budamaktan ibaret değildir. Orjinal işaret neyse o korunur.

17 Diğer bir örnek Elimizde çok eskiden kalma, tarih bilgisinin tamsayı (int yani 4 bayt) şeklinde ifade edildiği bir veri olduğunu kabul edelim, şu şekilde: (ekim) 31 Bu çok kabaca, fakat eskiden kalma veri kaynakları bu formatta verilere sahiptir.

18 Açık tür dönüşümü gerekli public class CutData { public static void main(String[] args) { int iDate = ; // eskiden böyleydi byte byDay = (byte) (iDate % 100); System.out.println (“Gün " + byDay); iDate = iDate / 100; byte byMonth = (byte) (iDate % 100); System.out.println (“Ay " + byMonth); iDate = iDate / 100; short sYear = (short) iDate; System.out.print (“Yıl = " + sYear); } } // Veriyi parçalara ayırdık

19 public class PackDate { public static void main(String[] args) { byte month = 12; byte day = 25; short year = 2000; int date = year * month * day; System.out.println ("The date = " + date); } } // PackDate Ters yönde çalışırsak yani byte veya short türündeki bir veriyi int türündeki bir alana aktarmak istersek tür dönüşümü gerekli değildir çünkü herhangi bir duyarlılık veya veri kaybı olmaz.

20 Verilenler: int start = 10; float temp = 5.5f; temp = (int) temp * start; temp değişkenin değeri şimdi ne oldu? Tür dönüşümü: Bilginizi sınayın Verilenler: char c = ‘A’; int x; c = x; Kurallara uygun mudur? Hızlı tekrar

21 Bilginizi sınayın İşte problem: int iVar = 10; float fVar = 23.26f; // derleme zamanı hatası verir iVar = iVar * fVar Hangi çözüm en iyi çalışır? iVar = (int) iVar * fVariVar = (int) (iVar * fVar)iVar = iVar * (int) fVar iVar = (int) ((float) iVar * fVar) Aynı derleme hatası Hızlı tekrar

22 Kısayol operatörleri counter = counter + 1; VEYA counter++; counter = counter - 1; VEYA counter--; counter = counter + 2; VEYA counter+=2; counter = counter * 5; VEYA counter*=5; Son iki örnekte : İlk önce artırma ve çarpma işlemleri yapılır daha sonra atama işlemi yapılır. Hızlı tekrar Bu ifadeleri anlayın fakat kullanmamaya çalışın

23 The Short End of Shorthand Akıllı ifadeleri kısayol operatörlerle birlikte kullanırken dikkatli olun. Örneğin, “_” gibi bir değişken tanımlayabiliriz. Alt çizgi karakteri geçerli bir değişken ismidir. int _ = 1; Aşağıdaki gibi Morse kodu oluşturacak şekilde değişik karakterlerin kombinasyonundan oluşan bir değişken ismi de oluşturabiliriz: _ -= --_ - _--; Evet, yukarıdaki ifade geçerlidir, ancak tamamen anlamsız ve okunamaz bir ifadedir.

24 Dokümantasyon ve Açıklamalar Üç çeşit yöntem vardır: // satır sonuna kadar olan her şeyi açıklama olarak kabul eder /* ve */ işaretleri arasında kalan tüm ifadeler satır sonu gözetmeksizin açıklama olrak kabul edilir. /** * Bu sentaks biçimi Javadoc açıklamaları için kullanılır, * HTML biçimlendirme özelliklerini sunar. */ BİLM 217 için, Javadoc açıklamalarını kullanın Hızlı Tekrar Javadoc örneği üzerinde çalışalım

25 Javadoc: Basit bir örnek import java.util.*; /** * HelloComments.java * * Created: Wed Jan 12 18:17: * David Dagon 98 beta */ public class HelloComments { /** * Basit bir değişken. */ public int x = 10; Javadoc açıklamaları değişiklik yapılan öğenin üzerinde yer almalıdır. Sınıf açıklamaları yapılacağı zaman açıklamaları import ifadelerinin altına koymak gerekir. HTML terimleri!

26 Short, one-liner, followed by period Basit bir örnek (devam) Sadece değişken isimlerini belirtin. /** * This comment is reproduced twice, because * of the comma delimited declaration of ints. * The solution would be to use separate lines * for each declaration. */ public int y = 4, z = 11; /** * Bu sınıf çalıştırılırsa Main metodu programın * başlangıç noktasıdır. args Komut satırından girilen parametreler */ public static void main(String[] args) { } } // HelloComments

27 @deprecated // jdk // jdk // HTML etiketleri ekleyebilirsiniz fakat gibi yapısal etiketler kullanmaktan kaçının. Javadoc comments should immediately preceed the declaration of the class, field or method. İlk cümle özet olmalıdır. Javadoc ‘a özel etiketler kullanın, örneğin etiketi kullanılırsa diğer etiketine kadar parse işlemi devam eder. Javadoc (devam) Kendi javadoc açıklamalarınıza geri dönerseniz bu notlara geri dönersiniz.

28 Sorular?

29 Sabitler Java: –public final static = ; –public final static int MIN_PASSING = 60; –public final static float PI = f; Neden bu sentaks kullanıldığı konusunda detaylı bilgi ileride... Hızlı tekrar

30 Printing to Screen Java: –System.out.println( ); –System.out.println( ); // boş satır ekler –System.out.println(5); // ekrana 5 yazar System.out.println(“Merhaba Dünya”); // ekrana Merhaba Dünya yazar –“println” vs. “print” : println komutu ekrana mesajı bastıktan sonra imlecin bir alt satırın başına geçmesini sağlar print komutu ise ekrana mesajı bastıktan sonra imlecin kaldığı yerden devam etmesini sağlar Quick Review

31 Metod Çılgınlığı

32 Dikkat Java ‘daki metodları konuşmaya başlamadan önce yüksek seviyeli programlama dillerine bir göz atmamız gerekir. Slaytlardaki sentaks konusunda endişelenmeyin. Büyük resimde kod detayları önemli değildir önemli olan neyin önemli olduğudur.

33 Programlama Modelleri Prosedürel Programlama (Procedural Programming) ‘Imperative’ assignment used to create state, and procedures manipulate state. E.g., C, Assembly, Pascal int y; int x = 3; y = manipulateData(x); Fonksiyonel Programlama (Functional Programming) Functions (procedures that do not depend on outside data) are used to provided data. E.g., Lisp. (defun check-member (input-item input-list) (cond ((null input-list) nil) ((equal input-item (first input-list)) T) (T (check-member input-item (rest input-list)))))

34 Nesneye yönelik programlama Bütün veriler objelerin içinde tutulur; bütün etkileşim objeler arasında olur. Even numbers are objects that know how to add themselves. E.g., SmallTalk: | array | array := Array new: 5. rect := corner: 1 to: array size do: [ :item | rect origin: array at: item put: rect copy ]. Java ‘nın yeri neresidir? Nesneye yöneliktir ancak %100 değildir çünkü, temel veri tiplerine sahiptir ve de az da olsa prosedürel programlamaya izin verir. Programlama Modelleri Başka modeller de mevcuttur ancak, bu üçü Java ‘nın nereden geldiğini açıklamaya yeter

35 Java Metodları Java ‘da hem prosedürler hem de fonksiyonlar için method adı verilen bir yapı mevcuttur: aşağıda prosedür geriye değer döndürmediği için metod adından önce “void” ifadesi kullanılmıştır. public void printHelloWorld( ) { System.out.println(“Hello World!”); } // printHelloWorld Not: Bütün metodlar, parametre almasa dahi metod isminden sonra ( ) kullanmak zorundadır. Açıklamayı not edin

36 hem prosedürler hem de fonksiyonlar için tek bir yapı: fonksiyon tanımlaması yapıldığı zaman geri dönüş değerinin türü belirtilmesi gerekir. public float average (float num1, float num2, float num3) { float answer; answer = (num1 + num2 + num3)/ 3; return (answer); } // of average Java Metodları

37 Metod Yazımı : Büyük Bakış Java kuralı: --Her metod bir nesneye aittir ya da bir sınıfa. --Bir metod çağrıldığı zaman hangi sınıfa ya da nesneye ait olduğu kesin belli olmalıdır. --Bir uygulamayı çalılştırabilmek için programın aynı adında bir sınıf ve bu sınıfın içinde de main metodu bulunmalıdır. Sınıf metodu olduğunu belirtir, üye metodu değil Herkese açık Geri dönüş değeri yok Metod adı Komut satırı parametreleri için public static void main (String[ ] argv)

38 class A { public static void main(... } class B { public static void main(... } class C { public static void main(... } Öyleyse, her sınıf kendi main metoduna sahip olabilir. Bunlardan hangisinin çalışacağına siz karar vereceksiniz. Debug testi yapmak için gerekli olan main metodlarını yazmayı öğrendiğimiz zaman yukarıda bahsettiğimiz konu kritik bir hal alacak.

39 Metod İmzaları “Metod imzası, metod adı, parametre sayısı ve türleridnen oluşur. Herhangi bir sınıf aynı imzaya sahip iki metod tanımlayamaz, yoksa derleme zamanı hatası oluşur. Aynı isme sahip metodlar farklı varyasyonlarda parametrelere sahip olurlarsa Method overloading meydana gelir. public int getCube(int num){ return num*num*num; } public int getCube(float num){ return (int)(num*num*num); } public int getCube(double num){ return (int) (num*num*num); }

40 Metodlarda yapılan genel hatalar public float average (float num1, float num2, float num3); { float answer; answer = (num1 + num2 + num3)/ 3; return (answer); } // average ‘;’ Noktalı virgül hakkında -- Eğer yukarıdaki gibi bir kullanım söz konusu olursa metod abstract metod gibi görünebilir. -- Çözümlenmesi zor bir hata mesajı ile karşılaşılabilir. -- Çok kolay yapılan hatalardan biridir.

41 Metotlar nereye? Tıpkı main metodunda olduğu gibi oluşturulan bütün metodlar bir sınıfa ya da bu sınıfın bir üyesine ait olmalıdır. Daha sonra nasıl sınıf ve nesne oluşturulur göreceğiz... Şimdilik, metodların bir sınıfa ait olması gerektiğini bilmeniz yeter.

42 Nesneye Yönelik Programlama Hakkında Nesneye yönelik programlama ile ilgili önemli noktaları görmüş olduk : Veri ve metodlar birlikte bir sınıfa aittir. Şu anda sadece, değişkenlerin ve metodların sınıflara ait olduğunu bilmeniz yeterli. Daha sonra, bu özelliği kullanarak durumları (değişken), davranışlarla (behaviour) nasıl sarmalanır göreceğiz... Öyleyse, bugün neler öğrendiğimizi hatırlayalım. Nesneye yönelik programlamanın temel taşlarını öğrenmeye başladınız.

43 Sorular?

44 Koşullu ifadeler

45 Karar ifadeleri Java: if (koşul) tek bir ifade; else tek bir ifade; Ya da: if (koşul) { bir ya da daha fazla ifade; } else { bir ya da dah fazla ifade; }

46 Örnekler Java: Aşağıdaki örnekte ne yapılmıştır? int testGrade = 65; boolean passing = true; if (testGrade < 60) passing = false; System.out.println(testGrade + ”notu geçer demek” + passing + ”olur”);

47 Boole ve İlişkisel operatörler Boole: Java: VE && VEYA || DEĞİL ! İlişkisel: eşittir == eşit değildir != küçüktür < küçük ya da eşittir <= büyüktür > büyük ya da eşittir >= Not: Atama =

48 Örnek if (enrolled && passing) { // etc. } Java, şartlardan sadece bir tanesinin değerlendirilmesi gibi bir imkan da sunar. if (enrolled(studentNum) || getPassing(studentNum)) { // etc. } Eğer ilk şart doğruysa, ikinci şarta bakılmaksızın toplam koşul doğru kabul edilir ve değerlendirme sona erer.

49 Biraz da kod public static void main(String args[]) { int quiz1 = 42; int quiz2 = 99; if(isPassing(quiz1) && isPassing(quiz2)) System.out.println(“Passed both quizzes”); } public static boolean isPassing(int testGrade) { boolean passing = true; if (testGrade < 60) passing = false; System.out.println(“Is “ + testGrade + “ passing? “ + passing); return passing; }

50 Sonuç? Is 42 passing? false Is 99 passing? true a b

51 Switch koşul ifadesi Tek koşul için if yapısını kullanın. İki koşul varsa if/else yapısını kullanın. İkiden daha fazla koşul varsa switch yapısını kullanın. Switch yapısının alternatifi if-elseif-elseif-else yapılarıdır. Not: Eğer aynı değişkenin değişik değerleri arasından seçim yapılcaksa kullanmak elverişlidir. Ancak, farklı değişkenlerin değerlerinde seçim yapılacaksa kullanılmamalıdır.

52 Switch switch ( ) { case : //y apılmasını istediğiniz herhangi bir şey break; // isteğe bağlı case : //y apılmasını istediğiniz herhangi bir şey break; // isteğe bağlı default: //y apılmasını istediğiniz herhangi bir şey break; // isteğe bağlı }

53 Switch (devam) Switch yapısının en sonundaki default durumuna dikkat edin. (Seçimlidir) switch (iNumber) { case 1: System.out.println (“Bir”); break; case 2: System.out.println (“İki”); break; case 3: System.out.println (“Üç”); break; default: System.out.println(“Not 1, 2, veya 3”); break; // Gerekli mi??? } // switch Pratikte her zaman default ifadesini kullanmanız gerekir. Default olmadan da çalışırdı ancak basit bir programlama olurdu.

54 Kaç gün? if(month == 4 || month == 6 || month == 9 || month == 11) numdays = 30; else if(month == 2) { numdays = 28; if(leap) numdays = 29; } else numdays = 31;

55 Switch switch (month) { case 4: case 6: case 9: case 11: numdays = 30; break; case 2: numdays = 28; if(leap) numdays = 29; break; default: /* iyi bir fikir mi? */ numdays = 31; }

56 Switch yapısı sadece aşağıdaki veri türleriyle birlikte kullanılır. int, char, short & byte Case değerleri mutlaka aynı türden olmak zorundadır. Case değerleri mutlaka sabit değerler olmalıdır. Switch yapısı ile ilgili bazı notlar

57 Switch yapısı switch (grade) { case ‘A’: case ‘a’: countOfAGrades++; break; case ‘B’: case ‘b’: countOfBGrades++; break; case ‘C’: case ‘c’: countOfCGrades++; break; case ‘D’: case ‘d’: countOfDGrades++; break; case ‘F’: case ‘f’: countOfFGrades++; break; default: System.out.println(“Invalid grade”); break; } (yukarıda kullanılan değişkenlerin dahan önceden oluşturulmuş olduğunu ve bir değere sahip olduklarını kabul ediyoruz.) if (grade==‘A’ || grade==‘a’) countOfAGrades++; else if (grade==‘B’ || grade==‘b’) countOfBGrades++; else if (grade==‘C’ || grade==‘c’) countOfCGrades++; else if (grade==‘D’ || grade==‘d’) countOfDGrades++; else if (grade==‘F’ || grade==‘f’) countOfFGrades++; else System.out.println (“Invalid grade”); aynı

58 Daha ileriye gitmeden önce... Program kodunuz ne yapılmak istendiğini açık ve net bir şekilde ifade ediyor olmalı. Bununla ilgili 2 tür izleyici var –Makine –Diğer programcılar

59 If Tarz 1 if( ) { // doğruysa bu işlemleri yap } else { // yanlışsa bu işlemleri yap }

60 If Tarz 2 if( ) { // doğruysa bu işlemleri yap } // açıklama else { // yanlışsa bu işlemleri yap } // açıklama

61 Koşula bağlı atama boolean b; int count; b = checkCompletion(); count = (b) ? 3 : 1; Boole değer olmalı Eğer doğruysa Eğer yanlışsa ? : Not: Bu sentaks hızlı veya daha okunaklı falan değildir. Sadece C hacker ‘ları ile ilgili bir konu.

62 Koşullu ifadeler özet Kontrol yapıları –İki tür koşullu yapı vardır: if {... } else {... } –Boole değere göre dallanmalar var switch (...) { case...; break; default:... } –Sabit değere göre dallanma var –break deyimini unutmayın

63 Sorular?


"Sayısal Türler Tamsayılar (byte, short, int, long) –Tam sayılardır –exact –Yaklaşık olarak ~10 19 rakamında sınırlıdır Kayan noktalı (float, double) –kesirli." indir ppt

Benzer bir sunumlar


Google Reklamları