1
00:00:00,920 --> 00:00:03,410
JustJava uygulamasına geri dönelim.
2
00:00:03,410 --> 00:00:07,260
MainActivity sınıfı içeresindeki
DisplayMessage metotuna bir göz atalım.
3
00:00:07,260 --> 00:00:09,950
Her şey daha anlaşılır bir hal
almaya başlıyor artık.
4
00:00:09,950 --> 00:00:14,350
Zaten orderSummaryTextView adında bir
değişken oluşturduğumuzu biliyoruz.
5
00:00:14,350 --> 00:00:16,760
Bu görünümün veri
türü de TextView'di.
6
00:00:17,790 --> 00:00:19,610
Bu kısmı henüz anlayamadık ama.
7
00:00:20,740 --> 00:00:23,290
Bir sonraki satırda, bu TextView
öğesine bir metot çağırıyoruz.
8
00:00:24,650 --> 00:00:28,070
Yukarıda belirtilen aynı
değişkeni kullanıyoruz.
9
00:00:28,070 --> 00:00:31,830
Yani, orderSummaryTextView.setText'i
çağırıyoruz.
10
00:00:31,830 --> 00:00:34,290
Daha sonra da metot için giriş
olarak bir string gireceğiz.
11
00:00:35,300 --> 00:00:38,790
Bu string mesajı, aslen
görüntüleme mesajı metotuna
12
00:00:38,790 --> 00:00:40,200
bir giriş parametresi olarak geldi.
13
00:00:41,720 --> 00:00:45,250
Şimdi de kodun henüz
anlamadığımız bu kısmını irdeleyelim.
14
00:00:45,250 --> 00:00:48,210
Görünüşe göre FindViewById
bir metot çağrısı.
15
00:00:48,210 --> 00:00:53,530
Çünkü bu parantezler arasındaki giriş
parametresi gibi gözüken kısmın önünde.
16
00:00:53,530 --> 00:00:57,458
Fakat ilginç olan, bu metotun sınıfın
hiçbir yerinde tanımlanmamış olması.
17
00:00:57,458 --> 00:01:02,355
Bu isme iki kere tıklayıp Command+F
tuşlarına basarsam veya
18
00:01:02,355 --> 00:01:07,560
Windows üzerinde iseniz Ctrl+F, o zaman
bu dosya içinde arama yapabilirim.
19
00:01:07,560 --> 00:01:10,780
findViewById olan sadece
iki sonuç görüyorum ve
20
00:01:10,780 --> 00:01:12,790
ikisi de benzer
şekillerde kullanılmış.
21
00:01:12,790 --> 00:01:15,160
Fakat findViewById'i çağıran
başka bir metot görmüyorum.
22
00:01:16,190 --> 00:01:19,640
Hazır lafı açılmışken, dana önceden
MainActivity sınıfında
23
00:01:19,640 --> 00:01:23,450
setContentView'e bir çağrı görmüştük,
fakat bu dosya içinde
24
00:01:23,450 --> 00:01:26,280
arama yaparsanız, o da
MainActivity'de tanımlanmamış.
25
00:01:27,820 --> 00:01:29,620
Peki, bu yöntemler
nerede tanımlanmış?
26
00:01:30,620 --> 00:01:33,610
MainActivity aslında
oldukça kısa bir dosya.
27
00:01:33,610 --> 00:01:35,150
Sadece 90 satır uzunluğunda,
28
00:01:35,150 --> 00:01:38,790
ama bu sınıfta
göründüğünden fazlası var.
29
00:01:38,790 --> 00:01:42,200
Kodda extends AppCompatActivity yazıyor.
30
00:01:42,200 --> 00:01:45,710
Bu da MainActivity'nin
AppCompatActivity sınıfındaki
31
00:01:45,710 --> 00:01:49,290
bir işlevselliğin uzantısı
olduğu anlamına geliyor.
32
00:01:49,290 --> 00:01:52,790
Bilgisayarınızda bir işlem çubuğu
hareketi görürseniz, önemli değil,
33
00:01:52,790 --> 00:01:55,450
sadece bunun eski bir
sürümü olduğu içindir.
34
00:01:55,450 --> 00:01:58,770
Kullanmanız gereken en son
sürüm ise AppCompatActivity.
35
00:01:58,770 --> 00:02:02,420
Ayrıca AppCompatActivity, eski
Android cihazlarda bize geriye dönük
36
00:02:02,420 --> 00:02:04,460
uyumluluk desteği de veriyor.
37
00:02:04,460 --> 00:02:07,980
AppCompatActivity, Android
destek kütüphanesinin bir parçası.
38
00:02:07,980 --> 00:02:11,740
Hala eski Android cihazlar üzerinde
çalışırken Android üzerindeki en son
39
00:02:11,740 --> 00:02:15,420
kullanıcı arabirimini
kullanmamıza olanak sağlıyor.
40
00:02:15,420 --> 00:02:17,940
AppCompatActivity
sınıfını genişleterek,
41
00:02:17,940 --> 00:02:20,620
bedavaya MainActivity
içinden bütün işlevselliğe,
42
00:02:20,620 --> 00:02:24,490
bütün durum
ve metotlara ulaşabiliyoruz.
43
00:02:24,490 --> 00:02:26,980
Buradan herhangi bir kodu
kopyalayıp yapıştırmamıza gerek yok.
44
00:02:26,980 --> 00:02:28,800
Sadece sınıfı genişletmemiz yeterli.
45
00:02:30,090 --> 00:02:31,020
Eğer ilgileniyorsanız,
46
00:02:31,020 --> 00:02:35,880
AppCompatActivity'i Google'da arayarak
daha fazla bilgiye ulaşabilirsiniz.
47
00:02:35,880 --> 00:02:39,700
İşte AppCompatActivity sınıfı
için bir referans belgesi.
48
00:02:39,700 --> 00:02:41,920
Chrome uzantısı bende yüklü olduğundan
49
00:02:41,920 --> 00:02:43,120
kaynağı da görebiliyorum.
50
00:02:43,120 --> 00:02:47,890
Ve bu da AppCompatActivity
sınıfının tanımlandığı yer.
51
00:02:47,890 --> 00:02:50,360
Burada bir çok işlevsellik
olduğunu görebilirsiniz, fakat
52
00:02:50,360 --> 00:02:54,510
kilit mesaj, nasıl uygulandığını
anlamak zorunda değilsiniz.
53
00:02:54,510 --> 00:02:58,350
Tek bilmeniz gereken,
AppCompatActivity'i genişlettiğinizde
54
00:02:58,350 --> 00:03:01,010
bütün bu işlevselliklere
bedavaya sahip olacak olmanız.
55
00:03:01,010 --> 00:03:03,580
Yüksek seviyede şu
şekilde görselleştirebilirsiniz.
56
00:03:03,580 --> 00:03:05,900
Bu, MainActivity için bir sınıf tanımı.
57
00:03:05,900 --> 00:03:08,000
Ve diyelim ki, burada
tanımlanmış bazı metotlarınız var.
58
00:03:08,000 --> 00:03:12,350
AppCompatActivity'i genişlettiğiniz
zaman, AppCompatActivity'den
59
00:03:12,350 --> 00:03:14,200
durum ve metotlara ulaşabilirsiniz.
60
00:03:14,200 --> 00:03:17,870
MainActivity sınıfına fiziksel
olarak eklenmiş değiller tabii ki, fakat
61
00:03:17,870 --> 00:03:19,280
orada olduklarını düşünebilirsiniz,
62
00:03:19,280 --> 00:03:22,930
çünkü hala duruma ve
metotlara gönderim yapabilirsiniz.
63
00:03:22,930 --> 00:03:26,540
İşte kodumuz da setContentView veya
findViewById tarzı şeylere böyle
64
00:03:26,540 --> 00:03:27,840
gönderim yapabiliyor.
65
00:03:27,840 --> 00:03:32,240
O metotları devraldığımız için
MainActivity içinde tanımlamadık.
66
00:03:32,240 --> 00:03:35,110
MainActivity cihaz üzerinde bir ekran
olarak gösteriliyor, fakat
67
00:03:35,110 --> 00:03:39,520
MainActivity için o kodu
biz yazmadık, devraldık.
68
00:03:39,520 --> 00:03:42,750
Durum ve metotlara direkt sınıf içindeki
AppCompatActivity'den sahip değiliz,
69
00:03:42,750 --> 00:03:46,840
fakat artık orada olduklarını ve onlara
gönderim yapabileceğimizi biliyoruz.
70
00:03:46,840 --> 00:03:50,260
Devralmaktan konu açılmışken, bunun
hem iyi hem de kötü yanları var.
71
00:03:50,260 --> 00:03:52,540
Bazen bir davranışı
devralmak isteriz fakat
72
00:03:52,540 --> 00:03:54,980
diğer zamanlarda biraz da
olsa değiştirmek isteyebiliriz.
73
00:03:55,980 --> 00:03:59,900
Bu devralınmış sınıftan bazı
davranışları değiştirmek isterseniz
74
00:03:59,900 --> 00:04:02,230
belirli metotları
geçersiz kılabilirsiniz.
75
00:04:02,230 --> 00:04:07,360
Bu @override metnini metotun üzerine
ekleyebilirsiniz, böylece bilgisayar
76
00:04:07,360 --> 00:04:12,100
AppCompatActivity'nin o sürümünü
istemediğinizi
77
00:04:12,100 --> 00:04:15,830
fakat onun yerine buradaki tanımladığınız
sürümü istediğinizi bilecektir.
78
00:04:15,830 --> 00:04:18,620
Bu zor bir konu ve çok
fazla pratik gerektiriyor.
79
00:04:18,620 --> 00:04:21,660
Fakat AppCompatActivity
sınıfından bir metotu
80
00:04:21,660 --> 00:04:23,640
geçersiz kılmayla ilgili
bir örnek gördük.
81
00:04:23,640 --> 00:04:26,380
Ve bu metot da onCreate metotu.
82
00:04:26,380 --> 00:04:31,170
MainActivity içindeki onCreate metotunu
geçersiz kılarak, o metotu çağırdığımızda
83
00:04:31,170 --> 00:04:35,380
ne yapılması gerektiğini söyleyen kendi
uyarlamamızı tanımlamış oluyoruz.
84
00:04:35,380 --> 00:04:37,180
Bu kısmı tam anlayamadıysanız
endişelenmeyin.
85
00:04:37,180 --> 00:04:40,534
Size sadece, bir kaç tane nesne yönelimli
programlama kavramlarıyla ilgili
86
00:04:40,534 --> 00:04:42,350
özet bilgiler veriyorum.
87
00:04:42,350 --> 00:04:46,160
Aklınızda hala cevap bekleyen
sorular olması oldukça normal.
88
00:04:46,160 --> 00:04:49,370
Ve hala bu konuları tamamen
anlamak için daha fazla
89
00:04:49,370 --> 00:04:50,860
okumanız gerektiği.
90
00:04:50,860 --> 00:04:53,771
MainActivity ile AppCompatActivity
sınıfları arasındaki ilişkiyi
91
00:04:53,771 --> 00:04:58,220
görselleştirmenin bir diğer yolu da
sınıf hiyerarşi şeması çizmek.
92
00:04:58,220 --> 00:05:00,930
Bu, görünüm hiyerarşi şeması
çizmekten farklı, çünkü
93
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.
94
00:05:05,340 --> 00:05:07,810
Sınıf hiyerarşi şeması
ise farklı Java sınıfları
95
00:05:07,810 --> 00:05:09,990
arasındaki ilişkiyi gösterir.
96
00:05:09,990 --> 00:05:12,860
Üst sınıf olarak elimizde
AppCompatActivity var.
97
00:05:12,860 --> 00:05:15,868
MainActivity, AppCompatActivity'den
genişlediği için
98
00:05:15,868 --> 00:05:18,560
alt sınıf olarak tanımlanıyor.
99
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
100
00:05:22,200 --> 00:05:23,970
üst sınıf olarak tanımlanır.
101
00:05:23,970 --> 00:05:25,770
Bu da alt sınıf olacaktır.
102
00:05:25,770 --> 00:05:29,070
Yani, DetailActivity adında başka
bir etkinlik oluşturursanız ve
103
00:05:29,070 --> 00:05:32,340
AppCompatActivity'i genişletmişseniz,
bu alt sınıf olur
104
00:05:32,340 --> 00:05:33,409
ve bu da üst sınıf.
105
00:05:34,720 --> 00:05:37,840
Java sınıf devralmasıyla
ilgili işte bir örnek daha.
106
00:05:37,840 --> 00:05:40,520
Şöyle bir düşündüğünüzde,
TextView, ImageView
107
00:05:40,520 --> 00:05:44,460
ve ButtonView'in hepsinin
ortak yanları var.
108
00:05:44,460 --> 00:05:48,070
Bütün bu görünümlerin ekranda
bir eni ve boyu mevcut.
109
00:05:48,070 --> 00:05:51,330
Bu kısmı henüz öğrenmedik ancak
bir de görünebilirlik durumları var.
110
00:05:51,330 --> 00:05:54,400
Yani hepsi görünmez veya
görünür hale getirilebilir.
111
00:05:54,400 --> 00:05:58,650
Hepsi için ortak olan
başka özellikleri de var.
112
00:05:58,650 --> 00:06:02,370
TextView sınıfı içinde bunlar
için kod yazıp ImageView ve
113
00:06:02,370 --> 00:06:05,590
Button sınıfı üzerine
kopyalamak yerine
114
00:06:05,590 --> 00:06:07,610
daha zekice bir şey yapabiliriz.
115
00:06:07,610 --> 00:06:09,980
Bir View (görünüm) sınıfı oluşturabiliriz.
116
00:06:09,980 --> 00:06:14,110
Bu üç görünüm için ortak olan özellikleri
çıkartabiliriz ve sonra da bu View
117
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.
118
00:06:19,730 --> 00:06:22,610
Fakat, sonra TextView sınıfı ile
View sınıfı arasında nasıl
119
00:06:22,610 --> 00:06:24,000
bağ kuracağız?
120
00:06:24,000 --> 00:06:26,548
Eğer devralmayı düşünüyorsanız,
doğru bildiniz.
121
00:06:26,548 --> 00:06:30,080
TextView java dosyasında
TextView sınıfını tanımlayacağız.
122
00:06:30,080 --> 00:06:33,240
Bu sayede bütün bu verileri ve metotları
View sınıfından alabileceğiz.
123
00:06:34,270 --> 00:06:37,520
Sonra TextView sınıfında bu kadar
çok kod olmasına gerek kalmayacak,
124
00:06:37,520 --> 00:06:41,860
çünkü işlevselliğin bir kısmı
zaten View sınıfında yazılı durumda.
125
00:06:41,860 --> 00:06:43,730
Aynı şey ImageView ve
Button sınıfları için de geçerli,
126
00:06:43,730 --> 00:06:46,800
bu kadar kod yazmak
zorunda değiliz.
127
00:06:46,800 --> 00:06:49,690
Bu dosyalarda, sadece
View sınıfı ile ImageView
128
00:06:49,690 --> 00:06:53,090
arasındaki farklı olan
şeyleri yazmamız yeterli.
129
00:06:53,090 --> 00:06:57,720
Ben bunu bir aralık belirleme olarak
görüyorum. Yani ImageView sınıfı,
130
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ı.
131
00:07:03,840 --> 00:07:06,960
Eğer ki View sınıfından bazı belli
davranışları devralmak istemiyorsak,
132
00:07:06,960 --> 00:07:11,760
ImageView sınıfındaki ya da diğer
sınıflardaki güncellenmiş davranışları
133
00:07:11,760 --> 00:07:12,820
belirtebiliriz.
134
00:07:14,070 --> 00:07:16,680
Bu noktada, terminolojiyi
size hatırlatmak adına;
135
00:07:16,680 --> 00:07:20,039
TextView alt sınıf oluyor
ve View de üst sınıf.
136
00:07:21,430 --> 00:07:23,980
Tekrardan, TextView sınıfı için
belgelendirmeye döndüğümüzde
137
00:07:23,980 --> 00:07:27,310
artık bu kısmı
anlayabilecek durumdayız.
138
00:07:27,310 --> 00:07:30,000
TextView için View'i
genişlettiği yazıyor.
139
00:07:30,000 --> 00:07:33,330
Bunun, View sınıfından metot
ve durum devraldığımız
140
00:07:33,330 --> 00:07:35,280
anlamına geldiğini artık biliyoruz.
141
00:07:35,280 --> 00:07:38,330
Ve burada da sınıf
hiyerarşi şeması var.
142
00:07:38,330 --> 00:07:41,884
TextView sınıfının View
sınıfından devraldığını gösteriyor.
143
00:07:43,730 --> 00:07:46,530
Ve sırayla, View sınıfı
Object sınıfından devralıyor.
144
00:07:47,650 --> 00:07:50,060
Biraz incelerseniz, aslında
TextView'den genişleyen
145
00:07:50,060 --> 00:07:54,780
EditText sınıfı gibi diğer
sınıfları bulabilirsiniz.
146
00:07:54,780 --> 00:07:57,570
Yani, davranışı TextView
sınıfından alıyor ve
147
00:07:57,570 --> 00:08:00,120
ona belirli bir işlevsellik ekliyor.
148
00:08:01,290 --> 00:08:03,590
Böylece EditText,
TextView'den genişlemiş oluyor.
149
00:08:03,590 --> 00:08:06,720
Ve TextView de View'den genişliyor,
ve View de Object'den genişliyor.
150
00:08:06,720 --> 00:08:09,830
İşte sınıf hiyerarşisi şeması da bu.
151
00:08:11,370 --> 00:08:13,950
Bir sürü şey var ve
saatlerce buna bakabilirsiniz.
152
00:08:13,950 --> 00:08:17,010
Fakat ben size TextView belgelendirme
sayfasında tek bir şey göstereceğim.
153
00:08:17,010 --> 00:08:20,820
SetVisibility için metotu
göstermek istiyorum.
154
00:08:20,820 --> 00:08:24,350
İşte TextView sınıfı içinde
SetVisibility için Java metotu bu.
155
00:08:24,350 --> 00:08:26,860
Görünümün görünebilir
olup olmayacağını belirliyor.
156
00:08:28,000 --> 00:08:33,240
Eğer bu metota tıklarsam,
beni View sınıfına götürür.
157
00:08:33,240 --> 00:08:36,010
Ve sonra da metotun
ne işe yaradığını açıklıyor.
158
00:08:36,010 --> 00:08:39,860
Bu sayede bir TextView nesnesinin
görünebilirlik metotunun olduğunu,
159
00:08:39,860 --> 00:08:43,659
fakat aslında View sınıfından
devraldığını görebilirsiniz.
160
00:08:43,659 --> 00:08:47,470
Yani, bu işlevselliği View
sınıfından bedavaya almışız.
161
00:08:47,470 --> 00:08:50,930
Pekala, bir ton yeni
kavramı ele aldık.
162
00:08:50,930 --> 00:08:56,040
Normalde bu, bilgisayar bilimi
kursunda bir döneme yayılır.
163
00:08:56,040 --> 00:08:58,260
Şimdi biraz alıştırma yapacağız ve
164
00:08:58,260 --> 00:09:01,170
umuyorum ki sizin için
aradaki boşlukları doldurur.
165
00:09:01,170 --> 00:09:03,010
Fakat unutmayın ki, bu kavramları
tamamen anlamanız çok daha
166
00:09:03,010 --> 00:09:06,610
fazla zamanınızı alacak ve daha çok
pratik yapmanız gerekecek.
167
00:09:06,610 --> 00:09:09,700
Peki, ilk alıştırma; yeni bir Android
uygulaması geliştirmenizi istiyorum,
168
00:09:09,700 --> 00:09:11,530
çünkü Just Java uygulamasını
bozmak istemeyiz.
169
00:09:13,070 --> 00:09:14,640
Projeyi oluşturduktan sonra,
uygulamayı çalıştırın.
170
00:09:15,790 --> 00:09:18,630
Uygulamanızı geliştirdiğiniz de,
bir MainActivity dosyası göreceksiniz.
171
00:09:18,630 --> 00:09:22,530
Bu MainActivity dosyası
AppCompatActivity'den genişleyecek.
172
00:09:22,530 --> 00:09:26,060
Bunun yerine, Android Studio'su
sürümünüzde eğer MainActivity,
173
00:09:26,060 --> 00:09:28,760
ActionBarActivity'den
genişliyorsa, o da olur.
174
00:09:28,760 --> 00:09:32,200
Zaten AppCompatActivity'nin
sadece eski bir sürümü.
175
00:09:32,200 --> 00:09:35,650
Bu geçersiz kılma metotunu
kaldırarak, onCreate metotunun
176
00:09:35,650 --> 00:09:40,280
AppCompatActivity'de göründüğü
haline dönmüş olacağız.
177
00:09:40,280 --> 00:09:44,540
Bu metotun olması MainActivity'de onCreate
için farklı bir davranış istediğimiz
178
00:09:44,540 --> 00:09:46,230
anlamına geliyor.
179
00:09:46,230 --> 00:09:49,540
Yani, onu kaldırmak bizi
AppCompatActivity sınıfındaki
180
00:09:49,540 --> 00:09:52,040
orijinal davranışa geri döndürecek.
181
00:09:52,040 --> 00:09:53,380
Uygulamayı çalıştırdığınızda,
182
00:09:53,380 --> 00:09:57,250
ilk seferki çalıştırmanızdan
farklı bir şeyler fark ettiniz mi?
183
00:09:57,250 --> 00:09:58,510
Cevabınızı bu metin kutusuna yazın.