Java Günlüğüm
Yazılım, Java, BT, azıcık felsefe, biraz mizah...
  • Udemy Eğitimleri
  • Temiz Kod
  • Tasarım Kalıpları
  • Hakkımda
  • Arşiv
RSS
29 Haziran 2013

Java’ya Nasıl Başlarım? Java’yı Nasıl Öğrenirim? – IV

Akin Java, Java Dersleri Java Öğren, Java öğreniyorum, Java öğrenmek, Java'ya nasil baslarim

Bu serinin 4. yazısında, son yazıda gelinen noktadan, tekrar kullanım bölümü ile devam edebiliriz. Tekrar kullanımdan kasıt, var olan nesnelerden yeni nesneler oluşturmaktır. Bunu yapmanın ise temelde iki yolu vardır: bileşim ve kalıtım ya da miras. Bileşim (composition), var olan sınıfların tipinden nesne değişkenlerine sahip olacak şekilde yeni bir sınıf oluşturmaktır. Bu kullanıma sahip-olma ya da has-a ilişkisi denir. Miras ise bir benzerlik ilişkisidir ve is-a olarak adlandırılır. Bu bölüme, bileşim ile başlar sonra da mirasa geçerim ve detaylıca ele alırım. Tabi ki miras alan sınıfta, ebeveyndeki metodun tekrar tanımlanması yani overriding bu kısımdaki en önemli konulardandır. Sonrasında ise java.lang.Object sınıfıni ve APIsini incelerim ve örneklerle neden toString() ya da hashCode() ve equals() gibi metotların yeniden tanımlanması gerektiğini anlatırım. Doğal olarak başlatma sırası (order of initialization) ve final anahtar kelimesinin ilgili kullanımları da bu konunun alt başlıkları arasındadır.

Sonrasında, miras ve yeniden tanımlama üzerine kurgulanan ve nesne-merkezli dillerin en önemli özelliği olan çok şekillilik yani polymorphism gelir. Cok şekilliliğe önce yukarı atama (upcasting) ile başlarım ve bir referansın, zamanın farklı anlarında, kendi tipi ve alt tiplerinden olan nesneleri gösterebileceğini anlatıp, dinamik metot çağrısına geçerim. Daha sonra ise aşağı atama ya da downcasting gelir ve sonuçta instanceof operatörü ele alınır. Bu sırada, referansın arayüzü ile nesnenin arayüzü arasındaki ayırım hep vurgulanır.

Sonra ise sıra soyut sınıflar (abstract classes) ve arayüzlere (interfaces) gelir. Soyut sınıflar, şu ana kadar sınıflar ile nesne-merkezli programlamada gelinen noktayı bir adım öteye taşır. Söyleki: Java eğitimlerinde bu ana kadar sıklıkla, arayüz-gerçekleştirme ya da interface-implementation ayırımından bahsederim. Nesne-merkezli programlamaya giriş yaptığım bölümden, erişim niteleyicileri ele aladığım kısıma kadar, özellikle de düşük bağımlılıklı (lowly-coupled) ve yüksek iç-bütünlüklü (highly-cohesive) yapılar ve sınıflardan bahsederken, devamlı arayüz ve gerçekleştirme kavramları ile aralarındaki ilişkiyi vurgularım. Bu iki kavram, soyut sınıflar ve arayüzler konularında, çok daha geniş ve pek çok pratik uygulamayla o şekilde ele alınır ki her yönüyle ele alır, güzek örneklerle açıklarım. Bu güzel örnekler arasında decorator ve proxy tasarım desenleri de yer alır.

Soyut sınıflar ve arayüzler ile Java’nın en temel nesne merkezli yapıları ele alınmış olur. Artık sıra bir diğer çekirdek dil yapısı olan sıra dışı durumlara (exceptions) gelmiştir. Sıra dışı durumları ele alırken, sadece try-catch-finally blokları ve throw ve throws anahtar kelimelerini ele almam, neden sıra dışı durumları yönetmeliyiz, hatta ihtiyaç analizi sürecinde sıra dışı durumlar nasıl bulunurdan başlayarak, tasarımda nasıl yer aldıklarından bahsederek, kodlama anına kadar gelirim. Bu kısımda ayrıca assert anahtar kelimesini ve ‘Assertion-driven Desing” (ADD) yaklasımından da bahsederim.

