Java Başlangıç Durumuna Getirme ve Temizlik İşlemleri

Uygulamalardaki meydana gelen hataların önemlisebeblerinden biri, objelerin yanlış biçimde başlangıç durumlarınagetirilmesi diğeri ise temizlik işleminin doğru dürüst yapılmamasındır.Uygulamayı yazan kişi bilmediği kütüphaneye ait objeleriyanlış başlangıç durumuna getirmesinden ötürü çok sıkıntılar yaşanabilir. Diğerbir husus ise temizliktir , oluşturulmuş ve kullanılmayanobjelerin ,sistem kaynaklarında gereksiz yere var olması ile ortaya çıkan birproblemdir. Bu problem sistemin çökmesine sebep olabilecek kadarciddidir. Bu bölümde Java nın bu sorunları nasıl ele aldığınıinceliyeceğiz.

Başlangıç durumuna getirme işlemi (initialization) veyapılandırıcılar (constructor)

Bir objenin başlangıç durumuna getirilme işlemini , birsanatçının sahneye çıkmadan evvelki yaptığı son hazırlık gibi düşünebilirsiniz. Oluşturulacak olan obje kullanıma sunulmadan evvel bazı bilgilere ihtiyaçduyabilir veya bazı işlemleri gerçekleştirmesi gerekebilir.Tüm bu işlemleringerçekleştiği yer bir çeşit metod diyebileceğiz yapılandırıcılardır(constructor) , ama şunu hemen belirtelim yapılandırıcılar normal metodlardançok farklıdırlar .
Şimdi biraz düşünelim , elimizde öyle bir metod olacakki , biz bu metodun içersinde objemiz kullandılmadan evvel gereken işlemleriyapacağız yani objemizi başlangıç durumuna getireceğiz , ayrıca Java bu metodu obje oluşturulmadan hemen önce otomatik olacakçağırabilecek.
Diğer bir problem ise metodun ismidir . Bu metodun ismi öyleolmalıdır ki , bizim verebileğimiz metod isimleri ile çakışmamalı , artı , Javanın bu metodu otomatik olarak çağrıcağı düşünülürse , bu metod isminin Javatarafından daha evvelden biliniyor olması gerekmektedir.
Bu problemlere ilk çözüm C++ dilinde bulunmuştur.Çözümşöyledir , yapılandırıcı ile sınıfın isminin bire bir aynı olmasıdır(büyükküçük harf dahil), böylece Java hangi metodu çağırabileceğini sınıfınisminden tahmin edebilecektir. Ufak bir uygulama üzerinde açıklarsak.
ör-yapılandırıcı-1
class KahveFincani {   
 
  public KahveFincani() { 
    System.out.println("KahveFincani..");
  } 
}
 
public class YapilandirciBasitOrnek {  
  public static void main(String[] args) {
    for(int i = 0; i < 10; i++) 
      new KahveFincani(); 
    } // for
} 
Bu örneğimizde ardı ardına 10 adet KahveFincaniobjesi oluşturuyoruz . Dikkat ederseniz KahveFincani objelerinioluşturmadan evvel (ellerimizi Kahvefincalarının üzerine götürmeden) ,objelerimiz ekrana kendilerini tanıtan ifadeler yazdılar kısacası objelerimizeilk değerleri güvenli bir şekilde verilmiştir.
Dikkat edilmesi gereken ikinci husus iseyapılandırıcının(constructor) ismidir. Yapılandırıcının(constructor) ismiiçinde bulunduğu sınıf ismi ile bire bir aynıdır. Hatırlarsanız normaldemetod isimleri bir fiil cümlesi içermeliydi (dosyaAc() , openFile() ,dosyaOku() , readFile() , dosyaYaz() , arabaSur() ....vb ..) amayapılandırıcılar bu kuralın da dışındadır .Uygulamımızın çıktısıaşağıdaki gibidir.
KahveFincani..
KahveFincani..
KahveFincani..
KahveFincani..
KahveFincani..
KahveFincani..
KahveFincani..
KahveFincani..
KahveFincani..
KahveFincani..
Yapılandırıcılar , normal metodlar gibi parametrealabilirler.
ör-yapılandırcı-2
class YeniKahveFincani {
 
  public YeniKahveFincani(int adet ) {
      System.out.println(adet + " adet YeniKahveFincani");
  } 
}
 
