Final 2025-2026 20 soru

Mobil Programlama 2025-2026 Final

Kaynak: https://lolonolo.com/2026/01/25/mobil-programlama-2025-2026-final-sorulari-guz/

📖 Konu özeti (sınav öncesi tekrar)

Mobil Programlama 2025-2026 Final Soruları (Güz)

Dart Programlama Dilinin Temelleri ve Kapsülleme

Mobil uygulama geliştirme ekosisteminde Dart, sunduğu modern sözdizimi ve performans yetenekleriyle öne çıkar. Geleneksel dillerden farklı olarak Dart’ta public veya private gibi anahtar kelimeler bulunmaz. Bunun yerine kapsülleme (encapsulation), tanımlayıcıların önüne getirilen alt çizgi (_) ile sağlanır. Bu kural, ilgili değişkenin veya sınıfın sadece tanımlandığı kütüphane içinden erişilebilir olmasını garanti eder. Ayrıca Dart 2.3 ile gelen Yayılma Operatörü (…?), koleksiyonları birleştirirken null güvenliği sağlayarak kodun daha temiz ve hatasız yazılmasına imkan tanır.

Flutter’ın Bildirimsel (Declarative) UI Yaklaşımı

Flutter, arayüz çiziminde “Bildirimsel” (Declarative) bir felsefeyi benimser. Geliştiricinin arayüzün nasıl değişeceğini adım adım tarif ettiği emirsel (imperative) yapının aksine, Flutter’da arayüz mevcut durumun (State) bir fonksiyonudur ($UI = f(State)$). Durum değiştiğinde framework, arayüzün yeni halini otomatik olarak yeniden çizer. Bu süreçte widget’ların tanıtımı ve hiyerarşisi için resmi dokümantasyondaki Widget Catalog en temel başvuru kaynağıdır. Karmaşık navigasyon süreçlerinde ise onGenerateRoute parametresi, geçiş bilgilerini taşıyan RouteSettings nesnesiyle birlikte dinamik rota yönetimi sağlar.

Eşzamanlılık, Isolate ve Performans Yönetimi

Dart dili “Single Thread” (tek iş parçacıklı) bir yapıya sahip olsa da, işlemciyi yoran ağır operasyonlar için Isolate yapısını kullanır. Isolate’ler, geleneksel “Thread”lerden farklı olarak belleği paylaşmazlar ve birbirleriyle mesajlaşma yoluyla haberleşirler. Bu mimari, bellek sızıntılarını ve kilitlenmeleri (deadlock) önleyerek uygulamanın akıcı kalmasını sağlar. Uygulama yayınlanma aşamasına geldiğinde ise, kodların tersine mühendislikle deşifre edilmesini engellemek için derleme sırasında –obfuscate (kod karartma) etiketi kullanılarak güvenlik artırılır.

Veri Depolama ve Platform Entegrasyonu

Kalıcı veri saklama süreçlerinde Flutter iki temel yapı sunar: Küçük veriler (anahtar-değer çiftleri) için asenkron bir erişim sunan SharedPreferences ve dosya sistemi erişimi için path_provider kütüphanesi. Uygulamanın kendine ait kalıcı klasörüne erişmek için getApplicationDocumentsDirectory() fonksiyonu kullanılır. Platformlar arası geçişte ise Package (Paket) sadece Dart kodlarını içerirken, Plugin (Eklenti) cihaz donanımına (kamera, GPS vb.) erişmek için platforma özel (Kotlin/Swift) kodlarla köprü kurar.

Test Odaklı Geliştirme ve Firebase Entegrasyonu