Bir sonraki bölümde torbaları ele alırım. Collection arayüzünden başlayıp, Set ve List arayüzleri ile devam ederim. Sonuçta, HashSet, TreeSet, ArrayList ve LinkedList ile ilgili örnekler verip, ne zaman hangisini kullanmalıyızı ele alırım. Orneğin Set’in, nasıl aynı nesneden iki tane eklenmesine izin vermediğini ya da sona ekleme yapılmayıp başa ve ortalara ekleme yapıldığında neden LinkedList kullanmamız gerektiğini örneklerle gösteririm. Daha sonra Map arayüzüne geçerim ve gerçekleştirmeleri olan HashMap ve TreeMap’i benzer şeklide ele alırım. Sonrasında, java.util paketindeki bu torbaları kullanarak yeni veri yapıları ve torbaları nasıl oluşturabilirizi bir iki örnek ile katılımcılarla tartışırım. Java SE’de var olan torbalar yeterli olmadığında, Apache Commons’in Collection projesinde var olan yapıların imdadımıza nasıl yetiştiğinden bahsseder, oradaki veri yapıları ve torbalardan örnekler veririm. 

Torbalar bölümünün en zevkli tarafı ise bence her zaman şudur: Arayüzlerin kullanımına nefis örnekler sunması ve arayüz-gerçekleştirme ayırımını güzel bir şekilde vurgulanması. Katılımcılara Collection arayüzünden hiç bahsetmeden, “hadi bir torbayı modelleyelim” deyip, Torba isimli bir arayüz oluşturup sonra da mesela “ekle” davranışını gerçekleştirirken, ekleme sırası gözetip gözetmeyeceğimiz ya da sıralama yapıp yapmayacağımız, ya da ne bileyim örneğin, aynı nesneden birden fazla eklemeye izin verip vermeyeceğimiz gibi detayların, nasıl birer gerçekleştirme konusu olduğunu açıklarım. Zaten bu kısımdaki TreeSet ya da TreeMap gibi yapıları kullanırken nesnelerimizin, istediğimiz kriterlere göre sıralanabilmesini sağlamak amacıyla kullandığımız, Comparable ve Comparator arayüzleri, nesnelerimize nasıl farklı yetkinlikler kazandıracağımızın en güzel örneklerindendir.

Torbalar bölümünde ayrıca java.util.Collections sınıfı üzerindeki algoritmalardan da bahsedip, arama, sıralama, kaydırma vb. işlemlerinden örnekler veririm.

Bu bölümün en son konusu ise generics ya da  “bir tipe özel” yapılardır. Generics, iç sınıflar (inner classes) gibi anlaşılması zor ya da zordan öte tecrübe isteyen konulardandır. Dolayısıyla, generic yapıların, öncelikle bir tipe özel torbalar oluşturmak için nasıl kullanılacağından bahsederim. Sonrasında sadece ufuk açmak ya da meraklı zihinlere bir tiyo vermek amacıyla şablon sınıflardan bahsedip, bir kaç örnek veririm. Hatta Java API’sine gidip, örneğin java.util.Collections sınıfının binarySearch(List<? extends Comparable<? super T>> list, T key) metodunun arayüzünün nasıl anlaşılması gerektiğini anlatırım 🙂

Artık sıra giriş/çıkış (I/O), çok kanallı programlama (multi-threading) ve veri tabanı programlaması (JDBC) gibi konulara gelmiştir. Bunları da bir sonraki yazıda ele alalım.

Bol Java’lı günler dilerim 🙂

 

Toplam görüntülenme sayısı: 4985

27 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
16 Nisan 2013

Java’ya Nasıl Başlarım? Java’yı Nasıl Öğrenirim? – III

Akin Java, Java Dersleri Java Öğren, Java öğreniyorum, Java öğrenmek, Java'ya nasil baslarim

Nesneler, Java’nın en temel yapıları halledilir halledilmez ele alınırlar ve Java’yı çok daha zevkli kılarlar. Ben, Java Dersleri sayfasından da göreceğiniz gibi, Nesne-Merkezli Programlamanın Temelleri isimli 2. bölümde, nesne yapılarına , kavramsal bir giriş yapıyorum. Bu bölümde zihnimizin, soyutlama (abstraction) ve kategorileştirme ya da sınıflandırma gibi temel çalışma prensiplerinden yola çıkarak, gerçekliği, nesneler üzerinden nasıl algıladığımızı ya da daha doğru bir ifade ile kurguladığımızı ele alıyorum. Sınıf eğitiminde, sınıftaki katılımcıların felsefi düşünme yetenekleri ve zevkleri ile bu kısım enfes hale gelebiliyor. Çoğu zaman katılımcılar, nesne-merkezli programlamaya böyle bir girişi garip karşılıyorlar ama o gün içinde felsefi temalı esprilerin gırla gidiyor olması, meramımın anlaşıldığı izlenimini uyandırıyor bende 🙂

