Eğer bir bilgisayar mühendisi ya da yazılımcı değilseniz java diliyle çok içli dışlı olmayabilirsiniz. Genellikle mühendislik öğrencilerine C dili eğitimi verirler. Fakat çoğu mühendislik öğrencisi belli bir programlama deneyiminden sonra java dilinin olmazsa olmaz olduğunu anlar ve java öğrenmeye karar verir. Açıkçası C tabanı olan birinin java öğrenmesi de o kadar zor değildir.
İlk olarak biraz programlama kavramından ve ne anlama geldiğinden bahsetmek istiyorum. Aslında programlama dediğimiz şey dijital elektroniğin ihtiyacından meydana gelmiştir. Dijital elektronik, birbirini aritmetik ve mantıksal olarak tetikleyen dijital devrelerden oluşmaktadır. Bu mantıksal devreleri, istenilen bir işlemi yapmak üzere kurmak, onları programlamak olarak tanımlanabilir. Mesela bir C dilinde yazdığınız bir program, bir bilgisayar işlemcisinin içerisinde anahtarlama ve mantıksal kapılar olarak kullanılan milyarlarca transistörü istenilen şekilde kurar. Ve bu şekilde istenilen işlemi icra etmiş olursunuz.
Yine mühendisler bilirler ki bir dijital sistemi programlama en temelde dijital bilgi olan ikilik tabandaki 0 ve 1 sayılarıyla gerçekleştirilir. Bunu somutlaştırmak için çok basit bir örnek vereceğim. Aşağıda transistörlerden oluşturulmuş bir “Ve kapısı” görüyorsunuz. “Ve kapısı” girişindeki iki dijital değeri kıyaslayarak çıkış verir. Eğer ben “Ve kapısının” çıkışından “mantıksal 1” dijital değerini almak istiyorsam, kapının iki girişine de(A ve B) “mantıksal 1” dijital değerini vermek zorundayım. Ve bu kapının ki input değerine de “Mantıksal 1″ ” değeri verdiğimde istediğim sonucu yani “Mantıksal 1” sonucunu elde etmiş olurum. Böylelikle bu dijital devreyi programlamış olurum.
Buradan anlaşılacağı üzere tüm dijital devreleri programlamak, en temelde dijital devrelerin girişlerine ikilik tabanda sayı sistemlerinin uygulanması ile gerçekleştirilir. Örneğin; “0101000101001010101011010101010101000101010”. Yani programlama bu şekilde yapılır. Zaman ilerledikçe yapılan kompleks dijital devreler kompleks programalara ihtiyaç duymuş ve yazılan bu ikilik tabandaki sayıları modül modül birleştirip diller oluşturmaya başlanmış. Ve programlama dilleri oluşmuş. Bu sayede gelişen programlar, daha kullanışlı programlama dillerine daha kullanışlı programlama dilleri de daha kompleks ve donanımlı dijital devrelere ihtiyaç duymuşlar ve doğal olarak bu zincir sürekli olarak birbirini tetiklemiş, gelişmeye muhtaç bırakmış.
İşte derleyicilerin görevi budur. Yukarıdaki resmin anlattığı üzere makina dili ile insan dili arasındaki tercümanlık olayı.
C dili Orta seviyeli bir programlama dilidir. Ve c dili kullanılarak daha başka derleyiciler de geliştirilmiş. Mesela Java programlama dili, C dili kullanarak geliştirilmiştir. Mesela C dilinde bir program yazıyorsunuz. Ve Program yazarken çeşitli kullanışlı fonksiyonlar yazıyorsunuz. Bu fonksiyonlardan o kadar çok yazdığınızı düşünün ki artık c dilinin o kendine has komutlarını kullanmak yerine yazdığınız fonksiyonları kullanır oldunuz. Hayırlı olsun. Yeni bir dil geliştirmiş oldunuz. 🙂
1987 yılında Java SUN bilgisayar şirketince elektrikli ev araçlarının (mikrodalga fırınları, buzdolapları , televizyonlar, uzaktan kumanda cihazları vs.) birbiriyle haberleşmesini sağlamayı amaçlayan bir proje başlatılmış. İlk olarak projede çalısmara C++ dili kullanılarak baslanmış fakat bu dilin proje için yeterli olmayacağı görüldüğü için, mühendisler yeni bir dil geliştirmeye ihtiyaç duymuşlar. Böylelikle ilk adı “Oak” olan bu dili geliştirmişler. daha sonraları bu dil daha sonraları yerel bir kafeden çagrısım yapılarak Java ismini almış. O günlerden bu güne Java halen gelistirilmekte olan ve günümüzde pöpülaritesi tartısılmaz olan bir dil olarak kullanılmaktadır.
Java nesne yönelimli bir programdır. Hep bahsedilir. Nesne Yönelimli program falan diye. Ama daha önce nesne yönelimli program kullanmayan C kullanıcıları bu tabirin anlaşılmasında sıkıntı yaşayabiliyorlar. Şöyle düşünebilirsiniz; Bir proramlama dili hayal edin ve burada bir menü tasarladığınızı düşünün. Bu menü bir nesne olduğu gibi bu nesne içerisinde yer alan nesneler de vardır. Butonlar gibi. Buton nesneleri içerisinde de eni, boyu, rengi gibi fiziksel özellikleri tanımlayan alt programlar vardır. Butonun tüm fiziksel özellikleri onu nesne yapar ve nesneler nesneler içerisinde yazılabilir.
Bir programlama dilinin nesne yönelimli olması, dilin kendi özelliği itibariyle aynı amaca yönelik alt programların class denilen yapılar içerisinde toplanmasına ve bu prensibe göre kullanımına izin vermesidir. Aynen menülerden kullanılan butonlar gibi. Nesne yönelimli programcılıgın en önemli avantajlarından birisi, bir projede birbirinden bagımsız olarak tasarlanan sınıf nesneleri kullanılmasıdır. Böylece projeye belli görevlerin eklenmesi veya çıkarılması projenin bütününe dokunmadan mümkün hale gelebilir.
Javayı önemli bir Program dili haline getiren en önemli özelliği, programlarının grafikleri “Wold Wide Web” sayfalarının programlama dili olan html (hypertext markup language) ile aktarılmasıdır. HTML internet belgelerini birbirine bağlamak amacıyla geliştirilmiş bir belge işlem sistemidir ve bir programlama dili değildir. HTML deki applet komutu yardımıyla java dilinde yazılmış programların sonuçları HTML ortamına dinamik olarak aktarılabilir. Bu yüzden html ve java programlarını birlikte kullanmak ve java programlarını gerçek zamanda www sayfalarında göstermek mümkündür. Yani internette web üzerinden görülen tüm görseller java ile aktarılır. Bu yüzden Java, web tasarımcılarının vazgeçilmezidir.
Sonuç olarak java C ile yazılmış bir derleyicidir ve nesne yönelimli olduğu için nesneleri gerçek dünyadakine daha benzer bir yapıda tanımlayabilme olanağı sunar. Nesneleri gerçek dünyadaki gibi masa, sandalye, bilgisayar, gerçek gaz, ısı eşanjörü gibi tanımlayarak programlamak insan beyninin anlaması açısından çok daha kolaydır. Bundan önceki tam nesnel kökenli programlama dillerinden hiçbiri çok yaygınlık kazanmamıştı. Bu tür dillere Smalltalk,u Örnek verebiliriz. C++ nesnel kökenli programlama yapabilen bir dildir. Fakat yapısal (structural) bir programlama dili olan C dilinin bir uzantısı olarak geliştirildiğinden tam anlamıyla nesnel kökenli bir dil olduğu söylenemez.