public class YapilandirciBasitOrnekVersiyon2 { 
  public static void main(String[] args) {
    for(int i = 0; i < 10; i++) 
      new YeniKahveFincani( i );
     } //for
} 
Gönderdiğimizparametre sayesinde objemizin nasıl oluşacağını belirttebilmekteyiz.Örneğimizde olduğu gibi YeniKahveFincani objemizin ,oluşurken kaç adet olacağını söyliye biliyoruz.Uygulamamızın çıktısı aşağıdakigibidir .
0 adet YeniKahveFincani
1 adet YeniKahveFincani
2 adet YeniKahveFincani
3 adet YeniKahveFincani
4 adet YeniKahveFincani
5 adet YeniKahveFincani
6 adet YeniKahveFincani
7 adet YeniKahveFincani
8 adet YeniKahveFincani
9 adet YeniKahveFincani
Yapılandırıcılar(constructor), normal metodlarda kullandığımız değer döndürme mekanizmasına sahipdeğillerdir. Yapılandırıcı metodlardan herhangi bir şekilde değer döndürülemez, bu değer döndürülemez ibaresi normal metodlardaki void ifadesinekarşılık gelmez . Yapılandırıcılardan bir şekilde çıkmak istiyorsanız returnanahtar kelimesini kullanabilirsiniz.

Bir ismi birden çok metod için kullanmak- AdaşMetodlar-(Overloading)

İyi biruygulama yazmak her zaman iyi bir takım çalışması gerektirir.Takım çalışmasınınönemli kurallarından biri ise bir kişinin yazdığı kodu diğer kişinindekolaylıkla anlayabilmesinden geçer.Uygulamalardaki metod isimlerinin , metodiçersinde yapılan iş ile uyum göstermesi önemlidir. Bu sayade bir başka kişisadece metod ismine bakarak , içersinde oluşan olayları anlayabilme şansınasahiptir.
Örneğinelimizdeki bulunan muzik , resim ve text formatındakidosyaları açmak için metodlar yazmak istersek, bu metodların isimlerinin neolması gerekir ? muzik dosyasını açan metodun ismi muzikDosyasiAc() ,resim dosyası için resimDosyasıAc() ,text dosyasını açmak için ise textDosyasınıAc()gibi üç ayrı metod ismi kulanmak acaba ne kadar akıllıca ve pratik olur .Sonuçta işlem sadece dosya açmaktır , dosyanın türü sadece bir ayrıntıdır.Bir ismi birden çok metod için kullanmak(method overloading) size bu imkanıverebilmektedir , aynı tür işleve sahip olan metodların , isimlerininde aynıolabilme özelliği , bizi isim bulma sıkıntısından kurtarmaktadır.

ör-metod-overloading-1
class MuzikDosyasi {
    String m_tur = "Muzik Dosyasi" ;
}
 
class ResimDosyasi {
    String r_tur = "Resim Dosyasi" ;
}
 
class TextDosyasi {
    String t_tur = "Text Dosyasi" ;
}
 
public class MetodOverloadingDemo1 {
    public void dosyaAc(MuzikDosyasi md) {
        System.out.println( "Tur =" + md.m_tur );
    }
 
    public void dosyaAc(ResimDosyasi rd) {
        System.out.println( "Tur =" + rd.r_tur );
    }
 
    public void dosyaAc(TextDosyasi td) {
        System.out.println( "Tur =" + td.t_tur );
    }
 
    public static void main(String[] args) { 
              MetodOverloadingDemo1 mod1 = new MetodOverloadingDemo1();
              MuzikDosyasi  md = new MuzikDosyasi();  
              ResimDosyasi  rd = new ResimDosyasi();  
              TextDosyasi   td = new TextDosyasi();
 
              mod1.dosyaAc(md);
              mod1.dosyaAc(rd);
              mod1.dosyaAc(td);
    }
}

Uygulamanınçıktısı
Tur =Muzik Dosyasi
Tur =Resim Dosyasi
Tur =Text Dosyasi
Yukarıdakiörneğimizde görüldüğü gibi , aynı tür işlemleri yapan metodların isimleriaynıdır , peki Java aynı isimde olan bu üç metodu nasıl birbirinden ayırtetmekte ?
Adaş metodlar nasıl ayırt edilir ?
Java aynı isimde olan metodlar(overloaded methods) nasıl ayırt edebilmektedir ? Cevap olarak parameterlerinigöre diyebiliriz ....... , konuyu biraz daha açarsak , her metodun kendisineözel/tek parametresi veya parametre listesi olmak zorundadır.
ör-metod-overloading-1
public class MetodOverloadingDemo2 {
 
 
    public int toplamaYap(int a , int b){
        int sonuc = a + b ;
        System.out.println("sonuc - 1  = " + sonuc);
        return sonuc ;
    }
 
