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.