Mobil Programlama tanımı en yalın hali ile akıllı telefonlar (smart phones) veya daha geniş bir bakış açısı ile akıllı cihazlar (smart devices) için uygulama geliştirme sürecine verilen bir isimlendirmedir.
- Mobil cihazlar temel donanım mimarisi olarak bilgisayarlara benzerler. Farkı giriş-çıkış (I/O) kaynakları oluşturur. (Mobil cihazlardaki farklı giriş/çıkış ünitelerine örnekler: sensörler, pusula, kamera, parmak izi okuyucu v.b.)
- Mobil cihaz ekosisteminde optimum zaman-maliyet-kaynak yönetimi için bir kere geliştirilen uygulamanın yeniden programlama gerekmeden farklı platformlarda ve cihazlarda sorunsuz çalışması amaçlanır.
- ilk olarak Google tarafından Fuschia işletim sisteminini geliştirirken kullanmıştır.
Mobil Programlama Yaklaşımları ve Türleri
Üç temel yaklaşım mevcuttur. Her yaklaşımın kendine göre avantajı ve dezavantajı vardır.
- Doğal (Native): Android işletim sistemi için Java veya Kotlin, iOS işletim sistemi için Objective-C veya Swift tercih edilir. Tercih edilen programlama dili, platformun geliştirme ortamı ile birebir ilişkilidir. Bu yaklaşım ile geliştirilen uygulamalar, cihazdaki bütün kaynaklara doğrudan erişir. Performansı yüksek, pil tüketimi daha azdır. Fakat, sadece geliştirildiği ortamda çalışan uygulamalar elde edilir. Her platform için kendi uzmanına ihtiyaç duyar. O nedenle, küçük ve orta ölçekli projeler tarafından az tercih edilir.
- Çok Ortam Destekli (Cross-Platform): Geliştirilen kod, aynı anda birden fazla platform için derlenebilir. İşletim sisteminden bağımsız bir programlama dili ile geliştirilir. Uygulamanın çalışması için ara bir katmana ihtiyaç duyar. Sistemlerin gelişmesi ile bu ihtiyacın doğurduğu performans kaybı göz ardı edilebilir düzeydedir. Fakat, bazı platformlarda, donanımsal özelliklere erişmede problem olabilir.
- Mobil Web (Mobile-Web): Web tabanlı uygulamalardır. Web içeriğinin uygulama gibi sunulmasına olanak tanır. Ekran çözünürlüklerine ve boyutlarına yönelik tasarım özelleştirmelerini barındıran bir yaklaşımdır. Bu teknikleri içeren tasarım çözümlemesi “Duyarlı Web Tasarımı (Responsive Web Design)” olarak adlandırılır. Bu teknik ile geliştirilen uygulamalar çevrimiçi olarak çalışmaktadır. Daima internet bağlantısına ihtiyaç duyar. Eğer kullanıcı aksiyonları ve gezintisi yerel kopya sayesinde çevrimdışı olarakta tutuluyor ve kullanıcı deneyimi olarak sanki doğal(native) bir izlenim yaratılıyorsa bu teknik “Progressive Web App” olarak adlandırılır. Bu yaklaşım ile geliştirilen uygulamalarda kritik zorluk, cihazın donanımsa yapısından bağımsız çalışmasıdır. Donanımsal bileşenlere doğrudan erişemez.
Mobil Programlama Dilleri
Android: Java – Kotlin
- Java
- Yazılan kodları çalıştırmak için bir sanal makine “Android Runtime (ART)” kullanmaktadır.
- Bu yaklaşım masaüstü sistemlerdeki Java Sanal Makinesine benzer şekilde çalışır.
- Android işletim sisteminin fonksiyonları ART sayesinde uygulama geliştiricilerinden izole edilir ve bu sistem güvenliğini arttırır.
- Google, Android için geliştirme ortamını “Android Studio”, yazılım geliştirme kitini “Software Development Kit (SDK)” sunmaktadır.
- Kotlin
- Java’daki hantallıkları barındırmaz. Daha az kod ile daha çok işlevi yerine getirmeyi sağlar.
- Java’daki benzer şekilde, yazılan kodlar yine ART üzerinde çalışır.
iOS: Objective C – Swift
- Objective C
- C dilinin söz dizilimini kullanır. C’nin nesne yönelimli yaklaşımlı halidir.
- Swift
- MacOS üzerindeki Xcode ile geliştirilir.
- Apple tarafından kendi cihazları için özel olarak geliştirilen bir programlama dilidir.
Apache Cordova & HTML-CSS-JavaScript
React Native
- Facebook tarafından desteklenen ve en yaygın kullanılan cross platform framework’üdür.
- JavaScript dilinde geliştirilen arayüz çizimini çalışma zamanında üzerinde çalışacağı işletim sisteminin kendi arayüz bileşenlerine çevirmek suretiyle doğal(native) bir uygulama hissiyatı verir.
Flutter & Dart
- Google tarafından 2011 yılında ilk defa, stabil hali ise 2017 yılında piyasaya sürülmüştür.
- Cross platform uygulama geliştirmeye olanak tanır.
- React Native ile benzer bir mantıkta geliştirilmiştir.
- React Native’den ayrılan en önemli özelliği bileşenlerinin üzerinde çalıştığı işletim sistemi bileşenlerine dönüştürülmemesi bunun yerine Skia grafik motorunu kullanarak arayüzü doğrudan çizmektedir. Bu yönü ile Flutter, React Native’e kıyasla arayüz render işleminde ciddi bir performans artışı kazanmaktadır. Flutter aslında bir arayüz çizim çatısıdır (Framework). Kodlama dili olarak kullanılan Dart dili nesneye yönelik C tabanlı dillerin (C++, C#, Java, JavaScript) iyi yanlarının bir araya getirilmiş bir kombinasyonudur denebilir. Bu nedenle daha önce bu dillerden birini kullanmış bir yazılımcının Dart diline hâkim olması çok kısa bir zamanda gerçekleşmektedir. Flutter’ın ilginç özelliklerinden biri ise arayüzün nasıl olacağına derleme aşamasında değil çalışma zamanında karar vermesidir. Bu sayede farklı platformlarda aynı görselliği sağlayabilmektedir.
Aşağıdaki paragrafı bir şekilde yansıt!
Her ne kadar bu başlıkta anlatılan Doğal (Native) uygulama geliştirme yöntemi ile işletim sistemi üzerinde doğrudan çalışan mobil uygulamalar geliştirildiğini söylesek de bu uygulamalar “Sandbox” olarak ifade edilen bir yöntemle birbirinden izole şekilde çalışmaktadır. Yani bir uygulama diğer uygulamanın işlemcide koşan işlemlerine, RAM’deki verilerine ve kalıcı hafızada diğer uygulamalara ait dosya bölümüne erişemezler. Diğer manada kullanılan Native uygulama geliştirme daha alt seviyede işletim sisteminin doğrudan çekirdeği (kernel) üzerinde çalışacak (genel olarak C++ dili ile geliştirilen) uygulamaların kodlanması için kullanılmaktadır. Android için çekirdek(kernel) seviyesinde geliştirme Native Development Toolkit (NDK) ile yapılmaktadır. Bu yöntem C++ ile yazılmış hazır kütüphaneleri kodda çağırmak ve performans gereken kısımların C++ ile kodlanması amacı ile de kullanılmaktadır. Çoğunlukla geliştirilen uygulamaların işletim sistemi çekirdeğine doğrudan erişim ihtiyacı olmamaktadır. Mobil platformlardaki güvenlik gereksiniminden dolayı mobil platformların marketlerinden indirilen tüm uygulamalar Sandbox yöntemi ile izole şekilde çalışırlar.