Uygulama kalitesini artırmak için Birim Testleri (Unit Test) hayati önem taşır. Test senaryolarında beklenen sonuçları doğrulamak için expect fonksiyonu kullanılır. Veritabanı gibi dış kaynakları simüle etmek için ise Mockito paketiyle “mocking” işlemleri gerçekleştirilir. Modern uygulamaların vazgeçilmezi olan Firebase servislerini kullanmadan önce ise mutlaka initializeApp() fonksiyonu çağrılarak çekirdek yapı yapılandırılmalıdır. Veri alışverişinde ise dart:convert kütüphanesi içindeki jsonDecode() fonksiyonu, gelen JSON metinlerini Dart nesnelerine dönüştürerek işleme sürecini kolaylaştırır.

Mobil Programlama 2025-2026 Final Soruları (Güz)

Mobil Programlama Final Soruları 2025

20 soru
Şıkka dokun, anında açıklamasını gör — ya da çalışma modunda tüm cevapları aç.
Soru 1
Dart programlama dilinde bir değişken tanımlamasının alt çizgi(_) ile başlaması ne anlama gelmektedir?
BDoğru cevap
Açıklama
Dart dilinde Java veya C# gibi dillerdeki `public`, `private` veya `protected` anahtar kelimeleri bulunmaz. Bunun yerine, kapsülleme (encapsulation) isimlendirme kuralıyla sağlanır. Bir tanımlayıcının (değişken, fonksiyon veya sınıf) başına alt çizgi (_) konulduğunda, bu tanımlayıcı o kütüphaneye (library) veya sınıfa özel (private) hale gelir. Bu sayede, değişken sadece tanımlandığı dosya veya sınıf içerisinden erişilebilir olur, dışarıdan erişime kapatılır.
Soru 2
___ (value, 1); // value değerinin 1 ’e eşit olup olmadığını doğrular.

Flutter’daki test paketi ile unit test işlemi yapıldığında yukarıdaki gibi bir test koşulunun sağlanması için boş bırakılan yere ne gelecektir?
CDoğru cevap
Açıklama
Flutter’ın `test` paketinde, bir test senaryosunun sonucunu doğrulamak için `expect` fonksiyonu kullanılır. Bu fonksiyon iki parametre alır: İlki test edilen gerçek değer (actual), ikincisi ise olması gereken beklenen değerdir (matcher). Eğer `actual` ile `matcher` eşleşirse test başarılı olur, eşleşmezse test başarısız sayılır. `assert` daha çok geliştirme aşamasında mantıksal hataları yakalamak için kullanılırken, birim testlerin (unit test) temel doğrulama mekanizması `expect`’tir.
Soru 3
Dart programlama dilinde arkaplanda çalışacak bir iş parçacığı (multi-thread yaklaşımı) için kullanılan bileşenin adı aşağıdakilerden hangisidir?
BDoğru cevap
Açıklama
Dart dili “Single Thread” (Tek İş Parçacıklı) bir yapıya sahiptir ancak eşzamanlı (concurrent) işlemleri gerçekleştirmek için ”Isolate” yapısını kullanır. Isolate’ler, geleneksel “Thread”lerden farklı olarak kendi bellek alanlarına (heap) sahiptirler ve belleği paylaşmazlar. Birbirleriyle sadece mesajlaşma yoluyla iletişim kurarlar. Bu yapı, bellek yönetimini güvenli kılar ve kilitlenme (deadlock) sorunlarını önler. Arka planda ağır bir işlem yapılacağı zaman (örneğin büyük bir JSON ayrıştırma), ana arayüzü dondurmamak için yeni bir `Isolate` oluşturulur.
Soru 4
Aşağıdaki satırlardan hangisi kalıcı depolama alanında uygulamaların kendine ait klasörüne erişmek için path_provider kütüphanesi aracılığı ile kullanılan kodlamadır?
DDoğru cevap
Açıklama
`path_provider` paketi, dosya sistemindeki yaygın konumlara erişim sağlar. Uygulamanın kalıcı (persistent) verilerini saklamak için, kullanıcının silmediği sürece verilerin durduğu dizine erişmek gerekir. Bu dizin `getApplicationDocumentsDirectory()` fonksiyonu ile çağrılır. C şıkkındaki `getTemporaryDirectory()` ise geçici (cache) dosyalar içindir ve işletim sistemi tarafından her an silinebilir.
Soru 5
pubspec.yaml dosyasındaki gereksinimler (dependencies) kısmında paket yönetiminin en güncel sürümü bulması için versiyon numarası önüne aşağıdaki sembollerden hangisi gelmektedir?
BDoğru cevap
Açıklama 🤖 Yapay zekâ açıklaması

