YSBlog

Ayinesi iştir kişinin lafa bakılmaz / Görünür rütbe-i aklı şahsın eserinde…

"Java" ile etiketlenmiş yazıları görüntülüyorsunuz

Eğer daha önce nesneye yönelik bir programlama dili ile çalışmadıysanız ilk bakışta Java’yı anlamanız zor olabilir. Bu yazımızda OOP(Object Oriented Programming-Nesneye Yönelik Programlama) kavramını irdeleyeceğiz.

Nesne nedir?

Nesnenin anlamı aslında günlük hayatta kullandığımızdan pek farklı değil. Nasıl bir masa, sandalye, dolap, araba nesneyse, nesneye yönelik dillerdeki nesneler de bunlara benzer.

Peki, neden nesne? Java dokümantasyonunda bunun için 4 sebep belirtilmiş.

  1. 1. Modülerlik:

Bir nesnenin kaynak kodu diğer nesnelerden ve programdan bağımsız olarak yazılabilir, değiştirilebilir. Mesela matematikle ilgili bir programda dört işlemi yapan bir nesnenin içine kök alma, logaritma gibi özellikleri eklememiz için tüm programın kodunu değiştirmemiz gerekmez. Sadece o nesneyi değiştirerek işimizi halledebiliriz.

  1. 2. Bilgi Saklama:

Dış dünya bir nesnenin sadece metotlarına erişebilir. Böylelikle kendi iç uygulama detayları gizli kalır.

  1. 3. Kodu Tekrar Kullanabilme:

Eğer bir nesne daha önceden siz veya başka bir geliştirici tarafından yazılmışsa siz bunu diğer uygulamalarınızda da kullanabilirsiniz. Sürekli aynı metotları kullanıyorsanız farklı programlarda bunları bir sınıf içinde toplayıp tekrar kullanabilir veya bunları satarak ticari gelir elde edebilirsiniz.

  1. 4. Hata Ayıklama Kolaylığı:

Gerçek hayattan örnek vermek gerekirse mesela bir bisikletin fren nesnesi sorunlu ise fren nesnesini değiştirerek bu sorunu halledebilirsiniz. Programda da aynı şekilde sadece sorunlu olan kısmı onararak veya değiştirerek sorunları giderebilirsiniz. Bu programın bakımında ve hata ayıklamada kolaylık sağlar,

Yukarıdaki dört madde Java geliştiricilerinin gözünden nesneye yönelik program geliştirme konseptinin faydalarını anlatıyor. Aslında ilk başta bazı şeyler havada kalsa da prosedürel bir programlama dilinden sonra nesneye yönelik bir dille program geliştirmeye başladığınızda bu kolaylıkları uygulamalı olarak göreceksiniz.

Class (sınıf) Nedir?

Gerçek hayatta nesneleri sınıflandırırız. Mesela bisiklet sınıfını ele alalım. Bir bisikletin hız, ağırlık ve vites değişkenleri vardır. Ayrıca bu bisikletin hızı ve vitesi değişebilir. Şimdi biraz kod yazalım.

class Bisiklet

{
int hiz;
int agirlik;
int vites;
void hizdegistir(int yenihiz)
{
hiz=yenihiz;
}
void vitesarttir()
{
vites++;
}
void vitesazalt()
{
vites--;
}
public Bisiklet(int a)
{
hiz=0;
vites=1;
agirlik=a;
}
}

Java dilinde bisiklet sınıfını oluşturduk. Şimdi ne yaptığımızı açıklayalım. Class Bisiklet diyerek yeni bir class oluşturduk. Sonra bu sınıfın içinde integer türünden hız, vites ve ağırlık değişkenlerini oluşturduk. Daha sonra bu değişkenler üzerinde işlem yapmak için gerekli hız değiştirme , vites arttırma ve vites azaltma metodlarını oluşturduk. En sonda tanımladığımız metot ise kurucu metot. Yani bu sınıftan bir nesne oluşturulduğunda yapılacak işlemlerin (ilk değerleri verme gibi) belirtildiği metot. Bu metot class ile aynı ismi taşımak zorunda. Classımızı oluşturduk. Şimdi bunu nasıl kullanacağımıza bakalım.

public static void main()

{

Bisiklet bisikletim1=new Bisiklet(10);//Bisiklet classından yeni bir object tanımlıyoruz. Kurucu metot bir parametre aldığı için parametre olarak ağırlık değerini gönderiyoruz.

bisikletim1.hizdegistir(50);//hizdegistir metoduna 50 parametresini göndererek hız değerini 50 yapıyoruz

bisikletim1.vitesarttir();//vites değişkenini bir arttırıyoruz.

}

