Bölüm 1 - Java'ya Giriş

Programlama Platformu olarak Java

Java programlama dili tamamıyla bir platformdur. Kendi içerisinde içerdiği kocaman kütüphaneler, çok fazla kullanılabilir kodlar ve cross platform olarak güvenlik,taşınılabilirlikle bir çalıştırma ortamı sağlayan kocaman bir platformdur.

Java "White Paper" Buzzwords (Moda Sözcükleri)

Java'nın yazarları bir ikna edici olarak beyaz kağıt üzerinde kendi tasarımlarının hedeflerini ve başarılarını 11 buzzwords üzerinde açıklamıştır.

  1. Simple.
  2. Object-Oriented.
  3. Distributed
  4. Robust
  5. Secure
  6. Architecture-Neutral
  7. Portable
  8. Interpreted
  9. High-Performance
  10. Multithreaded
  11. Dynamic

James Goslingin bu buzzwordler hakkındaki açıklaması:

https://horstmann.com/corejava/java-an-overview/7Gosling.pdf

Simple

Burda ana mevzu Java'nın aslında C++'ın syntaxına istinaden biraz daha temizlenmiş olması örneğin header files, pointer arithmetici (yada bir pointer syntaxı), structures, unions, operator overloading, virtual base classes, ve benzeri .. durumlarının olmaması bu sayede Java'ya basit ve temiz bir kod syntaxı sağlamaktadır. We wanted to build a system that could be programmed easily without a lot of esoteric training and which leveraged today’s standard practice. So even though we found that C++ was unsuitable, we designed Java as closely to C++ as possible in order to make the system more comprehensible. Java omits many rarely used, poorly understood, confusing features of C++ that, in our experience, bring more grief than benefit.

Object-Oriented

Açıkçası Object-oriented programlama, bir programlama tekniğidir ve çoğu programlama dilleri bu tekniği kullanılır örneğin C++,C#,Java gibi diller bu tekniği kullanırlar ve Java'da bu tekniği kendi içerisinde sağlam bir şekilde yansıtır.

Simply stated, object-oriented design is a programming technique that
focuses on the data—objects—and on the interfaces to those objects. To
make an analogy with carpentry, an “object-oriented” carpenter would
be mostly concerned with the chair he is building, and secondarily with
the tools used to make it; a “non-object-oriented” carpenter would think
primarily of his tools. The object-oriented facilities of Java are essentially
those of C++.

Distributed

Java'nın bu güzel özelliği network üzerinde çalışabilen sistemleri yapabilmesidir. Örneğin; EJB, RMI, Microservices, Spring Cloud gibi...

Java has an extensive library of routines for coping with TCP/IP
protocols like HTTP and FTP. Java applications can open and access
objects across the Net via URLs with the same ease as when accessing a
local file system.

Robust

Java'nın bu Robust buzzwordü açıkçası Java'nın çoğu dillere istinaden runtime'da çıkan hataları compiler anında tespit edip göstermesi ve C/C++ gibi dillerde yazılan herhangi bir pointer'in sebep olduğu memory corruptionunu kendisi halledebilmesidir.

Java is intended for writing programs that must be reliable in a variety of 
ways. Java puts a lot of emphasis on early checking for possible
problems, later dynamic (runtime) checking, and eliminating situations
that are error-prone. . . . The single biggest difference between Java and
C/C++ is that Java has a pointer model that eliminates the possibility of
overwriting memory and corrupting data.

Secure

Tabi benim sevmediğim özelliklerinden bir tanesi Secure olması. Java bazı türk attackları imkansız hale getirmesi için yazıldı örneğin:

  • Worms ve Virüslerin yaygın ataklarından birisi olan "Overrunning the runtime stack"
  • Belleğin kendi işlem alanı dışında bozulması
  • Dosyaları izin olmadan okuma ve yazma.
Java is intended to be used in networked/distributed environments.
Toward that end, a lot of emphasis has been placed on security. Java
enables the construction of virus-free, tamper-free systems.

Architecture-Neutral