pubspec.yaml'da sürüm numarasının önüne konan ^ (caret) işareti, ana sürüm değişmeden uyumlu en güncel sürümün kullanılmasını sağlar; örneğin ^1.2.0, 1.2.0 ile 2.0.0 arasındaki en yeni sürümü kabul eder.

Soru 6
Aşağıdaki operatörlerden hangisi bir listedeki içeriği bir başka listeye kopyalamak için kullanılır?
DDoğru cevap
Açıklama
Dart 2.3 ile gelen Yayılma Operatörü (Spread Operator) `…` ve onun null güvenliği (null-aware) versiyonu olan `…?`, bir koleksiyonun elemanlarını başka bir koleksiyonun içine eklemek (kopyalamak) için kullanılır. `…?` operatörü, eğer kopyalanacak liste `null` ise hata vermez, işlemi pas geçer; `null` değilse elemanları yeni listeye yayar/ekler. Bu yöntem, listeleri birleştirmenin en pratik yoludur.
Soru 8
Yükarıdaki cümlede boş bırakılan yere yazılması gereken kelime aşağıdakilerden hangisidir?
BDoğru cevap
Açıklama
Flutter’da isimlendirilmiş rotalarla (named routes) navigasyon yapılırken, `onGenerateRoute` özelliği kullanılır. Bu özellik, tetiklenen bir fonksiyon bekler ve bu fonksiyon parametre olarak `RouteSettings` nesnesini alır. `RouteSettings` nesnesi, gidilmek istenen sayfanın ismini (`name`) ve varsa gönderilen argümanları (`arguments`) taşır. Geliştirici bu bilgileri kullanarak doğru sayfayı (Route) oluşturur ve döndürür.
Soru 9
Flutter geliştiricilerinin sunmuş olduğu widgetların tamamının tanıtımı ve anlatımlarına Flutter dokümanındaki aşağıdaki başlıklardan hangisinin altından erişilmektedir?
CDoğru cevap
Açıklama
Flutter’ın resmi web sitesindeki dokümantasyonda, mevcut tüm widget’ların kategorize edilmiş (Material, Cupertino, Layout, Text vb.) görsel bir listesinin ve detaylı açıklamalarının bulunduğu bölüm ”Widget Catalog” (Widget Kataloğu) başlığı altında yer alır. Bu katalog, geliştiriciler için bir başvuru kılavuzudur.
Soru 10
Aşağıdakilerden hangisi Flutter’ın durum tabanlı arayüz çizimi yaklaşımının genel tanımlamasıdır?
DDoğru cevap
Açıklama
Flutter (ve modern UI framework’lerinin çoğu, örn: React, SwiftUI), ”Bildirimsel” (Declarative) bir UI yaklaşımını benimser. Bu yaklaşımda geliştirici, arayüzün “nasıl” değişeceğini adım adım kodlamaz (Imperative); bunun yerine arayüzün o anki duruma (State) göre “ne olması gerektiğini” bildirir. Formül şöyledir: UI = f(State). Yani durum değiştiğinde arayüz, geliştiricinin yazdığı yapıya göre framework tarafından yeniden çizilir.
Soru 11
Flutter’ın arayüz çizimi ile ilgili olarak aşağıdaki yorumlardan hangisi doğrudur?
EDoğru cevap
Açıklama
Flutter’da reaktif programlama mantığı gereği, arayüz (UI) verinin (State) bir yansımasıdır. Eğer veri değiştiğinde (örneğin sepetteki ürün sayısı arttığında) ekranın bunu göstermesi gerekiyorsa, bu veri bir Model/State olarak tanımlanmalı ve bu modeldeki değişiklikler dinlenerek (Listener/Provider/Bloc vb. ile) arayüzün güncellenmesi tetiklenmelidir. C şıkkı da kısmen doğrudur ancak “bağımsız bölgeler” ifadesi daha çok global state management (Provider, Bloc) gerektirir; sadece StatefulWidget yetersiz kalabilir.
Soru 12
Flutter’da her uygulama için varsayılan bir SharedPreferences dosyası oluşturulmaktadır. Bu dosyanın bir referansını elde etmek için aşağıdaki kodlamalardan hangisi kullanılır?
ADoğru cevap
Açıklama
`SharedPreferences` paketi, verileri anahtar-değer (key-value) çiftleri halinde cihazda kalıcı olarak saklamak için kullanılır. Bu yapıya erişmek asenkron bir işlemdir çünkü dosya sisteminden okuma yapılır. Bu nedenle `SharedPreferences.getInstance()` metodu `await` anahtar kelimesiyle çağrılarak, hazır olduğunda örneğin (instance) referansı alınır.
Soru 13
Plugin (Eklenti) ile Package (Paket) arasındaki farklılık aşağıdakilerden hangisidir?
ADoğru cevap
Açıklama
Flutter ekosisteminde Package (Paket); genellikle sadece Dart diliyle yazılmış, platformdan bağımsız (örneğin HTTP istekleri, yardımcı fonksiyonlar) kod kütüphaneleridir. Plugin (Eklenti) ise; cihazın donanımına (kamera, GPS, bluetooth) veya işletim sistemi özelliklerine erişmek için hem Dart kodu hem de yerel platform kodlarını (Android için Java/Kotlin, iOS için Obj-C/Swift) içeren ve bunlar arasında köprü (MethodChannel) kuran özel paketlerdir.
Soru 14
Aşağıdakilerden hangisi bir uygulamada yazılan kodların dağıtım sürümünde tersine mühendislikle çözülmesini engellemek adına derleme aşamasında kullanılacak bir etikettir?
ADoğru cevap
Açıklama
Uygulama yayınlanırken (release mode), kaynak kodların başkaları tarafından okunmasını ve tersine mühendislik (reverse engineering) yapılmasını zorlaştırmak için kod karartma/şaşırtma işlemi yapılır. Flutter’da bu işlem, derleme komutuna `–obfuscate` (ve sembol haritasını saklamak için `–split-debug-info`) parametresi eklenerek gerçekleştirilir. Bu işlem, değişken ve fonksiyon isimlerini anlamsız karakterlere dönüştürür.
Soru 15
Visual Studio Code IDE’si içerisinde aktif Flutter çalıştırma kipi IDE ana ekranı içerisinde nerede görüntülenmektedir?
CDoğru cevap
Açıklama
Visual Studio Code editöründe, o an aktif olan Flutter cihazı (örneğin “Android Emulator” veya “iPhone 14”), kullanılan Flutter SDK sürümü ve hata ayıklama modu gibi bilgiler, pencerenin en altındaki Durum Çubuğu’nun (Status Bar) sağ alt köşesinde görüntülenir. Buraya tıklanarak cihaz değiştirilebilir.
Soru 16
Eğer bir animasyon oluşturulurken birden fazla geçiş aralığı belirlemek isteniyorsa; (örneğin bir containerdaki renk geçişlerinin trafik lambasındaki gibi sarı – yeşil – kırmızı arasında homojen olmayacak bir şekilde değişmesi), aşağıdakilerden hangisi kullanılmalıdır?
EDoğru cevap
Açıklama
Standart bir `Tween`, animasyonu başlangıçtan bitişe tek bir doğrusal düzlemde götürür. Ancak animasyonun birden fazla aşaması varsa (Önce A’dan B’ye, sonra B’den C’ye farklı sürelerde ve ağırlıklarda geçiş gibi), bu ardışık animasyonları tek bir akışta tanımlamak için `TweenSequence` sınıfı kullanılır. Bu sınıf, birden fazla `TweenSequenceItem` alarak karmaşık animasyon kurgularını yönetir.
Soru 17
Flutter’da içeriği sürekli değişebilen veri tabanı ve web servisleri gibi veri kaynakları için unit test işleminin belli bir anlık görüntü üzerine uygulanabilmesi için kullanılan paketin adı nedir?
DDoğru cevap
Açıklama
Birim testleri (Unit Tests) yazarken, testin dış bağımlılıklardan (internet, veritabanı, cihaz sensörü) etkilenmemesi ve izole olması gerekir. Gerçek web servisine istek atmak yerine, o servisin taklidini (mock) yaparak sahte verilerle test senaryosunu işletmek için `Mockito` paketi kullanılır. Bu paket, sınıfların davranışlarını simüle etmeye (mocking) yarar.
Soru 18
Column widget içerisindeki crossAxisAlignment parametresi aşağıdakilerden hangisi için düzenleme sağlar?
CDoğru cevap
Açıklama
`Column` (Sütun) widget’ı, elemanları dikey eksende (yukarıdan aşağıya) sıralar. Bu onun “Ana Eksen”idir (Main Axis). `Column`’un “Çapraz Ekseni” (Cross Axis) ise yatay düzlemdir (soldan sağa). Dolayısıyla `crossAxisAlignment` parametresi, `Column` içindeki elemanların yatayda nasıl hizalanacağını (sola yasla, ortala, sağa yasla veya yay) belirler.
18.
setState(() { 
    _active = !_active; 
});
Soru 19
Yukarıdaki kod parçasında “setState” içerisinde “active” değeri güncellenmiş ve bu değere göre hiyerarşide içteki bir widget arkaplan rengini seçecektir.
Hal böyle iken, setState metodu arayüz bileşenlerinin oluşturduğu ağaçta güncellenecek arayüz bileşeninden daha dış seviyede bulunuyorsa, arayüz güncellenmesinde değişen veri içteki arayüz bileşenlerine (widget) aktarılma yöntemi aşağıdakilerden hangisidir?
ADoğru cevap
Açıklama 🤖 Yapay zekâ açıklaması