Bu bölümde, felsefi temellerden yola çıkıp, nesne-merkezli programlamaya doğru ilerleyip, bir araba soyutlamasını nasıl yaptığımızı ve Java’da nesne-merkezli olarak bu soyutlamayı nasıl gerçekleştirdiğimizi ele alıyorum. Aslında problem şu: Bir sınıf oluşturup, üzerine üç beş tane private nesne değişkeni koyup sonra da bunların set/get metotlarını yazmanın, nesne-merkezli programlama olmadığını, bu bölümden itibaren vurguluyorum ben. Bu konuda tecrübeli olanlar, ne dediğimi daha iyi anlayacaklardır ki nesne oluşturmak aslında bir soyutlama yapmaktır. Yani önemli olan, soyutlamanın nasıl yapılacağıdır, bunu Java ile hayata geçirmek ise çok teknik bir detaydır. Bu detay önemlidir çünkü çalışan şey o detaydır. Ama o detayın doğru olup olmadığı, soyutlamanın doğru olup olmadığına ya da başka bir değişle, var olan duruma ne kadar uygun olduğuna doğrudan bağlıdır.

İlerleyen bölümlerde nesne yapılarına daldıkça, bu bölümde giriş yaptığım soyutlama kavramına daima referans veriyorum. İlerleyen bölümlerden kasıt da önce, Java Nesneleri: Temeller, sonra da Java Nesneleri: Organizasyon isimli iki bölüm. Sonrasında Tekrar Kullanım ve Kalıtım, Çok Şekillilik ve Arayüzler isimli üç bölüm geliyor ve nesne-merkezli programlamanın temelleri hallediliyor.

Java Nesneleri: Temeller bölümünde, en temel sınıf yapıları ele alınır: Sınıf tanımı, nesne değişkenleri ve metotları. Nesne yaratmak ve bir referansa atamak ile nesne ve referans ayrımı, en başta ele alınır. Sonrasında bileşik nesneler (composite objects) üzerinden, nesne-merkezli bir yazılımın, nasıl bir nesne ağı (web of objects) olduğunu vurgularım. Metotlardan bahsederken, tabi olarak, parametrelerden, parametre geçmekten, overloading ya da Türkçesiyle, çok kullanım, metotların imzaları ve arayüzleri, yani interfaceleri ve belki de en önemlisi de metotların ne için oldukları, bu kısımda ele alınanlar arasındadır. Sonrasında, kurucu metotlar yani constructorlar, this anahtar kelimesi, final anahtar kelimesinin nesnelerin referansları ve parametreler ile kullanımı ve static anahtar kelimesi ele alınır. static anahtar kelimesi bağlamında nesne-merkezli programlamanın en güzel taraflarını tartışırım. “Ne zaman static?” sorusu nefistir ve nesneleri anlamak için sorulması gereken en kritik sorulardandır. Danışmanlıklarım sırasında, “Hocam, daha kolay olsun diye tüm metotları static yaptık” şeklindeki açıklamalara sıkça muhatap alup, bol “la havle” çekmiş birisi olarak bu kısıma çok önem verir, tüm detayıyla anlaşılmasını sağlarım.

static kullanımını anlatırken, Cem Yilmaz’lığımın en nadide örneklerinden olan, “Yeni Java’cının Sefaleti” (Poverty of Newbie Java Programmer) isimli skeçimi de oynarım 🙂  Skeç, Java’ya (başka herhangi bir nesne-merkezli dil de olabilir) yeni başlamış bir programcının, kendi makinası başında oturur durumuyla başlar. Yeni Javacımız, editöründe heyecanla yeni bir sınıf oluşturup, içine bir nesne değişkeni ile bir main metot yazar. Sonra da main metot icinde bir satırlık System.out.println() ile bu değişkeni basmak ister. Gelin görün ki, bu kod derlenmez bile. Aklına gelen bilimum Java anahtar kelimelerini ve atraksiyonunu kullanan yeni Javacımız, sonunda tesadüf eseri, nesne değiskeni tanımladığı satırın başına “static” yazdığında, programın derlendiğine ve problemsiz çalıştığına şahit olur ve tabi ki havalara zıplar 🙂 Sonra programcımız, main metotun altına bir başka metot ekler ve onu da main metot içerisinden çağırmaya çalışır. Yine derleme problemiyle karşılaştığında, sihirli kelime olan “static”in sorununu çözdüğünü hayranlıkla görür. Veee, tabi ki kararını verir: static geldi zulüm bitti 🙂 Böylece artık yeni Javacımız, her değişken ve metotu static yaparak, müthiş bir nesne-merkezli programlama gurusu olmaya başladığını hisseder. Bu durum, “şu okullar da olmasa ne güzel yönetirdim ben Milli Eğitim Bakanlığı’nı” diyen devletlümüzün durumuna çok benzer: Hiç nesne yaratmazsanız, “nesne-merkezli programlama” birden çok kolay hale gelir 🙂 Cok komik değil mi? Nesnesiz, nesne-merkezli programlama 🙂 Bu skeç, aynı zamanda “static”in ne kadar bulaşıcı 🙂 olduğunu göstermesi açısından da mükkemmeldir.

