JAVA_3

advertisement
22.06.2013 – Wissen Akademie Java / Android Ders Notları #3
Java Class Yapısı & Paket Düzeni
Şu Ana Kadar, Hep Tek Bir Class’ta Çalıştık. Değişkenleri, Methodları Tek Bir Class’ta Yazdık, main
Methodunu Aynı Class’ta yazdık, Uygulamayı Tek Class Olarak Çalıştırdık. Projenizi, Farklı Class’lara
Bölüp, Bu Class’lardaki Değişkenleri Ve Methodları, Diğer Class’lardan Çağırıp Kullanabilirsiniz.
Örneğin, Çeşitli Şekillerin Alan Ve Çevrelerini Hesaplayan Methodları, Sekiller Diye Bir Class’ta
Yazalım. Uygulamamızıda (main Methodunu & İçeriğini) Test Diye Başka Bir Class’ta Yazalım. Test
Class’ının İçinden, Sekiller Class’ındaki Methodlara Erişip Kullanalım.
Birlikte Kullanılacak Classlar Projenizde Aynı Klasör İçindeyse, Direkt Olarak Kullanabilirsiniz. Eğer
Projenizde Farklı Bir Klasör İçindeyse, (Ki Bu Klasörlere Paket Deniyor) Kodunuza İlgili import’u
Eklemeniz Gerekmektedir.
Paketler; Aynı İş İçin Kullanılan Yada Aynı Amaca Hizmet Etmek İçin Bir Bütün Oluşturan Birden Çok
Java Sınıfının Bir Arada Kullanılmasına Denir. Örneğin, Hem Arayüz (GUI), Hem MySQL DB
Emir Civaş – [email protected]
Sayfa 1
22.06.2013 – Wissen Akademie Java / Android Ders Notları #3
(Veritabanı), Hem Network, Hemde Dosya İşlemleri Yaptığınız Bir Proje Geliştiriyorsunuz. Atıyorum,
Uygulamanızın Arayüzünü Oluşturmak İçin 6, DB İşlemleri İçin 2, Network İşlemleri İçin 4, Dosya
İşlemleri İçin 3 Class Yazdınız. Bir Proje İçin 15 Class Belki Çok Fazla Gelmeyebilir. Ama Sonuçta Ortaya
Düzensiz Bir Görünüm Çıkar, Class Sayısı Arttıkça Kod Düzensiz Hale Gelir (Heleki Bazen Farklı
Amaçlara Hizmet Eden Farklı Classların İsimleri Aynı Olabiliyor!) İşte Bu Durumda Paket Kullanmaktan
Çekinmeyin Derim. Sonuçta Java Bu Şekilde Yazılmış JDK’daki Classlar Bu Şekilde Düzenlenmiş. Düzeni
Devam Ettirin 
Paketler, Kısaca Java Kodlarını Yazdığınız src Klasöründeki Farklı Klasörlerdir. Dolayısıyla, Yukarıdaki
Örneğe Göre, DB, Network, Dosya ve GUI İşlemleri İçin Farklı Klasörler Oluşturup, Java Dosyalarınızı
Bu Klasörlerde Toplamanız İyi Olacaktır. Paketler Komple Küçük Harfle Yazılmalı, İsimlerinde Türkçe
Karakter Yada Boşluk İçermemelidir. Bir Class’ı Bir Paketin İçine Aldığınızda, O Class’ın En Üst Satırına,
Paket İsmini Belirtmeniz Gerekir. Örneğin Yukardıraki Şekiller Class’ını matematik Diye Bir Paket
Oluşturup İçine Taşıyalım.
Eğer Bu Class’ı Başka Bir Paket İçinde Bulunan Başka Bir Class’tan Kullanacaksanız, Bu Class’ı Import
Etmeniz Gerekmekte.
Eğer İç İçe Paketler Oluşturacaksınız Bunları “.” İle Ayırıyorsunuz. Örneğin : matematik > geometri >
Sekiller.Java Şeklinde Bir Klasör Yapısı İçin Kullanılacak Paket Adı : matematik.geometri dir.
Kullanılacak import ise : import matematik.geometri.Sekiller; ‘dir.
Eğer Bir Paketteki Bütün Class’ları Import Edecekseniz : import matematik.geometri.*;
Emir Civaş – [email protected]
Sayfa 2
22.06.2013 – Wissen Akademie Java / Android Ders Notları #3
Method Overloading
Method Overloading Bir Class’ta Bulunan Bir Methodun, Aynı İsimde Tekrar Tanıtılıp, Farklı
Parametreler İle Aynı Yada Farklı Bir (Yada Aynı İşi Farklı Bir Şekilde) İşi Yapmasıdır. Misal Math
Classındaki Methodlara Baktığınızda, Bir Sürü Method, Tekrar Tekrar Farklı Parametreler İçin Yazar.
Aşağıdaki Resimde max ve min Methodlarının Tekrar Tekrar Tanımlandığını Görebilirsiniz.
Bunun Sebebi, Değişken Tipi Farklı Olmasına Rağmen, Aynı Methodun Kullanılıp (Aynı Method Adının)
Aynı İşlemin Yapılmasının, Karışıklıkları Önleyecek Olmasıdır. Misal, Bu Methodların Overload İle
Tanımlanması Yerine, findMaxDoubleNumber, findMaxDoubleFloatNumber, findMaxIntegerNumber,
findMaxLongNumber Olduğunu Düşünün..
Aynı Şeyi, Sizde Kendi Yazdığınız Methodlarda Yapabilirsiniz. Misal Sekillerdeki Alan & Çevre
Methodlarına
Bakın.
kareCevreHesapla,
dikdortgenCevreHesapla,
kareAlanHesapla,
dikdortgenAlanHesapla. Madem Karenin 4 Kenarı Eşit, Dikdortgeninde Iki Kenar’ı Farklı; Biz Bir Tane
Alan, Bir Tane Çevre Methodu Yazıp (Her Biri İçin Tek Parametre, İki Parametre Alan) İşlemlerimizi
Overload İle Halledebiliriz. Kare İle İlgili İşlem Yapacaksak, Tek Parametreli, Dikdörtgen İle İlgili İşlem
Yapacaksak İki Parametreli Methodları Kullanırız.
Sekiller Methodları
Sekiller Methodlarının Kullanımı
Önemli : İçinde Yaptığınız İş Farklı Olsada Aynı Tipte & Aynı Sayıda Parametre Alan 2. Bir Method
Tanımlayamazsınız 
Emir Civaş – [email protected]
Sayfa 3
22.06.2013 – Wissen Akademie Java / Android Ders Notları #3
List Küllanımı, Collections
Bugüne Kadar Aynı Tipteki Değişkenleri Grup Olarak Tutup, Üzerinde İşlemler Yapmak İçin Array’leri
Kullandık. Arrayler, Bir Değişken Adı Verilerek Oluşturulan, Belirli Bir Boyutu Olan Yapılardır. Bir
Komidin & İçindeki Çekmeceler Gibi. Bir Index Yardımıyla İçindeki Değerlere Ulaşıp, Bu Değerlerle
İşlemler Yapabiliyorduk. Arraylerin Boyutu Baştan Belirleniyordu. Sonradan Değiştirilemiyordu. Ve
Arraylerin Sınırları Dışındaki Indexleri Kullanamıyorduk. Boyutu n Olan Bir Arrayin İlk Eleman Index i 0,
Son Eleman Index’i İse n-1 Oluyordu.
Java’da Farklı Değerleri Grup Olarak Tutabileceğiniz List Diye Bir Yapı Daha Var. List’ler Arraylerden
Çok Daha Farklı Ve Kullanışlıdır. Size Kullanabileceğiniz Bir Sürü Method Sunarlar. Dinamiktirler,
Boyutları Başlangıçta 0, Siz Değer Ekledikçe Artar, Siz Değer Sildikçe Azalırlar. Java’da List Class’ından
Türetilen Farklı List Implementasyonları Vardır. (Örn : LinkedList, ArrayList, Stack, Vector ... )
Bir List’i Oluştururken, İçine Hangi Tipte Değer Tutulacaksa, O Belirtilmelidir. Ve Bu Tip Bir Obje
Olmalıdır, int, long, short vb.. İlkel Değişkenleri List’te Tutamazsınız. Bunların Obje Versionlarını
Kullanabilirsiniz. Eğer Tip Belirtmezseniz, Listeye Eklediğiniz Herşeyi Object Olarak Tutar, Bu Değerleri
Listeden Çektiğinizde, Kendiniz Cast İşlemlerini Yapmak Durumunda Kalırsınız.
Emir Civaş – [email protected]
Sayfa 4
22.06.2013 – Wissen Akademie Java / Android Ders Notları #3
Collections Sınıfı, Listler Üzerinde İşlemler Yapmanızı Sağlayan Bir Sınıftır. Bazı Örnek İşlemler :
Bugüne Kadar Gördüğümüz Döngüler Dışında, Listleri Dolaşmak İçin For Each Denen Yapıyıda
Kullanabilirsiniz. (Muhtemelen, ArrayList Olan Her Kod’ta Ben Bu Döngüyü Kullanacam  )
Emir Civaş – [email protected]
Sayfa 5
22.06.2013 – Wissen Akademie Java / Android Ders Notları #3
OOP – Object Oriented Programming
Bence Java’nın Asıl Başladığı Nokta Bu. OOP – Object Oriented Programming – Nesne Yönelimli
Programlama, Bir Programlama Tekniğidir. Gerçek Hayattaki Senaryoların Koda Implement Edilmesini
Büyük Ölçüde Kolaylaştırır. Bunu Elinizdeki Problemi (Yapacağınız Uygulamayı) Parçalara Bölerek, Her
Parçanın Kendi İşleyişi, Diğer Parçalarla İletişime Geçme Mekanizmasını Kullanarak Yapabilirsiniz. Çok
Basit 4 Kuralı Var. (Aslında 5-6 Ama Şu Anlık 4 Kural İşimizi Görüyor)
1 – Kendi Başına Birşeyler Yapabilen, Yada Başkalarının Birşeyler Yapmasını Sağlayan Herşey Bir
Nesnedir.
2 – Nesneler Kendi Değerlerine & Methodlarına Sahiptirler
3 – Nesneler, Diğer Nesnelerle Değerler & Methodlar Aracılığıyla İletişime Geçer
4 – Nesneleri Kullanmak İçin Kopyalara (Instance’lara ) İhtiyaç Vardır.
Bir Kart Oyunu Düşünün. Örneğin Pişti, Poker, Solitaire..
-
Oyun Kartlarla Oynanıyor, Her Kartın Kendine Ait Bir Sembolü, Değeri, Ön & Arka Yüz Resmi
Mevcut
Oyun Kartları Deste Denen Bir Yapıda Tutuluyor, Destede Kartlar Karıştırılıyor, Dağıtılıyor,
Toplanıyor
Oyuncu Oyunu Oynuyor, Desteden Gelen Kağıtlarla Seçimler Yapıyor
Oyunun Belli Kuralları Var. Bu Kurallar Neticesinde Oyuncunun Seçimleri Gerçekleştiriliyor.
Yukarıdaki 4 Maddeye Bakarsanız Eğer, Her Biri Kendi Başına, Veya Başka Maddelerle Birlikte
Birşeyler Yapıyor. Daha Yukarıdaki 4 Maddeye Bakarsanızda, Aslında Oyunun Bu Parçaları, 4
Maddeyede Uyuyor. Oyun Problemimiz, Bu 4 Parçaya Bölünüp, Kolay Bir Şekilde Implement
Edilebiliyor. Haliyle, Bu Yaklaşımada Nesneye Yönelik Programlama Deniyor.
Java’da Nesneler Class’larda Tanımlanırlar. Her Class Bir Nesne Class’ı Olmayabilir. Ama Her Nesne
Bilin ki Bir Class’a Sahiptir. Bir Class’ın Nesne Class’ı Olması İçin, O Class’a Constructor Denen Özel Bir
Method Tanımlanması Gerekmektedir. Constructor, Class’ın Adıyla Aynı Ada Sahip, Dönüş Türü
Olmayan Bir Method’tur.
Constructor Bir Class’ın Bir Nesne (Obje Diyecem Bundan Sonra)’ye Ait Olduğunu Gösterir En Basit
Haliyle. Constructor Kelime Anlamıyla Yapıcı Method Demektir. Bir Objenin Constructor’ının
Çağrılması O Objenin Bellekte Bir Kopyasını Oluşturur. Siz, Daha Sonra Bu Kopyayı Kullanırsınız. Bu
Kopyaya Instance Denir.
ÖNEMLİ : Constructor Methodu Kullanarak Yaratılmayan
Bir Instance’in Ozellikleri KULLANILAMAZ ! Uygulama NULLPOINTEREXCEPTION Fırlatır !
Yukarıdaki Örnekte, Kisi Obje, k Instance’tir.
Emir Civaş – [email protected]
Sayfa 6
22.06.2013 – Wissen Akademie Java / Android Ders Notları #3
Constructor’lar En Nihayetinde Birer Method Oldukları İçin, İçlerinde İstenilen İşlemleride
Yapabilirler. Aynı Zamanda Bir Obje Class’ında Birden Fazla Constructor Yaratılabilir. (Method
Overloading’teki Kısıtlamalar Geçerlidir) Örneğin, Hem Instance Yaratan, Hemde Instance’ın
Özelliklerini Değiştiren Bir Constructor :
Obje Class’ındaki Değişkenler, Her Instance İçin Ayrı Ayrı Yaratılır. Dolayısıyla Her Instance’a Verilen
Değerler Farklılık Gösterir.
Bu Örnekte, Farklı Değerlere Sahip 2 Kisi Instance’i Yaratiliyor. Ve Özellikleri Ekrana Bastırılıyor. Misal
Tek Tek Her Instance Icin Ekrana Basma Isini Yazacagimize Class’a Bir Method Olusturup,
Instance’ların Her Birinden Bu Methodu Çağırabiliriz.
İlk Senaryomuza Dönecek Olursak, (Kart Oyunu) Başlangıçta İki Objeye İhtiyacımız Var. Kart Ve Deste.
Kart Objesi Bir Oyun Kartını Temsil Edecek. Her Kartın Bir Sembolü, Bir Değeri, Bir Önyüz, Arkayüz
Resmi, Kartın Açık Yada Kapalı Olma Durumu Olmalı.
Deste İse, İçinde Belirli Bir Sayıda Kart Bulundurmalı. Bu Kartları Oluşturup, Oyunu Oynamak İçin
Karıştırmalı, İstenildiği Zaman, (Oyunculara Verilmek İçin Yada Masaya Koymak İçin) Desteden Kart
Çekilebilmeli.
Emir Civaş – [email protected]
Sayfa 7
22.06.2013 – Wissen Akademie Java / Android Ders Notları #3
Bu Class’larla Oyun Problemimizin 2 Parçasını Tamamladık Aslında. Hem Kart, Hem Deste Kendi
Başına Bir Takım Değerler Tutup, İşler Yapabiliyorlar. Deste, Kart Instance’ları Oluşturup Kullanıyor.
Emir Civaş – [email protected]
Sayfa 8
22.06.2013 – Wissen Akademie Java / Android Ders Notları #3
Inheritance – Kalıtım
Kalıtım, Nesneye Yönelik Programlamada Önemli Bir Konudur. Kalıtım, Bir Class’ın Başka Bir Class’ın
Özelliklerine & Methodlarına Sahip Olması Kavramıdır. Başka Bir Class’a Kendi Özelliklerini Veren
Class’a SuperClass, Başka Bir Class’tan Özellikler Alan Class’a SubClass Denir.
SubClass, SuperClass’tan Özellikler Alabildiği Gibi, Kendi İçindede Özellikler Tanımlayabilir.
ÖNEMLİ : Bir SuperClass Oluşturacağınız Zaman Null Constructor’ı Kullanmasanızda Implement Etmek
Zorundasınız!
Örneğin 2 Class’ımız Var. Canlı Ve İnsan. Canlıda Belirli Özellikler & Methodlar Oluşturup, Bunu
Inheritance İle Insan Class’ına Aktarıcaz. (Interitance İçin Kullanılan Anahtar Kelime extends)
ÖNEMLİ : Bir Class Sadece Bir Class’ı Extend Edebilir, 2.yi Edemez!
Yukarıdaki Snippet’ta i Instance’i Oluşturulduğunda Once Canli Instance’i Oluşturulur, Sonra Insan
Instance’i Constructor’ı Çağrılır. Standart Olarak Super Class’ın Null Constructor’ı Çağrılır. Eğer
Extends Ettiğiniz Class’ın Null Constructor’ını Değil, (Tanımlanmışsa) Başka Bir Constructor’ını
Çağırmak İstiyorsanız, SubClass’ın Constructor’ında (Ilk Statement Olarak!) super(...) Statement’ını
Kullanabilirsiniz.
Inheritance Konusunda Derinlik Sınırı Yoktur. (Her Ne Kadar 5 Seviye Üstü Tavsiye Edilmesede)
Örneğin : A extends B,
B extends C,
C extends B İse
C Hem A’nın, Hem’de B’nin Özelliklerini Taşır.
C’nin Super Class’ı B, B’nin Sub Class’ı C, B’nin Super Class’ı A, A’nın Sub Class’ı B’dir.
Inheritance’da Classlar Super Clas Tipinde Parametre Olarak Verilebilir. Gerçekte Ne Class’ı Olduğunu
Anlayabilmek İçin instance of İle Koşul Kullanılabilir.
Emir Civaş – [email protected]
Sayfa 9
22.06.2013 – Wissen Akademie Java / Android Ders Notları #3
Polymorphism – Çok Şekillilik
En Baştaki Method Overloading Konusunu Hatırlayın. Bir Class’taki Methodun Tekrar Tanımlanmasına
Method Overloading Deniyordu. Eğer 2 Class Arasında Bir Inheritance Söz Konusu İse, Ve Super
Class’ta Implement Edilen Bir Method, Sub Class’ta Tekrar Tanımlandıysa (Ki Buna Method
Overloading Değil, Method Overriding Deniyor) Bu Bir Polymorphism – Çok Şekillilik Örneğidir.
Aynı Methodun, Birbirine Bağlı 2 Class’ta Farklı İşler Yapması Durumu. Kalıtım Konusundaki Canlı –
Insan Class Orneklerinde, Insan Class’ında yemekYe() Methodu Tekrar Implement Edilseydi, Ve Başka
Şekilde Çalışsaydı; Bu Bir Polymorphism Olacaktı.
Veya Canli Class’ını Extends Eden Bir Bitki Class’ı Daha Olduğunu Düşünün. Bitkiler (^o^) Şeklinde
Beslenemeyecekleri İçin, Doğal Olarak YemekYe Methodunu Bu Class’ta Override Etmemiz Gerekirdi.
ÖNEMLİ :
Her Inheritance Durumunda, Polymorphism Olacak Diye Bir Kaide Yok
Ama İşin İçinde Polymorphism Varsa Mutlaka Interitance’da Vardır.
Eğer Zaten Inheritance Yoksa O Polymorphism Değildir.
Tek Class’ta Yapılan Methodların Tekrar Tanımlanma İşine Method Overloading
Inheritance’in Söz Konusu Olduğu Classlarda Methodların Tekrar Tanımlanma İşine Method
Overriding Denir
Objeler’de “this” Küllanımı Ve Statik Alanlar
Dedik ki; Bir Obje Class’ında Tanımlanan Değişkenler, Her Instance İçin Ayrı Ayrı Oluşturulmaktadır.
Ama Bazı Durumlarda Her Instance İçin Ortak Kullanılan Değişkenlere İhtiyacımız Olabilir (Örneğin
Yaratılan Instance Sayısını Takip Etmek İstersek). Bunun İçin Obje Class’ına static bir Özellik Ekleriz. Bu
Özellik Bir Kere Oluşturulur Ve Her Instance Bu Değişkeni Ortak Olarak Kullanır.
this kelimesi Bir Objenin O An Çalışan Instance’ını İfade Etmek İçin Kullanılır.
Access Modifiers – Erişim Denetleyicileri
Bir Class’taki Değişkenlerin & Methodların, Başka Classlar Tarafından Erişilip Erişilemeyeceğini
Belirten Kelimelerdir :
public
Değişken Yada Method Herkese Açıktır
private
Değişken Yada Method Sadece O Class İçinde Kullanılır
protected
Değişken Yada Method Sadece O Paket İçinde Kullanılır
Emir Civaş – [email protected]
Sayfa 10
Download