Posts

Showing posts from 2009

Kotlin Language Features Related to Null Handling

Any software engineer with a Java background would find the null handling features in the Kotlin language interesting. Let's summarize this topic with some examples. Nullable types: In Kotlin, types are non-nullable by default. If you want a variable to be able to hold a null value, you need to explicitly declare its type as nullable using the Type? syntax. For example, String? denotes a nullable string, while String represents a non-nullable string. Safe calls (?.): Kotlin introduces the safe call operator (?.) for handling nullable types. It allows you to safely invoke a method or access a property on a nullable object. If the object is null, the expression returns null instead of throwing a NullPointerException. Example: data class Person(val name: String, val age: Int, val address: String?) fun main() {     // Create a person with a nullable address     val person1 = Person("John Doe", 25, "123 Main Street")     val person2 = Person("Jane Doe", 30,

"Open Session In View" kalıbı

Bu kalıp Hibernate ile Java ağ uygulamaları geliştirirken ortaya çıkan bir probleme istinâden belirmiştir. Bir HTTP isteği web sunucusuna gelsin ve sunucumuzda yüklü olan kontrölcü servlet isteği ele alsın. Örneğin: protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { String expenseId = request.getParameter("expenseId"); Expense expense = expenseService.loadWithId(expenseId); return new ModelAndView("edit_expense", "expense", expense); } Burada expense nesnesi tembel bir şekilde elde edilmiş olabilir (lazily loaded). Bu durumda henüz ihtiyaç olmadığı için veritabanı tarafında bir SELECT sorgusu çalıştırılmış değildir. Fakat gösterim sayfasına (view) gönderdiğimiz nesnenin içindeki değerler, program akışı view kodlarına geldiğinde okunmak istenecektir. İşte burada bir sorun ortaya çıkıyor ki o da şu: Bizim servis metodumuz yükleme (load) işlemini yaptıktan sonra Sessio

Kaynak Kod Versiyonlama Sistemleri ve Subversion

Üzerinde çalıştığımız projenin kaynak kodlarını ve kodda yapılan her türlü değişiklikleri depolayan yazılım sistemlerine "kaynak kod versiyonlama sistemleri" diyoruz. Bu alandaki ürünlere baktığımızda açık kaynak kodlu projelerden CVS ve Subversion, ticari ürünlerden ise Clearcase ve Visual SourceSafe sayılabilir. Versiyonlama sistemi kullanımı özellikle birden fazla geliştiricinin çalıştığı projelerde elzemdir. Maalesef ülkemizde halen versiyonlama sistemi kullanmayan firmalar olduğuna şahit olmaktayız. Fakat genellikle yaygın olarak kullanılmaktalar. Hatta bazı firmalar ilanlarında, bir geliştiricilerde aradıkları özelliklere şunu ekliyorlar: - Düzenli check-out / check-in yapabilecek... Visual Studio ile tümleşik çalışan Visual SourceSafe, kullanımı çok kolay bir yazılım. Biz, Java tarafındaki Subversion sistemine bir göz atalım: Eğer Eclipse geliştirme ortamını kullanıyorsak, Subversion için bir eklenti mevcut. "Subclipse" adındaki bu eklentiyi Eclipse'in

Servis sınıfları ile "Transaction" yönetimi