Kalıtım (Inheritance)

Kalıtım bir sınıftan benzer başka sınıfların oluşturulmasına denir. Az önceki örnekten devam edelim. Biz bisiklet sınıfını oluşturduk ama birçok bisiklet çeşidi var. Dağ bisikleti, yarış bisikleti, iki kişilik bisiklet gibi. Bunlar arasında farklılıklar olmasına rağmen aslında bunların hepsi bisiklet sınıfının alt kümeleri. Yani hepsinin hız değeri, vites değeri, ağırlığı vs. özellikleri var. Nesneye yönelik diller bir sınıftan bir başka sınıf türetilebilmesine izin verir. Bu durumda bisiklet classına superclass diğerlerine ise sub-class ismi verilir.

Kod kısmına bakacak olursak bir sınıftan başka bir sınıf türetmek için extends sözcüğünü kullanırız.

class dagBisikleti extends Bisiklet

{

//bisiklet sınıfına ek olarak yazılacak yeni değişken veya metotlar

}

Classları yazarken bu classtan başka bir class türetilmesini engelleyebilir, bazı metot veya değişkenleri alt sınıflardan saklayabiliriz. Bu konuyu ilerleyen makalelerde ele alacağız.

Arayüzler (Interfaces)

Aslında çok farkında olmasak da günlük hayatımızda bir çok arayüz kullanıyoruz. Karışık yapılarda işleyen makinelerin bizim kullanmamız için tasarlanmış ve basite indirgenmiş kontroller içeren kumanda panelleri buna örnek olarak gösterilebilir. Şimdilik giriş aşamasında bu kadarını söyleyelim. İleride detaylı oalrak inceleyeceğiz bu konuyu.

Özet

Nesneye yönelik programlamanın temel kavramlarına Java penceresinden baktık. Burada belki nesne ve sınıf kavramları karışabilir. Onu da şu şekilde açıklığa kavuşturabiliriz. Nesne sınıfın bir örneğidir. Yani bir sınıf tanımlanır ve bu sınıftan bir çok nesne üretilir.

Bu makalede işin detayına ve kod kısmına çok girmeden sözel olarak nesneye yönelik programlama konseptini açıklamaya çalıştık. Burada bahsettiğimiz kavramları ilk defa görüyorsanız sizi korkutabilir. Fakat ileride detaylı olarak incelediğimizde daha iyi anlayacağınızdan emin olabilirsiniz.

Yavuz Selim Bilgin

Fotografçilar ikiye ayrilir. Bir kismi kesinlikle Nikon derken diger kisin ise Canon’dan vazgeçemez. Ben piyasayi da buna benzetiyorum. Istisnalar disinda Java platformunda çalisip .Net in de hakkini vermek lazim sunu sunu iyi yapiyorlar diyen, veya .Net ile çalisip Java ile ilgili güzel sözler eden birisini henüz görmedim. Aslinda iki tarafin da belli basli klasik tezleri var. Onlari söyleyip duruyorlar. Tabi ki isin hakkini veren insanlar vardir fakat ben genel profil açisindan bu degerlendirmenin dogru olduguna inaniyorum.

Bir süredir siki fiki oldugum. Net’le olan serüvenime kisa bir ara verip Java semalarina dogru bir yolculuga çikma düsüncesi aklima uzun zamandir gelip gelip gidiyordu. Ama bu sefer basardim sanirim. Bir gece vakti gerekli programlari bilgisayarima yüklemek suretiyle baslamis oldum.

Internet üzerinde.Net ile ilgili çok fazla makale vs. kaynak var. Fakat Java ile ilgili özellikle de Türkçe doküman aradiginizda maalesef ayni bollukla karsilasmiyorsunuz. Bunu Google üzerinden yapacaginiz küçük bir deneyle de anlayabilirsiniz.

Ben de bu serüveni hem ögrendigim seylerin üzerinden geçmek hem de daha sonra ayni yolu izleyeceklere kolaylik olmasi açisindan paylasmaya karar verdim.

Helva yapmak için un,yag,seker bunlarin yaninda tencere,kasik ve ocak ayrica bu islemi gerçeklestirecek bir asçiya ihtiyaç oldugu gibi Java ile program yazmak için de bazi seylere ihtiyacimiz var. Bu yaziyi okudugunuza göre asçi konusunda sikintimiz yok. Simdi tencere tava konusunu halledelim.

