equals() metodunu test etme
04 February 08, Monday @ 17:40
Yazdığınız herhangi bir metot gibi equals() metodunuzu da test etmeniz mümkün. Bunun için uzun süre uğraşmanız gerekecek. Sizi bu uğraştan ve zaman kaybından kurtarmak için geliştirilmiş JUnit yazdığınız kodu debug etmek için çok kullanışlı bir araç.
Junit yazdığınız kodları tekrar tekrar test edebileceğiniz bir çalışma ortamıdır. Testleri yazarken kullanabileceğiniz sınıflar RecursiveTestSuite, EventCatcher, OrderedTestSuite, EqualsTester ve BaseTestCase.
Benim ilgimi çeken EqualsTester sınıfı. Bu sınıf ile yazdığınız equals() metodunun doğru çalışıp çalışmadığını kontrol etme şansına sahip olursunuz. Metodun, dört önemli özelliğe sahip olup olmadığını ve aynı zamanda “equal” olan nesnelerin hash kodlarının aynılığını kontrol etmektedir.
EqualsTester sınıfının koduna buradan erişebilirsiniz.
Bunun yanı sıra, yazdığınız başka metotlar ve sınıfların testlerini JUnit ile gerçekleştirmek için detaylı bilgiyi Junit Cookbook'da bulabilrsiniz.
Tags:
Programlama dilleri
,
Comments:
0 (
Add your comment )
Java da equals() metodu
04 February 08, Monday @ 14:23
İlk olarak söylenmesi gereken şey “equals()” metodu ile “==” metodunun aynı şeyler olmadığı. “==” metodu referansların aynı nesneye işaret edip etmediğini karşılaştırır. Aslında “equals()” metodu da temelde aynı işlevi görür fakat “==” metodundan daha üstün donanıma sahip olarak geliştirebilir.
Java'nın Object sınıfına aittir ve aynı sınıfa ait “hashCode()” methodu ile doğrudan alakalıdır. “equals()” methodu dört önemli özelliğe sahiptir.
Reflexive: Bir “x” referansı verilfdiğinde x.equals(x) doğru(true) dönmelidir.
Symmetric: Verilen “x” ve “y” referansları için; x.equals(y)'nin doğru dönmesi için y.equals(x) dogru olmalıdır.
Transitive: Verilen “x”, “y” ve “z” referansları için, x.equals(y) true ve y.equlas(z) true dönüyorsa, x.equals(z)'de true döner.
Consistent : Verilen referansların eşilği, referanslar değiştirilmedikçe aynı kalmalı. Diğer bir değişle x.equlas(y) true dönüyorsa, ya “x” ya “y” yada iki referans birden değişmeden metot yeniden uygulandığında dönen değer yine true olmalıdır.
Bunların yanı sıra önemli olan iki özellik daha vardır. Eğer bir “x” referansı boş(null) bir referans ile karşılaştırılacaksa metot false dönmelidir. İkinci özellik ise eğer verilen iki nesne eşit ise(Örnek: x.equals(y) true dönüyorsa) ikisininde hash kodu aynı olmalıdır. Bu açıdan equals() ve hashCode() metotları birbiri ile bağlantılıdır. Bu sebeple eğer ki metotlardan biri farklı bir amaç için yeniden yazılacaksa diğeri de gözden geçirilmelidir.
Yukarıda bahsedilenler Object sınıfına ait olan equals() metoduna ait özelliklerdi. Kendi equals() metodunuzu yazacağınız zaman yukarıda belirtilen özelliklere bağlı kalmanız gerektiği gibi dikkat edilmesi geren birkaç nokta daha var. Bunları madde madde açıklamak daha sağlıklı olur.
Öncelikle, verilen değişkenin o nesneye işaret edip etmediğini kontrol etmek amacıyla “==” metodunun uygulanması. Eğer işaret ediyorsa true dönmeli.
Nesnenin boş(null) olup olmadığı kontrol edilmeli.
Verilen nesnenin eşitlik metodunda kullanmak için uygunluğu test edilmeli. Metodun uygulanacağı referansların aynı sınıfa ait olup olmadığı,aynı sınıfa ait nesneler değillerde ait oldukları sınıfların yazılan “equals()” metodunu destekleyip desteklemediği kontrol edilmeli. Yukarıdaki kontrollerden geçerse true, geçemez ise false dönmeli.
“false” döndüğü takdirde, nesnelerin türlerini eşitlemek (type casting) gerekir. Burada eşitlemeden kasıt, aynı türe dahil etmek ya da metodu destekleyen sınıfların türüne değiştirmektir.
Örneğin,
x referansı int, y referansı float türünde olsun. Yazılan equals() metodu int türünü destekliyor ise y referansını int türüne çevirmek gerekir.
Sınıfa ait olan nesneyi (this.object) ve argümanın eşitliğini kontrol etmek gerekir. Eğer eşitlerse, true dönmelidir.
Yazdığınız “equals()” metodunun arguman türünü(type) değiştirmemelisiniz. Argüman olarak bir Object sınıfı nesnesi almalıdır. Eğer değiştirilirse, metodu üzerine yazmak(override) yerine, aşırı yüklemiş(overload) olursunuz. Derlerken herhangi bir hata ile karşılaşmazsınız ama, yazdığınız kodun doğru çalışmayacağını görürsünüz. Böyle olmasını sebebi ise şudur: sizin Java ile yazacağınız her hangi yeni bir sınıf zaten Object sınıfından miras alır. Yani aslında sizin kendi sınıfınıza ait yarattığınız bir nesne aynı zamanda Object sınıfına ait bir nesne gibi davranabilir. Bu sebeple argüman türünü değiştirmeniz gerekmez.
Yazdığınız equals() metodunun tüm gereklilikleri yerine getirip getirmediğini kontrol ettikten sonra hash kodunu değiştirmelisiniz.
Not: Yazdığınız kodu başka kullanıcıların anlaması için açıklama (comment) koymayı unutmazsanız iyi olur. :)
Kısaca özetlersek,
“equal” olan nesnelerin hash kodları aynı olmalıdır.
“deep comparison” (derin karşılaştırma :) ) yapmalıdır.
Boş (null) bir parametre ile karşılaştırıldığında false dönmelidir.
Yukarıda bahsedilen dört önemli özelliğe (symmetric, reflexive, transitive, consistent) sahip olmalıdır.
Not: Bir sonraki girdim de yazılan bir equals() metodunun nasıl test edileceğinden bahsedeceğim. :)
Tags:
Programlama dilleri
,
Comments:
0 (
Add your comment )
Yedekleme Araçları
25 January 08, Friday @ 17:50
Web tabanlı yedekleme araçlarını biraz inceledim. Bir çok uygulama arasından 5 tanesini seçerek bir doküman yazma çabası içerisindeyim. Henüz performans ve güvenlik testlerine girmediler ama kullanımları ile ilgili biraz bilgi vermek istedim.
Carbonite Inc. şirketine ait Carbonite. (http://www.carbonite.com/) Windows XP ve Vista'de çalışabilmekte. Kurulumdan sonra verdiğiniz yedekleme programına göre (yedekleme periyotları, yedeklenecek dosyalar) sadık bir şekilde çalışmaya devam eder. Ancak, yedeklediğiniz dosyaları restore ederken, biraz sıkıntı yaşayabilirsiniz,eğer ki kendi bilgisayarınız dışında bir yere geri yükleyecekseniz tabi :) Çünkü, dosyalarınızı geri alabilmeniz için programı tekrar indirip kurmanız lazım. Ücret bilgileri internet sayfasında detaylı bir şekilde bulunmaktadır.
Xdrive AOL şirketine ait bir yazılım. Xdrive kullanmak için http://www.xdrive.com/ adresinden üye olmak gerekli. Daha sonra Xdrive'ınıza heme giriş yapabiliyorsunuz. Yapacağınız her bir işlem için yeni bir pop-up açılıyor. Bu sebeple hem bilgisayarınız hem de internet bağlantınız yavaşlıyor. Restore için ya Xdrive masaüstü programını indirebilirsiniz lokal bir bilgisayara geri yükleme için. İkinci seçenek de internet üzerinden bağlanarak yedekleme yaptığınız gibi geri yükleme yapmaktır. Windows 2000, XP, Vista, Mac OS X işletim sistemlerinde kullanabilrsiniz. Ücret ile ilgili bilgileri http://www.xdrive.com/additional_storage.jsp adresinde bulabilirsiniz.
FilesAnywhere kullanabilmek için, Windows Vista, Windows XP, Windows 2003, Windows Mobile, Windows 2000, Windows NT, Windows 95/98/ME, Linux, Mac, RIM Blackberry, Palm OS işletim sistemlerinden birine ve, Internet Explorer 5.5 veya üzeri bir sürümü, Mozilla Firefox,Netscape,AOL Web Browser, Safari veya Opera internet tarayıcılarından birine sahip olmanız gerekmektedir. Yani sadece işletim sistemine değil, internet tarayıcısı da önemli :)
Tamamen internet ortamında yedekleme ve restore işlemleri hallediliyor. Sanki kullanımı en kolay olan uygulama bu:) Ayrıca avantajlı da.. Ofisten de evden de, nereden isterseniz dosyalarınıza erişebilme imkanı sunmakta. Ücretlendirme ve detaylı bilgi http://www.filesanywhere.com/ sayfasında bulunmakta.
IBackup sanki bir Carbonite gibi ama değil. IBackup için önce üye olmak sonra da programını indirmek lazım. Windows Vista, XP, 98, Me, NT/2000, Windows 2000 (Servers), Windows 2003 Server, Windows 2003 Web Edition ve Linux/Unix ortamlarında kullanabilirsiniz. Yanı sıra Internet Explorer 5.0 veya daha yüksek sürümü ya da Mozilla Firefox 2.0 sürümü bulunmalıdır. Kısmen de bir FilesAnywhere gibi davranmakta :) IBackup ile ilgili detaylı bilgiler ve kurulum demosu http://www.ibackup.com/ adresinde hizemete sunulmakta.
Son olarak, Mozy. Hakkında en çok yorum yapılan uygulama dolaysıyla da en çok kullanılmış veya kullanılmak istenmiş yedekleme aracı bu. Mozy Microsoft ürünleri olan işletim sistemlerinde çokça tercih edilen bir uygulama. Carbonite gibi çalışıyor programını indirmek ve kurmak lazım. Yedekleme ve geri yükleme işlemleri program arayüzü yardımı ile yapılmakta. Windows Vista, XP, 2000,Power PC ve Intel Macintoshlarda çalışabilmekte. Tercih edilmesinin en büyük sebebi ücreti gibi geldi bana. Aylık 4.95$ alınmakta ve sınırsız bellek kullanımı sunmakta. http://mozy.com/home sitesinden detaylı bilgilere ulaşabilirsiniz.
İncelerken en çok dikkatimi çeken, Linux ortamlarında çok fazla kullanılabilecek uygulama olmamasıydı. Yanı sıra, kullanılabilir olanların da kullanım talimatları yoktu, IBackup haricinde.
Mac Os 'da Linux ile kısmen de olsa aynı kaderi paylaşmakta. Gerçi, Mac Os kendine ait backup seçeneği olduğunu savunmakta. Halbuki, benim bulabildiğim bilgiler doğrultusunda, yedekleme işlemi ya harici bir sabit diske, ya iPod'a,özellikle “çok” önemli dosyları(!),iDisk'e ya da en klasik yöntem olarak CD veye DVD'ye yazmaktan ibaret. Yalnız iyi haber, Mac Os kullanıcıları için Mac Backups diye ücretli ve web tabanlı bir uygulama yok değil :) Detaylı bilgi http://www.macbackups.com/index.htm adresinde.
Tags:
Yedekleme Araçları
,
Comments:
0 (
Add your comment )
Perl
05 December 07, Wednesday @ 15:26
Merhaba,
Gecen hafta bir ödev için tavsiye edilen bir Perl tutoriali okudum. Gercekten cok keyifli okunan bir dokuman. Yanı sıra örneklerle Perl ile nasıl kod yazılır iyice anlatılmış. Dokumandan gozume çarpan ve çok hoşuma giden bir kaç alıntı:
" A loop, by its nature, continues. If that didn't make sense, start reading this sentence again."
"...You are throwing a huge party, someone is allergic to vodka, and this person has drunk from the punch bowl despite being assured by someone holding two empty bottles of Absolut that he was just using the bottles to convey yet more orange juice into said punch bowl. So you need a doctor, and so you write a Perl script to find one from the list of attendees, wanting the doctor's name to be the last item printed:"
Bu dokumana asağıdaki adresten ulaşabilirsiniz.
http://www.physics.rutgers.edu/%7Ekotliar/perltut.html
Tags:
Programlama dilleri
,
Comments:
0 (
Add your comment )