25 Ağustos 2013 Pazar

Android Oyun Programlama Dersleri - Gün 2 - Temel Java








Android oyun programlama derslerinin ikinci gününe hoşgeldiniz. Umarım bu yazı dizisini takip ederek sizin için çok faydalı olacağına inandığım bazı ip uçları ve yöntemlerden yararlanacaksınız. 

GÜN 2, DERS 1-0 : Java İncelemesi

Bu gün birlikte ilk java sınıfımızı yacağız. bazılarınız için bu ilk kez program yaratmak anlamına geliyor...

Ama önce Eclipse hakkında söylemek istediklerim var.

Geçen derste Eclipse hoşgeldiniz ekranında bizi karşılamıştı. Bu ekranı sürekli olarak görmenize gerek yok. Eclipse içindeki "Wellcome" tabını kapatarak bu ekrandan kurtulabilirsiniz. 


Artık Eclipse editörünü her açtığınızda karşınıza gelecek olan ekran ile tanıştınız, Eclipse : Workbench (Eclipse Çalışma Alanı). Bir sürü panel ve komut gözünüzü korkutmasın. Hangisinin ne işe yaradığını ve nasıl kullanıldığını anlatmaya çalışacağım. Şimdilik aşağıdaki maddelere bir göz atalım.

1. Eclipse farklı görevler ve çalışma şekilleri için farklı görünümlere bürünebilir. Bu görünümlere Perspective denilmektedir. Şu anda kullanılan perspective JAVA olmalı. Eğer Java değilse aşağıdaki komut seti ile Java olarak ayarlayabilirsiniz.

Window > Open Perspective > Other > Java.



2. Ekranın en altındaki panele bakın, orada "Console" adında bir sekme varsa devam edin.
Sekme yoksa Window > Show View > Console komutu ile görünmesini sağlayabilirsiniz.


Artık Eclipse kullanarak programlama yapmaya hazırız !

"Package Explorer" başlıklı panele bir göz atın. Ekranın sol tarafında olmalı. Bu panel sizin Eclipse projelerinizi takip edeceğiniz, organize edeceğiniz Paket Göstericisi. Artık kodlamaya hazırsanız başlayalım !

1. File > New > Java Project komutunu verin.
2. Projeniz için bir isim verin (İsimde boşluk ve Türkçe karakter kullanmamanız gerektiğini söylememe gerek yoktur umarım.)


3. Finish yazan butona basın. Böylece yeni projenizi "Package Explorer" alanında görmeye başlamanız gerekiyor.
4. "Package Explorer" içindeki projenize çift tıklayın. Aşağıdaki gibi bir ekran görüntüsü olmalı.