Bu bölümde daha sonra, başlatma blokları (initilization blocks) ile başlatma sırası  (initilization order) ele alınır ki özellikle ikinci konu, Java’nın ve nesne yapılarının çalışmasını anlamak açışından çok faydalı ve bir o kadar da zevklidir. Sonrasında, temel Java eğitimlerinde hep eksik kaldığını düşündüğüm bellek yönetimini (memory management) ele alır, yığın (stack) ve dinamik bellek (heap) alanlarını, ne işe yaradıklarını, Java’da nasıl ilgili hataların alınabileceğini ve JVM parametreleriyle nasıl ayarlanabileceğini gösteririm. Unutmayalım ki, kurumsal Java yazılımlarında en temel problemler, bellek ile ilgilidir.

Java Nesneleri: Organizasyon bölümü ise daha kısadır ve bir önceki kısmın aksine, sınıfın, etrafındaki diğer sınıflarla ilişkisini düzenler. Bu yüzden bu bölümde, package ve import anahtar kelimeleri ile ünlü classpath kavramı ve ayarı ele alınır. Sonrasında, sarmalama (encapsulation) ve kız kardeşi olan bilgi saklama (information hiding) prensipleri, iç tutarlılık (cohesion) ve bağımlılık (coupling) üzerinden ele alınır. Bu şekilde, sağlıklı ya da kaliteli bir nesne-merkezli programlamanın, sarmalama ile bilgi saklama prensiplerin üzerine nasıl bina edildiği ve bunun da Java’da erişim niteleyiciler (access modifiers) ile nasıl gerçekleştirildiği öğrenilir. Tam bu noktada, arayüz kavramı tekrar ele alınır ve yüksek iç tutarlıklı (highly cohesive) ve az bağımlı (lowly coupled) nesneleri yaratmak için nelere dikkat etmek gerektiği tartışılır. “Program to an interface, not an implementation” yani “arayüze programlama yapın, gerekleştirmeye değil” prensibi de bu tartışma sırasında ele alınır.

Bu bölümde ayrıca, erişim niteliyicilerin enfes bir uygulaması olarak singleton yani tek nesne tasarım desenini de bir problem olarak sınıfa sunar, cevabın bulunmasına yardımcı olurum. Böylece hem karmaşık gibi görünen bu konu ve static kullanımı pişirilir hem de programlama keyfi doruğa çıkar 🙂

Bu bolümün sonunda, arayüzden bahsetmişken, API yani Application Programming Interface kavramı, Java API’si ve nasıl kullanılacağı ve javadoc ile nasıl oluşturulduğu ve bizim de kendi kodumuzun API’sini nasıl oluşturacağımız işlenir.

Bu iki konuyu takiben, nesne-merkezli programlamanın diğer yapıları ele alınır ki onların detayına da bir sonraki yazıda girelim.

Bol Java’lı günleeerrr 🙂

 

Toplam görüntülenme sayısı: 6587

35 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
31 Ağustos 2012

Java’ya Nasıl Başlarım? Java’yı Nasıl Öğrenirim? – II

Akin Java, Java Dersleri Java, Java Öğren, Java öğrenmek, Java'ya nasil baslarim, Java'yı nasıl öğrenirim, Nasıl öğrenirim

Java’yı öğrenmeye bu yazıyla daha önce hızlı bir giriş yaptıktan sonra şimdi de daha detayda, Java SEyi öğrenmenin ne anlama geldiğinden bahsedelim.

