Refactoring Nedir?
Blogumda genelde lisans dönemindeki arkadaşlarıma, kardeşlerime hitap ettiğim için bu yazımda da sizlere çok işinize yarayacak bir kavramdan bahsedeceğim. Refactoring. Bir çoğunuz duydunuz, duymayanlarınızda aslında bir şekilde bunu yapıyorlar fakat bu yazının amacı konuyu tam anlamıyla öğrenmek ve kafanızda (büyük ihtimalle) dağınık halde bulunan bilgileri toplayıp bütünleştirmek olacak. Ayrıca belki hiç bilmediğiniz ve denemediğiniz bazı teknikler de öğrenmiş olacaksınız. Tekniklerin hepsine bu yazıda değinemeyebilirim fakat en azından bir giriş olur diye düşünüyorum.
Bir tanım yapmak gerekirse;
Refactoring; yazılımı daha basit, daha anlaşılır, değiştirmesi daha kolay bir hale getirmek amacıyla iç yapısında yapılan ve yazılımın dış davranışını etkilemeyen değişikliklerdir.
Bu tanım üzerinde biraz durabiliriz. Öncelikle amaç belirtilmiş; yazılımı daha basit ve anlaşılır bir hale getirmek, değişmesi kolay yani flexible yapmak. Daha sonra bu amaca ulaşmak için ne yapmamız gerektiği söylenmiş; yazılımın iç yapısını değiştirmek. En sonda da önemli bir şart belirtilmiş; yazılımın dış davranışını etkilememek.
ORM ve JPA Kavramları
Önceki yazılarda Java‘dan ve Object Oriented Programlamadan yeterince bahsedildiğini düşünüyorum. Bu konularda örnek uygulamalar geliştirdikçe etkinliğiniz artacaktır. Önemli olan kavramları ve mantıklarını iyi oturtmuş olmak. Buraya kadar olan bilgiler belki lisans eğitiminizde işinize yarayacaktır ancak daha sonrası için kesinlikle yetersiz. Bu yüzden daha advance konulara giriş yapmak gerektiğini düşündüm. Bu yazıda Object Relational Mapping‘den bahsediyor olacağız. JPA‘nın nasıl oluştuğuna ve ne işe yaradığına değineceğiz. Bundan sonraki yazılarda da Java için en populer ORM uygulaması olan Hibernate üzerinden gitmeyi planlıyorum. Umarım yararlı olacaktır.
Java – Object Oriented Kavramı IV
Yazılım Tasarım Prensipleri özellikle büyük projelerde gerçekten önem arz ediyor. Proje boyunca en çok üzerinde durulması ve düşünülmesi gereken noktanın burası olduğunu yaşayarak anlamış bulunuyorum. Yazılım tasarımı derken kastettiğimiz ekranların tasarımı gibi birşey değil. Class hiyerarşisi, db yapısı, kullanılacak frameworkler ve bunların entegrasyonu, kullanılacak tasarım şablonları (design patterns) ve bunların uyumu gibi konuları kapsayan bir tasarımdan bahsediyorum. Burada dikkat edilecek pek çok nokta var. Ancak en temel ve objektif olanları yazılım tasarım prensipleri ismini haketmiş ve burada onlardan bahsedeceğiz.
Bu prensipleri üstad Robert Martin’in “Agile Software Development: Principles, Patterns, and Practices” isimli kitabında bulabilirsiniz. Bu fikirlerin ilk olarak toplandığı kitaptır ve çok değerlidir. Bu kitaba göre yazılımınızı tasarlarken 3 şeyden kaçının;
Java – Object Oriented Kavramı III
Bu yazıda tamamen interface mantığı üzerinde durmak istiyorum. Çünkü önemli bir konu. Serinin ilk yazısında interface kavramına kısa bir giriş yapmıştık. Class‘ların dış dünya ile arayüzlerinin interface yardımıyla tanımlandığını ifade etmiştik. Ama tamamen yabancı birinin gözüyle bakmaya çalıştığımda bu tanım çok havada duruyor. Tanımı biraz daha açıp “class‘ta bulunması gereken methodların listesi” dediğimizde ise yine aynı gözler “iyi de neden böyle bişeye ihtiyaç duyuyoruz ki?, açar class‘ı bakarım” diye düşünebilirler. Çünkü genelde lisans eğitimi boyunca tek başınıza proje geliştirirsiniz. Bu durumda her modül elinizin altındadır. Ama hayat her zaman böyle olmayacaktır…
Büyük ve kurumsal bir firmada çalışıyor olabilirsiniz. Muhtemelen projelerde onlarca yazılımcı çalışacaktır ve bu yazılımcılar ayrı ayrı takımlara ayrılacaktır. Bu takımların her biri yazılımın bir bölümünü, bir modülünü geliştirecektir. Ve bu modüller mutlaka birbirleriyle ilişki içerisinde olacaktır. Bu noktada farklı gruplardaki yazılımcıların kendi geliştirdikleri modüllerin hangi noktalarda ne şekilde bir bağlantı kuracağı konusunda hemfikir olması gerekir.
Java – Object Oriented Kavramı II
Object Oriented Programlama mantığından bahsetmeye başlamıştım, fakat bunun bir yazıda halledilemeyeceğini anlayınca yarıda bırakmıştım. Bu yazıda devam ediyorum. Bir önceki yazıya Java – Object Oriented Kavramı I linkinden ulaşabilirsiniz. Object, class, inheritance, interface kavramlarını kısaca anlattıktan sonra, bir class’dan object oluşturma sırasında gerçekleşen işlemleri yani decleration, instantiation ve initialization işlemlerini anlatmıştım. Bu yazımda kaldığımız yerden devam ederek, static keyword’ünden, final keyword’ünden, methodlardan, overloading kavramından, access modifier‘lardan bahsetmeyi düşünüyorum. Çok uzatmadan başlayalım ve mümkün olduğunca kısa yazarak sıkmamaya çalışalım 🙂
Static:
Burada static‘den bahsetmeden önce bir önceki yazıda anlattığım instantiation işlemi yani class’dan object üretilmesi işlemini hatırlayalım. Bunun için referans tutan bir değişken ile hafıza alanı açıyor ve o alana constructor ile değerleri atıyorduk.