5. src klasörüne sağ tuş ile tıklayın, New > Class komutunu vererek yeni bir Java Class dosyası yaratın. Bu dosyaya bir isim vermelisiniz ve genelde bu isim "MerhabaDunya" olur.(Programcı Jargonuna göre isim vermek zorunda değilsiniz ama genelde iki kelimeden oluşan dosya isimlerinde ilk ve ikinci kelimelerin ilk harflerini büyük yazarız. Ayrıca ilk programa MerhabaDunya isimini koymak Hakkı ÖCAL hocamızın bize öğrettiği ilk şeydir.


6. ve nihayet aşağıdaki ekranı görüyor olmalısınız.


Hızlıca java yazım kurallarına yada gramerine bir göz atalım.

1. Bordo renkli "public class" kelimeleri kendilerinden sonra gelen "MerhabaDunya" adında bir sınıf oluşturulduğunu anlatır. Bu sınıf public yani diğer sınıflar tarafından ulaşılabilir bir sınıftır.

2. Süslü parantezler sınıfın başlangıç ve bitiş noktalarını belirlerler. Tüm sınıfınız bu iki parantez arasında olmalıdır. Java dili yazarken çift tırnak ( " " ), tek tırnak ( ' ' ), süslü parantez ( { } ) ve noktalı virgül ( ; ) karakterlerini çok yoğun olarak kullanırız. Bir miktar pratik yaptığınızda süslü parantezler ve noktalı virgül artık farkında bile olamadan her satır sonunda gerekli yere eklemeye başlayacağınız birer refleks haline gelecektir.

Peki nedir bu sınıf ?

Sınıfları anlamak için önce objeleri anlamamız gerekir.

Programlama dilinde objeler gerçek dünyadaki objeler gibidir. 

Gerçek dünyada objeler belirli özellikleri tanımlanabilir. Örneğin telefonunuz bir objedir ve çalışma durumu : Açık / Kapalı olarak tanımlanabilir. Objelerin alt özellikleri de olabilir. Telefonunuz açık ve bir müzik çalıyor, Açık ve Şarj oluyor durumda olabilir.

Programlama dilindeki objeler buna çok yakındır. Durumları, alt durumları, özellikleri bulunur. Hatta değişkenleri, fonksiyonları v.b.

Bir sınıf objenin temel özelliklerini tanımlayan plan/proje dosyası gibidir. Sınıflar ile objeler yaratılır, özellikleri ve durumları eklenir.

Daha önce yarattığımız "MerhabaDunya" sınıfı iyi bir örnek sayılmaz. Bu sebeple aşağıda size bir Telefon Sınıfı yaratarak demek istediğimi anlatmaya çalıştım.

public class Telefon{

     // Telefonun özelliklerini tanımlayan değişkenler yaratalım
     int agirlik = 0;
     boolean acildi = false;
     String color = "turuncu";

     // Bu metod telefonun açılması durumunu kontrol edecek
     void TelefonuAc(boolean acildi){
          if(acildi == true){
               acildi = false;
          }else{
               acildi = true;
          }
     }

}

(Bu mükemmel bir program örneği değil. Yukarıdaki kodun büyük ihtimalle hiçbir anlamı yok ancak size yazım kurallarını ve obje mimarisini anlatır diye umuyorum)

Hadi bu sınıfı inceleyelim ; Parantezlere özellikle dikkat etmenizi istiyorum. Kaç tane parantez açıldı ise o kadar parantez kapatılmıştır. Hiyerarşiyi daha iyi anlayabilmek için yazımda tab boşlukları kullanılmıştır. Böylece kodu okumak daha kolay hale gelir. Parantezler bilgisayar dünyasında çok önemli karakterlerdir. Yazım sıraları, yazılış şekilleri görevlerini değişken hale getirir. Örneğin burada süslü parantezlerin bir tanesi eksik kaldığında yazılım hata verecektir.

Eğer daha önce hiç programlama ile uğraşmadıysanız bu durum size çok karmaşık gelecektir. Sonuçta bu yeni bir dildir. Bugün ingilizce veya portekizce öğrenmeniz ile java öğrenmeniz arasında hiç bir fark yok..

Biraz daha açıklayıcı olmaya çalışalım :

// ile başlayan satırlar açıklama satırlarıdır. Yazılım kodunun içine notlar almanızı sağlarlar. Bu notları kendinize hatırlamak için alabileceğiniz gibi programcıların da kodu okuduklarında anlamalarına yardımcı olacak notlar alabilirsiniz. // ile başlayan satırlar dil yorumlayıcısı tarafından kod olarak yorumlanmazlar.

ilk açıklama satırından sonra 3 durum (bizim dilimizde cümle) görüyorsunuz. noktalı virgül ile bitiyorlar. Bunlara kod satırı diyebilirsiniz.

     int agirlik = 0;
     boolean acildi = false;
     String color = "turuncu";

Bunlar değişkenlerdir. Değişkenler basitçe içinde belirli bir tipte veri tutabilen kaplar gibidir. Burada sizlere temel programlama konusunu anlatmak istemiyorum. O yüzden ilerlemeye devam edeceğiz.

Büyük ihtimalle her satırın noktalı virgül ile bittiğini fark etmişsinizdir. Java dilinde noktalı virgül satır sonu anlamına gelmekte, yeni bir komut satırının başlayacağını, mevcut satırın bittiğini ifade etmektedir.

Burada büyük dikkat gerektiren başka bir konu ise java dilinin case sensitive bir dil olmasıdır. Yani java büyük ve küçük harf duyarlıdır. Bir çok acemi programcı asla bulamadıkları hataları bu yüzden almaktadır.

Yani "MerhabaDunya" ile "merhabadunya", "Merhabadunya" ve "merhabaDunya" farklı nesnelerdir.

Neyse, java hakkında sık sorulan sorular ve cevaplarına şu bağlantı ile ulaşabilirsiniz.

http://www.javacoffeebreak.com/faq/

GÜN 2, DERS 1-1 : İsimlendirme Hakkında Hızlı Ders

Java kullanırken sınıf, nesne ve değişkenlere isimler vermek zorundasınız. İsimlerin ne olacağına ve nasıl yazılacağına siz karar vereceksiniz. (Türkçe karakter ve boşluk kullanamazsınız. Bazı özel karakterleri kullanamazsınız. Program sizi zaten uyaracaktır) buna rağmen bazı özel kelimeleri isim olarak kullamazsınız. (Ör : public, static, int, void gibi komutları isim olarak kullanamazsınız.)

Sınıflar genelde şu şekilde isimlendirilir :

OrnekSinifAdi

Metodlar ise şu şekilde isimlendirilir :

ornekMetodAdi()

ve değişkenler de bu şekilde isimlendirilir :

ornekDegiskenAdi

Komik gelecek ama buna "Camel Casing" yani "Deve Adlandırması" denilir. Bu bir kural değildir ve zorunlu değildir ancak her dilin olduğu gibi javanın da jargonu vardır ve jargona uymak sizi diğer programcıların gözünde daha saygıdeğer gösterir.

GÜN 2, DERS 1-2 : İlk Program

Evet şimdi MerhabaDunya adında bir sınıfımız var.
public class MerhabaDunya {

}

Bu sınıf içerisine bir metot ekleyeceğiz. Bu metot "main" adında özel bir metot. main metodu java programı çalıştırıldığında ilk çağrılan metottur. Yani çalıştır tuşuna bastığınızda bu metot çalışmaya başlayacaktır.

Main Metot Tanımlanması

public static void main(String[] args){

}

1. public, static, void : Java tanımlayıcıları

Daha öncede anlattığım gibi java dilinde bazı kelimeler özel anlamlar taşıyan komutlardır. Bu kelimelerin belirli bir sıra ile yazılması sonucu kendi sınıf, obje ve metodlarınız belirli özellikler kazanır. Burada çok fazla java dersine girmek istemiyorum. Sonuçta buraya Oyun Programlama öğrenmek için geldiniz. Ancak bazı temel konulara mutlaka göz atmamız gerekiyor. Neyse şu özel kelimelere bir bakalım :

public : Diğer sınıflar tarafından görülebilir. Bir java uygulaması birden fazla sınıftan oluşabilir. Bazen bu sınıflardan birinin diğerinin içindeki bir veriyi, değişkeni okuması veya bir metodu kullanması gerekebilir. Bu durumda bu koda erişim vermek üzere public tanımlanır. Tam zıttı private dir ve erişimi kesinlikle yasaklamak anlamına gelir.

static : Anlamı bu sınıftan sadece bir tane olduğudur. main sınıfının tekil olduğunu anlatır. static olmayan sınıflardan birden fazla yaratılabilir, böylece her kopya kendi değerlerine sahip olabilir. Bu durumda programınızın nasıl dengesizleşeceğini tahmin edebilirsiniz. Örneğin bilgisayarınızda birden fazla başlat menüsü olsaydı veya iki fare imleci olsaydı ne kadar zorlanırdınız değil mi ? Aynı şekilde bazı sınıflardan program içinde sadece bir tane olması gerekir. static kelimesi bu tekilliği sağlayacaktır.

void : Bir metot çağırdığımızda (Çağırmak çalıştırmak anlamına gelir) program o metottan bir sonuç dönmesini bekleyecektir. void tanımlanan metodun/fonksiyondan bir sonuç dönmeyeceği anlamına gelir. (Bunu şöyle örnekleyelim : Evinizde anneniz size birşey söylediğinde sonuç dönmesini beklerken babanız void çalışmaktadır. Anne : Oğlum yemeğini ye, yemeğini yedinmi, tabağın bittimi gibi sorular sorarak verdiği komutun sonucunu öğrenmek istemektedir ancak Baba : Kapıyı kapat ! dedikten sonra kapatıp kapatmadığınızı sormaz) Aynı şekilde bazen programınızın sonucunu zaten bildiğiniz birşeyi yapmasını istersiniz. Bu durumda sonucu zaten bildiğinizden bir sonuç döndürmesi gerekmez.

Bu anlaması zor gelen bir bölüm oldu. Ama merak etmeyin zaman içerisinde yazdıkça anlayacaksınız. Kimse dünyaya programcı olarak gelmiyor. (Sanırım ben hariç....)

2. Metotlar ve Fonksiyonlar : Parametreler

Bazı metotlar çağrılırken bir parametreye gerek duymazlar (Kapı örneğini ele alalım, baba kapıyı kapat dediğinde çocuk sokak kapıyı kapatacaktır. Bir parametreye gerek yoktur)

metotBir()

Bazı metotlar ise çalışmak için parametrelere ihtiyaç duyarlar. (Annenize çoraplarım nerede diye sorduğunuzda alacağınız cevap "Çekmecede" şeklinde olur ve siz parametreye ihtiyaç duyarsınız "Hangi çekmecede ?")

metotIki(int cekmeceNo)

fonksiyon ve metotların parametre alması demek o metoda bir veri göndereceksiniz ve o veri ile bir şey yapacak demektir. Programı yazdıkça bu bölümü daha iyi anlayacaksınız.

3. main metodu ve parametreleri

main(String[] args)

Bildiğimiz gibi (veya sizin yeni öğrendiğiniz gibi) main metodu çalışmak için bazı argümanlar yani parametreler istemekte. Bu parametreler string türünde yani metin formatında olmalı. Buradaki köşeli parantezler ( [ ] ) ise bu parametrelerin bir array yani dizi olduğunu anlatmakta. (Array yani dizi, tv dizisi gibidir sürekli olarak sonu gelmeden yeni bölümler eklenebilir. Burada string array ise birden fazla metin türünde veri alabileceği anlamına gelir. "Parametre bir", "parametre iki", "isim", "çalıştır beni", "tırmala beni şakir" gibi bir metin dizisi olabilir.)

Şu anda bu anlattıklarımın neden veya nasıl olduğunu anlamanız gerekmiyor. Güvenin bana ilerledikçe daha anlaşılır şekilde ve örnekler ile bunların tamamını zaten deneyeceğiz.

Aşağıdaki main metodu eklenmiş olan MerhabaDunya sınıfını kopyalar ve Eclipse penceresine yapıştırıp çalıştırırsanız çalışacaktır.
public class MerhabaDunya {
	
	public static void main(String[] args){
		
		
	}

}

Ancak bir problemimiz var. Main fonksiyonu (bundan sonra metod yerine fonksiyon kelimesini kullanalım daha anlaşılır oluyor) hiçbir görevi yerine getirmiyor. Yani hiçbirşey yapmıyor. Bu durumda çalışıp çalışmadığını anlayamayacağız.

Bu yüzden main fonksiyonumuza bir görev vermeliyiz.

public class MerhabaDunya {
	
	public static void main(String[] args){
		
		System.out.println("Selam. XD");
		
	}

}

Böylece main fonksiyonuna bir görev vermiş olduk. Ekran çıktı alanına bir satır yazmasını söyledik. Eğer herşey yolunda gitti ise Eclipse araç çubuğundaki play tuşuna bastığınızda size dosyaları kaydetmeniz gerektiğini söyleyecek ve kayıt işleminden sonra programı çalıştırarak console panelinde "Selam. XD" yazacaktır.


Biliyorum bu noktaya kadar çok sancılı bir konu oldu, hatta bazılarınızın şimdiden gözü korktu bile ama en azından şunu söylememe izin verin. Bilgisayar programcılığı hele hele oyun programcılığı kolay bir iş değildir. Sadece bir çıktı penceresine "Selam" yazabilmek için ne kadar efor sarfettiğinizi düşündükten sonra lütfen şunu hatırlayın ; Oynadığınız oyunların yanında bu denizde bir kum tanesi bile etmez !

Bu yüzden oyun/uygulama geliştiricilere yaptıkları iş hakkında bir cümle kurmadan önce lütfen iki kere düşünün.

Zor kısmı geçtik, bundan sonrası kolay kısım. Söz veriyorum bu yazı dizisini takip ederseniz sizin için hem eğlenceli hem de geliştirici ve faydalı olacak. 3. günde görüşmek üzere.

Okuduğunuz için teşekkür ederim.






Dip Not : Sizinde fark ettiğiniz gibi bir ders hazırlamak gerçekten zor. Bu yüzden internette Türkçe kaynak bulmak gerçekten zor hale geliyor. Bir dersin hazırlanma süresi sizin onu okuma sürenizden defalarca kez fazla. Derslerin devamı ve ücretsiz kalması için desteğinizi lütfen esirgemeyin.

Destek olmak için :

1. Bağışta bulunabilirsiniz. Sağ taraftaki "PAYPAL DONATE" butonunu kullanarak bağış yapabilirsiniz.
2. Derslere yorum yazabilirsiniz. Farkettiğiniz hataları, Eleştirilerinizi veya takdirinizi belirtmekten çekinmeyin.
3. Dersleri facebook, twitter gibi sosyal medya ortamlarında ilgisini çekeceğini düşündüğünüz arkadaşlarınız ile paylaşın.
4. Emeğime saygı gösterin ve metni kopyalayıp forumlara yapıştırmayın. Bunun yerine dersin linkini yayınlayın. Merak etmeyin o forumu okuyabilen insanlar bu sayfayı da okuyabilirler...

Teşekkürler.


Hiç yorum yok:

Yorum Gönder