Öncelikle, Java’nın, nesne-merkezli, standartlar üzerine kurulmuş, hem derlenen hem de yorumlanan ve sanal bir makina ile başarılan platformdan bağımsız yapısını, kavramsal olarak algılamak lazım. Ben bunu,  Java Dersleri sayfasındaki ilk konu olan Java’ya Giriş ile vermeye çalışıyorum. Bu yapıları anlatırken, Java’nın hem nesne yapısı, hem derlenen ve yorumlanan yapısını, dolayısıyla platformdan bağımsız olmasını da sağlayan sanal makina yani JVM (Java Virtual Machine) yapısını ve bytecode kavramını, tamemen en basit araçları kullanarak anlatıyorum. Yani Selam.java ve SelamTest.java kodlarından oluşan ilk Java örneğini, hiç bir IDE kullanmadan, Windows makinada Notepad, CMD kullanarak, MacOS’da ise benzer şekilde TextEdit gibi basit bir editör ve terminal kullanarak ve pek tabi ki javac ve java komutlarıyla derleyip çalıştırıyorum. Bunları yapmadan tabi ki, Java ya da daha doğrusu JDK (Java Development Kit) nereden, makinaya nasıl hızlıca kurulur, kurulum dosyaları nerededir gibi basit konfigürasyon yapılarını da gösteriyorum. Tabi ki güçlü ve şık IDEler kullanarak daha rahat kod geliştireceğiz ama öncelikle, iyi bir Javacı adayının, basit bir editör ile kodunu yazıp, , javac derleyicisi ile derleyip, varsa hatalarını giderip, gerekli class dosyasını üretebilmek ve sonrasında onu da java yorumlayıcısı ile çalıştırabilmesi gereklidir.

Pek çok genç yazılımcının bana sorduğu sorularda çok sık bir şekilde “Eclipse’de kod yazıyorum” gibisinden cümleler geçiyor. Ve çok garip bir şekilde sorununun Eclipse’de nasıl çözüleceğini öğrenmeye çalışıyor. Halbuki sorun, bir Eclipse problemi değil 🙂 Soru, “Eclispe’de kod bloğunu açıp kapamayı nasıl yaparım” değil mesela. Sorunu bir Java problemi, hatta çoğu kez, yukarıda bahsettiğim en temel derleme ve çalıştırma problemi, ama genç arkadaşımız, Eclispe ya da Netbeans bağımlı bir Java algısı geliştirdiği için, elma ile armutu birbirine karıştırıyor ve soruyu yanlış soruyor. Sağlam Javacı ya da herhangi bir dildeki programcı, üzerinde çalıştığı işletim sistemi ne olursa olsun, kullandığı dilin en temel yapılarını, yani derleme ve çalıştırma zamanı yapılarını bilmeli, konfigürasyonunu en temel araçlarla, doğrudan işletim sistemi üzerinde yapabilmeli. Bu yetkinlikleri kendi kendine çalışarak kazanmak zor, dolayısıyla bunlar, ya çok açıklayıcı, kendi kendine öğren (yani tutorial) tarzında bir kitap ya da yayın ile öğrenilmeli ya da bizzat işi iyi bilenin yanına oturup, bir eğitimle öğrenilmelidir.

Sonrasında, İngilizce kitaplarda “nuts and bolts” adı altında geçen ve çoğu zaman yeni öğrenenlere kuru gelen, en temel bilgiler öğrenilmeli. Yani, anahtar kelimeler (keywords ve reserved words), yorumlar (comments), isimlendirme kuralları ve veri tipleri. Veri tipleri derken, Java’da ilkel veri tipleri (primitive data types) ve karmaşık ya da referans tiplerini (complex or reference types) kastediyorum. Bu noktada refenras veri tiplerini detayına girmeden ayırımdan bahsedilip, daha çok, 8 tane olan ilkel veri tipleri ve özellikleri öğrenilmeli. Sonrasında bu tiplerden değişken tanıtma ve tanımlama, aralarındaki tip çevrimleri (casting), Java kaynak kodunun yapısı, ifade (expression), cümle (statement), blok (block) ve  kapsam (scope) gibi en temel noktalar da bu sırada ele alınmalıdır. Bu konular, Java Dersleri sayfasında 3. konu olan Java’nın Temelleri altında ele alınmaktadır.

Sonrasında, yukarıda başlanan “nuts and bolts”a operatörler, akış kontrolu ve diziler ile devam edilmelidir. Malum operatörleren kasıt, bir, iki ya da üç tane girdi alıp farklı iplerde sonuç üreten işlemcilerdir. Mantıksal operatörler boolean sonuç üretirler örneğin. Bu gibi konular da yeni öğrenenlere sıkıcı gelebilmektedir çoğu zaman. Bunu aşmanın yolu, sık örnek yapmaktır. Örnekler üzerinde oynayıp, orasını burasını kurcalayarak değiştirip, dilin davranışını görmek hem zevkli hem de öğreticidir. Bu gibi konular, basit ve önemsiz görülüp üstün körü geçilirse, ileride problem çıkarırlar. Örneğin, toplama, cıkarma, çarpma, bölme, ve kalan operatörlerini, zaten biliniyor diye bakmadan geçmek mümkündür. Lakin, böyle bir durumda, Java’da iki tane byte değerin toplamının bir başka byte etmediği, bir int ettiği şaşırtıcı gerçeğini öğrenemeyeceksiniz demektir 🙂

