Ata Aöf Nesne Tabanlı Programlama 1 2024-2025 Final Soruları
https://lolonolo.com/2026/01/01/ata-aof-nesne-tabanli-programlama-1-2024-2025-final-sorulari/
Bu kaynaklar, C# programlama dili temelinde nesne yönelimli programlama (OOP) kavramlarını ve teknik detaylarını kapsayan bir sınav hazırlık materyalidir. Metinlerde sınıflar, nesne oluşumu ve bellek yönetimi gibi yapı taşlarının yanı sıra, kapsülleme ve erişim belirleyiciler aracılığıyla veri güvenliğinin nasıl sağlandığı açıklanmaktadır. Ayrıca yığın (stack) ve kuyruk (queue) gibi veri yapılarının çalışma prensipleri ile metot aşırı yükleme ve değişken isimlendirme kurallarına dair teknik bilgiler sunulmaktadır. Ata AÖF öğrencileri için hazırlanan bu içerik, teorik bilgileri pratik kod örnekleri ve çözüm açıklamalı çoktan seçmeli sorularla pekiştirmeyi amaçlar. Sonuç olarak belge, yazılım mimarisinde performans artırıcı statik üyeler ve güncel zaman fonksiyonları gibi modern programlama unsurlarına dair kapsamlı bir özet niteliğindedir.
https://lolonolo.com
Show More Show Less View Video Transcript
0:00
Herkese merhaba. C#ARP kodunuzun
0:02
sırlarını çözmeye hazır mısınız? Bugün
0:04
nesne yönelimli programlamanın yani
0:06
OOP'nin en temel taşlarını biraz farklı
0:09
bir rehberle bir sınav kağıdı üzerinden
0:12
ele alacağız. Evet, biliyorum kulağa
0:14
biraz garip geliyor. Bir sınav kağıdı
0:17
daha iyi kod yazmanın yol haritası
0:19
olabilir mi? Ama inanın bugünkü
0:21
yolculuğumuzun sonunda bu sorunun
0:23
cevabının kocaman bir evet olduğunu
0:25
göreceksiniz. Çünkü bu kağıt aslında
0:28
sadece notlardan ibaret değil. İçinde
0:30
daha temiz ve daha etkili kod yazmanın
0:33
sırlarını saklıyor. O zaman görevimiz
0:35
belli. Gsarp'la nesne yönelimli
0:38
programlamanın özünü kavramak için bu 20
0:41
sorunun şifresini birlikte çözeceğiz.
0:44
Burada sadece teoriden bahsetmeyeceğiz.
0:46
Kodun arkasındaki nedeni ve nasılı
0:49
keşfedeceğiz. Hazırsanız başlayalım. İlk
0:52
olarak her şeyin temelinden başlayalım.
0:55
Yani tüm bu OOP dünyasını ayakta tutan
0:58
ana yapı taşları nelerdir? Onlara bir
1:00
bakalım. Nesne yönelimli programlamayı
1:03
bir ev inşa etmek gibi düşünebiliriz.
1:05
Sınıflar o evin mimari planıdır. Yani
1:09
bir taslaktır. Bu plandan yaratarak
1:11
yaptığınız her bir ev ise bir nesnedir.
1:14
Evin rengi, katsayısı gibi özellikleri
1:17
yani içindeki veriler niteliklerdir.
1:19
Kapıyı açmak, ışığı yakmak gibi
1:21
yapabildiği eylemler de metotlardır.
1:24
İşte 13. sorunun cevabı da tam olarak bu
1:27
dört temel kavrama dayanıyor. Basit
1:29
değil. Peki bu planları yani sınıfları
1:32
nasıl gerçeğe dönüştürürüz? İşte sihirli
1:35
kelimemiz burada. New. Siz kodda new
1:38
yazdığınız anda programınız bellekte hip
1:41
adını verdiğimiz özel bir alanda o nesne
1:43
için bir yer ayırır. Şunu unutmayın. New
1:46
demek her zaman bellek kullanımı demek.
1:49
Bu kritik bilgi de bize 2inci ve 4.
1:51
soruların doğru cevabını veriyor. Tamam,
1:53
nesneleri yarattık. Şimdi de C#ar'ın
1:56
bellekteki verileri nasıl yönettiğine ve
1:59
bu yönetimin kodumuzun davranışını nasıl
2:01
kökten değiştirebildiğine bakalım. İşte
2:03
bu programlamada en sık kafa karıştıran
2:06
konulardan biri. Bakın 1inci sorudaki
2:09
kodda ref anahtar kelimesi var. Peki bu
2:11
ne anlama geliyor? Bu şu demek. Metoda
2:14
değişkenin bir kopyasını değil
2:16
bellekteki adresinin ta kendisini
2:18
gönderiyoruz. Yani metot orijinal
2:21
değişkenle doğrudan çalışıyor. Bu yüzden
2:24
metot içinde yapılan o küp alma işlemi
2:26
orijinal numara değişkenini kalıcı
2:28
olarak değiştiriyor ve ekrana 8
2:30
yazdırılıyor. Eğer orada ref olmasaydı
2:33
yapılan değişiklik sadece metot içinde
2:36
kalırdı ve sonuç yine 2 olurdu. Aradaki
2:39
fark çok büyük. Peki ya bazı işlevlere
2:42
erişmek için her seferinde NIV'le yeni
2:45
bir nesne yaratmakla uğraşmak
2:47
istemeseydik işte tam bu noktada statik
2:50
devreye giriyor. Statik olarak
2:52
tanımlanan bir üye herhangi bir nesneye
2:54
değil doğrudan sınıfın kendisine aittir.
2:57
Bu sayede 9. soruda da vurgulandığı gibi
3:00
new kullanmadan ona doğrudan
3:02
erişebiliriz. Bu da ne demek? Hem
3:04
bellekten tasarruf hem de daha hızlı
3:07
çalışan bir kod demek. Verileri tek
3:10
yönetmek yerine onları akıllıca nasıl
3:12
gruplayabiliriz? Şimdi verileri organize
3:14
etme sanatına yani koleksiyonlara
3:17
bakalım. C#ARP'ın bu konuda bize sunduğu
3:19
güçlü araçları keşfedelim. Tşarp'ta en
3:22
sık kullanılan iki veri yapısıyla
3:23
tanışın. Stack ve Q. Aralarındaki farkı
3:26
anlamanın en kolay yolu bence günlük
3:29
hayattan basit analojiler kurmak. Stack
3:31
üst üste dizdiğiniz bir tabak yığını
3:33
gibidir. En son koyduğunuz tabağı ilk
3:35
alırsınız. Buna lifeo diyoruz. Yani son
3:38
giren ilk çıkar. Q'sa tam bir market
3:41
kasası sırasıdır. Sıraya ilk kim
3:43
girdiyse kasadan da ilk o çıkar. Buna da
3:45
fifo diyoruz. Yani ilk giren ilk çıkar.
3:48
Şimdi 5. sorunun merkezindeki pop
3:51
metoduna biraz daha yakından bakalım.
3:53
Bakın burada çok önemli bir detay var.
3:55
Pop metodu yığının en üstündeki elemana
3:58
sadece bakmakla kalmaz. Onu alır ve
4:01
yığından tamamen kaldırır. Yani iki işi
4:03
aynı anda yapar. hem okur hem de siler.
4:06
Eğer amacınız sadece en üsttekine bir
4:08
göz atmak olsaydı o zaman peak metodunu
4:11
kullanırdınız. Bu ayrım kritik. Q yani
4:14
kuyruklar için de harika bir
4:16
optimizasyon ipucumuz var. 12. soruda
4:18
geçen trim to size metodunu düşünün.
4:21
Şöyle bir senaryo hayal edin.
4:22
Kuyruğunuzu 100 elemanlık bir
4:24
kapasiteyle oluşturdunuz ama içine
4:26
sadece 10 eleman eklediniz. İşte bu
4:28
metot o kullanılmayan 90 kişilik boş
4:31
alanı belleğe geri iade eder ve israfı
4:34
önler. Küçük ama bellek yönetimi için
4:36
oldukça etkili bir araç. Evet, şimdi de
4:39
kodumuzun hangi kısımlarına kimlerin
4:41
erişebileceğini nasıl kontrol ettiğimize
4:44
ve kodumuzu nasıl daha esnek hale
4:46
getirdiğimize bir bakalım. Kodumuzun
4:48
güvenliği ve düzeni erişim
4:50
belirleyicilerle başlar. Private en katı
4:53
olanıdır. Bir üyeye private yaparsanız o
4:56
sizin kişisel kasanız gibi olur. Ona
4:58
sadece ve sadece kendi sınıfının içinden
5:00
ulaşabilirsiniz. Internalsa biraz daha
5:03
esnektir. 7. ve 17. sorularında işaret
5:06
ettiği gibi internal bir üyeye aynı
5:09
proje içindeki bütün sınıflardan
5:10
erişilebilir. Yani proje içinde bir nevi
5:13
public gibi davranır. Kapsülleme yani
5:16
encapsulation kulağa biraz karmaşık
5:18
gelebilir ama aslında çok mantıklı bir
5:20
koruma mekanizmasıdır ve 20. sorunun da
5:22
temelini oluşturur. Olay şu: Önce
5:25
verinizi private yaparak bir kasaya
5:27
kilitlersiniz. Bu adım bir. Sonra bu
5:30
kasayı kontrollü bir şekilde açıp
5:32
kapatmak için public be property yani
5:34
bir nevi anahtar yaratırsınız. Bu da
5:36
adım 2. Ve son olarak adım 3'te bu
5:39
anahtarın üzerindeki get blokları
5:42
sayesinde o veriye kimin, nasıl ve hangi
5:45
kurallarla erişebileceğine siz karar
5:47
verirsiniz. Verileriniz artık güvende.
5:50
Kodumuzu nasıl daha akıllı ve esnek hale
5:52
getirebiliriz? İşte cevaplardan biri.
5:54
Aşırı yükleme yani overloading. 16.
5:58
Sorunun konusu olan bu özellik aynı
6:00
isimle birden fazla metot yazmamıza izin
6:02
veriyor. Tek bir şartı var. Metotların
6:05
imzaları yani parametre listeleri
6:07
birbirinden farklı olmalı. Bu sayede
6:10
örneğin topla diye bir metodunuz hem iki
6:12
tam sayıyı hem de iki ondalıklı sayıyı
6:15
hatta 3 sayıyı bile toplayabilir. Çok
6:17
kullanışlı. Ve geldik son bölüme. Şimdi
6:21
her C#ARP programcısının aklının bir
6:23
köşesinde mutlaka bulunması gereken
6:25
birkaç altın kurala hızlıca göz
6:27
atacağız. Değişken isimlendirme
6:29
kuralları basit ama hayat kurtarır. 6.
6:32
sorudaki gibi düşünelim. İsimler her
6:34
zaman bir harfle veya alt çizgi ile
6:37
başlamalı. Rakam kullanabilirsiniz ama
6:39
asla en başta değil. Artı, eksi, bölü
6:42
gibi özel karakterler ise kesinlikle
6:44
yasak. İşte bu yüzden er zurum geçerli
6:48
bir isim oluyor. Bu kadar basit. İşte bu
6:51
da sıkça sorulan küçük ama önemli bir
6:54
bilgi. 10. sorunun da cevabı bir string
6:57
değişkeni tanımladınız ama ona hiçbir
6:59
değer atamadınız. Peki varsayılan değeri
7:02
ne olur? Cevap nal. Yani içi boş veya
7:06
henüz hiçbir yeri göstermiyor anlamına
7:08
gelir. Bunu kodda default string
7:10
şeklinde de görebilirsiniz. Zamanla
7:12
çalışırken neye ihtiyacınız olduğunu
7:14
bilmek önemli. Sadece bugünün tarihini
7:17
mi istiyorsunuz yoksa şu anki tam saati
7:19
de mi? 18. sorunun da işaret ettiği gibi
7:23
eğer size hem tarih hem de saat lazımsa
7:26
kullanacağınız komut çok net. Datetime.
7:30
Bu komut size ikisini bir arada tek
7:32
seferde verir. Ve son olarak çok önemli
7:35
bir kavramsal ayrım. 19. soruda altı
7:38
çizilen bu nokta statik kelimesinin ne
7:41
olduğunu netleştiriyor. Bakın, statik
7:43
bir string veya bir class gibi bir veri
7:45
türü değildir. Bir metodun veya bir
7:47
alanın nasıl davranacağını belirten bir
7:50
değiştiricidir. Yani bir ne değil bir
7:52
nasıldır. Bu yüzden de bir metoda
7:54
parametre olarak statik bir şey
7:56
gönderemezsiniz. İşte böylece sınav
7:58
sorularının ötesine geçenek C#ARP'ın
8:01
temel mantığını birlikte kavramış olduk.
8:03
Artık bu sadece bir sınavı geçmekle
8:05
ilgili değil. Bu öğrendiğiniz kurallar
8:07
sizin alet çantanız. Asıl önemli soru
8:10
şu: Bu aletlerle ne inşa edeceksiniz?
8:13
İzlediğiniz için teşekkürler.
#Education