    public void  toplamaYap(int a , double b){
        double sonuc = a + b ;
        System.out.println("sonuc - 2 = " + sonuc);
    }
 
    public double  toplamaYap(double a , int b){
        double sonuc = a + b ;
        System.out.println("sonuc - 3= " + sonuc);
        return sonuc ;
    }
 
    public static void main(String[] args) { 
              MetodOverloadingDemo2 mod2 = new MetodOverloadingDemo2();
              mod2.toplamaYap(3,4);
              mod2.toplamaYap(3,5.5);
              mod2.toplamaYap(6.8,4);
    }
 
}
Buörneğimizde , üç adet toplamaYap() metodlarının, parametreleribirbirinden bir şekilde farklıdır. ilk toplamaYap() metodumuz iki adet inttipinde değişken alarak diğer adaş metodlardan ayrılmaktadır.
Geriye kalan iki adet toplamaYap() metoduise aynı tip parametreler almaktadır , double tipi ve int tipi , bu ikimetodu birbirinden farklı kılan , parametrelerin sırasıdır. Uygulamanınçıktısı aşağıdaki gibidir.
sonuc - 1 = 7
sonuc - 2 = 8.5
sonuc - 3= 10.8
Dönüş değerlerine göre adaş metodlar ayırt edilebilir mi?
Akıllarda şöyle bir soru belirebilir : "Adaşmetodlar dönüş tiplerine göre ayırt edilebilir mi ?",inceliyelim :
gösterim-1
void toplamaYap();
double toplamaYap();
Elimizdeiki adet aynı isimde , aynı işlemi yapan , fakat biri değer döndürmeyen(void)diğeri ise double tipinde değer döndüren metodların olduğunuvarsayalım.
gösterim-2
double y = toplamayap() ;
gösterim-2 için , Java bu metodlardanhangisini seçeçeğini tahmin edebilir (double toplamaYap() ).Pekiaşağıdaki gibi bir durum için nasıl bir yol izlenmesi gerekir ?
gösterim-3
toplamayap() ;
Değerdöndüren bir metodu kesinkes döndürdüğü tipe karşılık gelen değişkeneatama zorunluluğu olmadığı hatırlatalım . Kısacası bu koşulda Java hangimetodu cağrıcağını bilebilecektir.Bu yüzden dönüş tiplerine göre metodlarınayırt edilmesi Java dilinde kabul görmez. Metodların ayırt edilmesini sağlayantek şey parametrelerindeki farklılıktır.

Varsayılan yapılandırıcılar (Default constructors)

Eğeruygulamamıza herhangi bir yapılandırıcı koymasak Java bu işlemi kendi otomatikolarak yapmaktadır . Varsayılan yapılandırcıları ( parametresizyapılandırcılar , default constructor veya "no-args" constructor) içi boş bir metod olarak düşünebilirsiniz.
ör-default-constructor-1
class Kedi {
  int i;
}
 
public class VarsayilanYapilandirici {
   public static void main(String[] args) {
     Kedi kd = new Kedi(); //Varsayilan yapilandirici cagrildi
   }
} 
Javanınyerleştirmiş olduğu varsayılan yapılandırıcı açık bir şekilde gözükmemekdir.Açıksekilde görmek istersek.
ör-default-constructor-2
class Kedi { 
  int i;
  /* varsayailan yapilandirici
  Bu yapilandiriciyi eger biz koymasaydik 
  java bizim yerimize zaten koyardi */
  public Kedi() {}
}
 
public class VarsayilanYapilandirici {
  public static void main(String[] args) {
        Kedi kd = new Kedi(); //Varsayilan yapilandirici cagrildi
  }
} 
Büyünün bozulması
Eğerkendimiz yapılandırıcı metodlar yazarsak , Java bizden varsıyılanyapılandırıcı desteğini çekecektir.Bunun sebebi şöyledir ,eğer bir sınıfaait herhangi bir yapılandırıcı belirtmez isek Java devreye girip bizim adımızavarsayılan bir yapılandırıcı koyar , eğer -ki biz kendimize ait özelyapılandırıcılar tanımlarsak Java ya " ben ne yaptığımı biliyorum, lütfenkarışma" demiş oluruz .Bu durumda olası tüm yapılandırıcıları bizimyazmamız gerekir , şöyle ki ...
ör-default-constructor-3
class Araba {
        int kapi_sayisi;
        int vites_sayisi ;
 
