Java Programlama

Soyutlama (Abstraction)

Soyutlama, nesneye yönelik programlamada bir sınıfı veya metodu soyut olarak oluşturma işlemi olarak tanımlanabilir.

Soyut sınıf

Soyut sınıf tıpkı normal bir sınıf gibi oluşturulur. Normal bir sınıftan tek farkı bir kopyasının elde edilemez olmasıdır. Ancak, soyut sınıftan başka bir snıf türetilebilir. Veri alanları, metotları ve constructor metotları aynen normal bir sınıfta olduğu şekilde tanımlanır.

Soyut bir sınıfın kopyası oluşturulamadığından, bu sınıftan başka bir sınıf türetilmediği sürece pratik olarak kullanımı pek mümkün değildir. Genellikle, kendisinden türetilen çocuk sınıflarda kullanılan ortak metotları içeren ana sınıflar, bu anlamda soyut olduğundan, tek başına kullanılmazlar.

Soyut bir sınıf tanımlamak için abstract ifadesi kullanılır.

/* personel.java : Soyut ana sınıf bildirimi (Bu sınıfın kopyası oluşturulamaz) */
public abstract class personel {
  /* Veri alanı bildirimleri */ 
  public String adi;   
  public String soyadi;
  public int yasi; 

  /* Soyut olmayan metod bildirimleri (Kod içerir) */
  public void setBilgi(String cadi, String csoyadi, int cyasi) {
    adi = cadi;
    soyadi = csoyadi;
    yasi = cyasi;
  } 

  /* Soyut metod bildirimleri (Kod içermez) */ 
  public abstract void yazdirBilgi(void);
}
/* ogretmen.java : Çocuk sınıf bildirimi */
public class ogretmen extends personel {
  public String brans;
  public int hizmet;

  /* Constructor metod */
  public ogretmen(String cadi, String csoyadi, int cyasi, String cbrans, int chizmet) {
    super.setBilgi(cadi, csoyadi, cyasi); 
    brans = cbrans;
    hizmet = chizmet;
  } 
    
  /* Üst sınıfta geçersiz hale getirilmiş metod */
  public void yazdirBilgi() {
    System.out.println("Okulumuz personeli: " + "Adı: " + adi + " Soyadı: " + soyadi + " Yaşı: " + yasi);
    System.out.println("Öğretmen: Branş: " + brans + " Hizmet yılı: " + hizmet);
  }  
}
/* javaprog.java */
public class javaprog {
  public static void main(String args[]){
    /* ogretmen sınıfına ait değişken bildirimi */
    ogretmen ogr = new ogretmen("Nedim", "Sakin", 35, "Matematik", 13);

    ogr.yazdirBilgi(); /* personel sınıfı fonksiyonu çağrılır */
  }
}

Yukarıdaki üç dosyanın aynı dizin içinde yer alması yeterlidir. Komut satırında aşağıdaki satırları yazdığınızda program derlenir ve çalışır:

C:\>javac javaprog.java
C:\>java -Dfile.encoding=Cp857 javaprog
Okulumuz personeli: Adı: Nedim Soyadı: Sakin Yaşı: 35
Öğretmen: Branş: Matematik Hizmet yılı: 13

Soyut metotlar

Bir ana sınıf içinde yer alan bir metodun kod içeriğinin ana sınıftan türetilen çocuk sınıflar içinde tanımlanmasını istediğinizde, bu metodu ana sınıf içinde abstract olarak tanımlayabilirsiniz.

Soyut bir metod tanımlamak için de abstract ifadesi kullanılır.

Bir sınıf içinde soyut olarak tanımlanan bir metodun sadece bildirimi yapılır. Metoda ait herhangi bir kod tanımlanmaz. Bildirimin sonuna noktalı virgül işareti konur.

public abstract void metod_adi();

Bir metodu soyut olarak tanımladığınızda:

  • Soyut metodun içinde bulunduğu sınıfta soyut olarak tanımlanmalıdır.
  • Soyut bir metodun yer aldığı bir ana sınıftan türetilen çocuk sınıflar, ana sınıfta yer alan soyut metotlar için bir kod tanımı yapmalı veya sınıfın kendisi soyut olarak tanımlanmalıdır.

Bir arayüzdeki tüm metotların zaten soyut olarak tanımlandığı kabul edildiğinden, bu metotların bildiriminde abstract ifadesi kullanılmaz.

Soyut sınıflar ve Arayüzler

Arayüzlerin aksine, soyut sınıflar statik olmayan veri alanları ve kodu tanımlanmış metotlar içerebilir. Bu şekilde tanımlanan soyut sınıflar, metotlar için kod tanımlanmış olası dışında, arayüzlerle benzerlik gösterir. Eğer bir soyut sınıf sadece soyut metod bildirimleri içeriyor ve metotlar için herhangi bir kod tanımlaması yapılmamışsa, bir arayüz olarak tanımlanmalıdır.