Yazdigimiz kodlari derlemek için öncelikle JDK(Java Development Kit) in bilgisayarimizda kurulu olmasi gerekli. (Indirmek için tiklayin.)

Kodlari Notepadde yazip komut satirindan derleyebilecegimiz gibi (JDK kurulu olmak kaydiyla) bir IDE kullanarak islerimizi kolaylastirabiliriz. Isin mantigini görmek amaciyla ilk örnegimizi ilk yolla derledikten sonra çok genis olmayan Java IDE yelpazesinden benim kendime en yakin gördügüm IDE olan NetBeans’i kullanacagiz.(Indirmek için tiklayin.)

Tencere,tavayi hallettik. Ocak olarak da bilgisayarimizi kullaniyoruz. Ne kaldi un,yag,seker,su vs. Bunlari da bu yazi dizisinde beraber kendimiz üretecegiz.

Bu arada asçiya da deginmek lazim. Verecegimiz tarifi yapacak asçinin bazi özelliklere sahip olmasi lazim. Öncelikle temel bilgisayar bilgisi. Sonra temel programlama ve algoritma bilgisi. Tercihen temel C,C++ veya C# bilgisi fena olmaz. Çünkü kim kimin kopyasi bilemiyorum fakat c# ile aralarinda büyük bir benzerlik var.

Neden Java konusuna girmiyorum. Bu yaziyi buraya kadar okudugunuza göre geçerli bir veya birkaç sebebiniz var demektir.

Simdi biraz terimler üzerinde duralim. Netbeans download sayfasini açtiysaniz bir sürü seçenekle karsilastiniz ve muhtemelen de ne farklari oldugunu anlamadiniz. Ben de ilk gördügümde anlam verememistim.

Bazi kisaltmalara açiklik getirelim.

Java SE:

Java Standart Edition

Java EE:

Java Enterprise Edition

Java FX:

Zengin internet uygulamalari gelistirmek için kullanilan bir yazilim platformu (wikipedia)

Java ME:

Java Mobil Edition

Açikçasi serüvenin basinda oldugumuz için bazi seyleri ben de net olarak bilemiyorum fakat su anda isimizin Java SE ile oldugunu söyleyebilirim. Siz yine de NetBeans’in Java veya Full sürümlerini indirebilirsiniz.

Simdi gelelim Java’nin çalisma mantigina. JVM(Java Virtual Machine) kavramini duymussunuzdur. Aslinda java programlarimizi bilgisayarimiz üzerinde çalisan bir nevi sanal makine olan jvm çalistirir. Platform bagimsizligi denen hadisenin kökeninde de bu var zaten.

Yukaridaki resimler sanirim temel mantigi anlatiyor. Zaten ilerleyen süreçte bunu daha iyi anlayacagiz.

Programlarin kurulum asamalarini yapabileceginizi düsünerek “Hello World” uygulamamiza geçelim.

public class HelloWorld
{
public static void main(String args[])
{
System.out.println("Selam Dünyali Biz Dostuz");
}
}

Ilk olarak public olan ana sinifimizi olusturuyoruz.

Main metodumuz dogal olarak public ve static olmak zorunda. Args[] ise komut satirindan programa ulasirken parametre göndermek için kullaniliyor.

C#daki System.Console.WriteLine() metodunun karsiligi olarak burada System.out.println() metodu bulunuyor. Adindan da anlasildigi üzere tek satirlik yazi yazmaya yariyor ve yine dogal olarak String cinsinden parametre aliyor.

Simdi not defterimizi açarak bu kodumuzu yazalim. HelloWorld.java olarak kaydedelim. Burada dikkat etmemiz gereken nokta classimizla dosya isminin birebir ayni olmasi.

Resimde yolunu gördügünüz (tabi ki bu sizin kurulumunuza göre degisecektir) klasörün içindeki javac.exe(JAVACompiler) dosyasina parametre olarak .java dosyamizin yolunu göndererek HelloWorld.class dosyamizi olusturuyoruz.

Dosyamizin bulundugu yoldayken java dosyaadi.class komutunu girdigimizde programimizin çalistigini görüyoruz.

Hayirli olsun. Java dünyasina selamimizi verdik. Her seferinde bu kadar ugrasacak miyiz? Hayir. IDE ler bu is için varlar. Bundan sonraki örneklerimizi NetBeans kullanarak yapacagiz.

Sanirim simdilik bu kadar yeter. Bir sonraki makalede görüsmek üzere en iyi dileklerimle…