Kurumsal uygulamalarda en önemli konulardan birisi de birbirinden ayrılamaz veritabanı işlemlerinin bir "transaction" içerisinde yapılmasının sağlanmasıdır. Çok katmanlı (layer) uygulamamızda bu işin yapılmasından hangi katman sorumlu olmalıdır? Diğer katmanların durumu nedir? Yaygın olarak kullanılan "veri erişim nesnesi" (DAO) kalıbını kullandığımızı düşünelim. Bunların yer aldığı veri erişimi katmanı, transaction yönetiminden sorumlu olabilir. Fakat en çok kabul görmüş yöntemlerden birisi, transaction kontrolünün "service layer" denilen bir katmanda yapılmasıdır. Böyle bir yapıda gerçekleşen olaylar şöyle özetlenebilir: 1- Kullanıcı arayüzü katmanına ilişkin "controller" kodu, bir servis metodunu çağırır. Örnek: class StudentController... { //... studentService.addRegistration(...); } Görüldüğü gibi burada kullanıcı arayüzü kodu, sadece tek bir servis metodunu çağırmakta ve gerisine karışmamaktadır. Transaction kontrolünden sorumlu

Java Programlama Dili Ders Notları - 1

Giriş Java Programlama Dili, Sun Microsystems tarafından 1995 yılında Java Platformunun temel öğesi olarak piyasaya sunulmuştur. 2007 yılında Sun, Java platformunu GNU GPL lisansi uyarınca özgür yazılım haline getirdi. Sun firması dışında Java platformuna yönelik implementasyon gerçekleştiren gruplar mevcuttur. Örneğin, Özgür Yazılım Vakfı çatısı altında geliştirilmiş bir GNU Java derleyicisi ve çalıştırma ortamı bulunmaktadır. Java dili tasarlanırken, C++ dilindeki bazı konuların çıkarılması ve diğer dillerdeki bazı kavramların dile dahil edilmesi sözkonusu olmuştur. Bir Java Programının Derlenmesi ve Çalıştırılması Bilindigi gibi bir bilgisayarın çalıştırabildiği kod, kendi merkezi işlem birimi (CPU) donanımı için tasarlanmış olan makine dilidir (assembly). Makine diline göre insan algisina daha yakin, okunmasi kolay ve üzerinde çalışılan problemde yer alan kavramların daha kolay ifade edilebileceği dillerin birçok alanda tercih edildiğini biliyoruz. Yani bircok yazilim sistemini g

Java Ortamında Ağ Uygulamalarına Genel Bakış

Ağ uygulamalarında karşımıza çıkan ilk kavram “ağ sunucusu (web server)” kavramı. Microsoft tarafında IIS (Internet Information Services) tek tip ağ sunucusu iken, Java tarafında birçok organizasyonun yazdığı ağ sunucuları mevcut. Java tarafında, programcıların makinelerinde geliştirme esnasında Apache Tomcat yaygın olarak kullanılmakta. Üretim (production) ortamında ise IBM Websphere gibi seçenekler mevcut. Ağ sunucusu yazılımı, önceden belli olan bir dizin içerisine yerleştirilmiş ağ uygulamasını çalıştırmakla yükümlüdür. Ağ sunucusuna browser yoluyla HTTP istekleri (request) göndeririz ve HTTP cevapları (response) alırız. Cevap genellikle HTML biçimindedir. Java tarafında ağ sunucularının yazımı ile ilgili standartlar belirlenmiştir. Örneğin denilir ki, WEB-INF adlı dizin içerisinde bulunan web.xml dosyası uygulamanın nasıl çalıştırılacağına ilişkin çeşitli bilgileri tutar. Burada elbette bir “Servlet” teknolojisi ve standardı da işin içindedir. Bugün bir Java ağ uygulaması geliştir

ANT ve Yazılım Projelerinin İnşası

Günümüzde kurumsal uygulamalar geliştirilirken yinelemeli (iterative) yöntemler kullanılıyor. Yani projenin geliştirme takvimi, yineleme (iterasyon) denilen kısımlara ayrılıyor ve her yinelemede çalışabilen bir ürünün çıkarılması hedefleniyor. Kaynak kod kontrol sistemleri (CVS, Subversion, Clearcase, Visual SourceSafe gibi) projenin kodlarını bir makinede saklarken, bir yandan da bu kodlardan ürün elde etmek için gereken işlemler düzenli olarak yapılıyor. Örneğin Java ortamına ilişkin bir ağ (web) uygulaması söz konusu ise, elde etmek istediğimiz ürün bir WAR dosyası olabilir. Microsoft geliştirme ortamında da genellikle Visual Studio üzerinden düzenli olarak "build" komutunu çalıştırıyoruz. Aynı şekilde "Build Solution", "Clean Solution" gibi komutlar çalıştırıyoruz. Burada Visual Studio ne yapıyor? Ant ve NAnt kütüphaneleri, her türlü projeyi inşa ederken yapılması gereken derleme, dosya kopyalama, dosya/dizin silme gibi işlemleri kolay bir biçimde tan

Popular posts from this blog

Trie Data Structure and Finding Patterns in a Collection of Words

swapLexOrder: Finding lexicographically largest string

A Graph Application in Java: Using WordNet to Find Outcast Words