Java Dersleri 2 – Sınıf Kavramı ve Yapısı (Class Structure)

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 :

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);
        }
    }
}

Ş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 :

package net.orhanbalci.mp3tagreader

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 :

RandomAccessFile dosya1 = new java.io.RandomAccessFile("rw","deneme.mp3");

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 :

import java.io.RandomAccessFile;

harici kütüphane referansını koysaydık sınıf içerisinde

RandomAccessFile dosya1 = new RandomAccessFile("rw","deneme.mp3");

ş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

İlgili Yazılar:

  1. Java Dersleri 16 – Enum Yapısı Java da enum yapıları 1.5 versiyonuyla birlikte gelmiştir. Bu versiyondan...
  2. Eclipse Video Ders (Screencast) #2 Extract Super Class Refactoring Video dersi izlemek için resme tıklayın. Bunu del.icio.us 'da paylaşın...
  3. Java Dersleri 18 – Network Programlama – UDP Bu makalede Java’nın network programlama kabiliyetlerinden bahsedeceğim. UDP protokolü uygulamalar...
  4. Kd Ağacı (Kd Tree) Veri Yapısı Görselleştirmesi Aşağıdaki resme tıklayarak uygulamalı olarak kd ağaç veri yapısına değerler...
  5. Java Dersleri 15 – Koleksiyon API (Collection API) Map Map arayüzü anahtar-değer ikililerini bir arada tutmak için tasarlanmıştır. Matemetikteki...

  1. biraz daha kod uzerinden anlatim daha iyi olurdu sanki biraz da kısa olmus tesekkurler.

  2. yeni başlayanlar için hiç açıklayıcı değil misal ben :)

  3. 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.

  4. hic aciklayici olmamis bence, onceden birseyler bilmeyen birisi cok zorlanir. ornekler uzerinden anlatilmasi da yarar saglar…

Fikrin geldiyse buraya yaz


[ Ctrl + Enter ]