Farklı bir soyutlamaya ihtiyacımız olduğu ortaya çıkıyor. Bir önceki yazıma bakın lütfen…

Öncelikle sadece düzgün çokgenler ve yıldızlar değil bütün şekilleri kullanabilmek istiyorum. Ama istediğim zaman da düzgün çokgen ve düzgün yıldızlar yapabilmek istiyorum. O zaman yapılacak şey çok basit: Sekil isminde bir class‘ım olsun ve içinde Nokta‘ları barındırsın ama bazı özel şekil fabrikaları kullandığım zaman bunlar bana çokgenleri ve yıldızları versin.

Tekrar Türkçe class isimlerine döndüm kusura bakmayın. Galiba böyle daha anlaşılır oluyor.

Sekil içinde bir sürü Nokta barındırıyor

Şekil noktalardan oluşmuş bir agregasyon. Bu agregasyonu Array class’ı ile yapacağız.

Bunun kodu kabaca şöyle olacak:

class Sekil {
  Array noktalar;

  public void Sekil {
    noktalar = new ArrayList();  // Torbayi hazirla
  }
  .....

  // bu metod seklime yeni bir nokta ekler
  public void noktaEkle (Nokta bunuEkle) {
    noktalar.add(bunuEkle);
  }
}

Array ve ArrayList programlama dilimizin içinde bulunan bir tür torba. İçlerinde her türlü nesneyi barındırabiliyorlar. Ben noktalar isimi verdiğim bu torbanın içine bu şekli oluşturacak bütün Nokta’ları atabiliyorum. Bunu da noktaEkle metodu ile yapıyorum.

Benim şekillerim içlerinde kesinlikle düzgün bir çokgeni oluşturmak veya düzgün bir yıldızı oluşturmak bilgisini taşımıyor. İstediğim şekli oluşturmak konusunda özgürüm. İstersem rastgele üç noktayı şeklimin içine atarım ve onlar bir şekil oluşturular.

Çokgen oluşturmak için başka bir class kullanacağım. Bu yeni class‘ım özel bir şekil fabrikası olacak. Öyle ki, bu fabrikanın oluşturduğu şekiller hep düzgün (eşit kenarlı) çokgenler olacak.

Yani CokgenFabrikasi class‘ı bana istediğim sayıdaki Nokta‘yı yaratıp bunları bir Sekil class‘ının içine yerleştirip verecek.

CokgenFabrikasi'nin çalışması

Aynı yolla bir de YildizFabrikasi tanımlayabilirim ve bu fabrika bana içinde bir yıldız şeklini verecek şekilde koordinatları belirlenmiş noktalardan oluşur.

Örnek olarak CokgenFabrikasi‘nin kodunu kabaca görelim:

class CokgenFabrikasi {
  CokgenFabrikasi () {   }   // Bos bir constructor

  public Nesne yarat(float ycap, int kenarSayisi, float kaciklik) {
    Nesne yeniNesne = new Nesne();
    // kenar sayisi, yaricap ve kaciklik'a gore noktalari yarat
    // yaratilan noktalari yeniNesne'nin icine yerlestir

    return yeniNesne;  // ve bu nesneyi gönder
  }
}

Bütün detayları burada vermiyorum. Bunları daha sonra dropbox’a yerleştireceğim.

Ama neden şimdi değil çünkü daha yapacak şeyler var. Henüz kavramsal tasarımım bitmedi. Çünkü başka dertlerim daha var. Bütün dertlerimi çözemedim.

Çok yakında!