+1 Daha

Yapay Zeka ile Tasarlandı

Java'nın Kullanım Alanları (Görsel Yapay Zeka ile Oluşturulmuştur)
Java, 1995 yılında Sun Microsystems bünyesinde James Gosling tarafından geliştirilmiş, çok platformlu ve nesneye dayalı bir programlama dilidir. Akıllı telefon işletim sistemlerinden kurumsal yazılımlara kadar geniş bir yelpazede milyarlarca cihaz üzerinde çalışmaktadır. Spotify ve Signal gibi mobil uygulamaların, nesnelerin interneti (IoT) cihazlarının ve ölçeklenebilir kurumsal yazılımların geliştirilmesinde yaygın olarak kullanılır. JavaScript'ten farklı olarak Java, çok platformlu geniş çaplı uygulamalar geliştirmek için kullanılan genel amaçlı, derlenen ve yorumlanan bir dildir (Gosling vd., 2014).
Java; Spotify ve Signal gibi mobil uygulamaların, Twitter ve LinkedIn gibi web uygulamalarının, Minecraft ve RuneScape gibi oyunların, Nesnelerin İnterneti (IoT) cihazlarının ve ölçeklenebilir kurumsal yazılımların geliştirilmesinde kullanılır.
Kurumsal uygulamalar için geliştirilen Java SE platformu, Oracle Java SE Universal Subscription kapsamında Enterprise Performance Pack (EPP) ve Java Management Service gibi araçları barındırır. Ayrıca Oracle Cloud Infrastructure (OCI) bulut platformu, Java dağıtımlarının izlenmesi, optimize edilmesi ve OCI kaynaklarının yönetilmesi için OCI SDK dahil olmak üzere çeşitli altyapı hizmetleri sağlar.
Java'nın geliştirilme süreci 1991 yılında Sun Microsystems bünyesinde başlamıştır. Başlangıçta etkileşimli televizyonlar için "Oak" adıyla tasarlanan proje, dönemin dijital kablo teknolojisi için fazla gelişmiş bulununca programlama diline dönüştürülmüş ve adı "Java" olarak değiştirilmiştir. Geliştiricilerin kolay adapte olabilmesi amacıyla C++ diline benzer bir söz dizimiyle tasarlanan dilin ilk genel sürümü olan Java 1.0, 1996 yılında yayımlanmıştır (Arnold vd., 2005).
Java platformu, piyasaya sürüldüğü 1996 yılından bu yana sürekli evrim geçirmiştir. Başlangıçta 1.0 ve 1.1 gibi alt sürümlerle ilerleyen dil, Java 2 (J2SE 1.2) ile büyük bir yapısal değişikliğe gitmiştir. Günümüzde Oracle tarafından yönetilen Java ekosistemi, Uzun Vadeli Destek (Long-Term Support - LTS) stratejisiyle sürümlenmektedir. Java 8, Java 11, Java 17 ve Java 21, kurumsal dünyada en çok benimsenen ve uzun yıllar güvenlik yamaları alan LTS sürümleri olarak öne çıkmaktadır (Schildt, 2018).
Java, "bir kez yaz, her yerde çalıştır" (WORA - Write Once, Run Anywhere) ilkesiyle faaliyet gösterir. Yazılan bir kaynak kod, doğrudan makine diline değil, Java derleyicisi (javac) tarafından Java Sanal Makinesi'nin (JVM) okuyabileceği bayt koduna (bytecode, .class uzantılı dosya) dönüştürülür. Bu sayede kodlar, tamamen yeniden yazılmaya gerek kalmadan, üzerinde JVM bulunan farklı işletim sistemlerine (Windows, Linux, macOS) kolayca aktarılabilir (Lindholm vd., 2014).
Yazılım sistemlerinde JIT (Just-In-Time) derleme teknikleri, bir programın çalışmaya başlamasının ardından dinamik olarak gerçekleştirilen her türlü çeviri işlemini kapsar. JIT derleme, statik derlemenin çalışma hızı avantajı ile yorumlayıcıların (interpreter) sunduğu avantajları bir araya getirmek için kullanılır. Bu teknik sayesinde derlenmiş programlar daha hızlı çalışırken , yorumlanan programlar ise genellikle daha küçük boyutlu olma ve yüksek taşınabilirlik gibi faydalar sağlar.
Java API (Application Programming Interface), geliştiricilere ağ bağlantıları, veri tabanı işlemleri, matematiksel hesaplamalar ve dosya giriş/çıkış (I/O) operasyonları gibi temel işlevleri hazır olarak sunan geniş bir standart sınıf kütüphanesidir. Geliştiriciler, java.lang, java.util, java.io gibi temel paketleri kullanarak tekerleği yeniden icat etmeden hızlıca ve güvenli bir şekilde kod üretebilirler (Schildt, 2018).
Java'da bellek yönetimi otomatik olarak çöp toplayıcı tarafından gerçekleştirilir ve C/C++ dillerindeki gibi işaretçi (pointer) bazlı manuel tahliye ihtiyacını ortadan kaldırır. Gelişmiş derleyici mimarilerinde çöp toplama işleminin hatasız gerçekleştirilebilmesi için derleyici, çöp toplama için gerekli olan bilgileri toplar ve dışa aktarır. Bu süreç, çöp toplayıcının nesneleri güvenli bir şekilde inceleyebilmesi için, belirli güvenli noktalarda (safepoints) canlı kalan tüm nesne işaretçilerinin (object pointers) kesin konumlarının kaydedilmesini içerir.
JAR (Java Archive), birden fazla Java sınıf dosyasını, ilişkili meta verileri ve resim/ses gibi kaynakları tek bir dosya içinde toplayarak sıkıştıran bir paketleme formatıdır. ZIP formatını temel alan bu yapı, Java uygulamalarının son kullanıcıya dağıtımını ve çalıştırılmasını büyük ölçüde kolaylaştırır (Schildt, 2018).
AWT (Abstract Window Toolkit), Java'nın ilk yıllarında geliştirilen ve işletim sisteminin yerel (native) arayüz bileşenlerini kullanan grafiksel kullanıcı arayüzü (GUI) kütüphanesidir. AWT'nin platform bağımlı kısıtlamalarını aşmak için tamamen Java ile yazılmış, daha esnek, zengin ve hafif (lightweight) bileşenler sunan Swing kütüphanesi geliştirilmiştir (Loy vd., 2002).
SWT, IBM tarafından geliştirilen ve Eclipse entegre geliştirme ortamının (IDE) da temelini oluşturan alternatif bir açık kaynaklı grafik kullanıcı arayüzü araç takımıdır. Swing'in aksine, bulunduğu işletim sisteminin yerel (native) arayüz araçlarını çağırarak çalışır; bu da uygulamalara daha "doğal" bir görünüm ve bazı senaryolarda daha yüksek bir performans kazandırır (Warner & Harris, 2004).
Java HotSpot Sanal Makinesi, sık çalıştırılan uygulama kodlarını (hot spots) optimize ederek performansı artırmayı hedefleyen bir mimaridir. Çalışma zamanı ortamı (runtime environment), derleme çabalarını performansta kritik rol oynayan metotlara odaklamak için uyarlanabilir optimizasyon (adaptive optimization) stratejisi kullanır. Bu optimizasyonlar arasında sınıf hiyerarşisine duyarlı satır içi genişletme (inlining), hızlı-yol/yavaş-yol (fast-path/slow-path) yapıları, global değer numaralandırması (global value-numbering), graf renklendirmeli yazmaç tahsisi (graph-coloring register allocation) ve iyimser sabit yayılımı (optimistic constant propagation) yer alır. Dinamik sınıf yükleme (dynamic class loading) gibi çalışma zamanı değişiklikleri derleyicinin optimizasyon kararlarını geçersiz kılarsa, sistem bağımlı metotları deoptimize ederek (deoptimization) yürütmeyi güvenli bir şekilde yorumlayıcıya iade eder.
Java Applet'leri, web tarayıcıları içinde çalışmak üzere tasarlanmış küçük ölçekli Java uygulamalarıydı. Web'in ilk yıllarında interaktif içerikler sağlamak için popüler olsalar da, güvenlik açıkları ve HTML5/JavaScript gibi modern web teknolojilerinin gelişmesiyle günümüzde kullanımdan kalkmış ve Java ekosisteminden tamamen çıkarılmıştır.
Java Web Start (JWST), kullanıcıların web tarayıcıları üzerinden Java masaüstü uygulamalarını tek tıklamayla indirip başlatmalarına olanak tanıyan bir teknolojiydi. Ağ üzerinden uygulamaların her zaman en güncel sürümünün çalıştırılmasını sağlayan bu teknoloji de modern dağıtım araçlarının gerisinde kalmış ve Java 11 sürümü itibarıyla resmi olarak kullanımdan kaldırılmıştır.
Java, C ve C++ dillerini temel alan, söz dizimi açısından ayrıntılı (verbose) ve güçlü tipli (strongly typed) bir dildir. Her değişkenin veri tipi açıkça belirtilmelidir ve tüm kodlar mutlaka bir sınıf (class) bloğu içinde yer almalıdır.
Java'nın katı nesne yönelimli yapısını gösteren geleneksel "Merhaba Dünya" programı aşağıdaki gibi yazılır:
public class MerhabaDunya {
public static void main(String[] args)
{ System.out.println("Merhaba, Dünya!");
} }
Java'da nesne yönelimli programlama (OOP) mantığını özetleyen, kalıtım ve sınıf yapısını barındıran basit bir araç örneği:
// Üst Sınıf
class Arac {
String marka; public void calistir() {
System.out.println("Araç çalışıyor."); }
}
// Alt Sınıf
class Araba extends Arac {
int kapiSayisi;
public Araba(String marka, int kapiSayisi) {
this.marka = marka; this.kapiSayisi = kapiSayisi;
} }
public class AnaSinif {
public static void main(String[] args) {
Araba benimArabam = new Araba("Volkswagen", 4);
benimArabam.calistir();
System.out.println("Marka: " + benimArabam.marka);
} }
Java, kod içerisine yazılan özel yorum satırlarından (comments) otomatik olarak HTML formatında teknik belgeler üreten Javadoc aracına sahiptir. Geliştiriciler, /** ... */ blokları arasına yazdıkları açıklamalarla kodlarının kullanım kılavuzunu zahmetsizce standart bir formata dönüştürebilirler (Gosling vd., 2014).
Java; Spotify ve Signal gibi mobil uygulamaların, Twitter ve LinkedIn gibi web uygulamalarının, Minecraft ve RuneScape gibi oyunların, Nesnelerin İnterneti (IoT) cihazlarının ve ölçeklenebilir kurumsal yazılımların geliştirilmesinde kullanılır.
Kurumsal uygulamalar için geliştirilen Java SE platformu, Oracle Java SE Universal Subscription kapsamında Enterprise Performance Pack (EPP) ve Java Management Service gibi araçları barındırır. Ayrıca Oracle Cloud Infrastructure (OCI) bulut platformu, Java dağıtımlarının izlenmesi, optimize edilmesi ve OCI kaynaklarının yönetilmesi için OCI SDK dahil olmak üzere çeşitli altyapı hizmetleri sağlar.
Geleneksel ayrı derleme (separate compilation) süreçlerinde bir birimin imzası değiştirildiğinde, o birimi içe aktaran tüm birimlerin yeniden derlenmesi gerekir. Ancak Java platformu, bağlayıcının (linker) birleştirilecek ikili dosyaların (binaries) bütünlüğünü kontrol ettiği esnek bir yapı sunar. İkili uyumluluk, bir türde (sınıf veya arayüz) yapılan değişikliğin, daha önce hatasız bir şekilde bağlanan önceden var olan ikili dosyalarla yeniden derleme gerektirmeden hata vermeden bağlanmaya ve yürütülmeye devam etmesi durumunu ifade eder.
Güvenli Değişiklikler ve Sınırlamalar
Mevcut bir sınıfa yeni alanlar (fields) veya metotlar eklemek, ikili uyumlu değişiklikler olarak kabul edilir. Bu tür değişiklikler, uygulamanın diğer kısımlarının yeniden derlenmesini gerektirmez. Ancak dil spesifikasyonlarında belirtilen her ikili uyumlu değişiklik güvenli bir yürütmeyi garanti etmez; örneğin arayüzlere (interfaces) metot eklemek spesifikasyonlarda uyumlu olarak listelense de her zaman başarılı bir şekilde bağlanma ve hatasız yürütme sağlamayabilir.
Java, çok platformlu geniş çaplı uygulamalar geliştirmek için kullanılan genel amaçlı bir dildir. JavaScript ise, sayfanın yeniden yüklenmesine gerek kalmadan web sayfası animasyonları, açılır reklamlar veya kullanıcı davranışı günlükleri gibi tarayıcı tabanlı işlevleri çalıştırmak üzere betikler (scripts) oluşturmaya yarayan farklı bir teknolojidir.
Java Business Integration (JBI) ve Kurumsal Entegrasyon
Java Business Integration (JBI) veya diğer adıyla JSR 208, heterojen kurumsal ağlarda yer alan farklı işletim sistemleri ve uygulamaların entegrasyonunu sağlamak amacıyla geliştirilmiş bir standarttır. Geleneksel Kurumsal Uygulama Entegrasyonu (EAI) sistemleri, tescilli (proprietary) protokollere ve çoklu format dönüştürme işlemlerine dayandığı için düşük performanslı ve maliyetli yapılar olarak değerlendirilmiştir. Bu sorunların aşılması için JBI, Hizmet Odaklı Mimari (SOA) ve Web hizmetleri (Web services) prensiplerini temel alarak sistemler arası iletişimi soyut bir düzeye taşır.
JBI, tek bir Java Sanal Makinesi (JVM) içinde çalışan, bir kapsayıcı (container) ve eklentilerden (plug-ins) oluşan tak-çıkar (pluggable) bir mimariye sahiptir. Sistemdeki bileşenler, belirli bir protokole bağlı kalmaksızın WSDL (Web Services Description Language) kullanılarak tanımlanmış soyut bir hizmet modeli üzerinden etkileşime girer. Mimari temel olarak şu birimlerden oluşur:
JBI ortamı dışındaki harici hizmetlerin, sistemle iletişim kurmasını sağlayan adaptörlerdir.
Hizmet Motorları (Service Engines - SE): JBI ortamında doğrudan barındırılan alt kapsayıcılardır; XSLT motorları, BPEL sistemleri veya POJO'lar (Plain Old Java Objects) gibi çeşitli mesaj işleyicilerini çalıştırabilirler.
Normalleştirilmiş Mesaj Yönlendiricisi (Normalized Message Router - NMR): Hizmet tüketicileri ve sağlayıcıları arasındaki mesaj alışverişine aracılık eden ana bileşendir. NMR, iletilen mesajları opak (içeriği dönüştürülmeyen) veri olarak ele alır; böylece canonical (tek tip) formatlara dönüştürme zorunluluğunu ortadan kaldırarak performansı artırır.
JBI ortamında yer alan bileşenlerin kurulumu, dağıtımı, başlatılıp durdurulması ve yaşam döngülerinin izlenmesi gibi yönetimsel işlemler, Java Management Extensions (JMX) mimarisi aracılığıyla yürütülür.
JBI ortamındaki iletişim, teslimat kanalları (delivery channels) üzerinden gerçekleştirilir. Tüketiciler ve sağlayıcılar, şu dört standart WSDL mesaj değişim kalıbını (Message Exchange Pattern) kullanır:

Yapay Zeka ile Tasarlandı
Henüz Tartışma Girilmemiştir
"Java Programlama Dili" maddesi için tartışma başlatın
Kullanım Alanları ve Kurumsal Çözümler
Tarihi
Sürümler
Çalışma Mantığı
Bazı Kavramlar
Anında Derleme (JIT - Just-In-Time)
Java API
Atık Veri Toplayıcı (Garbage Collector)
Jar (Java Archive)
AWT ve Swing
SWT (Standard Widget Toolkit)
HotSpot Teknolojisi
Küçük uygulama (Applet)
WebStart
Java Yazımı (Sözdizimi)
Merhaba Dünya!
Kapsamlı Örnek
Dokümantasyon
Kullanım Alanları ve Kurumsal Çözümler
İkili Uyumluluk (Binary Compatibility)
JavaScript ile Farkı
JBI Mimarisi ve Bileşenleri
Bağlayıcı Bileşenler (Binding Components - BC)
Yönetim ve İzleme
Mesaj Değişim Kalıpları (MEP)
Java'nın Avantajları
Java'nın Dezavantajları
Bu madde yapay zeka desteği ile üretilmiştir.