        public Araba(int adet) {
               kapi_sayisi = adet ;
        }
 
        public Araba(int adet , int sayi) {
               kapi_sayisi =  adet ;
               vites_sayisi = sayi  ;
        }
}
 
 
 
public class VarsayilanYapilandiriciVersiyon2 { 
        public static void main(String[] args) {
               //Araba ar = new Araba();//!Hata! böyle bir yapılandırıcı artık yok;
               Araba ar1 = new Araba(2);
               Araba ar2 = new Araba(4,5);
        }
} 
Artık Arabasınıfını parametresiz yapılandırıcı (default constructor) ile çağıramayızveya çağırmak istiyorsak bunu kendimiz yazmak zorundayız.

this anahtarkelimesi

thisanahtar kelimesi , içinde bulunulan objeye ait bize bir referans döner.Bureferans sayesinde objelere ait global değişkenlere erişme fırsatıbuluruz , şöyle ki..
ör-this-1
public class TarihHesaplama {
    int gun , ay , yil ;
 
    public void gunEkle(int gun) {
         this.gun += gun ;
    }    
 
    public void gunuEkranaBas() {
        System.out.println("Gun = " + gun);
    }    
 
    public static void main(String[] args) {
        TarihHesaplama th = new TarihHesaplama();
        th.gunEkle(2);
        th.gunEkle(3);
        th.gunuEkranaBas();
    }
}
gunEkle() metodu sayesinde , parametre olarakgönderdiğimiz değer , global olan gun değişkeninin değerini arttırmaktadır.
Objeyeait global değişkeler , içinde bulundukları objeye ait değişkenler demektir ve objeiçersindeki her metod tarafından erişilebilirler . Yerel(local) değişkenler metodlarıniçersinde tanımlanırlar ve ancak tanımlandığı metod içersinden erişilebilirler.
Dikkat ederseniz , gun ismini hem globalhemde yerel değişken adı olarak kullandık .Burada herhangi bir yanlışlıkyoktur çünkü bunlardan biri objeye ait değişken diğeri isegunEkle() metoduna ait yerel (local) değişkendir. Bizim gönderdiğimiz değergunEkle() metodunun yerel değişkeni sayesinde objenin global olandeğişkene eklenmektedir. En sonunda gunuEkranaBas() metodu ile globalolan gun değişkeninin değerini görebilmekteyiz .
Özet olarak , gunEkle() metodunun içersindekullandığımız this.gun ifadesi ile TarihHesaplama objesininglobal olan değişkenine erişebilmekteyiz.Uygulamamızın çıktısı aşağıdakigibidir.
Gun = 5
Peki ,gunEkle() metodunun içersinde this.gun ifadesi yerine sadece gunifadesi kullansaydık sonuç nasıl değişirdi ?
ör-this-2
public class TarihHesaplama2 { 
    int gun , ay , yil ;
 
    public void gunEkle(int gun) {
         gun += gun ;
    }    
 
    public void gunuEkranaBas() {
        System.out.println("Gun = " + gun);
    }    
 
    public static void main(String[] args) {
        TarihHesaplama2 th = new TarihHesaplama2();
        th.gunEkle(2);
        th.gunEkle(3);
        th.gunuEkranaBas();
    }
}
Uygulamamızınçıktısı aşağıdaki gibidir.
Gun = 0
Globaldeğişken olan gun değişkenine herhangi bir değer ulaşmadığı için sonuçsıfırdır.
Metod cağrımlarımda this kullanımı
gösterim-4
class Uzum {
 
  void sec() { /* ... */ }
 
  void cekirdeginiCikar() { sec(); /* ... */ }
 
}
Bir metoduniçersinde diğer metodu çağırmak gayet basittir ve açıktır , ama sahne arkasındaderleyici (compiler), çağrılan bu metodun önüne this anahtar kelimesinigizlice sizin yerinize yerleştirmektedir.Yani bizim ekstradan this.sec() dememizinfazla bir anlamı yoktur.
Aşağıdakiörneğimiz this anahtar kelimesi ile içinde bulunduğumuz objeye ait nasılreferans aldığımızı çok net bir biçimde göstermektedir.
ör-this-referans
public class Yumurta {
 
  int toplam_yumurta_sayisi = 0;  
 
  Yumurta sepeteKoy() {
    toplam_yumurta_sayisi++;
    return this;
  }
 
  void goster() {
    System.out.println("toplam_yumurta_sayisi = " + toplam_yumurta_sayisi);
  }
 
