Özgür Web ve Teknoloji Günleri 2016

Herkese selam,

Yine kısa bir etkinlik sonrası yazısı yazıyorum. Etkinliklerden sonra hep blog yazmamın nedeni, böyle günlerin kayıtlara geçmesini istiyor olmam. Bu yıl "Özgür Web Teknolojileri Günleri" 22-23 Ekim'de Boğaziçi Üniversitesi'nde gerçekleşti.  Etkinliğe sadece ilk günü katılabildim ama dopdolu geçti.

Sunumlar 2 salonda paralel gerçekleşti. Ancak etkinliğe katılım çok fazla olduğu için salonlarda yer kalmadı. Kısa bir süre sonra da "Kendimi Şanslı hissediyorum" sınıfı açıldı. Burada, etkinliğe katılan herhangi birisi kısa ya da uzun anlatmak istediği ne varsa dinleyicilerle paylaşabiliyordu.

Benim ilk katıldığım sunum Halil Kaya ve Fatih Kadir Akın'ın "Belgelendirme Güdümlü Geliştirme" sunumuydu. Github'daki projelerimde belgelendirmeyi neden önemsemem gerektiği ile ilgili başka bir bakış açısı edindim diyebilirim.
Ardından Uğur Arıcı'dan "Modern Web Uygulamalarında Özgür Teknolojiler" sunumunu dinledim. 
Bu sunumdan sonra benim sunumum vardı. Ben de, Web Dünyasında Uluslararası Özgür Yazılım Fırsatları'nı anlattım. Bu sunumu yapmak için başvurmamın nedeni; böyle etkinliklere ilk defa katılıp, birşeyler yapmak isteyen ve nereden başlayacağı konusunda kafasında sorular olanlar için çevremde gördüklerimi, okuduklarımı ve kendi yaşadıklarımı anlatarak dinleyiciler için bir fikir oluşturmaktı. Sunumdan sonraki sorular, geri dönüşler beni çok çok mutlu etti.

Ardından Burak Can'ın "Elm Dili ile Fonksiyonel Programlama" sunumunu dinledim. Sunum sonunda bunu da bir denesem iyi olacak şeklinde ikna olmuştum. Boş bir vaktimde Elm'e vakit ayıracağım.
  Tabiki sunum araları hep aşırı süperli :)
Sunumları merak edenler buradan ulaşabilirler. 

Benim için yine çok harika geçen bir gündü. Yeni insanlarla tanıştım, az görebildiğim arkadaşlarımla görüştüm. Bir sonrakine siz de gelin. :)

30 Ekim 2016

Posted In: boğaziçi üniversitesi, istanbul, öwtg

Java’da Override Anotasyonu

Merhabalar,

Daha önce Java 8 ile gelen Optional sınıfından bahsetmiştim. Java ile ilgili ufak detay bilgiler vermeye devam edeceğim. Bu yazımızda Java Override anotasyonunun öneminden bahsedeceğim.

Java ile herhangi bir IDE kullandıysanız karşınıza mutlaka çıkmıştır. Bilmeyenler için kısaca açıklarsak Java’da bir sınıfın interface ve ata sınıfında yer alan metodları implement etmek veya değiştirmek için yazdığımız metodu @Override annotasyonu ile işaretleyerek bunu belirtmiş oluruz. Bir sınıf içerisinde Override anotasyonu metodun üst sınıflardan geldiğini bilmek için güzel bir araçtır. Varolmasının en temel amacı da budur.

Fakat Java’da bu anotasyonu kullanmak zorunda değilsiniz. Bu anotasyonu kaldırdığınızda herhangi bir compile hatası almazsınız. Fakat bu anotasyonun sağladığı önemli bir avantajı daha var. Bunun için çok kısa ve kolay bir örnek yapalım. Özellikle yeni başlayanların hata yaptığı konulardan biri:

Basit bir üye sınıfımız var. Bu sınıfın son metodunu incelerseniz bir equals metodu tanımladık. Bu metodu bir test edelim.

Bu testi çalıştırdığınızda ekranda true yazdığını görüyoruz. equals metodumuz çalışıyor. Şimdi testimizde ufak bir değişiklik yapalım.

Referanslarımızı üst sınıfa yani Object sınıfına çektik. Bu testi çalıştırdığımızda da ekranda true beklerken birden false değerini aldık. Anladınız değil mi hatayı? Java’ya yeni başlayanların durumu anlaması biraz zor olabilir.

Object.equals metodunun işaretin(signature)‘e bakalım: public boolean equals(Object obj) Member sınıfında implement ettiğimiz metod ise public boolean equals(Member m) gördüğünüz gibi bu iki metod birbirinden farklıdır. Java’da metod parametrelerini üst sınıftan altsınıflara çekemezsiniz. Yani Object.equals metodunu override etmek yerine yeni bir metod eklemiş olduk.

Burda belirtmek istediğim bir durum daha var. equals metodu Object referansı ile farklı Member referansı ile farklı sonuçlar verdi. Member.equals metodu üst sınıf olan Object in yerine geçemedi. Bu Liskov yerine geçme prensibi(Liskov Subsitution Principle)‘ne aykırıdır.

Şimdi geldik asıl sorumuza: @Override anotasyonu ne işimize yarayacak? Member.equals metoduna bu anotasyonu tanımlayalım.

Bu kodu derlemeye çalıştığnızda , method does not override or implement a method from a supertype hatasını alırsınız. Bu sayede bu anotasyon yanlışı compile zamanında size göstermiş oldu. Bu dikkatsizlik yayında daha kötü sonuçlara sebep olabilir.

Object sınıfı en çok bilinen sınıflardan biri olduğu için Object.equals elzem bir durum oluşturmayabilir. Fakat kendi yazdığınız interface ve üst sınıflar veya kullandığınız framework’lerde bu hatayı yapabilir, uygulamanızı tutarsız hale getirebilirsiniz. Yine yeni başlayanlar için düzgün bir Member.equals örneği de vereyim.

Bu kodu kendim yazmadım. Günümüzde Java IDE’leri bu kodu otomatik olarak üretebiliyor. Bu arada farklı bir yazıda anlatacağım fakat ek bilgi olarak belirteyim. Java’da equals metodu tanımlarken mutlaka hashCode metodunu da tanımlamalısınız. Java 7 ve sonrası için bunu yapmak oldukça kolay:

Bu sebeple bu anotasyonu kullanın, kullandırın!

Başka bir yazıda görüşmek üzere…

4 Ekim 2016

Twitter Auto Publish Powered By : XYZScripts.com