• Buradasın

    Android Uygulama Geliştirme ve Reflection Kullanımı Eğitimi

    youtube.com/watch?v=-_qQ7J-XUG0

    Yapay zekadan makale özeti

    • Bu video, bir eğitmen tarafından sunulan Android uygulama geliştirme eğitim içeriğidir. Eğitmen, kelime tahmin oyunu uygulamasının geliştirilme sürecini adım adım göstermektedir.
    • Video, Android uygulama geliştirme sürecini kapsamlı bir şekilde ele almaktadır. İlk olarak MVP tasarım deseninin kullanımı, ardından kullanıcı deneyimini geliştirmek için uyarı mesajları ve harf girişi kısıtlamaları ekleme anlatılmaktadır. Daha sonra Java'daki reflection kavramı ve Kotlin'de custom annotation oluşturma konuları işlenmekte, son olarak ise reflection kullanarak Android uygulamalarında dil değiştirme özelliği nasıl uygulanacağı gösterilmektedir.
    • Eğitim içeriğinde temiz kod yazma prensipleri, refleksiyon kavramının çalışma zamanı erişimini, annotation'ların kullanım alanları ve API'den gelen verileri kullanarak dil ayarlarını değiştirme teknikleri gibi pratik bilgiler de paylaşılmaktadır. Ayrıca, versiyon kontrolü yaparak istek atma sıklığını azaltma konusu da ele alınmaktadır.
    Dersin Başlangıcı ve LinkedIn Paylaşımı
    • Geçen hafta yapılan emekliye devam edilecek ve çok az şey kalmış.
    • LinkedIn profilinde "refleks ve annotation" ile ilgili bir yazı paylaşılmış, özellikle Dagger, Butterknife ve Lifeson gibi kütüphanelerin kullandığı refleks özelliği hakkında bilgi verilmiş.
    • Ders sırasında refleks konusunda ufak bir uygulama yapılacağı belirtilmiş.
    00:54Oyunun Durum Kontrolü
    • Geçen hafta yapılan uygulamada kelime tahmin oyunu yapılmış ve kullanıcı harfleri tahmin ederek kelimeyi bulmaya çalışıyordu.
    • Kullanıcı kelimeyi bildiğinde "tebrikler bildiniz" şeklinde bir mesaj dönmesi bekleniyor.
    • Oyun mekanizmasında alt tire kalmadığında (her harf doğru tahmin edildiğinde) kullanıcı kelimeyi bildiği anlaşılıyor.
    02:30Başarılı Durum Yönetimi
    • DataManagement sınıfında alt tire kalmadığında (her harf doğru tahmin edildiğinde) kullanıcıya başarılı mesajı gösterilmesi gerekiyor.
    • Presenter sınıfı, kullanıcı başarılı olduğunda view'a "inisSuccessPool" metodu ile bilgi veriyor.
    • MainActivity'de "setGameLayout" metodunu kullanarak oyun ekranını gizleyip, "setSuccessMessage" ile başarılı mesajını gösteriyor.
    05:23Sonuç Butonları
    • Kullanıcıya "tekrar oyna" veya "çıkış yap" seçenekleri sunulması gerekiyor.
    • "showResultButtonLayout" metodu ile sonuç butonlarının görünür hale getiriliyor.
    • MainActivity'de bu metodu implement ederek butonların görünür hale getirilmesi sağlanıyor.
    06:51Başarısız Durum Yönetimi
    • Kullanıcı kalan canı (hak) bitirip bilemezse, "getRemainingLife" metodu ile kalan can değeri kontrol ediliyor.
    • Kalan can sıfır olduğunda kullanıcıya başarısızlık mesajı gösteriliyor.
    • Başarısızlık durumunda da "showResultButtonLayout" metodu ile tekrar oyna veya çıkış seçenekleri sunuluyor.
    09:36Oyunu Yeniden Başlatma
    • Kullanıcı "tekrar oyna" butonuna bastığında "onPlayAgainClick" metodu çalıştırılıyor.
    • Presenter'a "prepareGame" metodu ile oyunun yeniden başlatılması isteniyor.
    • "prepareGame" metodu yeni bir kelime seçiyor, kalan canı sıfırlıyor ve oyunu hazırlıyor.
    12:08Oyunun Sorunları ve Çözümleri
    • Oyun tekrar başlatıldığında bazı sorunlar yaşanıyor, özellikle "inInput" metodunda.
    • "prepareGame" metodunda "inInput" metodunu tekrar çağırarak sorunun çözüleceği belirtiliyor.
    13:28Uygulama Sorunlarını Çözme
    • Uygulamada boşa bastığımızda kalan hak düşmesi sorunu çözülüyor.
    • Boş giriş yapıldığında kullanıcıya "lütfen geçerli bir harf giriniz" mesajı gösterilmesi için kod değişikliği yapılıyor.
    • Kodda trim metodu kullanılarak boş giriş kontrolü yapılıyor ve boş veya null değerler için uyarı mesajı gösteriliyor.
    16:12Kod Kalitesi ve Best Practices
    • Tekrar kullanılabilir kod parçaları için ayrı metotlar oluşturmak önemlidir, bir kere kullanacağımız düşüncesiyle bu adımı atlamamalıyız.
    • Uyarı mesajları için string kaynak dosyalarından çekmek yerine direkt kod içinde yazmak yerine, metotlar oluşturarak kodun daha düzenli olmasını sağlayabiliriz.
    • Kod yazarken, gelecekte tekrar kullanılabilir olacak parçaları ayrı metotlar halinde oluşturmak, kodun sürdürülebilirliğini artırır.
    19:28Giriş Kontrolü ve Reflection
    • Input alanına sadece harf girilmesi için kontrol ekleniyor, sayısal girişler engelleniyor.
    • Reflection, derleme zamanında bilinmeyen sınıfların metotlarını ve değişkenlerini öğrenmemizi sağlayan Java'nın bir özelliğidir.
    • Annotation, sınıflara, metotlara ve değişkenlere ek bilgi eklememizi sağlayan bir özellik olarak tanımlanıyor.
    25:10Reflection Kavramı
    • Reflection, bilinmeyen bir sınıfın, objenin metotlarına run time da değiştirmeye, bilgi almaya ve erişmeye yarayan bir özelliktir.
    • Normalde bir sınıf tanımladığımızda noktaya bastığımızda sınıfa ait özellikler ve metotları görebiliriz, ancak bilinmeyen bir sınıf geldiğinde reflection sayesinde bu sınıfa erişebiliriz.
    • Reflection, bilinmeyen bir sınıfın özelliklerine (name, email, adres gibi) ulaşmak ve set etmek için kullanılır.
    28:11Reflection Kullanımı
    • Reflection ile bir sınıfın metotlarını, modifierlarını, özellikleri ve diğer bilgilerine erişebiliriz.
    • Örnek olarak "SampleClass" sınıfı oluşturulmuş ve bu sınıfa reflection ile erişim sağlanmıştır.
    • Reflection ile sınıfın ismi, interface olup olmadığı, kontaktör sayısı, kullanıcı tarafından tanımlı alanlar ve metotlar gibi bilgiler alınabilir.
    35:58Reflection Özellikleri
    • Reflection, bilmediğimiz her şeyi sınıf hakkında öğrenmemize olanak sağlar.
    • Annotation'lar, Java metotları ve sınıf değişkenlerine özellik katmak için kullanılan yapılardır.
    • Annotation'lar, bir sınıfa ek özellikler ekleyerek ileride kullanılmak üzere bilgi saklamak için kullanılabilir.
    37:26Custom Annotation Oluşturma
    • Custom annotation kullanarak statik textler için bir kütüphane oluşturmak istiyoruz.
    • "Translate" adında bir annotation sınıfı oluşturuyoruz.
    • Bu annotation'a "value" ve "key" adında iki parametre ekliyoruz.
    41:08Annotation Kullanım Alanları
    • Annotation sınıflarda, propertilerde, metotlarda ve değişkenlerde kullanılabilir.
    • Parametrelerin, yerel değişkenlerin, metotların ve property get/set metodlarının üzerine de yazılabilir.
    • Ek bilgi olarak birçok yere eklenebilir.
    42:33Annotation Kullanımı
    • Bir buton değişkenine "Translate" annotation'u ekleyerek "value" ve "key" parametrelerini belirtiyoruz.
    • "FakeTranslate" adında bir fonksiyon oluşturarak JSON object döndürmeyi planlıyoruz.
    • Annotation'u metodun başına da ekleyebiliriz ve hangi amaçla kullanıldığını belirtmek için açıklama ekleyebiliriz.
    46:06Özet
    • Özel bir annotation sınıfı oluşturduk.
    • Hangi alanlarda kullanılacağını belirttik.
    • Sınıfa iki parametre ekledik ve MainActivity sınıfında değişken, method ve parametrelere annotation ekledik.
    46:28Annotation'ların Erişim Zamanları
    • Annotation'ların değerlerine erişim için üç farklı zaman vardır: source time, class time ve runtime.
    • Source time, kod derlendikten sonra silinen bilgilerdir ve refleksi kullanarak ulaşılamaz.
    • Class time, derleme sonrası kodda tutulan bilgilerdir ve refleksi kullanarak ulaşılabilecek, ancak çalışma zamanında erişilemeyen bilgilerdir.
    48:41Runtime Annotation'lar
    • Runtime annotation'lar, derleme sonrası da ulaşılabilecek ve refleksi kullanarak erişilebilecek bilgilerdir.
    • Uygulama dilini değiştirmek için runtime annotation'lar kullanılır çünkü uygulama çalışırken dil değişikliği yapılabilir.
    • Runtime annotation'ları tanımlamak için "@Retention(RetentionPolicy.RUNTIME)" kullanılır.
    51:02Reflection Kullanımı
    • Reflection kullanarak annotation'ların değerlerine erişmek için bir sınıf oluşturulur.
    • Telefonun dilini almak için "Locale.getDefault().getDisplayLanguage()" kullanılır.
    • Reflection ile annotation'ları almak için "getAnnotation(ByTranslateView.class)" metodu kullanılır.
    55:09Dil Değişimi Uygulaması
    • Çevrilen mesajı almak için annotation'ın "getJsonObj()" metodu kullanılır.
    • Çevrilen mesajı ekranda göstermek için "findViewById" ile ilgili view bulunur.
    • View türüne göre (TextView veya Button) uygun set metodu kullanılarak çevrilen mesaj ekranda görüntülenir.
    1:00:42Kod Hatalarının Giderilmesi
    • Projede tanımlanan bir çeviri fonksiyonu çağrılırken hata oluştu ve kod temizliği yapılması gerektiği belirtildi.
    • İlk hata "main activity button property has not initialized" şeklindeydi ve bu sorun, presenter'da onClick fonksiyonunun yanlış sırayla çağrılması nedeniyle oluştu.
    • İkinci hata "cannot access private field" şeklindeydi ve bu sorun, private bir değişkene erişim denemesinden kaynaklanıyordu.
    1:03:24Çeviri Fonksiyonunun Test Edilmesi
    • Çeviri butonuna basıldığında uygulama patlamadan çalışır ve dil ayarları değiştirildiğinde buton metni Türkçe'ye çevrildi.
    • Çeviri kütüphanesi, API'den gelen verilerle sabit alanlar için kullanılabilir ve her açılışta istek atmadan versiyon kontrolü yapılabilir.
    • Versiyon kontrolü için, ilk açılışta API'den veri alınabilir ve sonraki açılışlarda versiyon kontrolü yapılabilir, böylece istek yükü azaltılabilir.
    1:06:56Reflection Kavramının Anlatımı
    • Reflection kavramı, kodun çalışma zamanında nesnelerin özelliklerine erişim sağlama özelliğidir.
    • Debug modunda kod çalıştırıldığında, buton nesnesinin özelliklerine erişim sağlanarak hangi anahtarların bulunduğu incelendi.
    • Reflection kavramının anlaşıldığı düşünülerek, temiz kod yazma ve refleksiyonun anlaşıldığı vurgulandı.
    1:11:40Kapanış
    • Temiz kod yazmanın öneminden ve bunun için refleksiyonun anlaşılmış olması gerektiği belirtildi.
    • Bir sonraki videoda daha fazla bilgi paylaşılacağı ve daha önce de bir blog yazısı yayınlandığı söylendi.
    • İzleyicilere teşekkür edilerek bir sonraki perşembe günü görüşmek üzere veda edildi.

    Yanıtı değerlendir

  • Yazeka sinir ağı makaleleri veya videoları özetliyor