-
Title:
Kalıtım Davranışı
-
Description:
-
JustJava uygulamasına geri dönelim.
-
MainActivity sınıfı içeresindeki
DisplayMessage metotuna bir göz atalım.
-
Her şey daha anlaşılır bir hal
almaya başlıyor artık.
-
Zaten orderSummaryTextView adında bir
değişken oluşturduğumuzu biliyoruz.
-
Bu görünümün veri
türü de TextView'di.
-
Bu kısmı henüz anlayamadık ama.
-
Bir sonraki satırda, bu TextView
öğesine bir metot çağırıyoruz.
-
Yukarıda belirtilen aynı
değişkeni kullanıyoruz.
-
Yani, orderSummaryTextView.setText'i
çağırıyoruz.
-
Daha sonra da metot için giriş
olarak bir string gireceğiz.
-
Bu string mesajı, aslen
görüntüleme mesajı metotuna
-
bir giriş parametresi olarak geldi.
-
Şimdi de kodun henüz
anlamadığımız bu kısmını irdeleyelim.
-
Görünüşe göre FindViewById
bir metot çağrısı.
-
Çünkü bu parantezler arasındaki giriş
parametresi gibi gözüken kısmın önünde.
-
Fakat ilginç olan, bu metotun sınıfın
hiçbir yerinde tanımlanmamış olması.
-
Bu isme iki kere tıklayıp Command+F
tuşlarına basarsam veya
-
Windows üzerinde iseniz Ctrl+F, o zaman
bu dosya içinde arama yapabilirim.
-
findViewById olan sadece
iki sonuç görüyorum ve
-
ikisi de benzer
şekillerde kullanılmış.
-
Fakat findViewById'i çağıran
başka bir metot görmüyorum.
-
Hazır lafı açılmışken, dana önceden
MainActivity sınıfında
-
setContentView'e bir çağrı görmüştük,
fakat bu dosya içinde
-
arama yaparsanız, o da
MainActivity'de tanımlanmamış.
-
Peki, bu yöntemler
nerede tanımlanmış?
-
MainActivity aslında
oldukça kısa bir dosya.
-
Sadece 90 satır uzunluğunda,
-
ama bu sınıfta
göründüğünden fazlası var.
-
Kodda extends AppCompatActivity yazıyor.
-
Bu da MainActivity'nin
AppCompatActivity sınıfındaki
-
bir işlevselliğin uzantısı
olduğu anlamına geliyor.
-
Bilgisayarınızda bir işlem çubuğu
hareketi görürseniz, önemli değil,
-
sadece bunun eski bir
sürümü olduğu içindir.
-
Kullanmanız gereken en son
sürüm ise AppCompatActivity.
-
Ayrıca AppCompatActivity, eski
Android cihazlarda bize geriye dönük
-
uyumluluk desteği de veriyor.
-
AppCompatActivity, Android
destek kütüphanesinin bir parçası.
-
Hala eski Android cihazlar üzerinde
çalışırken Android üzerindeki en son
-
kullanıcı arabirimini
kullanmamıza olanak sağlıyor.
-
AppCompatActivity
sınıfını genişleterek,
-
bedavaya MainActivity
içinden bütün işlevselliğe,
-
bütün durum
ve metotlara ulaşabiliyoruz.
-
Buradan herhangi bir kodu
kopyalayıp yapıştırmamıza gerek yok.
-
Sadece sınıfı genişletmemiz yeterli.
-
Eğer ilgileniyorsanız,
-
AppCompatActivity'i Google'da arayarak
daha fazla bilgiye ulaşabilirsiniz.
-
İşte AppCompatActivity sınıfı
için bir referans belgesi.
-
Chrome uzantısı bende yüklü olduğundan
-
kaynağı da görebiliyorum.
-
Ve bu da AppCompatActivity
sınıfının tanımlandığı yer.
-
Burada bir çok işlevsellik
olduğunu görebilirsiniz, fakat
-
kilit mesaj, nasıl uygulandığını
anlamak zorunda değilsiniz.
-
Tek bilmeniz gereken,
AppCompatActivity'i genişlettiğinizde
-
bütün bu işlevselliklere
bedavaya sahip olacak olmanız.
-
Yüksek seviyede şu
şekilde görselleştirebilirsiniz.
-
Bu, MainActivity için bir sınıf tanımı.
-
Ve diyelim ki, burada
tanımlanmış bazı metotlarınız var.
-
AppCompatActivity'i genişlettiğiniz
zaman, AppCompatActivity'den
-
durum ve metotlara ulaşabilirsiniz.
-
MainActivity sınıfına fiziksel
olarak eklenmiş değiller tabii ki, fakat
-
orada olduklarını düşünebilirsiniz,
-
çünkü hala duruma ve
metotlara gönderim yapabilirsiniz.
-
İşte kodumuz da setContentView veya
findViewById tarzı şeylere böyle
-
gönderim yapabiliyor.
-
O metotları devraldığımız için
MainActivity içinde tanımlamadık.
-
MainActivity cihaz üzerinde bir ekran
olarak gösteriliyor, fakat
-
MainActivity için o kodu
biz yazmadık, devraldık.
-
Durum ve metotlara direkt sınıf içindeki
AppCompatActivity'den sahip değiliz,
-
fakat artık orada olduklarını ve onlara
gönderim yapabileceğimizi biliyoruz.
-
Devralmaktan konu açılmışken, bunun
hem iyi hem de kötü yanları var.
-
Bazen bir davranışı
devralmak isteriz fakat
-
diğer zamanlarda biraz da
olsa değiştirmek isteyebiliriz.
-
Bu devralınmış sınıftan bazı
davranışları değiştirmek isterseniz
-
belirli metotları
geçersiz kılabilirsiniz.
-
Bu @override metnini metotun üzerine
ekleyebilirsiniz, böylece bilgisayar
-
AppCompatActivity'nin o sürümünü
istemediğinizi
-
fakat onun yerine buradaki tanımladığınız
sürümü istediğinizi bilecektir.
-
Bu zor bir konu ve çok
fazla pratik gerektiriyor.
-
Fakat AppCompatActivity
sınıfından bir metotu
-
geçersiz kılmayla ilgili
bir örnek gördük.
-
Ve bu metot da onCreate metotu.
-
MainActivity içindeki onCreate metotunu
geçersiz kılarak, o metotu çağırdığımızda
-
ne yapılması gerektiğini söyleyen kendi
uyarlamamızı tanımlamış oluyoruz.
-
Bu kısmı tam anlayamadıysanız
endişelenmeyin.
-
Size sadece, bir kaç tane nesne yönelimli
programlama kavramlarıyla ilgili
-
özet bilgiler veriyorum.
-
Aklınızda hala cevap bekleyen
sorular olması oldukça normal.
-
Ve hala bu konuları tamamen
anlamak için daha fazla
-
okumanız gerektiği.
-
MainActivity ile AppCompatActivity
sınıfları arasındaki ilişkiyi
-
görselleştirmenin bir diğer yolu da
sınıf hiyerarşi şeması çizmek.
-
Bu, görünüm hiyerarşi şeması
çizmekten farklı, çünkü
-
görünüm hiyerarşi şeması ekranda
görüntülenen görünümleri gösterir.
-
Sınıf hiyerarşi şeması
ise farklı Java sınıfları
-
arasındaki ilişkiyi gösterir.
-
Üst sınıf olarak elimizde
AppCompatActivity var.
-
MainActivity, AppCompatActivity'den
genişlediği için
-
alt sınıf olarak tanımlanıyor.
-
Bu sınıf tanımını ne zaman görürseniz,
genişlettiğiniz her ne ise o
-
üst sınıf olarak tanımlanır.
-
Bu da alt sınıf olacaktır.
-
Yani, DetailActivity adında başka
bir etkinlik oluşturursanız ve
-
AppCompatActivity'i genişletmişseniz,
bu alt sınıf olur
-
ve bu da üst sınıf.
-
Java sınıf devralmasıyla
ilgili işte bir örnek daha.
-
Şöyle bir düşündüğünüzde,
TextView, ImageView
-
ve ButtonView'in hepsinin
ortak yanları var.
-
Bütün bu görünümlerin ekranda
bir eni ve boyu mevcut.
-
Bu kısmı henüz öğrenmedik ancak
bir de görünebilirlik durumları var.
-
Yani hepsi görünmez veya
görünür hale getirilebilir.
-
Hepsi için ortak olan
başka özellikleri de var.
-
TextView sınıfı içinde bunlar
için kod yazıp ImageView ve
-
Button sınıfı üzerine
kopyalamak yerine
-
daha zekice bir şey yapabiliriz.
-
Bir View (görünüm) sınıfı oluşturabiliriz.
-
Bu üç görünüm için ortak olan özellikleri
çıkartabiliriz ve sonra da bu View
-
sınıfının içine yerleştirebiliriz, böylece
kodu bir kez yazmamız yeterli olacaktır.
-
Fakat, sonra TextView sınıfı ile
View sınıfı arasında nasıl
-
bağ kuracağız?
-
Eğer devralmayı düşünüyorsanız,
doğru bildiniz.
-
TextView java dosyasında
TextView sınıfını tanımlayacağız.
-
Bu sayede bütün bu verileri ve metotları
View sınıfından alabileceğiz.
-
Sonra TextView sınıfında bu kadar
çok kod olmasına gerek kalmayacak,
-
çünkü işlevselliğin bir kısmı
zaten View sınıfında yazılı durumda.
-
Aynı şey ImageView ve
Button sınıfları için de geçerli,
-
bu kadar kod yazmak
zorunda değiliz.
-
Bu dosyalarda, sadece
View sınıfı ile ImageView
-
arasındaki farklı olan
şeyleri yazmamız yeterli.
-
Ben bunu bir aralık belirleme olarak
görüyorum. Yani ImageView sınıfı,
-
View sınıfı ile karşılaştırıldığında,
sadece farklı olan şeyleri tanımlamalı.
-
Eğer ki View sınıfından bazı belli
davranışları devralmak istemiyorsak,
-
ImageView sınıfındaki ya da diğer
sınıflardaki güncellenmiş davranışları
-
belirtebiliriz.
-
Bu noktada, terminolojiyi
size hatırlatmak adına;
-
TextView alt sınıf oluyor
ve View de üst sınıf.
-
Tekrardan, TextView sınıfı için
belgelendirmeye döndüğümüzde
-
artık bu kısmı
anlayabilecek durumdayız.
-
TextView için View'i
genişlettiği yazıyor.
-
Bunun, View sınıfından metot
ve durum devraldığımız
-
anlamına geldiğini artık biliyoruz.
-
Ve burada da sınıf
hiyerarşi şeması var.
-
TextView sınıfının View
sınıfından devraldığını gösteriyor.
-
Ve sırayla, View sınıfı
Object sınıfından devralıyor.
-
Biraz incelerseniz, aslında
TextView'den genişleyen
-
EditText sınıfı gibi diğer
sınıfları bulabilirsiniz.
-
Yani, davranışı TextView
sınıfından alıyor ve
-
ona belirli bir işlevsellik ekliyor.
-
Böylece EditText,
TextView'den genişlemiş oluyor.
-
Ve TextView de View'den genişliyor,
ve View de Object'den genişliyor.
-
İşte sınıf hiyerarşisi şeması da bu.
-
Bir sürü şey var ve
saatlerce buna bakabilirsiniz.
-
Fakat ben size TextView belgelendirme
sayfasında tek bir şey göstereceğim.
-
SetVisibility için metotu
göstermek istiyorum.
-
İşte TextView sınıfı içinde
SetVisibility için Java metotu bu.
-
Görünümün görünebilir
olup olmayacağını belirliyor.
-
Eğer bu metota tıklarsam,
beni View sınıfına götürür.
-
Ve sonra da metotun
ne işe yaradığını açıklıyor.
-
Bu sayede bir TextView nesnesinin
görünebilirlik metotunun olduğunu,
-
fakat aslında View sınıfından
devraldığını görebilirsiniz.
-
Yani, bu işlevselliği View
sınıfından bedavaya almışız.
-
Pekala, bir ton yeni
kavramı ele aldık.
-
Normalde bu, bilgisayar bilimi
kursunda bir döneme yayılır.
-
Şimdi biraz alıştırma yapacağız ve
-
umuyorum ki sizin için
aradaki boşlukları doldurur.
-
Fakat unutmayın ki, bu kavramları
tamamen anlamanız çok daha
-
fazla zamanınızı alacak ve daha çok
pratik yapmanız gerekecek.
-
Peki, ilk alıştırma; yeni bir Android
uygulaması geliştirmenizi istiyorum,
-
çünkü Just Java uygulamasını
bozmak istemeyiz.
-
Projeyi oluşturduktan sonra,
uygulamayı çalıştırın.
-
Uygulamanızı geliştirdiğiniz de,
bir MainActivity dosyası göreceksiniz.
-
Bu MainActivity dosyası
AppCompatActivity'den genişleyecek.
-
Bunun yerine, Android Studio'su
sürümünüzde eğer MainActivity,
-
ActionBarActivity'den
genişliyorsa, o da olur.
-
Zaten AppCompatActivity'nin
sadece eski bir sürümü.
-
Bu geçersiz kılma metotunu
kaldırarak, onCreate metotunun
-
AppCompatActivity'de göründüğü
haline dönmüş olacağız.
-
Bu metotun olması MainActivity'de onCreate
için farklı bir davranış istediğimiz
-
anlamına geliyor.
-
Yani, onu kaldırmak bizi
AppCompatActivity sınıfındaki
-
orijinal davranışa geri döndürecek.
-
Uygulamayı çalıştırdığınızda,
-
ilk seferki çalıştırmanızdan
farklı bir şeyler fark ettiniz mi?
-
Cevabınızı bu metin kutusuna yazın.