Flutter'da veri, widget ağacında yukarıdan aşağıya yapıcı (constructor) parametreleriyle aktarılır. setState dış widget'ta çağrıldığında dış widget yeniden oluşturulur ve güncel active değeri içteki widget'a yapıcı fonksiyonu aracılığıyla parametre olarak verilir.

Soru 20
Firebase özelliklerinin kullanıma başlanmasından önce aşağıdaki fonksiyonlardan hangisi çağrılmalıdır?
EDoğru cevap
Açıklama
Flutter uygulamasında Firebase servislerini (Auth, Firestore, Messaging vb.) kullanmadan önce, Firebase çekirdeğinin ve platform ayarlarının başlatılması zorunludur. Bu işlem genellikle uygulamanın `main()` fonksiyonu içinde, `runApp`’ten önce `await Firebase.initializeApp();` komutuyla gerçekleştirilir.
Soru 21
dart:convert kütüphanesinde Json metnini bir objeye çevirmek için kullanılan fonksiyon aşağıdakilerden hangisidir?
EDoğru cevap
Açıklama
Dart dilinin yerleşik `dart:convert` kütüphanesinde; bir JSON formatındaki metni (String), Dart içinde kullanılabilir bir nesneye (genellikle `Map` veya `List`) dönüştürmek (ayrıştırmak/parse etmek) için `jsonDecode()` fonksiyonu kullanılır. (Tam tersi işlem için yani nesneyi JSON string’e çevirmek için `jsonEncode()` kullanılır).