WEBVTT
00:00:00.920 --> 00:00:03.410
JustJava uygulamasına geri dönelim.
00:00:03.410 --> 00:00:07.260
MainActivity sınıfı içeresindeki
DisplayMessage metotuna bir göz atalım.
00:00:07.260 --> 00:00:09.950
Her şey daha anlaşılır bir hal
almaya başlıyor artık.
00:00:09.950 --> 00:00:14.350
Zaten orderSummaryTextView adında bir
değişken oluşturduğumuzu biliyoruz.
00:00:14.350 --> 00:00:16.760
Bu görünümün veri
türü de TextView'di.
00:00:17.790 --> 00:00:19.610
Bu kısmı henüz anlayamadık ama.
00:00:20.740 --> 00:00:23.290
Bir sonraki satırda, bu TextView
öğesine bir metot çağırıyoruz.
00:00:24.650 --> 00:00:28.070
Yukarıda belirtilen aynı
değişkeni kullanıyoruz.
00:00:28.070 --> 00:00:31.830
Yani, orderSummaryTextView.setText'i
çağırıyoruz.
00:00:31.830 --> 00:00:34.290
Daha sonra da metot için giriş
olarak bir string gireceğiz.
00:00:35.300 --> 00:00:38.790
Bu string mesajı, aslen
görüntüleme mesajı metotuna
00:00:38.790 --> 00:00:40.200
bir giriş parametresi olarak geldi.
00:00:41.720 --> 00:00:45.250
Şimdi de kodun henüz
anlamadığımız bu kısmını irdeleyelim.
00:00:45.250 --> 00:00:48.210
Görünüşe göre FindViewById
bir metot çağrısı.
00:00:48.210 --> 00:00:53.530
Çünkü bu parantezler arasındaki giriş
parametresi gibi gözüken kısmın önünde.
00:00:53.530 --> 00:00:57.458
Fakat ilginç olan, bu metotun sınıfın
hiçbir yerinde tanımlanmamış olması.
00:00:57.458 --> 00:01:02.355
Bu isme iki kere tıklayıp Command+F
tuşlarına basarsam veya
00:01:02.355 --> 00:01:07.560
Windows üzerinde iseniz Ctrl+F, o zaman
bu dosya içinde arama yapabilirim.
00:01:07.560 --> 00:01:10.780
findViewById olan sadece
iki sonuç görüyorum ve
00:01:10.780 --> 00:01:12.790
ikisi de benzer
şekillerde kullanılmış.
00:01:12.790 --> 00:01:15.160
Fakat findViewById'i çağıran
başka bir metot görmüyorum.
00:01:16.190 --> 00:01:19.640
Hazır lafı açılmışken, dana önceden
MainActivity sınıfında
00:01:19.640 --> 00:01:23.450
setContentView'e bir çağrı görmüştük,
fakat bu dosya içinde
00:01:23.450 --> 00:01:26.280
arama yaparsanız, o da
MainActivity'de tanımlanmamış.
00:01:27.820 --> 00:01:29.620
Peki, bu yöntemler
nerede tanımlanmış?
00:01:30.620 --> 00:01:33.610
MainActivity aslında
oldukça kısa bir dosya.
00:01:33.610 --> 00:01:35.150
Sadece 90 satır uzunluğunda,
00:01:35.150 --> 00:01:38.790
ama bu sınıfta
göründüğünden fazlası var.
00:01:38.790 --> 00:01:42.200
Kodda extends AppCompatActivity yazıyor.
00:01:42.200 --> 00:01:45.710
Bu da MainActivity'nin
AppCompatActivity sınıfındaki
00:01:45.710 --> 00:01:49.290
bir işlevselliğin uzantısı
olduğu anlamına geliyor.
00:01:49.290 --> 00:01:52.790
Bilgisayarınızda bir işlem çubuğu
hareketi görürseniz, önemli değil,
00:01:52.790 --> 00:01:55.450
sadece bunun eski bir
sürümü olduğu içindir.
00:01:55.450 --> 00:01:58.770
Kullanmanız gereken en son
sürüm ise AppCompatActivity.
00:01:58.770 --> 00:02:02.420
Ayrıca AppCompatActivity, eski
Android cihazlarda bize geriye dönük
00:02:02.420 --> 00:02:04.460
uyumluluk desteği de veriyor.
00:02:04.460 --> 00:02:07.980
AppCompatActivity, Android
destek kütüphanesinin bir parçası.
00:02:07.980 --> 00:02:11.740
Hala eski Android cihazlar üzerinde
çalışırken Android üzerindeki en son
00:02:11.740 --> 00:02:15.420
kullanıcı arabirimini
kullanmamıza olanak sağlıyor.
00:02:15.420 --> 00:02:17.940
AppCompatActivity
sınıfını genişleterek,
00:02:17.940 --> 00:02:20.620
bedavaya MainActivity
içinden bütün işlevselliğe,
00:02:20.620 --> 00:02:24.490
bütün durum
ve metotlara ulaşabiliyoruz.
00:02:24.490 --> 00:02:26.980
Buradan herhangi bir kodu
kopyalayıp yapıştırmamıza gerek yok.
00:02:26.980 --> 00:02:28.800
Sadece sınıfı genişletmemiz yeterli.
00:02:30.090 --> 00:02:31.020
Eğer ilgileniyorsanız,
00:02:31.020 --> 00:02:35.880
AppCompatActivity'i Google'da arayarak
daha fazla bilgiye ulaşabilirsiniz.
00:02:35.880 --> 00:02:39.700
İşte AppCompatActivity sınıfı
için bir referans belgesi.
00:02:39.700 --> 00:02:41.920
Chrome uzantısı bende yüklü olduğundan
00:02:41.920 --> 00:02:43.120
kaynağı da görebiliyorum.
00:02:43.120 --> 00:02:47.890
Ve bu da AppCompatActivity
sınıfının tanımlandığı yer.
00:02:47.890 --> 00:02:50.360
Burada bir çok işlevsellik
olduğunu görebilirsiniz, fakat
00:02:50.360 --> 00:02:54.510
kilit mesaj, nasıl uygulandığını
anlamak zorunda değilsiniz.
00:02:54.510 --> 00:02:58.350
Tek bilmeniz gereken,
AppCompatActivity'i genişlettiğinizde
00:02:58.350 --> 00:03:01.010
bütün bu işlevselliklere
bedavaya sahip olacak olmanız.
00:03:01.010 --> 00:03:03.580
Yüksek seviyede şu
şekilde görselleştirebilirsiniz.
00:03:03.580 --> 00:03:05.900
Bu, MainActivity için bir sınıf tanımı.
00:03:05.900 --> 00:03:08.000
Ve diyelim ki, burada
tanımlanmış bazı metotlarınız var.
00:03:08.000 --> 00:03:12.350
AppCompatActivity'i genişlettiğiniz
zaman, AppCompatActivity'den
00:03:12.350 --> 00:03:14.200
durum ve metotlara ulaşabilirsiniz.
00:03:14.200 --> 00:03:17.870
MainActivity sınıfına fiziksel
olarak eklenmiş değiller tabii ki, fakat
00:03:17.870 --> 00:03:19.280
orada olduklarını düşünebilirsiniz,
00:03:19.280 --> 00:03:22.930
çünkü hala duruma ve
metotlara gönderim yapabilirsiniz.
00:03:22.930 --> 00:03:26.540
İşte kodumuz da setContentView veya
findViewById tarzı şeylere böyle
00:03:26.540 --> 00:03:27.840
gönderim yapabiliyor.
00:03:27.840 --> 00:03:32.240
O metotları devraldığımız için
MainActivity içinde tanımlamadık.
00:03:32.240 --> 00:03:35.110
MainActivity cihaz üzerinde bir ekran
olarak gösteriliyor, fakat
00:03:35.110 --> 00:03:39.520
MainActivity için o kodu
biz yazmadık, devraldık.
00:03:39.520 --> 00:03:42.750
Durum ve metotlara direkt sınıf içindeki
AppCompatActivity'den sahip değiliz,
00:03:42.750 --> 00:03:46.840
fakat artık orada olduklarını ve onlara
gönderim yapabileceğimizi biliyoruz.
00:03:46.840 --> 00:03:50.260
Devralmaktan konu açılmışken, bunun
hem iyi hem de kötü yanları var.
00:03:50.260 --> 00:03:52.540
Bazen bir davranışı
devralmak isteriz fakat
00:03:52.540 --> 00:03:54.980
diğer zamanlarda biraz da
olsa değiştirmek isteyebiliriz.
00:03:55.980 --> 00:03:59.900
Bu devralınmış sınıftan bazı
davranışları değiştirmek isterseniz
00:03:59.900 --> 00:04:02.230
belirli metotları
geçersiz kılabilirsiniz.
00:04:02.230 --> 00:04:07.360
Bu @override metnini metotun üzerine
ekleyebilirsiniz, böylece bilgisayar
00:04:07.360 --> 00:04:12.100
AppCompatActivity'nin o sürümünü
istemediğinizi
00:04:12.100 --> 00:04:15.830
fakat onun yerine buradaki tanımladığınız
sürümü istediğinizi bilecektir.
00:04:15.830 --> 00:04:18.620
Bu zor bir konu ve çok
fazla pratik gerektiriyor.
00:04:18.620 --> 00:04:21.660
Fakat AppCompatActivity
sınıfından bir metotu
00:04:21.660 --> 00:04:23.640
geçersiz kılmayla ilgili
bir örnek gördük.
00:04:23.640 --> 00:04:26.380
Ve bu metot da onCreate metotu.
00:04:26.380 --> 00:04:31.170
MainActivity içindeki onCreate metotunu
geçersiz kılarak, o metotu çağırdığımızda
00:04:31.170 --> 00:04:35.380
ne yapılması gerektiğini söyleyen kendi
uyarlamamızı tanımlamış oluyoruz.
00:04:35.380 --> 00:04:37.180
Bu kısmı tam anlayamadıysanız
endişelenmeyin.
00:04:37.180 --> 00:04:40.534
Size sadece, bir kaç tane nesne yönelimli
programlama kavramlarıyla ilgili
00:04:40.534 --> 00:04:42.350
özet bilgiler veriyorum.
00:04:42.350 --> 00:04:46.160
Aklınızda hala cevap bekleyen
sorular olması oldukça normal.
00:04:46.160 --> 00:04:49.370
Ve hala bu konuları tamamen
anlamak için daha fazla
00:04:49.370 --> 00:04:50.860
okumanız gerektiği.
00:04:50.860 --> 00:04:53.771
MainActivity ile AppCompatActivity
sınıfları arasındaki ilişkiyi
00:04:53.771 --> 00:04:58.220
görselleştirmenin bir diğer yolu da
sınıf hiyerarşi şeması çizmek.
00:04:58.220 --> 00:05:00.930
Bu, görünüm hiyerarşi şeması
çizmekten farklı, çünkü
00:05:00.930 --> 00:05:05.340
görünüm hiyerarşi şeması ekranda
görüntülenen görünümleri gösterir.
00:05:05.340 --> 00:05:07.810
Sınıf hiyerarşi şeması
ise farklı Java sınıfları
00:05:07.810 --> 00:05:09.990
arasındaki ilişkiyi gösterir.
00:05:09.990 --> 00:05:12.860
Üst sınıf olarak elimizde
AppCompatActivity var.
00:05:12.860 --> 00:05:15.868
MainActivity, AppCompatActivity'den
genişlediği için
00:05:15.868 --> 00:05:18.560
alt sınıf olarak tanımlanıyor.
00:05:18.560 --> 00:05:22.200
Bu sınıf tanımını ne zaman görürseniz,
genişlettiğiniz her ne ise o
00:05:22.200 --> 00:05:23.970
üst sınıf olarak tanımlanır.
00:05:23.970 --> 00:05:25.770
Bu da alt sınıf olacaktır.
00:05:25.770 --> 00:05:29.070
Yani, DetailActivity adında başka
bir etkinlik oluşturursanız ve
00:05:29.070 --> 00:05:32.340
AppCompatActivity'i genişletmişseniz,
bu alt sınıf olur
00:05:32.340 --> 00:05:33.409
ve bu da üst sınıf.
00:05:34.720 --> 00:05:37.840
Java sınıf devralmasıyla
ilgili işte bir örnek daha.
00:05:37.840 --> 00:05:40.520
Şöyle bir düşündüğünüzde,
TextView, ImageView
00:05:40.520 --> 00:05:44.460
ve ButtonView'in hepsinin
ortak yanları var.
00:05:44.460 --> 00:05:48.070
Bütün bu görünümlerin ekranda
bir eni ve boyu mevcut.
00:05:48.070 --> 00:05:51.330
Bu kısmı henüz öğrenmedik ancak
bir de görünebilirlik durumları var.
00:05:51.330 --> 00:05:54.400
Yani hepsi görünmez veya
görünür hale getirilebilir.
00:05:54.400 --> 00:05:58.650
Hepsi için ortak olan
başka özellikleri de var.
00:05:58.650 --> 00:06:02.370
TextView sınıfı içinde bunlar
için kod yazıp ImageView ve
00:06:02.370 --> 00:06:05.590
Button sınıfı üzerine
kopyalamak yerine
00:06:05.590 --> 00:06:07.610
daha zekice bir şey yapabiliriz.
00:06:07.610 --> 00:06:09.980
Bir View (görünüm) sınıfı oluşturabiliriz.
00:06:09.980 --> 00:06:14.110
Bu üç görünüm için ortak olan özellikleri
çıkartabiliriz ve sonra da bu View
00:06:14.110 --> 00:06:19.730
sınıfının içine yerleştirebiliriz, böylece
kodu bir kez yazmamız yeterli olacaktır.
00:06:19.730 --> 00:06:22.610
Fakat, sonra TextView sınıfı ile
View sınıfı arasında nasıl
00:06:22.610 --> 00:06:24.000
bağ kuracağız?
00:06:24.000 --> 00:06:26.548
Eğer devralmayı düşünüyorsanız,
doğru bildiniz.
00:06:26.548 --> 00:06:30.080
TextView java dosyasında
TextView sınıfını tanımlayacağız.
00:06:30.080 --> 00:06:33.240
Bu sayede bütün bu verileri ve metotları
View sınıfından alabileceğiz.
00:06:34.270 --> 00:06:37.520
Sonra TextView sınıfında bu kadar
çok kod olmasına gerek kalmayacak,
00:06:37.520 --> 00:06:41.860
çünkü işlevselliğin bir kısmı
zaten View sınıfında yazılı durumda.
00:06:41.860 --> 00:06:43.730
Aynı şey ImageView ve
Button sınıfları için de geçerli,
00:06:43.730 --> 00:06:46.800
bu kadar kod yazmak
zorunda değiliz.
00:06:46.800 --> 00:06:49.690
Bu dosyalarda, sadece
View sınıfı ile ImageView
00:06:49.690 --> 00:06:53.090
arasındaki farklı olan
şeyleri yazmamız yeterli.
00:06:53.090 --> 00:06:57.720
Ben bunu bir aralık belirleme olarak
görüyorum. Yani ImageView sınıfı,
00:06:57.720 --> 00:07:01.890
View sınıfı ile karşılaştırıldığında,
sadece farklı olan şeyleri tanımlamalı.
00:07:03.840 --> 00:07:06.960
Eğer ki View sınıfından bazı belli
davranışları devralmak istemiyorsak,
00:07:06.960 --> 00:07:11.760
ImageView sınıfındaki ya da diğer
sınıflardaki güncellenmiş davranışları
00:07:11.760 --> 00:07:12.820
belirtebiliriz.
00:07:14.070 --> 00:07:16.680
Bu noktada, terminolojiyi
size hatırlatmak adına;
00:07:16.680 --> 00:07:20.039
TextView alt sınıf oluyor
ve View de üst sınıf.
00:07:21.430 --> 00:07:23.980
Tekrardan, TextView sınıfı için
belgelendirmeye döndüğümüzde
00:07:23.980 --> 00:07:27.310
artık bu kısmı
anlayabilecek durumdayız.
00:07:27.310 --> 00:07:30.000
TextView için View'i
genişlettiği yazıyor.
00:07:30.000 --> 00:07:33.330
Bunun, View sınıfından metot
ve durum devraldığımız
00:07:33.330 --> 00:07:35.280
anlamına geldiğini artık biliyoruz.
00:07:35.280 --> 00:07:38.330
Ve burada da sınıf
hiyerarşi şeması var.
00:07:38.330 --> 00:07:41.884
TextView sınıfının View
sınıfından devraldığını gösteriyor.
00:07:43.730 --> 00:07:46.530
Ve sırayla, View sınıfı
Object sınıfından devralıyor.
00:07:47.650 --> 00:07:50.060
Biraz incelerseniz, aslında
TextView'den genişleyen
00:07:50.060 --> 00:07:54.780
EditText sınıfı gibi diğer
sınıfları bulabilirsiniz.
00:07:54.780 --> 00:07:57.570
Yani, davranışı TextView
sınıfından alıyor ve
00:07:57.570 --> 00:08:00.120
ona belirli bir işlevsellik ekliyor.
00:08:01.290 --> 00:08:03.590
Böylece EditText,
TextView'den genişlemiş oluyor.
00:08:03.590 --> 00:08:06.720
Ve TextView de View'den genişliyor,
ve View de Object'den genişliyor.
00:08:06.720 --> 00:08:09.830
İşte sınıf hiyerarşisi şeması da bu.
00:08:11.370 --> 00:08:13.950
Bir sürü şey var ve
saatlerce buna bakabilirsiniz.
00:08:13.950 --> 00:08:17.010
Fakat ben size TextView belgelendirme
sayfasında tek bir şey göstereceğim.
00:08:17.010 --> 00:08:20.820
SetVisibility için metotu
göstermek istiyorum.
00:08:20.820 --> 00:08:24.350
İşte TextView sınıfı içinde
SetVisibility için Java metotu bu.
00:08:24.350 --> 00:08:26.860
Görünümün görünebilir
olup olmayacağını belirliyor.
00:08:28.000 --> 00:08:33.240
Eğer bu metota tıklarsam,
beni View sınıfına götürür.
00:08:33.240 --> 00:08:36.010
Ve sonra da metotun
ne işe yaradığını açıklıyor.
00:08:36.010 --> 00:08:39.860
Bu sayede bir TextView nesnesinin
görünebilirlik metotunun olduğunu,
00:08:39.860 --> 00:08:43.659
fakat aslında View sınıfından
devraldığını görebilirsiniz.
00:08:43.659 --> 00:08:47.470
Yani, bu işlevselliği View
sınıfından bedavaya almışız.
00:08:47.470 --> 00:08:50.930
Pekala, bir ton yeni
kavramı ele aldık.
00:08:50.930 --> 00:08:56.040
Normalde bu, bilgisayar bilimi
kursunda bir döneme yayılır.
00:08:56.040 --> 00:08:58.260
Şimdi biraz alıştırma yapacağız ve
00:08:58.260 --> 00:09:01.170
umuyorum ki sizin için
aradaki boşlukları doldurur.
00:09:01.170 --> 00:09:03.010
Fakat unutmayın ki, bu kavramları
tamamen anlamanız çok daha
00:09:03.010 --> 00:09:06.610
fazla zamanınızı alacak ve daha çok
pratik yapmanız gerekecek.
00:09:06.610 --> 00:09:09.700
Peki, ilk alıştırma; yeni bir Android
uygulaması geliştirmenizi istiyorum,
00:09:09.700 --> 00:09:11.530
çünkü Just Java uygulamasını
bozmak istemeyiz.
00:09:13.070 --> 00:09:14.640
Projeyi oluşturduktan sonra,
uygulamayı çalıştırın.
00:09:15.790 --> 00:09:18.630
Uygulamanızı geliştirdiğiniz de,
bir MainActivity dosyası göreceksiniz.
00:09:18.630 --> 00:09:22.530
Bu MainActivity dosyası
AppCompatActivity'den genişleyecek.
00:09:22.530 --> 00:09:26.060
Bunun yerine, Android Studio'su
sürümünüzde eğer MainActivity,
00:09:26.060 --> 00:09:28.760
ActionBarActivity'den
genişliyorsa, o da olur.
00:09:28.760 --> 00:09:32.200
Zaten AppCompatActivity'nin
sadece eski bir sürümü.
00:09:32.200 --> 00:09:35.650
Bu geçersiz kılma metotunu
kaldırarak, onCreate metotunun
00:09:35.650 --> 00:09:40.280
AppCompatActivity'de göründüğü
haline dönmüş olacağız.
00:09:40.280 --> 00:09:44.540
Bu metotun olması MainActivity'de onCreate
için farklı bir davranış istediğimiz
00:09:44.540 --> 00:09:46.230
anlamına geliyor.
00:09:46.230 --> 00:09:49.540
Yani, onu kaldırmak bizi
AppCompatActivity sınıfındaki
00:09:49.540 --> 00:09:52.040
orijinal davranışa geri döndürecek.
00:09:52.040 --> 00:09:53.380
Uygulamayı çalıştırdığınızda,
00:09:53.380 --> 00:09:57.250
ilk seferki çalıştırmanızdan
farklı bir şeyler fark ettiniz mi?
00:09:57.250 --> 00:09:58.510
Cevabınızı bu metin kutusuna yazın.