If, if-else, if-else if, while, do-while, switch, break ve continue gibi yapı ve anahtar kelimeleri içeren akış kontrolü de benzer şekilde hızlı da olsa, bol örnekle öğrenilmeli, varsa püf noktaları görülmelidir. Sonrasında ise diziler ele alınabilir. Önce standart , tek boyutlu diziler, sornasında iki ve üç boyutlu diziler öğrenilmelidir. Özellikle iki ve üç boyutlu dizileri, sağlam kafayla, örneğin sabahın erken saatlerinde ele almaktya fayda vardır, yoksa zihniniz su kaynatabilir 🙂

Operatörler, konrol yapıları ve dizileri öğrendikten sonra, bunların birlikte kullanılabileceği güzel uygulamaları yapmak, öğrenilenleri pekiştirir ve prosedürel yapıların sindirilmesini sağlar. Bu amaçla ben, önce en ilkel yolla, girilen bir sayının asal olup olmadığını ve girilen sayıya kadar hangi asalların olduğunu bulan uygulamalar yaptırıyorum. Sonra olayı biraz daha zevkli kılmak ve zekanın ne olduğunu ortaya koymak için mesela girilen bir sayıya kadar olan asal sayıları, Sieve of Eratosthenes algoritmasıyla nasıl bulunacağını açıklayıp, bunu yaptırıyorum katılımcılara. Benzer şekilde Monta Carlo yöntemiyle Pi sayısına nasıl yakınsayacağımızı gösteriyorum. Bu konuları içeren ve nispeten daha genişce bir uygulama olarak Conway’in “Hayat Oyunu” (Game of Life) düşünülebilir. Bu konular, tamamen algoritmik olduklarından, hem bu üç konuyu iyice pişirmeyi sağlıyor hem de nefis bir beyin jimnastiği yapmanıza vesile oluyorlar. İnsan kendini hakikatten programcı gibi hissediyor 🙂

Bu konular, Java Dersleri sayfasında, 4, 5 ve 6 nolu konular olarak ele alınmaktadırlar.

Buraya kadar olan kısımlar, günde 6 saat ders yapılan bir eğitimde, sınıfın seviyesine göre 2 ila 3 günde verilir rahatlıkla.

Sonrasında, Java’nın nesne yapılarına gelir sıra. Buradan sonrası çok daha zevklidir tabi ki. Ama bu kısmı bir sonraki yazı ile ele alalım.

 

Toplam görüntülenme sayısı: 16968

72 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
31 Ağustos 2012

Java’ya Nasıl Başlarım? Java’yı Nasıl Öğrenirim? – I

Akin Java, Java Dersleri Java öğrenmek, Java SE, Temel Java

Çok sıklıkla “Java’ya nasıl başlarım” ya da “Java’da nasıl uzmanlaşırım” gibi emailler alıyorum. Sanırım biraz daha derli toplu bir şekilde bu soruya cevap vermek gerekli. Bu ve takip eden bir kaç yazıda bunu ele almaya çalışacağım.

Öncelikle Java’da bilgilenmenin, yüzeysel olarak, sadece örneklere bakıp, onları çalıştırarak bir kanı edinmek şeklinde değil de, sistematik olarak, en temelinden başlayarak, sağlıklı bir anlama düzeyinde gitmesi gerekli ki öncesinde “öğrenmek” sonrasında da “uzman olmak”dan bahsedebilelim. Yoksa çok sık karşılaştığım gibi, EJB ya da JMS gibi detaylı uzmanlık gerektiren ileri konularla uğraşırken, temel konulardaki eksikliklerinizden dolayı sıkıntı çekersiniz.