"Virtual Machine" yapılması tabi yeni bir fikir değildi zamanında çünkü Lisp,Smalltalk ve Pascal gibi süreçler bu teknikle yıllarca uğraştı. Çünkü düşünün kodu derliyorsunuz Java'da ve bytecode'ya dönüştüğünde herhangi bir process üzerinde yani MacOS,Windows,Linux üzerinde direkt olarak o bytecode'yi çalıştırabilirsiniz. Tabi Virtual Machines JIT dediğimiz (Just In Time) özelliğine sahiptir çünkü virtual machine instructions, machine instructionslara kıyasla daha yavaştır bu yüzden daha fazla execute edilen bytecode sequences'ları makine koduna otomatik derler ki bir daha derlemeyi yapmasın bu yüzden daha hızlı çalışabilsin diye. JIT içerisinde bu süreçler yani belirlenen sık sık kullanılan methodlar HotSpot ile işaretlenir ve böyle kalırlar bu sayede artık yorumlama yapıldığında bir daha aynı methodu yorumlamazlar.

The compiler generates an architecture-neutral object file format. The
compiled code is executable on many processors, given the presence of
the Java runtime system. The Java compiler does this by generating
bytecode instructions which have nothing to do with a particular
computer architecture. Rather, they are designed to be both easy to interpret on any machine and easy to translate into native machine code
on the fly.

Portable

!! Güzel ve Önemli özelliklerdendir, Java'da int her zaman 32-bittir. C/C++'da ise int 16-bit integer, 32-bit integer yada compiler vendor'ün belirlediği duruma göre değişir. Bu kafa karışıklığı yüzünden Java'nın güzel özelliği olan artık nerede olursa olsun int'in Java'da 32 bit olması en azından geliştiricinin baş ağrısını azaltır. String'ler ise Java'da Unicode format ile kaydedilir.

Örneğin Java'da dosyalar,regular expressions, XML, tarih ve zaman (date and time), databases, network connections, threads ve gibi gibi... konular üzerinde bulunduğumuz işletim sistemi üzerinde herhangi bir şüphe olmadan çalışabilir. Programlarınız taşınabilir olmakla kalmıyor, aynı zamanda Java API'leri yerel olanlardan daha kaliteli oluyor.

Unlike C and C++, there are no “implementation-dependent” aspects of
the specification. The sizes of the primitive data types are specified, as is
the behavior of arithmetic on them.

Interpreted

Örneğin R,Scala ve Python gibi interpreted dillerde otomatikmen bir şey yazınca direkt olarak hızlıca karşılığı alıyorduk çünkü dil interpreted ve hızlıca çıktı veriyordu tabi Java'da bu süreç jshell aracı ile yapıldı. Java 9 ile gelmiştir ve traditional olarka kullandığımız yöntem olan javac yöntemini ortadan kaldırmıştır.

The Java interpreter can execute Java bytecodes directly on any machine
to which the interpreter has been ported. Since linking is a more
incremental and lightweight process, the development process can be
much more rapid and exploratory.

High-Performance

Java'da artık geçmişte olan traditional compiler'a kafa tutan özelliklerden birisi olan just-in-time compilers sayesinde artık bu eski, traditional olan compilerlara rekabet halinde gelmiştir. Çünkü jit compiler sayesinde hangi kod sık sık çalıştırıldı ve bunun hızını optimize etti gibi özellikleri bu compiler halleder.

While the performance of interpreted bytecodes is usually more than
adequate, there are situations where higher performance is required. The
bytecodes can be translated on the fly (at runtime) into machine code for
the particular CPU the application is running on.

Multithreaded

Java concurrent programlamayı destekleyen ilk mainstream diliydi. Çünkü artık Moore's kanunu bitti ve daha hızlı processors ve daha fazla olanlardan kullanmak yerine programlama dilleri sayesinde concurrent bir şekilde cevaplar verilebiliyor, örneğin web programlama için bir processör bir vakit zaman harcayacağına bunu threadlar haline yayıp concurrent (eş-zamanlı) bir şekilde cevaplar verdirilebiliyor.

[The] benefits of multithreading are better interactive responsiveness and
real-time behavior.

