CS1502: Introduction to Programming II

Download Report

Transcript CS1502: Introduction to Programming II

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