Java’yı öğrenmekten derken, öncelikle Temel Java’yı yani Java SEyi (Standart Edition) öğrenmeyi kastediyoruz. Java SE ya da Temel Java, “C’yi biliyorum” derken kastettiğiniz en temel programlama diline karşı gelen Java sürümüdür (buradaki sürümden kasıt, “version”a karşılık gelen sürüm değildir, temel Java dili ve ilgili yapılarını içinde barındıran bir pakettir). Java’nın ayrıca, kurumsal uygulamalarda kullanılan örneğin dagıtık transaction yönetimi ya da web arayüzleriyle ilgili bileşenlerini içeren, EE (Enterprise Edition), bir de gömülü (embedded) uygulamalarda kullanılan ME (Micro Edition) isimli iki farklı sürümü daha vardır. Bu iki farklı sürümden hangisini kullanacaksanız kullanın, öncesinde muhakkak Java SEde yetkin hale gelmelisiniz. Dolayısıyla genel olarak “Java’yı bilmek” öncelikle Java SE’yi bilmek demektir.

Sadece Java SE’yi bilmek her zaman yeterli olmayabilir. Çünkü piyasada çalışan yazılımcılar açısından Java’da yetkin olmak genelde Java SE’yi bilmekten daha çok şey bilmek anlamına gelmektedir. Bunun sebebi, kurumsal uygulamaların çoğunlukla bir ya da daha çok Java EE yapısını içinde barındırmasıdır. Örneğin, kurumsal uygulamalar ezici bir oranda, kullanıcılarına Java SEnin parçası olan Swing ile değil de Java EE’nin parçası olan web teknolojileri ile kurgulanmış web arayüzleri üzerinden hizmet vermektedir ve bu yüzden Java EE’nin parçası olan örneğin servlet, JSP ya da JavaServer Faces (JSF) bilmeyi gerekli kılmaktadır.

Öte taraftan gerek SE ve ME gerek ise EE olsun, Java en geniş, açık kaynak kodlu olsun ya da olmasın, üçüncü el (“3rd party” böyle mi çevriliyordu?) bileşenlere ve ürünlere sahip bir dildir. Çünkü Java, standartlar üzerine kurgulanmış ve nesne-merkezli yapısı ile, bileşen tabanlı geliştirme için çok iyi bir eko sistem kurgulamıştır.  Özellikle Java EE’nin standart bileşenlerinden olan örneğin web bileşenlerinin (yani Servlet, JSP ve JSF’in) pek çok üçüncü el alternatifi vardır. Farklı amaçlara yönelik olarak tasarlanıp geliştirilmiş ve Java programcılarına sunulmuş olan bu web çerçeveleri (ya da çatıları, iskeletleri) (framework), farklı tipteki web ihtiyaçları için çözümler sunmaktadırlar. Örneğin, Struts, GWT, Vaadin ya da Spring MVC, üçüncü el web çatılarından sadece bir kaçıdır. Gerek ülkemizde gerek ise dünyada bu üçüncü el çözümler o kadar yoğun kullanılmaktadır ki bazıları alanında ilgili standart çözümden daha çok kullanılır hale gelmişdir. Örneğin 2000’li yıllarında başında Struts, web projelerini, önce MVC (Model-View-Controller) yapısında kurgulamak sonra da web yapılarında ciddi problem olan görsel bileşen (widget), sıra dışı durumlar, uluslararasılaştırma (I18N) vb. pek çok konuyu halletmek amacıyla ortaya çıkmıştı. Struts öyle ilgi gördü ve yaygınlaştı ki, Java EE’nin standart web bileşenlerinin en temeli olan servletlerin ihtiyacını ve kullanımını neredeyse ortadan kaldırdı. Benzer durum, Spring, Hibernate vb. diğer üçüncü el çerçeveler için de söz konusudur. Dolayısıyla Java’da yetkin olmak çoğu zaman Java SE’nin üzerine, bazen standart Java EE’nin bazen de bir takım üçüncü el çerçeveler ve bileşenlerin bilgi ve tecrübesini koymak anlamına gelmektedir.

Zaman zaman, Java’yı yani Java SE’yi bilmeden, doğrudan Java EE’ye giriş yapan kişileri duyuyorum. Böyle bir durum daha çok JSP için geçerli gibi görünüyor; çünkü JSP bir script yapısına sahip olmanın getirdiği özelliklerle, hızlıca öğrenilip ayağa kaldırılabilecek bir bileşen. Hiçbir şekilde sağlıklı olmayan bu doğrudan Java EEye giriş, genç arkadaşlara, Java EEnin diğer bileşenlerine de hızlıca girilebilir izlenimi veriyor. Java EE, yukarıda da ifade ettiğim gibi tamamen Java SE üzerine kurgulanmış bir katmandır, dolayısıyla ancak ciddi bir Java SE bilgisi üzerine bina edilebilir. Java EE, Java SE’den daha geniş ve daha karmaşıktır. Java EE yapılarını çalıştırmak, Java SE’dekiler kadar kolay da değildir; genelde özel yapılara ihtiyaç duyar ki bunlara kab (container), web kabı (web container) ya da EJB (EJB container) gibi, diyoruz.