Dynamic

Java'da bir program çalıştırırken başka sınıfları yükleyebilme, bellek yönetimini yapma ve değişikliklerine ayak uydurma özelliği sayesinde bu buzzword kullanılmıştır.

In a number of ways, Java is a more dynamic language than C or C++. It
was designed to adapt to an evolving environment. Libraries can freely
add new methods and instance variables without any effect on their
clients. In Java, finding out runtime type information is straightforward.

Java Applet ve Internet

Fikir çok basit, kullanıcılar internetten Java bytecode'leri indirecek ve kendi bilgisayarlarında çalıştıracaklar. Web'de çalışan bu Java programlarına biz applet'ler diyoruz. Bir appleti kullanmak için, Java-enabled bir browser'a ihtiyaç vardır çünkü bu bizim için bytecode'leri çalıştıracaktır.

Tabi ilk çıktığında çok fazla heyecan yarattır çünkü çoğu insan düşündü ki appetler artık java'nın şaşırtıcı popülaritesinden sorumlu. Fakat ilk heyacan bi süre sonra hayal kırıklığına uğradı. Çünkü Netscape ve Internet Explorer'ın çeşitli versiyonları farklı Java versiyonlarını çalıştırıyordu ve bazırları outdated kalmıştı. Tabi bu en son Java'nın sürümnde appletleri geliştirmek için artık bir problem haline gelmiştir. Bunun çözümü olarak , Adobe'nin Flash teknolojisi tabi ki poüler hale geldi. Java tabi bundan sonra bazı güvenlik problemleriyle rahatsız edildi artık browserlar applet desteklemeyi bitirdiler.

Java'nın Kısa Tarihçesi

1991 yılında James Gosling amcamız ve Patrick Naughton ile birlikte Sun'da çalışan bir ekip birleşip kablo TV kutuları gibi elektronikler için bir programlama dili tasarlamak için yola çıktılar. Amaç, cihazların CPU mimarisinden bağımsız, küçük ve sıkı kod üreten bir yapı kurmaktı. Bu dönemde bu projenin adı "Green" olarak isimlendirilmiştir.

Gosling amca, C++ üzerine bu dili temellendirdi ve pointer gibi karmaşık kısımları temizledi. Tabi amcamız kendi ofis penceresinin önünde bulunan meşe ağacı olan "Oak" adını da buna verdi. Tabi bu ekip *"7" (Star Seven) adında akıllı uzaktan kumanda geliştirdi ancak satacak müşteri olmadıkları için proje ticarileşemedi.

Tabi artık projeler başarısız olunca ekipte dağılmak üzereyken, ekip İnternetin (World-wide-web) yükseliğini fark etti. "Taşınabilir, güvenli ve mimariden uzak" özelliklerine bağlı web tarayıcıları ve internet ortamı için mükemmel olduğunu düşünüp "Oak" ismi halihazırda tescilli olduğu fark edilince ismini Java olarak değiştirdiler ve 1994-1995 yılında HotJava web browseri SunWorld konferasında tanıtılarak artık bugünkü haline kadar geldi...

Sun, Java'nın ilk versiyonunu 1996'da yayınladı. Artık bu süreçten sonra kısaca; 1998'de Java 1.2 -> Java 2 Standdard Edition Software Development Kit yayınlandı. Tabi buna istinaden cep telefonları,embedded devices için Micro Edition ve server-side processing için Enterprise Edition yayınlandı. Tabi bu böyle gidiyor.... Java 1.3 Java 1.4 Java 2 Java 5.0 ...

Sun Microsystems bazı problemler üzerinden geçerken, Oracle 2009'da Sun Microsystemi satın aldı.

Tek bir hurafeye açıklama getirelim.

Java'nın ilk günlerinde dil interpreteddi yani yorumlanarak çalıştırılyordu artık bugünlerde Java virtual machine jit-compileri kullanıyor.Java başlangıçta interpreted çalışır ama JIT sayesinde sık kullanılan kodlar makine koduna derlenir, bu nedenle modern Java hızlıdır.

← Bloğa Dön