Bölüm 4 - Objects and Classes 2
Bölüm 4 - Objects and Classes 2
Bildiğimiz üzere Java'da sınıflar olmadan hiçbir şey yapamayız :)
Eğer ki objects ile çalışmak istersek öncelikle bunları bir construct (inşa etmemiz) gerek daha sonrasında ise bunların ilk durumlarını (initial statelerini) de belirtmemiz gereklidir.
Java programlama'da biz constructors kullanırız bir yeni instance of class oluşturabilmek için (sınıfın bir örneğini). Constructor bir özel methottur bu methot sayesinde bir object'leri başlatırız (initilize ederiz) ve Constructor'lar her zaman class ismi ile aynı isme sahip olmak zorundadırlar.
Örneğin Java üzerinde Date class'ını örnek alalım tabi bu deprecated oldu ama Object örneklerimiz için yeterli olur.
new Date();
Burda görüldüğü üzere biz new keywordünü kullanarka bir object construct ettik yani bir nesneyi inşa ettik ve bu object'de initialize oldu kendi içerisinde artık date ve time (tarih ve zaman) içermektedir. Bunu eğer ki biz bir method'a göndermek istersek;
System.out.println(new Date());
Eğer ki biz bir object'i variable üzerinde tutmak istersek;
Date rightNow = new Date();

Şimdi rightNow artık bir object variable (nesne değişkeni) oldu. Unutulmamalıdır ki; objects ve object variables arasında büyük bir fark vardır örneğin:
Date startTime; // Bu şu anda herhangi bir object'e referans veriyor
startTime bizim için bir object variable'sidir ve herhangi bir Date class'ına ait referans olabilir. Farkı kısaca şöyle değineyim; bu startTime bir variable'dı yani object değişkenidir, ama bir object değildir ve biz bu variable'i herhangi bir Date class'ına ait methodlar ile kullanamayız şöyle ki;
s = startTime.toString(); // Hata
çünkü biz startTime object variable'sini daha başlatmadık. 2 tane seçeneğimiz var tabi bunu initialize etmek istersek:
startTime = new Date();
ile initalize edersek artık yukarıdaki Hata yazan kısım artık hata olmayacaıktır çünkü startTime artık bir object'e referans veriyor. İstersek startTime'ı da başka bir Date object'ini tutan yere referansını verdirebiliriz.
startTime = rightNow;

Eğer ki bir object variable herhangi bir object'e referans vermesini istemiyorsak bunu null (boş) olarak atayabiliriz.
startTime = null;
Böyle yapabiliriz.
The LocalDate Class - LocalDate Sınıfı
Yukarıda gördüğünüz üzere Date class'ı artık deprecated oldu yani kullanılmıyor. Bunun yerine artık yeni nesil piyasada çoğu kişinin kullandığı LocalDate'yi kullanıyoruz.
Biz eğer ki LocalDate class'ında bir object construct etmek istersek bunun için new LocalDate() yazmamıza gerek yoktur çünkü bizim için bu class factory methods dediğimiz eğer ki bu methodu çağırırsak bizlere o class için bir object oluşturur ve döner bu süreçleri yapan bir method içerir biz de bunu kullanağız.
LocalDate.now();
bu bize yeni bir object construct eder. İstersek yıl-ay-gün da belirtebiliriz.
LocalDate.of(1999,12,31);
Tabi yapacağımız iş bu oluşturulan object'i bir object variable içerisinde tutmaktır.
LocalDate newYearsEve = LocalDate.of(1999,12,31);
İstersek yıl,ay ve günü' da başka bir primitive varible'de tutabiliriz.
int year = newYearsEve.getYear();
int month = newYearsEve.getMonthValue();
int day = newYearsEve.getDayOfMonth();
İstersek 1000 yıl ekleme yapalım.
LocalDate aThousandDaysLater = newYearsEve.plusDays(1000);
Mutator ve Access Methods (Mutator ve Accessor Methodlar)
Düşünelim ki şöyle bir method çağrrısı yaptık.
LocalDate aThousandDaysLater = newYearsEve.plusDays(1000);
Burda ne oldu ?
eğer ki biz newYearsEve'de plusDays(1000) methodunu çağırdığımızda ne yapar bu direkt olarak 1000 sayısını bizim object'imize eklemesini direkt olarak yapar mı ? Tabii ki hayır çünkü bu plusDays methoduna eklemeyi yaptıktan sonra artık yeni bir LocalDate döner ve döndüğünü biz artık aThousandDaysLate object variable'si ile yeni oluşan değeri alırız yani eski olarak kullandığımız 1999 yılı 2999 olduğunda artık bu böyle kalır yani newYearsEve hala 1999'dur yeni oluşan 2999'u da aThousandDaysLater ile aldık. Biz buna şunu diyoruz yani plusDays bizim için object'i mutate yapmaz. Eskiden kullanılan GergorianCalendar class'ına bi bakalım.
GregorianCalendar someDay = new GregorianCalendar(1999,11,31);
someDay.add(Calendar.DAY_OF_MONTH,1000);
Burda artık eklemeyi direkt olarak yapar ve object'in üzerindeki 1999'u 2999 yapıp değiştirir yani GregorianCalendar.add methodu bizim için bir mutator method'dur. Yani bu methodu çağırdıktan sonra artık someDay object değişti..
Bazı methodlar vardı bunlar da object'i herhangi bir şekilde değiştirme yapmadan bundan biz bilgiler alırız yada object'e erişiriz bu methodlar da access methodlar olarak isimlendirilir. Örneğin biz LocalDate.getYear() yani bu methodu yukarıda kullanmıştık işte bu methodlar bir accessor methottur.
LocalDate API
java.time.LocalDate
| Method | Açıklaması |
|---|---|
| static LocalDate now() | Şu an ki date'yi belirtmek için bir object bizim için construct eder. Factory method. |
| static LocalDate of (int year, int month, int day) | Bu sefer verilen date'yi belirtmek için bir object bizim için construct eder. Factory method. |
| int getYear() | |
| int getMonthValue() | |
| int getDayOfMonth() | Sırasıyla verilen tarihin yıl,ay ve gününü alır |
| DayOfWeek getDayOfWeek() | DayOfWeek class'ından belirtilen günleri alır getValue() methodu ise Monday (1) , Sunday (7) şeklinde tanımlanmıştır. |
| LocalDate plusDays(int n) | |
| LocalDate minusDays(int n) | Verilen n değerine göre tarih'e günü kadar ekleme yada çıkarma yapar. |