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