title: Java Dersleri 2 - Sınıf Kavramı ve Yapısı (Class Structure) link: http://orhanbalci.net/tr/?p=30 author: Orhan Balci description: post_id: 30 created: 2008/09/13 12:47:13 created_gmt: 2008/09/13 10:47:13 comment_status: open post_name: java-dersleri-2-sinif-kavrami-ve-yapisi-class-structure status: publish post_type: post
Java Dersleri 2 - Sınıf Kavramı ve Yapısı (Class Structure)
[caption id=“attachment_790” align=“aligncenter” width=“600” caption=“Java Dersleri 2”][/caption] JDK kurulumunu ve derleyici kullanımını öğrendikten sonra kod geliştirmeye başlayabiliriz. Kod geliştirmeye başlamanın ilk adimi olarak Java’nın yapıtaşı olan sınıf (class) kavramını öğreneceğiz. Gerçek hayattaki kalıpların yazılım dünyasındaki karşılıkları sınıflardır. Sınıflar yazılım içerisinde tanımlamak istediğimiz nesneler için şablon görevi görürler. Nasıl ki gerçek hayatta her nesnenin belirli özellikleri vardır ve her nesne belirli aksiyonları gerçekleştirir, yazılım dünyasındaki nesnelerinde aynı şekilde özellikleri vardır ve belirli işlevleri yerine getirirler. Genel olarak bir Java sinifinin yapısı şu şekildedir : [Paket Deklerasyonu] (package) [Dış Kütüphane Referansları] (import) [Sınıf Yorum Bloğu] (/***/) [Sınıf İmzası] (class extends implements) { [Sınıf Değişkenleri](int double ... MyClass) [Metod Yorum Blokları] [Sınıf Metodları] }
Bu yapının koda dökülmüş haline göz atalım : [java] package net.orhanbalci.mp3tagreader; //Paket Deklerasyonu import java.io.DataInputStream; //Dış Kütüphane Referansları import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.util.logging.Level; import java.util.logging.Logger; /** * Bu sınıf MP3 dosyaları içindeki ID3 bilgi etiketlerini //Sınıf Yorum Bloğu * okumaya yarar. * @author 04000041 */ public class Mp3TagReader { //Sinif İmzası public static long readMp3Tag() throws FileNotFoundException, IOException { //Sınıf Metodu DataInputStream dis = new DataInputStream(new FileInputStream(“deneme.mp3”)); long availableBytes = dis.available(); long tagLocation = availableBytes - 128; dis.skip(tagLocation); … dis.close(); return tagLocation; } public static void writeMp3Tag(long tagLocation) throws FileNotFoundException, IOException { RandomAccessFile raf = new RandomAccessFile(“deneme.mp3”, “rw”); String title = “Hasanova”; raf.seek(0); raf.seek(tagLocation + 3); raf.write(title.getBytes(), 0, title.getBytes().length); raf.close(); } public static void main(String[] args) { //Sınıf Metodu try { long loc = readMp3Tag(); writeMp3Tag(loc); } catch (FileNotFoundException ex) { Logger.getLogger(Mp3TagReader.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Mp3TagReader.class.getName()).log(Level.SEVERE, null, ex); } } } [/java] Şimdi teker teker yukarıda bahsettiğimiz şeyleri anlamaya çalışalım. Paketler yazılımımızdaki sınıfların gruplanmış halidir. Yazılım mimarisini oluşturmada yardım sağlarlar. Genellikle birbiriyle ilintili olan ve hep birlikte yazılımın belirli bir gereksinimini karşılayan sınıflar aynı paket altına toplanır. Paket denilince akla karmaşık gibi gelsede dosya sisteminde birer klasörden ibarettirler. Yani yeni bir paket oluşturduğumuzda yazılım geliştirme ortamımız bizim için yeni bir klasör oluşturur be bu paket içindeki sınıflara ait .java dosyaları aynı klasör içinde tutulurlar. Örneğin : [java] package net.orhanbalci.mp3tagreader [/java] yukarıdaki paket deklarasyonunu içeren sınıfa ait .java dosyası net klasörünün içinde bulunan orhanbalci klasörünün içinde bulunan mp3tagreader klasörünün içindedir. Bu noktada paket isimlendirme genel geçer kuralına da değinmek gerekir. Gördüğünüz üzere paketime isim verirken net.orhanbalci ile başladım. Bu reklam yapmak amacıyla yapılan bir isimlendirme değildir :). Dünya çapında farklı yerlerde aynı isimle yazılan sınıfların birbirleriyle karıştırılmaması için alan adlarının tersine yapılmış paket adlandırma şablonu kullanılmaktadır. Şu anda gezinmekte olduğunuz alan adı da bana ait olduğu için paket isimlendirmeme bu şekilde başlıyorum. Paketler erişim seviyelerinin belirlenmesinde de rol oynarlar. İkinci harici kütüphanelere nasıl referans verildiğini öğrenelim. Herhangi bir kütüphanede bulunan sınıfı kullanabilmemiz için o sınıfı kullanacağımızı belirtmeliyiz. Aksi takdirde yazılım içinde her referans verişimizde tüm ismini kullanmamız gereklidir. Bu kuralı şöyle örnekleyelim : [java] RandomAccessFile dosya1 = new java.io.RandomAccessFile(“rw”,“deneme.mp3”); [/java] Bu örnekte yazılımımızda java.io paketinde bulunana RandomAccessFile adlı sınıfı kullanmak istiyoruz. Herhangi bir harici kütüphane referansı olmaksızın kullanım şekli yukarıdaki gibi tüm paket yolunun yazılması şeklinde olacaktır oysaki sınıfımızın başına : [java] import java.io.RandomAccessFile; [/java] harici kütüphane referansını koysaydık sınıf içerisinde [java] RandomAccessFile dosya1 = new RandomAccessFile(“rw”,“deneme.mp3”); [/java] şeklinde bir kullanıma gidebilirdik. Buradaki sıralamada dikkat etmemiz gereken birkaç husus var. Eğer sinifimiz herhangi bir paket içinde bulunacaksa Paket Deklerasyonunu sinifin en başında yapmamız zorunludur. Paket deklerasyonundan sonra ise dış kütüphane referansları gelir. Tabi eğer herhangi bir dış kütüphane kullanılmayacaksa bunlara gerek yoktur. Sınıf değişkenleri ile metodlarının yazımında herhangi bir sıralama söz konusu değildir. Yani önce metodları tanımlayıp sonra da değişkenleri tanımlayabilirsiniz. Üzerinde durmamız gereken diğer bir hususta sinif ismimizle dosya ismimizin aynı olması gerektiğidir. Yani QueryManagerBase sinifimizi QueryManagerBase.java dosyamızda bulundurmalıyız. Bu konuda bir kaç istisna var bunlara ileride değinilecektir
Comments
ercan: biraz daha kod uzerinden anlatim daha iyi olurdu sanki biraz da kısa olmus tesekkurler.
Tayfun Yaşar: yeni başlayanlar için hiç açıklayıcı değil misal ben :)
admin: Bu makaleyi toparlayıp yeniden yazmam gerek. Eksik olduğunun farkındayım zira oylamada en düşük oy alan makale. Yorumunuz için teşekkürler.
osman: hic aciklayici olmamis bence, onceden birseyler bilmeyen birisi cok zorlanir. ornekler uzerinden anlatilmasi da yarar saglar…
hakan: Hocam ellerinize sağğlık ama benim gibi javayı en baştan öğrenmeye kalkanlar için sınıf kavramı baya baş döndürüyor ve bu kadar kısa sınıf kavramından bişe anladığımı söyleyemiyecem ama packet kavramını anladım:D :smile: :smile:
admin: Siteyi maalesef çok sık güncelleyemiyorum. Örneklerin çalışmamasına gelince genellikle derslerde tamamen çalışan bir örnek vermek yerine sadece konuyu anlatan kod parçaları veriyorum ki okuyan insan alsın bunu çalışır hale getirmek için çaba sarfetsin ve bişeyler öğrensin. Çalışan kod verdiğimde durum bunun tam tersi oluyor. Son olarak bilgisayarım bozulduğu için siteyle ilgilenemiyorum. Bilgisayarım tamir olsun sizin için bu makaleyi elden geçireyim. Hatta video ders şeklinde bi ekleme yapabilirim.
erdo: tmm ii guzelde yeni baslayanlar ıcın kafa karıstırıcı.oyle değilmi. yine de tesekkur ederım:))
iicocuk: Hocam, teşekkürler eline sağlık ama arkadaşlar 2009 yılından beri “açıklayıcı olmamış, bilmeyenler zorlanır” şeklinde açıklamada bulunmuşlar. siz de 4 Aralık 2009’da bu makaleyi toplayıp yeniden yazmam gerek demişsiniz ama aynı duruyor :) siteye yeni gelenler (benim gibi) hala anlamıyor. Kodlar da çalışmıyor zaten “Could not find main class” hatası veriyor. Hevesimiz kaçmasın yeniden el atar mısın bi zahmet. Tabi onca dehşet ötesi projeden (http://orhanbalci.net/tr/?page_id=209) vakit bulursan. iyi günler.
admin: Kafanızın karışması normal. İnternette çok fazla bilgi kirliliği var. Bunu önlemek için tek bir kaynağı takip etmenizde fayda var. Elektronik programlama ile nesne odaklı programlamanın mantıkları tamamen farklıdır. Elektroniğe yönelik birşeyler öğrenmek istiyorsanız PIC programlama ve C dillerini öğrenebilirsiniz.
devkartal: Ustad ,slm kısaca yazılım programla vs konuları hiç bilmiyorum desem yalan olmaz,Java programla konusu ilgimi çekti ve merakımdan bu java nedir derken yazılım programclık vs konular hakkında epey bir yazı okudum ufak tek bir şeyler anlamaya çalıştım diyebilirim java ile ilgili pek çok makalede okudum fakat ya bende bir sorun var yada farklı anlatımlar yuzunden epey kafam karıştı bu java ile aslında kişisel fikrim olacak, nesne geliştirme kısmı ilgimi çekmişti fakat web uygulamaları da yapıldıgını biraz ogrenmiştim yeni ve bu konu ya uzak birsi olduğuma gore nerden başlamak gerekir daha çok elektronik teknoloji geliştirme gibi konularına uygun bir programla hangisi java mıdır bu işin adresi yoksa başka dillermi sizden yardımcı olmanız istiyorum . Teşekkur ederim saygılarımla