Skip to content

1. Giriş

1.1. Contexte

Belgedeki PDF, |BURADA| adresinde bulunabilir.

Belgedeki örnekler |BURADA| adresinde mevcuttur.

Bu belge hem bir ders hem de bir üniversite TD’sidir (Rehberli Çalışma). Yeni başlayanlara yöneliktir. Aşağıdaki kaynaklardan yararlanılmıştır:

Kaynaklar:

  1. Java Diline Giriş (1998);
  2. Spring ekosistemiyle ilişkisel veritabanını kullanma (2015);

Bu kaynakları sırasıyla [ref1] ve [ref2] olarak not edeceğiz. [ref1] kaynağı eski (2002) olmakla birlikte, bu belge için yeterlidir; burada yalnızca Java dilinin sözdizimi ve temel işlemlerinin tanıtımı amacıyla kullanılmaktadır. TD'in gerçekleştirilmesi için gerekli olan geri kalan kısım, bu belgede [Cours] başlıklı bölümlerde sunulmaktadır. Bu bölümler doğrudan [ref2] (2015) kaynağından alınmıştır ve yer yer basitleştirilmiştir.

Bu belgenin amacı, Java dilini profesyonel bir bakış açısıyla öğretmektir. Bu nedenle, JEE (Java Enterprise Edition) geliştirme alanında yaygın olarak kullanılan Spring [http://spring.io/] çerçevesine büyük ölçüde dayanıyoruz. Mantıken, bu dersin ardından bir JEE dersi alınması gerekir. Istia’da (Angers Üniversitesi) durum böyledir. JEE, şu anda (Kasım 2015) yüksek lisans mezunu genç geliştiriciler için başlıca istihdam kaynağıdır. JEE dünyasında Spring dışında pek çok başka teknoloji de bulunmaktadır. Spring’in avantajı, anlaşılır olması ve özellikle Spring ekosistemi dışında da yeniden kullanılabilir iyi kodlama uygulamaları sunmasıdır. İşte bu yüzden burada Spring tercih edilmiştir.

Bu TD, 10 yılı aşkın bir süredir kullanılmaktadır ve teknolojilerle birlikte gelişmiştir. Bunu (IstiA'te) TD, JEE ve [Introduction à Java EE] takip ediyor. En son sürüm olan TD, 2012 yılına aittir (şu anda 2015 yılındayız) ve güncellenmesi gerekmektedir. Bu belge, JEE ortodoksisini JSF2 (Java Server Faces) ve EJB3 (Enterprise Java Bean) web çerçeveleri aracılığıyla ele almaktadır. Bu iki TD bir araya getirildiğinde, birçok öğrencinin JEE alanında (Dijital Hizmet Şirketleri) staj ESN bulmasına ve ardından bu şirketlerde işe alınmasına olanak sağlamıştır.

Bu belgede, Java’nın tüm yönlerine dair resmi bir sunum bulamazsınız. Yıllar geçtikçe, genç geliştiricilerin bir sorunla karşılaştıklarında sergiledikleri davranışlar büyük ölçüde değişti. Artık neredeyse her zaman interneti kullanarak, bir araya getirildiğinde bir program oluşturan kod parçacıkları arıyorlar. Onlara bir ders verilse bile, bunu pek kullanmıyorlar ve yine İnternet’e başvurmayı tercih ediyorlar. Başlangıçta bu çalışma yöntemine şüpheyle yaklaşmış olsam da, elde edilen sonuçlar beni şaşırttı. Böylece, zayıf öğrenciler bile çalışan programlar üretmeyi başardılar; oysa İnternet’in yardımı olmasaydı muhtemelen bunu başaramazlardı. Artık bu çalışma yöntemini ben de benimsedim.

Kod parçaları, bir çözümün mimarisine dair genel bir bakış sunmaz ve bu belgenin amaçlarından biri de bunu sağlamaktır. Öğrenciler, TD'i de TP gibi, kendi başlarına yaparlar. Ders anlatımı yoktur. Öğrencilere, oturumlar boyunca kendilerinden beklenen ilerleme durumunu gösteren bir program sunulur. Bu programa göre geride kalabilirler veya ileride olabilirler. İlerlemeleri, öğretmene sunmaları gereken bir dizi değerlendirme ile kontrol edilir. Öğretmen, hem talep ettiklerinde açıklamalarda bulunmak hem de çalışmalarını değerlendirmek için hazır bulunur. Herkes kendi hızında ilerler. Bu TD dersine ayrılan 36 saatin sonunda, bazıları diğerlerinden %50 daha fazla değerlendirme tamamlamış olacak, ancak herkesin – en azından hedef bu – kendi başına yaptıklarını anlamış olması beklenir. Bu TD, bir öğretmenin eşlik etmesine gerek kalmadan yapılabilir. Bu nedenle, [https://stahe.github.io] üzerinde erişime açıktır.

Bu belge, Java hakkında akademik bir ders arayanlara, yani Java'nın aşamalı ve yapılandırılmış bir şekilde anlatıldığı, sözdiziminin her ayrıntısının açıklandığı ve gerekçelendirildiği bir kaynak arayanlara uygun değildir. Burada daha çok deneysel bir yaklaşım sunulmaktadır. Öğrencinin belgede sunulan her şeyi tam olarak anlamaması muhtemeldir, ancak içeriği doğru bir şekilde yeniden kullanabilecektir ve ayrıntıları anlaması deneyimle birlikte gelecektir.

Bu belge aynı zamanda bir algoritma dersi de değildir. TD algoritması basittir ve algoritma derslerine yeni başlayan herhangi bir öğrenci tarafından çözülebilir. Bu belge, çok sayıda kütüphane ve çerçeveye sahip profesyonel Java geliştirme ortamına ve kod mimarisine odaklanmaktadır. Sınavlara giren öğrencilerin çoğunda algoritma konusunda zayıflıklar görülüyor ve bu durum staj danışmanları tarafından da teyit ediliyor. Dolayısıyla evet, algoritmaları iyi bilmek önemlidir, ancak bu ders-uygulamanın amacı bu değildir.

Son olarak, bu belge (Aralık 2015) Java’daki en son yenilikleri, özellikle de akışları (streams) ve lambda fonksiyonlarını içermemektedir. Bununla birlikte, burada en son JDK sürümünden bazı öğeler kullanılmaktadır; JDK 1.8 sürümü ve aşağıdaki kodlar bu JDK ile derlenmelidir.

1.2. Contenu

  1. bölüm, seçim sonuçlarının hesaplanması olan TD konusunu ele almaktadır. Sorun basittir. 2. bölümde, birbirine çok benzeyen C# ve Java dillerinde çözümün uygulanması istenmektedir. Uygulama, sınıflar kullanılmadan gerçekleştirilir. Amaç, Java sözdizimini, temel komutlarını ve Java projelerini oluşturmak için kullanılan Eclipse (Entegre Geliştirme Ortamı) ortamını tanıtmaktır.

  2. bölümde, TD çözümünün Java'da sınıflar kullanılarak uygulanması istenmektedir. Amaç, sınıflar, kalıtım, arayüzler ve jenerik sınıflar kavramlarını tanıtmaktır. JUnit birim testi kavramı da tanıtılmaktadır.

  3. bölüm, sonraki bölümlerin temelini oluşturan kavramları tanıtmaktadır:

  • katmanlı mimariler;
  • arayüzlerle programlama;
  • önceki iki kavramı uygulamak için Spring'in kullanımı;

Image

  1. bölüm, dört projeyle Spring çerçevesini tanıtmaktadır.

  2. bölüm, bir veritabanı erişim arayüzü olan API JDBC'i tanıtmaktadır.

  3. bölümde, TD'in [DAO] (Veri Erişim Nesnesi) katmanı, API, JDBC ve Spring kullanılarak uygulanmaktadır.

Image

  1. bölüm, TD'in [métier] katmanını uygular:

Image

  1. bölüm, TD'in [ui] katmanını bir konsol uygulamasıyla uygular:

Image

  1. bölümde, TD'in [ui] katmanı, Swing bileşen kütüphanesini kullanan bir grafik uygulama ile uygulanmaktadır:

Image

Image

  1. bölümde, Spring ekosisteminin bir dalı olan [Spring Data] çerçevesiyle veritabanı yönetimi ele alınmaktadır. Bu bölüm, JPA (Java Persistence API) spesifikasyonunu tanıtmaktadır; bu spesifikasyon, [DAO] katmanının SQL (Yapısal Sorgu Dili) ile uğraşmak yerine nesneleri işleyebilmesini sağlar. Katmanlı mimari şu şekilde gelişir:

Image

  1. bölüm, TD veritabanına [Spring Data] ile erişim sağlayarak 11. bölümde anlatılanları uygulamaya koyar.

  2. bölüm, Spring ekosisteminin bir başka dalı olan [Spring MVC] ile bir veritabanını web üzerinde nasıl sunabileceğinizi gösterir. Mimari, istemci/sunucu mimarisine dönüşür:

Image

  1. ve 15. bölümlerde, TD uygulaması bir istemci/sunucu uygulamasına dönüştürülür:

Image

  1. bölümde, Spring ekosisteminin bir başka dalı olan [Spring Security] ile bir web uygulamasına erişimin nasıl güvenli hale getirileceği gösterilmektedir.

Image

  1. bölümde TD ele alınmakta ve seçimlere ilişkin web hizmeti güvenli hale getirilmektedir.

  2. bölüm, etki alanları arası istek sorununu ele almaktadır:

  • [1]'te, bir web uygulaması HTML / JavaScript sayfaları sunar;
  • [2]'te, tarayıcı HTML sayfalarında yer alan Javascript'i çalıştırarak güvenli web hizmeti [3-4]'e sorgu gönderir;

Örneğin, D1=http://machine1:port1, [1] sunucusunun etki alanı ve D4=http://machine4:port4, [4] sunucusunun etki alanıdır. [1] ve [4] sunucuları aynı [D1!=D4] etki alanında değilse, o zaman [3]'ten [4]'e yapılan istekler etki alanları arası istekler olarak adlandırılır. Tarayıcılar tarafından uygulanan güvenlik kısıtlamaları nedeniyle, bunların kurulumu sorunlu olabilir. Bir çözümü inceleyeceğiz.

  1. bölümde, seçim uygulaması örneği üzerinden etki alanları arası istekler ele alınmaktadır.

1.3. Kullanılan araçlar

Aşağıdaki örnekler şu ortamda test edilmiştir:

  • 64 bit Windows 10 Pro işletim sistemli bilgisayar;
  • JDK 1.8 (paragraf 22.1);
  • IDE Spring Tool Suite 3.6.3 (paragraf 1);
  • NetBeans 8.1 (paragraf 22.4);
  • Chrome tarayıcısı (diğer tarayıcılar kullanılmamıştır);
  • Chrome eklentisi [Advanced Rest Client] (paragraf 1);
  • WampServer, SGBD, MySQL ve [PhpMyAdmin] araçlarını yönetmek için kullanılır (paragraf 22.7);

JDK 1.8 sürümünü kullanmak önemlidir. Bazı örneklerde bu JDK'in öğeleri kullanılmaktadır. Örneklerin çoğu, IDE, Eclipse [https://www.eclipse.org/], IntellijIDEA Community Edition, [https://www.jetbrains.com/idea/download/] ve NetBeans [https://netbeans.org/] ile açılabilir. Aşağıdaki ekran görüntüleri, Eclipse'in bir varyantı olan IDE Spring Tool Suite'ten alınmıştır.

1.4. Destek

Bu belgedeki Eclipse projeleri [https://tahe.developpez.com/tutoriels-cours/intro-java-spring/serge-tahe-introduction-au-langage-java-et-a-l-ecosysteme-spring/] sitesinde mevcuttur.

Bir bölümdeki projeleri içe aktarmak için, [1-8]'te belirtildiği gibi Eclipse'te aşağıdaki adımları izleyin:

Projelerin çoğu Maven projeleridir. Yükleme işleminden sonra bu projelerde hata oluşursa, [Alt-F5] dosyasını çalıştırın ve [9-10]'te belirtilen prosedürü izleyin. Seçilen Maven projeleri yeniden derlenecektir.