NetBeans ve Eclipse Eşliğinde JAVA 8 -Örnek Bölüm- https://www.seckin.com.tr/kitap/971165446 Java'yı Öğrenmek İsteyenler İçin Birkaç Not Varsayalım ki programcılığa ilginiz var, Java’yı merak ediyorsunuz. Bu ilgiyi beslemek, gereğini yerine getirmek için ne yapacaksınız? Bu soruya verilecek muhtemel cevaplar üzerinde biraz konuşacağız. Youtube’da bulduğunuz Java konulu yüzlerce saatlik video’lardan bazılarını izleyeceksiniz. Blog sitelerinde sayıları binlerle ifade edilen Java konulu makale olduğunu fark edeceksiniz. Belki birkaç kitabın PDF’si elinize geçecek. Şartlarınız elveriyorsa Java hakkında bilgi almak üzere bir eğitim merkezine başvuracaksınız. 84 Java Programlama Dili Yeterince azminiz varsa, kolay pes etmeyen bir yapıya sahipseniz, zaman sorununuz yoksa; videolardan, makalelerden, PDF’lerden yararlanarak Java hakkında gerek duyduğunuz bilgileri edinir, Java ve nesneye yönelik programcılıkla ilgili kavramlara sahip olursunuz. Devamında işin peşini bırakmazsanız Java programcısı olabilirsiniz. Bu yöntemle Java öğrenmeye çalışmak riskler içeriyor. Yukarıda tarif edilen şekilde Java öğrenmeye çalışırsanız belki sıkılıp yarı yolda pes edersiniz. Bazen okuduklarınızı anlamayacak, bazen de izlediğiniz videonun temposunu beğenmeyeceksiniz. Elinde değişik kişiler tarafından kaleme alınmış yüzlerce makaleden hangisini okuyacağınızı şaşırırsınız. Tam bu karmaşa içinde acaba kitap Java konulu kitap mı alsam diye kendinize soru yöneltiyorsanız, burada resmini gördüğünüz Java kitabı hakkında herhangi bir yorumda bulunmadan önce PDF olarak yayınlandığımız örnek bölümü baştan sona dikkatlice okumanızı öneriyoruz. Örnek bölümde Java'nın standart konularından birisi olan paketler anlatılmaktadır. Java programcılığında paketler, standart konulardan birisi olduğu için her kaynakta karşınıza çıkacaktır. Bu kitabın paketler hakkında bilgi içeren bölümünü okursanız bu kitapla ilgilenme ihtimaliniz belki yükselmeyecektir. Çünkü bölümü okudukça, belki Java’da paket olayının öyle üzerinde fazla kafa yorulacak kadar zor bir konu olmadığını düşüneceksiniz. Bu yorumun kaynağı olsa olsa bu kitapta yazdığımız her şeyin ilk okumada anlaşılmasını hedeflemiş olmamız ve bu hedefe uygun bir anlatım tekniğini tercih etmiş olmamızdır. Aslında paket konulu bölüm yerine bu kitabın MySQL veritabanları üzerinde nasıl işlem yapıldığının anlatıldığı bölümünü örnek olsun diye PDF olarak yayınlamış olsaydık muhtemelen benzer yorumu yapardınız. Çünkü bu kitabın MySQL veritabanları üzerinde nasıl işlem yapıldığının anlatıldığı bölümünü okuduğunuzda “bu işlemler çok kolaymış, kitaptan okumaya bile gerek yokmuş” şeklinde bir yorumda bulunmanız ihtimali düşük değildir. Burada örnek olsun diye yayınladığımız bölüm kitabın 83. sayfasında başlamaktadır. Dolayısıyla bu bölüme gelmeden önce Java programcılığı konusunda yolun başında olanlara yönelik en önemli konularından bazıları anlatıldı. Hatta kitabın ilk 3 bölümünde paketler hakkında yüzeysel de olsa bilgi bile verildi. Bu nedenledir ki “Paket Hazırlamak ve Kullanmak” adını verdiğimiz bu bölümü kitaptan alıp FDF olarak düzenlerken bazı rötuşlar yaptık, küçük eklemeler yapmaya gerek duyduk. Ellerinde Java kitabı olan arkadaşlar kitaptaki paket konulu bölüm ile, burada PDF olarak yayınlanan bölüm arasında küçük farkların olduğunu, birkaç yerde araya girip ek açıklamalar yaptığımızı göreceklerdir. Bölüm 4: Paket Hazırlamak ve Kullanmak 85 Bir diğer konu var: Buraya alınan örnek bölümde kullanılan ekran görüntülerinin kitaptan farklı olarak daha büyük halleri kullanıldığı için bu PDF’nin sayfa sayısı biraz arttı. Bu bölümün kitaptaki hali 14 sayfadır. Kitabın bu bölümünde anlatılanların kolay anlaşılması için verilen kısa kodları yazmanız ve bölüm metninde yapılan işlemleri sizin de yapmanız önerilir. Çünkü kitabın bu bölümü kaleme alınırken okurun verilen örnek kodları aynen yazacağı (en azından benzerini) varsayımda bulunduk. Eğer bu bölümün roman gibi okunacağını varsaysaydık farklı bir anlatım şekliyle karşınıza çıkardık. Tabi o zaman bölüme ayrılan sayfası artacaktı. PDF’de sarı zeminli halde verilen paragraflar kitapta yoktur. 4. BÖLÜM PAKET HAZIRLAMAK ve KULLANMAK Şimdiye kadar yazdığımız kısa kodlarda kullandığımız Java sınıflarının hangi pakette yer aldığını her seferinde işaret ettik. Çünkü Java ile gelen çok sayıda sınıf, paket olarak gruplanıp öyle kullanıma sunulmuştur. Java ile hazır olarak gelip paket halinde kullanıma sunulan sınıflardan öte kendi sınıflarınızı paket olarak organize edip gruplayabilirsiniz. Kısaca anlatmak gerekirse, Java’da istenen sayıda class ve interface bir araya getirilip “paket” olarak gruplanıp organize edilmektedir. Java’da paket demek bir bakıma belli bir amaç için hazırlanmış class ve interface’lerin tutulduğu klasör demektir. Hazırladığınız bir veya birden fazla sınıfı daha sonra geliştireceğiniz uygulamalarda sıklıkla kullanacaksanız bu sınıfları ayrı bir paket olarak organize etmenizde fayda vardır. Java programcıları arasında paketlere isim verirken kendi domain adlarının tersten yazılmış halini kullanma alışkanlığı vardır. Örneğin NetBeans’e gömülü olarak gelen Derby Apache veritabanları üzerinde işlem yapılırken gerek duyulacak sınıfların yerleştirildiği paketin adı “org.apache.derby” olarak seçilmiştir. Bu sayede paket adı çakışmalarının önüne geçilmektedir. Java programcıları arasında paket adının ilk harfini küçük olarak seçmek gibi bir alışkanlığın olduğunu hatırlatmak isteriz. Bu bölümde paketlerden söz ederken konunun kolay anlaşılması için adlandırmada bu alışkanlığa bağlı kalmadık. Çünkü paket kavramı Java’nın en zor anlaşılan kavramlarından birisidir ve bu bölümle ilgili olarak hedefimiz hem paketleri bütün ayrıntıları ile anlatmak hem de yazılan metnin ilk okumada anlaşılmasını sağlayıp paket konusunda gelecek muhtemel bütün sorulara cevap vermektir. Java programlama dilinde paket hazırlama ve kullanmayla ilgili bilgi vermeye kullandığımız bilgisayarda “C:” sürücüsünde “\paketler” adında bir klasör hazırlamakla başladık. Bu bölümde paketleri anlatırken gerek duyacağımız klasörleri burada "\paketler" adını verdiğimiz klasörün içinde hazırlayacağız. Ardından bu klasörün içinde “aritmetik” adında ikinci bir klasör hazırladık. Matematiksel işlemler için hazırlayacağımız sınıfları “aritmetik” adlı klasöre 86 Java Programlama Dili yerleştireceğiz. Başka bir anlatımla matematiksel işlemler için hazırlayacağımız class’ları “aritmetik” adı altında paketleyeceğiz. Paketleri yerleştirmek amacıyla hazırladığımız klasörlerin hiyerarşik konumunu aşağıda verilen ekran görüntüsünde görebilirsiniz. Java programcıları Java kodu yazarken genellikle NetBeans veya Eclipse adlı IDE’leri kullanıyorlar. Bu bölümde bu IDE’lerden yararlanmak yerine konunun ayrıntılarını gösterebilmek için kod yazarken Not Defteri'ni kullandık. Not Defteri ile hazırladığımız Java kodunu ise konsolda kendimiz derleyip çalıştırdık. NetBeans ve Eclipse, paketlerle ilgili birçok işlemi geri planda kendi yaptıkları için ayrıntıları görmek zorlaşıyor. Java paketi olarak kullanacağımız klasörü hazırladıktan sonra aşağıdaki gibi kısıtlı özelliklere sahip bir kod dosyası hazırlayıp “Islemler.java” adıyla “aritmetik” klasörüne kaydettik. Bu class’ın kodlandığı “java” uzantılı dosyayı “aritmetik” adını verdiğimiz klasöre kaydettiğimiz için kodun en başında package deyimine yer verdik. Başka bir deyişle sınıfımızı yerleştirdiğimiz paketin (klasörün) adını kodun ilk satırında belirttik. Her ne kadar burada “aritmetik” adını verip “paket” olarak değerlendirmek istediğimiz klasör “\paketler” klasörü içinde yer alsa bile bu klasörü yani “\paketler” klasörünü paket olarak değerlendirmeyeceğiz. Bu nedenle aşağıda verilen kodda “\paketler” adını verdiğimiz klasörüyle ilgili bir işaret yoktur. Bölüm 4: Paket Hazırlamak ve Kullanmak 87 Bu bölümde kullanılan kodların bazılarını ekran görüntüsü olarak verdik. Bunun nedeni hazırladığımız kodları yazdığımız dosyaların adlarına vurgu yapmaktır. Çünkü Java’da kod dosyalarına verilen isimler önemlidir. Bu şartlarda “aritmetik” adını verdiğimiz paket “Islemler” adında bir sınıfa ve bu sınıf ise “toplama()” adında bir metoda sahiptir. Bu sınıfın adından önce public anahtar kelimesine yer verdiğimiz için bu sınıfı başka paketlerde yer alan sınıflarda kullanabiliriz. Bu paket için bu şekilde sınıf hazırladıktan sonra kodu derleyip “class” uzantılı dosya hazırladık. Bu amaçla aşağıdaki gibi bir derleme yaptık. Derleme yapıp “Islemler.java” dosyasından yola çıkıp “Islemler.class” adında bir bytecode dosyası hazırladıktan sonra şimdi sırada bu paketteki “Islemler” sınıfından yararlanmak var. Bu amaçla başka bir klasördeki, dolayısıyla başka bir paketteki main() metoduna sahip “Siftah.java” adını verdiğimiz kod dosyamızı aşağıdaki gibi düzenledik. Burada “Siftah” adını verdiğimiz kod dosyasını “C:\” sürücüsünde “\Projeler\proje1” adlı klasöre kaydettik. Bu koda dikkatlice bakılırsa, “Siftah” adını verdiğimiz ve main() metoduna sahip olan sınıfın hazırlandığı bu kod dosyasında package anahtar kelimesine yer verilmediğini fark ederseniz. Bu durumda Java derleyicisi bu sınıfın default adı verilen pakette yer aldığını varsayacaktır. "Siftah” adını verdiğimiz sınıfta “package” anahtar kelimesine yer vermeme nedenimiz, konunun kolay izlenebilmesini sağlamaktır. Bu bölümün ileriki sayfalarında bu sınıfı da bir pakete dahil edeceğiz. Mevcut durumu özetlemek gerekirse şunlar söylenebilir: * Java'nın paketleri hakkında bilgi vermeye "C:" sürücüsünün kök klasörü içinde "\paketler" adında bir klasör hazırlayarak başladık. Örnek olması için "aritmetik" adında bir Java paketi hazırlamak istediğimiz için "\paketler" klasörü içinde "aritmetik" adında bir klasör hazırladık. * Devamında Not Defteri'ni kullanarak "Islemler.java" adında bir kod dosyası, dolayısıyla "Islemler" adında bir sınıf hazırladık. Bu sınıfı "aritmetik" adını verdiğimiz klasöre kaydetmek, dolayısıyla "aritmetik" paketine üye yapmak istediğimiz için kod dosyasının en başında package anahtar kelimesine yer verdik. 88 Java Programlama Dili * "Islemler.java" adıyla hazırlayıp "aritmetik" klasörüne kaydettiğimiz kod dosyasını konsolda derleyip “class” uzantılı dosya hazırladık. * En son olarak "aritmetik" paketine üye yaptığımız sınıfı başka bir uygulamada kullandık. Bu Java programı dahilinde “aritmetik” adını verdiğimiz paketteki (klasör) ‘Islemler’ sınıfından yararlanmak istediğimiz için kodun en başında import anahtar kelimesi ile bunu belirttik. Tabi herhangi bir paketteki sınıflardan yararlanmak için import anahtar kelimesi yardımıyla ilgili paketleri kodun başında işaret etmenin bir zorunluluk olmadığını biliyorsunuz. Şimdi sırada “Siftah.java” adını verdiğimiz ve main() metoduna sahip sınıfın olduğu bu kod dosyasını derlemek var. Herhangi bir hazırlık yapılmadan bu kod dosyası aşağıdaki gibi derlenirse hata mesajı alınır ve "Siftah.class” dosyası hazırlanmaz. Çünkü mevcut ayarlara göre derleyici “aritmetik” adını verdiğimiz paketteki ‘Islemler’ sınıfını bulamaz. Java derleyicisi bu kodu derlerken “Islemler” sınıfını önce geçerli klasörde arar. Bulamazsa bu kez CLASSPATH adlı sistem değişkeni ile işaret edilen klasörlere bakar. Bu nedenle kendi hazırladığınız paketleri, geliştirmekte olduğunuz Java uygulaması dahilinde kullanmak istiyorsanız CLASSPATH ayarlaması yapmalısınız. CLASSPATH ayarlaması yapmadan “Siftah.java” dosyasını derlemek isteyince aşağıdaki gibi bir hata mesajı aldık. CLASSPATH ayarlamasını Windows’un Sistem Özellikleri diyalog kutusundaki Ortam Değişkenleri düğmesi tıklandığı zaman ekrana gelen diyalog kutusunda yapabileceğiniz gibi direk konsolda SET komutu ile yapabilirsiniz. Bölüm 4: Paket Hazırlamak ve Kullanmak 89 Daha önce CLASSPATH adında bir sistem değişkenin tanımlanıp tanımlanmadığını öğrenmek istiyorsanız konsoılda “set” deyimini aşağıdaki gibi kullanabilirsiniz. Bu sırada CLASSPATH adında bir sistem değişkeni tanımlı olmadığı için aşağıdaki gibi bir sonuç aldık. Java derleyicisini kullandığımız bilgisayardaki “paketler” klasörünün içinde hazırlanan paketlerden haberdar etmek istediğimiz için SET komutu ile CLASSPATH sistem değişkenini tanımlama işlemini aşağıdaki gibi yaptık. Çünkü hazırladığımız paketi yerleştirdiğimiz klasör, klasör hiyerarşisi içinde “\paketler” klasöründen sonra gelmektedir. Dolayısıyla yukarıda hazırladığımız “aritmetik” paketini başka bir uygulamada kullanmak istediğimizde “import” bildirimde “\paketler” klasörü olmayacaktır. Yararlanmak istediğimiz paketler birden fazla yerde olsaydı klasör adlarının arasına noktalı virgül(;) koyarak hepsini CLASSPATH değişkenine aktarırdık. Set komutu ile yapılan bu ayarlamalar DOS penceresi kapatıldığında silinir. Bu nedenle 90 Java Programlama Dili CLASSPATH ayarlamasını Windows’un Ortam Değişkenleri diyalog kutusunda yapmanız önerilir. Bu ayarlamadan sonra yukarıda hazırladığımız “Siftah.java” kodunu hatasız derleyebiliriz. Java kodunu NetBeans veya Eclipse ile yazanların yukarıda anlatılan CLASSPATH ayarlamasını yapmalarına gerek yoktur. Bu bölümle ilgili olarak hedefimiz konunun geri planından sizleri haberdar etmek istediğimiz için paketleri anlatırken NetBeans ve Eclipse’i kullanmadık. “Siftah.class” adını verdiğimiz bytecode dosyası “java.exe” programı sayesinde çalıştırılırken “\paketler\aritmetik” klasöründeki “class” uzantılı dosyaya gerek duyulur. Çünkü “Siftah.java” kod dosyasında “aritmetik” paketinde yer alan sınıfları kullandık. Konunun anlaşılmasına katkı olması için şimdi “aritmetik” adını verdiğimiz pakette ikinci bir sınıf hazırlayacağız. Bu amaçla aşağıdaki gibi bir kod dosyası hazırlayıp “aritmetik” klasörüne kaydettik. Bu kod dosyasının ilk satırında package anahtar kelimesinden sonra yine “aritmetik” yazıldığı için derleyici bu sınıfın “aritmetik” klasöründe tutulacağını kabul eder. Ayrıca bu sınıfı public yaptığımız için başka paketlerde yer alan sınıflarda kullanılabilir. Java derleyicisi, nasıl ki kod dosyası ile sınıf adının aynı olmasını istiyorsa, paket adıyla pakete dahil edilen sınıf ve interface’lerin saklandığı klasör adının da aynı olmasını istemektedir. Hem “Islemler” hem de “Diziler” adını verdiğimiz sınıfların “aritmetik” adlı pakette olmasını istediğimiz için her iki sınıfa ait kod dosyalarını bu klasöre kaydettik. Bölüm 4: Paket Hazırlamak ve Kullanmak 91 “Diziler.java” adını verdiğimiz bu kod dosyası hazırlanıp derlendikten sonra “Diziler” sınıfı istenen uygulamada kullanılabilir. “Diziler” sınıfı ile “Islemler” sınıfı aynı paketin üyesi oldukları, başka bir deyişle her iki sınıfın bytecode dosyaları aynı klasörde olduğu için ikinci sınıf için ayrıca CLASSPATH ayarlaması yapılması gerekmez. Paketlerle ilgili diğer ayrıntılardan söz edebilmek için “paketler” adını verdiğimiz klasörün içinde ikinci bir klasör hazırlayıp bu klasörü de paket olarak değerlendireceğiz. İkinci paket olarak kullanacağımız klasöre “stringler” adını verdik. Bazen birden fazla klasörde aynı ada sahip sınıflar olabilir. Bu gibi durumlarda nasıl bir çözüm geliştirildiğini anlatmak için “aritmetik” klasöründeki “Diziler.java” adlı kod dosyasını biraz değiştirip ikinci klasöre (stringler) yani pakete dahil ettik. “stringler” adlı klasöre kaydettiğimiz “Diziler” sınıfının son hali aşağıdaki gibidir. 92 Java Programlama Dili Ekran görüntüsü olarak verilen bu koda “Diziler” sınıfı bu kez “stringler” adlı pakete üye yapılmaktadır. Yani hem “aritmetik” hem de “stringler” adlı pakette “Diziler” adında bir sınıf bulunmaktadır. Bu ayarlamadan sonra “Siftah” adını verdiğimiz ve main() metoduna sahip sınıfta her iki paketteki “Diziler” sınıfından yararlanmayı deneyeceğiz. Bu amaçla yukarıda içeriğini verdiğimiz “Siftah” sınıfına ait kod dosyasını aşağıdaki gibi düzenledik. import aritmetik.*; import stringler.*; public class Siftah { public static void main(String[] args) { int[] dizi = new int[3]; dizi[0] = 10; dizi[1] = 20; dizi[2] = 30; Diziler nesne = new Diziler(); int sonuc = nesne.diziTopla(dizi); System.out.println(sonuc); } } Bu şartlarda bu kod derlenmek istenirse hata mesajı alınır. Çünkü import edilen her iki pakette aynı ada sahip bir sınıf olduğu için derleyici hangi paketteki sınıfın kullanılmak istendiğine karar veremez. Bu sorunun çözümü, nesne hazırlanırken ilgili sınıfın adından önce paket adını yazmaktır. Bu nedenle aşağıda verilen kod hatasız derlenir. Bölüm 4: Paket Hazırlamak ve Kullanmak 93 Paket İçinde Paket Hazırlamak Java konulu kaynaklarda paketler organize edilirken alan adları notasyonun tersinden yazılmış halinin örnek alınması önerilse bile konunun kolay anlaşılmasını sağlamak için bu organizasyonu yukarıdaki gibi basite indirgedik. Bazen paket içinde başka bir paket hazırlanır. Örnek olması için yukarıda hazırladığımız “\paketler\aritmetik” klasörü içinde “donusumler” adında klasör hazırladık. Paket içinde paket kullanmaya örnek olması için bu şekilde klasör hazırladıktan sonra aşağıdaki gibi bir kısıtlı özelliklere sahip bir sınıf hazırlayıp bu klasöre kaydettik. “donusumler” adını verdiğimiz paket “aritmetik” paketinin bir alt paketi olacağı, başka bir deyişle “donusumler” klasörünü “aritmetik” klasörünün içinde hazırladığımız için package anahtar kelimesinden sonra önce “aritmetik”, sonra “donusumler” yazdık. 94 Java Programlama Dili “aritmetik.donusumler” paketi içinde bu şekilde bir sınıf hazırladıktan sonra derleyip kullanabiliriz. Bu kod dosyasını derledikten sonra main() metoduna sahip Java programını açıp aşağıdaki gibi düzenledik. Aşağıda verilen kodda “donusumler” adını verdiğimiz paketteki statik metotlar kullanılmaktadır. Default Paketi Kullanmamak Yukarıdaki sayfalarda hazırladığımız paketleri, main() metoduna sahip sınıfta test ederken package anahtar kelimesine yer vermedik. Başka bir deyişle default paketten yararlandık. Bunu yapmamızın nedeni konunun kolay takip edilebilir olmasını sağlamaktı. Şimdi yukarıda main() metoduna sahip olup “Siftah” adını verdiğimiz sınıfı da bir pakete dahil edeceğiz. Bundan önce paketlerle ilgili olarak yukarıda yaptıklarımızı özetleyeceğiz. Önce kullandığımız bilgisayarda “\paketler” adında bir klasör hazırladık. Sonra bu klasörün içinde “aritmetik” ve “stringler” adında 2 alt klasör hazırladık. Bu 2 klasörün içine birkaç sınıf yerleştirdik. Örneğin aşağıda ekran görüntüsü olarak içeriği verilen “Islemler” sınıfını “aritmetik” klasörüne kaydettik. Bölüm 4: Paket Hazırlamak ve Kullanmak 95 Bu kod dosyasını, paket olarak değerlendirmek istediğimiz “aritmetik” klasörüne kaydetmiş olduğumuz için sınıfta package anahtar kelimesine yer verip bu sınıfı nerede saklamak istediğimizi en başta beyan ettik. Devamında kullandığımız bilgisayarda mevcut “\Projeler” klasörü içinde “\proje1” adında bir klasör hazırlayıp aşağıda içeriği verilen kod dosyasını bu klasöre kaydettik. Yani main() metoduna sahip olup, “aritmetik” paketindeki “Islemler” sınıfından yararlandığımız kod dosyasını “\proje1” klasörüne kaydettik. Bu kod dosyasında “aritmetik” adlı paketteki sınıfları kullandığımız için derleme işleminden önce konsolda set komutu ile CLASSPATH ayarlaması yaptık. Yine yukarıda işaret edildiği üzere “Siftah” adını verip \Projeler\proje1” klasörüne kaydettiğimiz sınıfta package anahtar kelimesini kullanmadık. Dolayısıyla derleyici bu sınıfın ‘default’ pakette olduğunu varsaydı. Şimdi “Siftah” adını verdiğimiz ve “aritmetik” paketindeki sınıflardan yararlanan bu kod dosyasında package anahtar kelimesine yer vereceğiz. Bu kod dosyasını “\proje1” klasörüne kaydetmiş olduğumuz için “package” anahtar kelimesinin yanına bu klasörün adını yazdık. package proje1; import aritmetik.*; public class Siftah { public static void main(String[] args) { Islemler islem = new Islemler(); 96 Java Programlama Dili int sonuc = islem.toplama(10, 20); System.out.println(sonuc); } } Bu şartlarda bu kod dosyası hatasızca derlenir. Ancak derleme sonucu hazırlanan “class” uzantılı bytecode dosyası “java.exe” adlı yorumlayıcı programa parametre olarak verilip çalıştırılmak istenirse aşağıdaki gibi bir hata mesajı alınır. Çünkü bu şartlarda Java yorumlayıcısı gerek duyduğu “class” uzantılı dosyayı bulamaz. Bu hatanın meydana gelme nedeni yani Java yorumlayıcısının “class” uzantılı dosyayı bulamama nedeni, package anahtar kelimesi ile işaret edilen klasörün içinde bulunan klasörün bir alt klasörü olduğunu varsaymasıdır. Bu sorunun çözümü, çalıştırma işlemini bir üst klasörde yapmaktır. Ancak bir üst klasöre geçilince söz konusu bytecode dosyası artık alt klasörde olduğu için bunun aşağıda yapıldığı şekilde belirtilmesi gerekir. Yani çalıştırılacak sınıf adından önce paket adını yazmak gerekiyor. Hazırlanan Paketleri NetBeans Projesinde Kullanmak Şimdiye kadar paketler hakkında bilgi verirken NetBeans ve Eclipse’den yararlanmadık. Paket hazırlarken yukarıda yapıldığı gibi Not Defteri’ni kullanmak yerine kod yazarken kolaylıklar sağlayan NetBeans ve Eclipse gibi IDE’lerden yararlanmayı tercih edeceksiniz. Paket kavramının iyice anlaşılmasını sağlamak için önceliği bu IDE’lere vermedik. Şimdi yukarıda Not Defteri ile hazırladığımız paketleri NetBeans ile hazırlayacağımız uygulamalarda kullanacağız. Bu amaçla yeni bir Java uygulaması hazırladık. “Applicaiton1” adınız verdiğimiz bu uygulamanın, “paket1” adında bir pakete ve bu pakette ise “JFrame1” adında bir sınıfın olmasını sağladık. Bölüm 4: Paket Hazırlamak ve Kullanmak 97 Mevcut bir Java paketinizi NetBeans ile hazırladığınız uygulamada kullanmak istiyorsanız NetBeans penceresinin sol tarafına yuvalanmış olan Project penceresinde Source Packages seçeneğine ait kısayol menüsünden Properties komutunu vermelisiniz. Source Package seçeneğine ait kısayol menüsünden bu komut verildiğinde aşağıda verilen Project Properties diyalog kutusu ekrana gelmektedir. Bu diyalog kutusunu projenin paketleri üzerinde işlem yapmak üzere ekrana getirdiğimiz için Sources adı altında bir araya getirilen seçenekler görüntülendi. 98 Java Programlama Dili Diyalog kutusunun sağ tarafında Source Package Folders başlıklı liste kutusunda paket olarak kullanılan klasörler listelenmektedir. NetBeans ile hazırlanan uygulamalarda paketler uygulamaya ait klasörün içinde yer alan “src” klasörüne yerleştirilmektedir. Daha önce Not Defteri ile hazırlayıp “\paketler” klasörüne yerleştirdiğimiz paketleri NetBeans ile hazırladığımız bu uygulama dahilinde kullanmak isteğimiz için Add Folder düğmesini tıklayıp ekrana klasör seçimi yapılan Add Source Folder diyalog kutusunu getirdik. Bu diyalog kutusunda paketlerimizin olduğu klasörü seçip Open düğmesini tıklayınca seçtiğimiz klasör Project Properties diyalog kutusunda listelenmeye başlandı. Project Properties diyalog kutusunu OK düğmesi ile kapatınca NetBeans’ın Project penceresi aşağıda verilen şekle dönüştü. Bölüm 4: Paket Hazırlamak ve Kullanmak 99 Bu andan itibaren bu uygulama dahilinde “aritmetik”, “aritmetik.donusumler” ve “stringler” adlı paketlerdeki sınıflardan yararlanmak mümkün hale gelir. Örnek olması için “JFrame1” sınıfının görsel yapısının üzerine bir JButton ve JTextField nesnesi yerleştirip jButton nesnesi çalışma anında tıklandığında işletilecek metodu aşağıdaki gibi düzenledik. private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { int[] dizi = new int[3]; dizi[0] = 10; dizi[1] = 20; dizi[2] = 30; aritmetik.Diziler nesne1 = new aritmetik.Diziler(); int sonuc = nesne1.diziTopla(dizi); jTextField1.setText(Integer.toString(sonuc)); } Kodun başında import deyimi ile “aritmetik” adlı paketteki sınıflardan yararlanmak istiyoruz deseydik “Diziler” tipinde nesne hazırlarken sınıf adından önce paket adını yazmak zorunda kalmazdık. NetBeans İle Paket Hazırlamak Başka uygulamalarda kullanmak istediğiniz Java paketlerini NetBeans ile hazırlayabilirsiniz. Bu konuyu anlatmak için önce bir Java projesi hazırlayacağız. Bu amaçla NetBeans’i başlatıp File menüsünden komut verip New Project diyalog kutusunu ekrana getirdik. 100 Java Programlama Dili New Project diyalog kutusunda Java Application şablonunu seçip Next düğmesini tıklayıp aşağıda verilen New Java Application diyalog kutusunu ekrana getirdik. Hazırlamak istediğimiz projeye "Paketler" adını verdik. “Paketler” adını verdiğimiz projenin “C:” sürücüsünün kök klasörü içinde hazırlanması için ayarlama yaptık. Bu sırada Finish düğmesi tıklanırsa NetBeans, aşağıdaki gibi herhangi bir paket ve sınıfa sahip olmayan bir proje hazırlar. Bölüm 4: Paket Hazırlamak ve Kullanmak 101 Bu projeyi hazırlama amacımız, başka projelerde kullanmak üzere bir paket hazırlamak olduğu için Source Packages seçeneğine ait kısayol menüsünden Java Package komutunu verip New Java Package diyalog kutusunun ekrana gelmesini sağladık. Aşağıda verilen ekran görüntüsünü hazırlamak istediğimiz paketin adını yazdıktan sonra aldık. Bu sırada Finish düğmesi tıklanırsa, NetBeans tarafından bir paket, daha doğrusu içeriği boş bir klasör hazırlanır. Bu sırada aynı şekilde başka paketler veya mevcut paketler için sınıflar hazırlayabilirsiniz. Tabi mevcut bir paketin içinde başka paketler hazırlamak mümkündür. Konunun ayrıntılarını ortaya çıkarmak için önce ikinci bir paket, sonra bu paketlerin içinde birer sınıf hazırladık. Aşağıda verilen ekran görüntüsünü aldığımız sırada paket1’deki Simif1’in içeriği görüntüleniyordu. 102 Java Programlama Dili Hazırladığınız paketlerdeki sınıfları derlemek istiyorsanız Run menüsünden Build komutunu vermeniz yeterlidir. Derleme sonucu hazırlanacak “class” uzantılı dosyalar “Build” klasörüne yerleştirilir. Bu paketleri içerdikleri “class” uzantılı dosyalarla birlikte alıp istediğiniz gibi kullanabilirsiniz. https://www.seckin.com.tr/kitap/971165446 Bölüm 4: Paket Hazırlamak ve Kullanmak https://www.seckin.com.tr/kitap/851995191# 103 104 Java Programlama Dili https://www.seckin.com.tr/kitap/766449848# Kitabın Önsözü Java konulu çok sayıda kitap yayınlanıp piyasaya verilmişken, Youtube’da Java hakkında bilgi verme kaygısıyla çekilen binlerce video varken, blog sitelerinde onbinlerle ifade edilecek sayıda Java konulu makale yayınlanmış iken bu kitabı neden mi yazıp yayınladık? Nedeni son derece basit; kolay okunan, ilk okumada anlaşılan Java kaynağı ihtiyacının olduğunu düşünmemizdir. Bu nedenle bu kitabı yazarken, önceliğimiz kolay okunmak ve hemen anlaşılmak oldu. Konular, bu kaygı gözetilerek sıralandı. Henüz anlatılmayan kavramlardan söz edilmemeye, işlevleri ve özellikleri hakkında bilgi verilmemiş sınıfları kullanmamaya dikkat ettik. Bu kitapta, öğrenilmesi zaman alan Java programlama diliyle ilgili olarak yazılan her cümlenin ilk okumada anlaşılmasını amaçladık. Bu kitabı okumaya, dolayısıyla Java öğrenmeye başlamadan önce hem NetBeans hem de Eclipse'i indirip kullandığınız bilgisayara kurmanız önerilir. Çünkü kitapta Java'nın temel özellikleri anlatılırken bazen Eclipse bazen de NetBeans kullanıldı. Bu kitabı bitirip Java konusunda bilgi sahibi olduğunuzda istediğiniz IDE’yi tercih edip uygulamalarınızı onunla geliştirmeye devam edebilirsiniz. Bu kitabı okumaya başlamadan önce IDE’nizi seçtiyseniz kitapta diğer IDE’yle ilgili olarak söylenenlere Bölüm 4: Paket Hazırlamak ve Kullanmak 105 kayıtsız kalabilirsiniz. Örneğin NetBeans kullanıyorsanız, Eclipse kullananlara yönelik olarak MySQL veritabanları üzerinde işlem yaparken gerek duyulacak sürücüyü mysql.com’dan indirip kurma işleminin anlatıldığı sayfayı okumadan atlayabilirsiniz. Son yıllarda yayınlanan kitapların yanında ilgili konuların anlatıldığı videolar veriliyor. İnsanlar bu video filmleri izleyerek programcılıkla ilgili konuları daha kolay anlayacağını düşünüyor. Bize göre, bu kitabı okuyup Java öğrenmeye çalışmak, Java’yla ilgili olarak çekilen videoları izlemekten daha verimlidir, daha anlaşılırdır. Bu kitabı yazarken öncelikli hedeflerimizden birisi şuydu: Java programlama diliyle ilgili olarak bu kitapta bulunan herhangi bir konuyu okuyanların başka kaynaklara bakma ihtiyacını azaltmaktır. Başka bir deyişle bu kitabı okuyan birisinin okuduğunu anlamadığı için başka kaynaklara başvurmak zorunda kalmasın istedik. Bu kitabı yazarken kullandığımız bilgisayarda Windows kuruluydu. Bu nedenle kitap dahilinde kurulan bazı cümlelerde ortamın Windows olduğu vurgulandı. Konu Java kodu yazmak olduğunda kullanılan işletim sisteminin Windows, Mac veya Linux olmasının koda olan etkisi yok gibidir.