  public static void main(String[] args) {
    Yumurta y = new Yumurta();
    y.sepeteKoy().sepeteKoy().sepeteKoy().goster();
  }
}
sepeteKoy()metodu Yumurta tipinde değer geri döndürmektedir. return this diyerek ,oluşturulmuş objenin kendisine ait bir referans değeri geri döndürüyoruz. sepeteKoy()metodu her çağrıldığında global değişken olan toplam_yumurta_sayisi değeri bir artmaktadır.Uygulamanın çıktısı aşağıdaki gibidir.
toplam_yumurta_sayisi = 3
Bir yapılandırıcıdan diğer bir yapılandırıcıyı çağırmak
Biryapılandırıcıdan diğer bir yapılandırıcı çağırmak this anahtar kelimesiile mümkündür.
ör-this-yapılandırıcı
public class Tost {    
 
    int sayi ;
    String malzeme ;
 
    public Tost() {
        this(5);
        //this(5,"sucuklu"); !Hata!-iki this kullanilamaz
        System.out.println("parametresiz yapilandirici");
    }
 
    public Tost(int sayi) {
        this(sayi,"Sucuklu");
        this.sayi =  sayi ;
        System.out.println("Tost(int sayi) " );
    }
 
    public Tost(int sayi ,String malzeme) {
       this.sayi = sayi ;
       this.malzeme = malzeme ;
       System.out.println("Tost(int sayi ,String malzeme) " );
    }
 
    public void siparisGoster() {
        //this(5,"Kasarli"); !Hata!-sadece yapilandiricilarda kullanilir
        System.out.println("Tost sayisi =" + sayi + " malzeme =" + malzeme );
    }
 
    public static void main(String[] args) {
        Tost t = new Tost();
        t.siparisGoster();
    }
}
 
Biryapılandırıcıdan, this ifadesi ile diğer bir yapılandırıcıyı çağırırkendikkat edilmesi gereken kurallar aşağıdaki gibidir .
· Yapılandırıcıiçersinden , diğer bir yapılandırıcıyı çağırırken this ifadesi ( this(sayi,"Sucuklu") ) , herzaman ilk satırda yazılmalıdır.
· Herzaman yapılandırıcılar içersinden this ifadesi ile başka biryapılandırıcı çağrılır.
· Yapılandırıcılariçersinde birden fazla this ifadesi ile başka yapılandırıcı çağrılamaz.
Uygulamamızın çıktısı aşağıdaki gibidir
Tost(int sayi ,String malzeme)
Tost(int sayi)
parametresiz yapilandirici
Tost sayisi =5 malzeme =Sucuklu

Statik değişkenler (sınıf değişkenleri)

Sadece global olandeğişkenlere statik özelliğini verebiliriz , yerel değişkenlerin statikolma özellikleri yoktur. Global değişkenler tür olarak iki çeşit olabilir , statikolan global değişkenler ve objeye ait global değişkenler.Statik değişkenler, bir sınıfa aitolan tüm objeler için aynı hafıza alanında bulunurlar.
ör-statik-degisken-1
public class StatikDegisken {    
 
    public static int  x ; 
    public int  y ; 
 
 
    public static void ekranaBas(StatikDegisken sd ) {
       System.out.println("StatikDegisken.x = " + sd.x + " StatikDegisken.y = " + sd.y );
    }
    
 
    public static void main(String args[]) {
 
          StatikDegisken sd1 = new StatikDegisken();
          StatikDegisken sd2 = new StatikDegisken();
          x = 10 ;
          // sd1.x = 10 ; // x = 10 ile ayni etkiyi yapar
          // sd2.x = 10 ; // x = 10 ile ayni etkiyi yapar
          sd1.y = 2 ;
          sd2.y = 8; 
          ekranaBas(sd1);
          ekranaBas(sd2);
    }
}

StatikDegiskentipinde iki adetobje oluşturduk , daha sonra StatikDegisken sınıfına ait statik xdeğişkenine 10 değerini atadık. Artık oluşturulacak olan tüm StatikDegiskentipindeki objeler için bu x değeri ortaktır .


Şekil-1

Statik metodlar

Statikmetodlar (sınıf metodları) , objelerden bağımsız metodlardır , yani statik birmetodu çağırmak için herhangi bir obje oluşturmak zorunda değilizdir. Statik olmayanmetodlardan (objeye ait metodlar) , statik metodları rahatlıklaçağırılabilmesine karşın statik metodlardan obje metodlarını doğrudançağıramayız.
ör-statik-1
public class StatikTest {   
 