İletişim protokolleri ya da daha aşağı seviyede, donanıma daha yakın yapıların öne çıktığı projelerde sadece Java SEnin kullanıldığına sık sık şahit oluyorum. Genelde kullanıcı arayüzlerine sahip olmayan bu gibi yapılarda Java EE pek de kullanılmıyor. Bu gibi projelerde yer alana kişiler, Java EE ile ilgili pek fazla bilgi ve tecrübe sahibi olmuyorlar ama Java SE’de çok yetkin oluyorlar ve yoğun olarak da kullanıyorlar. Yurt dışında çok daha fazla sayıda olsalar da ülkemizde de bu şekilde çalışan pek çok yazılım ya da teknoloji evleri mevcut. Dolayısıyla ancak bu gibi ortamlarda sadece Java SE ve ilgili 3. el yapılarda yetkin olmanız yeterlidir.

Bundan sonraki yazılarda, Java SE ve EE’yi öğrenmenin detaylarından bahsedeceğim.

Bol Javalı günleeeerrr 🙂

 

Toplam görüntülenme sayısı: 16107

158 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
«< 52 53 54 55 56 >»

Günlüğüme Hoşgeldiniz

Bu günlükte, Yazılım Mühendisliği, Bilgi Teknolojileri, Java, kişisel gelişim ve zaman zaman da diğer konulardaki düşüncelerimi sizlerle paylaşacağım. Umarım beğenir ve hoşça vakit geçirirsiniz.

Her türlü düşüncenizi, yorum olsun, beğeni ya da eleştiri olsun, bana iletmenizi rica ediyorum sizden. Ayrıca bana akin@javaturk.org adresinden ya da Twitter'dan ulaşabilirsiniz. Videolarıma da buradan ulaşabilirsiniz.

Teşekkür ederim.

Akın Kaldıroğlu

Rahat Okumak İçin

A Decrease font size. A Reset font size. A Increase font size.

Sosyal Medya

  • Twitter
  • Facebook
  • LinkedIn
  • Youtube

Son Twitlerim

→ Takip Etmek İçin

Abone Olun

Emalinizi girerek yazılardan haberdar olun.
Loading

Son Yazılarım

  • Udemy Eğitimlerim Üzerine
  • (başlıksız)
  • Clean Code / Temiz Kod Eğitimi Udemy’de
  • Java ile Nesne-Merkezli Programlamaya Giriş Eğitimi Udemy’de
  • Selsoft Video Eğitimleri
  • Spring ile Kurumsal Yazılım Geliştirme
  • Corona Günlerinde Design Patterns
  • Corona Günlerinde Java
  • JDK 10 ve “var” Özelliği
  • Onur Özcan
  • Analist ve İş Bilgisi
  • Farklı Dillerin Bakış Açısıyla Nesne-Merkezli Programlama
  • Java Nedir?
  • Bilgi Teknolojilerinde Yetenek Yönetimi – II: Tanımlar ve Eleştiriler – I
  • Alelade Hikayeler – II: Bir Başka Performans Problemi

Yazı Kategorileri

Yazı Takvimi

Mart 2026
P S Ç P C C P
 1
2345678
9101112131415
16171819202122
23242526272829
3031  
« May    

Yazı Arşivi

Blogroll

  • Binnur Kurt'un Günlüğü
  • Ender'in Java Blogu
  • Erdem Seherler
  • Kızımın Günlüğü
  • Kurumsal Java
  • Levent Karagöl
  • Levent'in Java Blogu
  • Mert Can Akkan’s java tips,options, news…
  • Yaşar Safkan
  • Yasin Saygılı
  • Yazı Dünyası

Yazı Etiketleri

analiz Bilmek C Desen design pattern EJB Eğitim Fortran Hibernate Java Java'ya nasil baslarim Java dersleri Java EE Java Persistence API Java SE Java Sertifika Java Öğren Java öğreniyorum Java öğrenmek JPA Kalıp Kurumsal Java nesne nesne-merkezli No Silver Bullet object object-oriented Oracle Java Certifications pattern performans programlama programlama dilleri programlama nedir sertifika singleton tasarım tasarım deseni tasarım desenleri tasarım şablonu yazılım yazılım geliştirme Yazılım Mühendisliği yazılımın doğası yazılımın zorlukları Şablon

↑

© Java Günlüğüm 2026
Powered by WordPress • Themify WordPress Themes
 

Yorumlar Yükleniyor...