Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
1. ipucu Yardım çağırmak için son dakikayı beklemeyin 2. ipucu Yeteri kadar not alırsam geçeceğim. Yeni bir konu öğrenirken kötü olaylarla karşılaşabilirsiniz. Büyük ihtimalle bazı programlarınız çökecek. Erken işe koyulun; hatalar için kendinize zaman verin. 3. ipucu Ders yüküyle ilgili çok fazla endişeniz olmasın. Bu dersten birkaç gün bile kaytaramazsınız. İpucu 4 Büyük resme odaklanın. Unutmayın ki , bu ders bir programlama dersidir, Java dersi değil. Dersin programlama kısmından kaçmayın. Finalde ezilebilirsiniz. Özet • Eğer yeteri kadar bu ders için hazırlık yapmadıysanız • 1.seçenek: Hazırlanın • 2.seçenek: Şimdiden dersi bırakın. İki taraf için de iyilik etmiş olursunuz. • Ders için gerekli olan ön yeterlilik bilginizi test etmek amacıyla “home quiz” dediğimiz sınavlarınız olacak. Yardımcı kaynaklar Sun firmasının Java konusunda 1000 sayfaya yakın ücretsiz kaynağı internette mevcuttur. Bu kaynağı internetten indirmeli ya da bu sayfayı mutlaka işaretlemelisiniz. http://www.javasoft.com/docs/books/tutorial/index.html Java ‘ya giriş • Java nedir: – – – – İyi programlama için bir araç JVM yorumlayıcısına sahip herhangi bir platforma taşınabilir İyi bir temele sahipseniz öğrenmesi kolay Nesneye yönelik bir dil • Java ne değildir: – – – – “Nihai (Son) Programlama Dili” HTML ya da diğer web içerikli dir dil Sadece web applet için gereklidir. Gereksiz bir kısaltma (Just Another Vacuous Acronym) Java ‘ya giriş (devam) • Java ‘nın güçlü yönleri: – – – – – Gerçek hayatta kullanılan gerçek bir dildir. Taşınabilirlik. Öğrenilmesi kolay Java ile makinaya zarar vermek kolay değil ;-) Gelişmiş GUI grafik bileşenlerine sahiptir • Java ‘nın zayıf yönleri: – Yorumlandığından ve nesneye yönelik olduğundan yavaştır. – GUI/Grafiksel elemanlar için “En Küçük Ortak Payda” (“Least Common Denominator”) yaklaşımı (platformdan bağımsızlık sağlamak için) – Yazımla ilgili bazı zorlukların olması Java ‘nın popülaritesi • Java ‘nın popülaritesinin püf noktaları: – Basit ve nesneye yönelik bir dil olması. – Java Virtual Machine sayesinde yazılan programların değişik sistemler arasında taşınabilir olması. – İnternet tarayıcıların JVM ‘e sahip olması sayesinde Java programlarının internet üzerinde taşınabilir olması. Java nedir? “Basit, nesneye yönelik, dağıtık, yorumlanmış, güçlü, güvenli, platform bağımsız, taşınabilir, yüksek performanslı, çoklu kullanım imkanı olan (multithreaded), dinamik bir dildir” -- Sun Pazarlamacı bir ifade; Gelin daha yakından inceleyelim . . . “… nesneye yönelik …” . Java nesneye yönelik bir dildir. . Java ile nesneye yönelik olmayan programlar yazmak da mümkündür. . Nesneye yönelik bir dilde verinin durumunu ve davranışını belli bir biçimde ifade etmek ve izole etmek için sınıf (class) kullanılır. •Veriyi işlemek ve programda kullanabilmek için sınıfın bir üyesi (instance) oluşturulur. •Sınıflar belli bir hiyerarşik düzen içinde veya paketler şeklinde düzenlenmiştir. “… nesneye yönelik, …” Örnek: “Stack” java.util paketinde bulunan bir sınıftır. new terimini kullanarak Stack sınıfının bir üyesi oluşturulur. Yani: import java.util.*; Stack c = new Stack(); c.push(“3”); java.util.Stack x = new Stack(); Diğer veri yapılarının Stack (yığın) modellemek için kullanıldığı fonksiyonel (işlevsel) ve prosedürel (yordamsal) yapıya sahip C ve Pascal gibi dillerden bu şekilde ayrılır. “… dağıtık, …” Java ayrıca dağıtık bir dildir. Bilgisayar ağları göz önüne alınarak inşa edilmiştir. IPv4 protokolünü tam destekler. Ayrıca internette kullanılan IPv6 protokolünü destekleyen yapılara sahiptir. HTML dökümanlarına gömülmüş haldeki küçük programlar olan Applet ‘leri destekler. Bkz: java.net package RMI/CORBA “… yorumlanmış, …” Her bir komutun derleme esnasında değil de çalışma esnasında makine koduna çevrildiği (diğer bir ifadeyle yorumlama) dildir. Bu, Java ‘ya platform bağımsızlık sağlar: “WORA” ( write once run anywhere) “bir kere yaz her yerde çalıştır”. Bu aynı zamanda, program çalışırken üzerinde değişiklik yapılabilmesini sağlar. Dezavantajı: yavaşlık “… güçlü, …” Java basittir: İşaretçi ve yığın mantığından büyük ölçüde arındırılmıştır. Hata yakalama (Exception handling): try/catch/finally komut dizisi hataların kolay bir şekilde yakalanmasını ve düzeltilmesine olanak verir. Tip bildirimi ve kullanımını zorlar(Strongly typed language): Derleme esnasında birçok hata yakalanır. “… güvenli, …” Sadece derleme esnasında değil aynı zamanda yükleme esnasında da Byte-code doğrulaması yapılır. Applet kodu önemli kısıtlamalar çerçevesinde web dökümanının içerisinde çalışır. ('sandbox') Güvenlik SecurityManager sınıfı tarafından sağlanır. Applet ‘lerin güvenlik kısıtlamaları dijital imzaları ve Servlet ‘leri içermektedir. Java Programlarının Yapısı • Uygulamalar (“standard” bilgisayar programları): – Bir ya da daha fazla Java kaynak dosyası oluşturun – Her bir kaynak dosyasını sonuçta sınıf dosyası oluşturacak şekilde derleyin. – Böylece bir uygulama, bir tek .exe dosyasından değil de birden fazla sınıf dosyasından oluşacaktır. – Bir sınıf dosyasını Java sistemine gönderin. – Bu sınıfın main adında bir metoda sahip olması gerekir. public static void main(String[ ] argv) – main metodu program akışını denetler. Basit bir uygulama ( “HelloWorld.java” adıyla kaydedildi) public class HelloWorld { public static void main(String argv[]) { System.out.println(“MerhabaDünya!”); } } Java Dosya İsimleri Kaynak kod dosyası “.java” uzantılı olmalıdır. Dosya adı ile sınıf adı aynı olmak zorundadır. Bu isimlendirme kuralı birçok derleyici tarafından uygulanmaktadır. Örneğin, kurallara uygun olmayan bir isimlendirme şekli aşağıda gösterilmiştir. YANLIŞ Kaynak kod dosyası "myTest.java“ olarak kaydedilmiş olsun, Sınıf tanımı da aşağıdaki gibi olsun: class test { ... } Java Dosya İsimleri Derlenmiş byte kodlarının tutulduğu dosya “.class” uzantısına sahiptir. Kurallara uygun bir isimlendirme şekli ise aşağıda gösterilmiştir. Kaynak kod dosyası “Test.java” şeklinde kaydedilmiş olsun, Sınıf isimlendirmesi de aşağıdaki gibi olursa kurallara uygun bir isimlendirme yapılmış olur. class Test { ... } Derlenmiş byte kodlarının tutulduğu dosya “.class” uzantısına sahiptir. Büyük Resim Zamanı MerhabaDunya.class MerhabaDunya.java public class MerhabaDunya { public static void main(String argv[]){ System.out.println (“Merhaba Dünya!”); } } javac javac MerhabaDunya.java 0xCAFEBABE ... java MerhabaDunya Java Dosya Yapısı Java Dosyaları: 1. Opsiyonel olarak package ifadesi (dosyanın hangi paketin altına eklenmesi istendiğini belirten ifade), 2. Gerekli sınıfların eklenmesi için kullanılan import satırları, 3. Daha sonra sınıf ismi gelir, 4. Sınıf ismini takiben kalıtım (inheritance ) ve arayüz (interface) ifadeleri gelir, 5. NOT: Eğer kaynak kod içerisinde birden fazla sınıf (class) veya arayüz (interface) tanımlanmışsa sadece bir tanesi public olarak tanımlanabilir. Buna ek olarak, kaynak kod dosyasının ismi public olarak tanımlanan sınıf ismi ile aynı olmak zorundadır. Ortalama bir Java Dosyası Örnek: package fatih.edu.ceng217; import java.util.*; import fatih.edu.ceng217.lecturenotes.*; import netscape.javascript.JSObject; import netscape.javascript.JSException; public class SplayTree implements TreeType, TreeConstants { ... }// SplayTree Paket ismi global olarak tek olmak zorundadır. Yani, aynı isimde başka bir paket olamaz. Eğer herhangi bir paket ismi belirtilmezse, kaynak dosyamız içinde bulunulan dizin içerisinde isimsiz ve yazılım geliştirme ortamı tarafından varsayılan olarak belirlenmiş bir paketin altına kaydedilir. Java ‘nın Taşınabilirlik Özelliği Java Harici Geleneksel Yöntem: “Kaynak Kod” İşletim Sistemine özel derleyici ya da yorumlayıcı İşletim Sistemine özel amaç kod Programı çalıştır Java ‘nın yöntemi: “Kaynak kod” Demo.java Programı çalıştır Java derleyicisi javac Demo.java İşletim Sistemine özel amaç kod “Bayt Kod (Byte Code)” Demo.class İşletim Sistemine özel JVM yorumlayıcısı java Demo Varolan Veri Türleri • 4 “atomik veri türü” + String – – – – – Num (sayı) Char (karakter) Boolean Ptr (işaretçi) String Not: String temel (primitive) bir tür değildir. • Java: (6 önemli temel (primitive) tür + String) – – – – – int (tamsayı) long (uzun tamsayı, 2x bit) float (gerçek sayı) double (uzun gerçek sayı, 2x bit) char karakter; tek tırnak içinde ifade edilir: ‘b’) – boolean – String (Java küçük büyük harf duyarlıdır, bu yüzden başlangıç harfine(S) dikkat edin) ; çift tırnak içinde ifade edilir: “deneme”) Veri Türlerinin Listesi Temel (Primitive) Türler Varsayılan Değeri boolean char byte short int long float double void false '\u0000' (null) (byte) 0 (short) 0 0 0L 0f 0d N/A Değişken Tanımlamaları • Java: – <Veri türü> <değişken adı>; • Ya da (değişken bildirimi yapılırken ilk değer ataması yapılabilir) – <Veri türü> <değişken adı> = <ilk değer>; Örnekler int counter; int numStudents = 583; float gpa; Bu konuda daha double batAvg = .406; fazla örnekler... char gender; char gender = ‘f’; boolean isSafe; boolean isEmpty = true; String personName; String streetName = “North Avenue”; Sorular? Değer Atama • Java birden fazla bildirimi ve değer atamayı aynı komut satırında yapmaya izin verir . int theStart, theEnd; int width = 100, height = 45, length = 12; • Ancak bu javadoc açıklamalarını karmaşıklaştırabilir: /** * Silindirin çapı ve yüksekliğinin bildirimi ve ilk değer atamasının yapılması Javadoc açıklamaları */ her bir değişken int diameter = 50, height = 34; için tekrarlanır! Örnekler • Tam sayı sabitleri int kabul edildiği için başka tip değişkenlere atama yaparken çevirim gerekebilir: float maxGrade = 100f; // tutulan değer ‘100.0’ double temp = 583d; // tutulan değer çift duyarlılığa sahip 583. float anotherTemp = 5.5; // hata! • ‘float’ için (F ya da f), ‘double’ için (D ya da d), ve ‘long’ için (l ya da L, fakat genelde L tercih edilir) kullanılır: float maxGrade = 100F; // tutulan değer ‘100.0’ long x = 583l; // tutulan değer 583, long y = 583L; // Bu şekliyle daha iyi ! Tür Dönüşümleri (Primitive Casting) • Tür dönüşümleri (1) dolaylı dönüşüm ve (2) açık dönüşüm olmak üzere iki şekilde yapılır: int total = 100; float temp = total; // temp değeri 100.0 oldu • Tür dönüşümleri yapılırken duyarlılık kaybı yaşanıyorsa açık veri dönüşümü yapılması gerekir. Açık dönüşüm, yeni tür isminin parantez içerisinde ifade edilmesiyle yapılır. • float total = 100f; int temp = total; // ERROR! int theStart = (int) total; • Tür Dönüşümünün nesnelerde yapılışı ile ilgili daha fazlasını ileride göreceğiz… Dönüşüm: Bilginizi sınayın • Verilenler: int theStart = 10; float temp = 5.5f; temp = temp + (float)theStart; Hileli soru • Şimdi temp değişkeninin içinde tutulan değer nedir? 15.5 • Verilenler: char c = ‘A’; int x; x = c; • Legal mi? 65 Unutmayın ki sonuçta herşeyin sayısal bir ifadesi vardır. Operatörler • Atama işlemi: = • Aritmetik: +, -, *, /, % (mod), ve diğerleri int numLect = 2; int numStudents = 583; int studentsPerLect; studentsPerLect = numStudents / numLect; // tamsayı bölmesi yapıldığından sonuç 291 ‘dir. int numQualPoints = 30; int numCreditHours = 8; float GPA; GPA = numQualPoints / numCreditHours; // tamsayı bölmesi yapıldığından ve sonuç float türünden bir değişkende tutulduğundan sonuç 3.0 ‘dır. someIntVar = someIntVar * someFloatVar // derleme zamanı hatası verir Bilginizi sınayın • Problem: int iVar = 10; float fVar = 23.26f; // derleme zamanı hatası verir iVar = iVar * fVar; 3 • Hangi çözüm daha iyi çalışır? 1 iVar = (int) (iVar * fVar) iVar = iVar * (int) fVar 230 4 iVar = (int) ((float) iVar * fVar) 232 232 2 iVar = (int) iVar * fVar Derleme hatası Ders: kolay anlaşılan kodu yazın Kısayol Operatörleri counter counter counter counter = = = = counter counter counter counter + + * 1; 1; 2; 5; //veya: //veya: //veya: //veya: counter++; counter--; counter+=2; counter*=5; Son iki örneğe dikkat ederseniz: counter+=2 ifadesi ile counter=+2 ifadesi aynı şey değildir. • Kısayol operatörlerini kullanırken oluşan hatalara dair örnekleri ileride göreceğiz Dokümantasyon & Açıklamalar • Üç türlü yöntem vardır: // Bu işaret satır sonuna kadar olan tüm ifadeyi açıklama olarak belirler. /* 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İLM217 için, Javadoc açıklamaları kullanın Açıklamalar hakkında açıklamalar 1. C dilindeki gibi açıklamalar /* */; 2. C++ dilindeki gibi // ile başlayan açıklamalar 3. /** ...*/ ifadeleri arasında yazılan açıklamalar : kapanmaz /*/ /* // */ /////////////////// anlamsız Bloklar için iyi /* ========= */ Ders: Açıklamalar yardımcı nitelikte olmalıdır. Açıklamalar • Açılan ama kapanmayan açıklamalara dikkat edin: int x, y; // int z; /* * noktanın koordinatları * belirtilmektedir. */ Ders: Java, kullanılan operatör türünden, açıklamalara kadar, yazılan kodda açıklık ve anlaşılırlık ilkesini benimser. Javadoc /** * <PRE> * İsimi al. * Dizinin belirtilen * pozisyondaki ismi geri döndürür. * </PRE> * @param i geri döndürülmesi istenen ismin dizideki yeri (indeks) * @return strName isim * @see Employees#isEmployed() elemanın çalışıp çalışmadığını * doğrulamak için çağrılır */ public String getName (int i) if (myEmpl.isEmployed()) return myArray[i]; else return "Nada"; } // getName(int) { Javadoc (devam) • HTML etiketleri ekleyebilirsiniz fakat <H1> gibi yapısal etiketler kullanmaktan kaçının. • Javadoc açıklamaları sınıf, alan veya metot bildiriminin hemen öncesinde yapılır. İlk cümle özet olmalıdır. Javadoc ‘a özel etiketler kullanın, örneğin --@ . Eğer @ etiketi kullanılırsa diğer bir @ etiketine kadar çözümleme(parse) işlemi devam eder. @see <sınıf adı> @see <tam sınıf adı> @see <tam sınıf adı#metod adı> @version @author @return @deprecated @since @serial @param @exception // jdk 1.1 // jdk 1.1 // jdk 1.2 Sabitler • Java: – public final static <tür> <değişken adı> = <değer>; – public final static int MIN_PASSING = 60; – public final static float PI = (float) 3.14159; • Yazım şeklinin neden böyle olduğu konusunda açıklamalar birazdan... Ekrana yazma • Java: – – – – System.out.println(<argüman>); 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” ve. “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 Yazma (devam) • Java ‘da başlangıç olarak sizin için oluşturulmuş en az 3 adet stream türü vardır: System.in // giriş almak için System.out // çıktı almak için System.err // hataları belirtmek için • Bunlar InputStream ve PrintStream objeleridir. • Not: Win95/NT için System.out ile System.err hemen hemen aynı sonucu verir. Her ikisi de ekrana mesaj basar. Yazma (devam) System.out.println(“Tırnak içerisindeki bu ifade ekrana basıldı"); System.err.println(“Bu ifade ise error streamine ait bir ekran çıktısıdır"); Bunların her ikisi de PrintStream sınıfının bir üyesidir. Bu sınıfa ait sizin için faydalı olabilecek başka metodlar da mevcuttur: System.out.flush(); System.out.write(int); System.out.write(byte[] buf, int offset, int length); // !!! Özet • Java ‘nın Temelleri: Özet – Java Uygulamaları • JVM (Java Sanal Makinesi), uygulamalar & applet ‘ler • Giriş noktası main() veya init() – Java Temel Türleri ve Operatörleri • Temel veri türleri • Operatörler: = ve == dışındakiler bilinen işlevlere sahiptir. – Yeni arkadaşınız: System.out.println( ) Sorular