       public static void hesapla(int a , int b) {
           /*static metod dogrudan 
            obje metodunu cagiramaz */
            //islemYap(a,b);   // !Hata!  
       }       
 
       public void islemYap(int a , int b) {
           /*dogru , obje metodu static bir metodu cagirabilir*/  
           hesapla(a,b); 
       }
 
}

Bir metodun statik mi yoksa obje metodu mu olucağınıneye göre karar vereceğiz

Birmetodu statik olarak tanımlamamızın tek sebebi , obje oluşturmadan dahi ometodu çağırabiliyor olmamız mı ? Uygulama geliştiren kişilerinkafasında her zaman var olan bir soru , acaba hangi metodu statik tanımlasam ,hangisini obje metodu tanımlasam . Bu sorunun cevabı , sınıf metodları ileobje metodları arasındaki farkı iyi bilmekte gizlidir.
ör-statik-2
public class MutluAdam {
 
    private String ruh_hali = "Mutluyum" ;  
 
    public void ruhHaliniYansit() {
        System.out.println( "Ben  " + ruh_hali );
    }
 
    public void tokatAt() {
        if( ruh_hali.equals("Mutluyum" ) ) {
            ruh_hali = "Sinirlendim";
        } 
    }
 
    public void kucakla() {
        if( ruh_hali.equals( "Sinirlendim" ) ) {
            ruh_hali = "Mutluyum";
        } 
    }
 
     public static void main(String[] args) { 
        MutluAdam obj1 = new MutluAdam();
        MutluAdam obj2 = new MutluAdam();
        obj1.ruhHaliniYansit();
        obj2.ruhHaliniYansit();
      obj1.kucakla();
        obj2.tokatAt();
        obj1.ruhHaliniYansit();
        obj2.ruhHaliniYansit();
     }
}
 

ruhHaliniYansit(), tokatAt() ,kucakla() metodlarının hepsi obje metodlarıdır yani bu metodlarıçağırmak için MutluAdam objesi oluşturmalıyız.
MutluAdamtipindeki obj1 ve obj2 değişkenlerine MutluAdam objelerini bağladığımız anda bu iki objenin ruh halleri aynıdır fakat zaman geçtikçe her objeninkendine ait ruh hali değişti. obj1 değişenine bağlı olan MutluAdamobjesini kucakladim , böylece mutlu olmaya devam etti ama obj2 değişkeninebağlı MutluAdam objesine tokat attığım zaman mutlu olan ruh hali değişti vesinirlendi.
Objemetodları , objenin durumuna ilişkin işlemleri yapmak için kullanılırlarama statik metodlar (sınıf metodları) objelerin durumuna ilişkin genel birişlem yapmazlar , şöyle ki ....
ör-statik-3
public class Toplama {   
 
    public static double topla(double a , double b ) {
        double sonuc = a + b ;
        return sonuc ;
    }
}
Buörneğimizde görüldüğü üzere topla() metodunun misyonu sadece kendisinegelen iki double değerini toplamak ve sonucu geri döndürmektir. Objenin durumuile ilgili herhangi bir görev üslenmediği için statik metod (sınıf metodu)olarak tanımlanması gayet mantıklıdır.
Sonuç olarak eğer bir metod , objenin durumunailişkin bir misyon yükleniyorsa o metodu obje metodu olarak tanımlamamız enuygunudur , ama eğer bir metod sadece atomik işlemler için kullanılacaksa veobjenin durumuna ilişkin bir misyon yüklenmemiş ise o metodu darahatlıkla statik metod (sınıf metodu) olarak tanımlıyabiliriz.Uygulamalarınızda çok fazla statik metod kullanıyorsanız , stratejinizi baştanbir kez daha gözden geçirmenizi tavsiye ediyorum.

Yorumlar

Adsız dedi ki…
My coder is trying to convince me to move to .net from PHP.
I have always disliked the idea because of the costs.
But he's tryiong none the less. I've been using Movable-type on a number of websites
for about a year and am anxious about switching to another platform.
I have heard great things about blogengine.net. Is there a way I can import all my wordpress content into it?
Any kind of help would be really appreciated!

Feel free to surf to my page - anti cellulite treatment

Bu blogdaki popüler yayınlar

Soru ve Cevaplarla Kompanzasyon

Aktif Güç Nedir,Reaktif Güç Nedir

Sinusoidal AC dalga şekli, Tepe, ortalama, efektif(rms), değer tanımları...