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.