Java etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Java etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

10 Mayıs 2014 Cumartesi

Nesne Yönelimli Programlama Sarmalama (Encapsulation)

Sarmalamanın anlamı; sınıfı oluşturan metot ve özelliklerin gerçekleştirme biçiminin, bu sınıfı kullanacak olan kullanıcılardan gizlenmiş olmasıdır.

Nesne Yönelimli Programlama'nın temelinde nesne vardır ve nesne veri ile metotların bir araya gelmesi ile oluşur. Veri (özellikler) ve veri üzerinde işlem yapan kod (metotlar) bir arada bulunur ve nesneyi meydana getirir. Nesneyi tanımlayan sınıfın iç ayrıntıları, normal olarak programın arta kalan kısmı için görünür değildir.


Bir nesne sınıfının gerçekleştirimini değiştirirsek, yani aynı sınıfı metot ve özellikleri aynı kalmak koşuluyla farklı bir programlama tekniğiyle oluşturursak, o sınıfın dış dünyaya olan arayüzü değişmediği sürece (metot ve özellikler aynı kaldığı sürece) bu sınıfı kullanan program kodlarınızda bir değişiklik yapmamıza gerek kalmayacaktır.

Eclipse Android Projesi Klasör Yapısı

Eclipse ortamında Android projesi yarattığımızda klasörler ve xml dosyası oluşur. Gelin şimdi bir Android projesinin dosya yapısını detaylı bir şekilde inceleyelim.


  • src : Kaynak dosyaları burada yer alır. Bu klasörün içinde Java dosyaları yer alır. Tüm oluşturulan class'lar ve paketler bu klasör içine yerleştirilmelidir.


  • gen : Android tarafından otomatik oluşturulan dosyalar burada bulunur. Buradaki R.java dosyası projede kullandığınız her türlü tasarım, resim ve metin dosyasının tanımlayıcılarına (ID) referans içerir. Bu dosya otomatik olarak oluşturulur ve dışarıdan müdahale edilmemesi gerekir.


  • assets : Uygulamada kullanacağımız destekleyici dosyaları burada tutulur. Örneğin, sqlite veritabanı oluşturduysak ve uygulamayla beraber sqlite dosyasını da göndermek istiyorsak, dosyanın bu klasör içinde bulunması gerekir.


  • bin : Uygulamanın derlenmiş hali bu klasörde tutulur. Bu dosyaya da dışarıdan müdahele edilmemesi gerekir.


  • libs : Android SDK içinde yer almayan bir Java kütüphanesi (AdMob gib) kullanıyorsak, ilgili jar dosyalarını bu klasöre atmamız gerekir. Ancak bir jar dosyası ekledikten sonra dosyaya sağ tıklayıp Add To Build Path seçeneğini seçmeyi unutmamalıyız. Aksi takdirde derleyici jar dosyasını göremeyecektir.


  • AndroidManifest.xml : Bu dosya uygulamanın kalbidir. Uygulamayla ilgili her türlü özellik ve uygulamanın işletim sisteminden talep edeceği bütün izinler burada tanımlanır. Aynı zamanda uygulama içinde kullanılan her ekran burada kaydedilip tanımlanmak zorundadır.


  • res : Uygulama ile ilgili her türlü kaynak bu klasörde tutulur. Burada resim dosyaları, ekran tasarımları ve metin dosyaları olabilir. Bu klasör içinde birçok alt klasör yer alır.


  • drawable : Uygulamada kullanılan resim dosyalarını içerir. Bu dosyalar PNG ya da JPEG formatında olabilir. Klasörün yanındaki hdpi (high dpi), ldpi (low dpi), mdpi (medium dpi) ve xhpi (extra hight dpi) cihaza özel ekran çözünürlüklerine göre dosya çağırmamızı sağlar. Örneğin uygulamanın çalıştığı cihaz eski modelse ve ekranı düşük çözünürlük destekliyorsa ldpi klasörü içindeki resim dosyaları kullanılacaktır. Ama uygulama yeni nesil geniş ekran bir cihazda çalışıyorsa ona uygun olarak yüksek çözünürlüklü bir klasörde bulunan dosyalar kullanılır. Eğer uygulamanızda düzgün bir tasarım varsa ve geniş yelpazede cihazlar destekliyorsanız tasarımcınızdan uygun formatlarda dosyalar istemeniz gerekir.


  • layout : Ekranlara dair tasarım dosyaları bulunur. xml formatındaki bu dosyalar her ekrana ait tasarımları barındırır. Bir ekran Activity ile oluşturulduğunda onCreate metodu içinde ilgili layout çağırılır ve ekranda yer alacak öğeler oluşturulur.


  • menu : Bir ekranda cihazın Menü tuşuna basıldığında bir menü çıkmasını istiyorsak, menü elemanlarını bir xml dosyasında tanımlanır ve bu klasör içinde saklanır.


  • values : Uygulamada kullanılan sabit değişkenler burada saklanır. strings.xml dosyası uygulamada kullanılan ve ekranlarda kullanıcıya gösterilen her türlü metni saklar. Anahtar – değer mantığıyla saklanan bu değerler kod içinde ya da layout dosyalarında çağırılır. Aynı zamanda bu değerler R.java dosyasında işaretlenir. Bunun dışında colors.xml dosyası layout dosyalarında kullanılacak önceden tanımlanmış renkleri içerir. styles.xml dosyası ise ekranlarda kullanılan ve yine layout dosyalarından çağrılan stilleri içerir. values klasörünün bir başka özelliği de cihazın ayarlanmış ana diline göre yerelleşebilmesidir.

9 Mayıs 2014 Cuma

Android Runtime (ART) İşletim Sistemi

Android işletim sistemi, Android uygulamalarını çalıştırmak için Dalvik sanal makinesini kullanır. Google Dalvik’ten vazgeçip yeni sanal makinesi Android Runtime'a (ART) geçiş yapıyor. Android sürümü Kitkat'a ART'ı da entegre etmiş durumda.

Android platformunda, Java ile yazdığımız Android uygulama kodları önce Java bytecode'larını içeren .class uzantılı dosyalara çevrilir. Bu kodlar Dalvik sanal makinesinin çalıştırabileceği Dalvik bytecode'unu içeren .dex uzantılı tek bir dosyaya dönüştürülür. 

Dalvik sanal makinesi, kısıtlı bellek ve işlemci gücü sağlayan mobil cihazlar için tasarlandığı için günümüzdeki çoğu modern bilgisayar programlama dilleri (Java, C#) gibi yığınlarla (stack) değil yazmaçlarla (register) çalışır. Bunun için daha hızlıdır. 

Dalvik sanal makinesiyle ilgili daha fazla detaya http://source.android.com/devices/tech/dalvik/ adresinden ulaşabilirsiniz.

Android Runtime. ART'ın çalışma şekli Dalvik'ten çok farklı. Dalvik, Android 2.2 sürümünden beri "Tam Zamanında" derleme (Just-In-Time – JIT compilation) kullanarak kodu derliyor. 

Uygulama yazılıp cihaza yüklendiğinde kod belli bir oranda derleniyor ve esas derleme ve optimizasyon uygulama çalışmaya başladığında yapılıyor. Bu işlem ise uygulama her çalıştırılğında yapılıyor. Bu ise fazladan yük getiriyor ve daha az verimli çalışılmasına sebep oluyor.

ART ise "Zamanın Ötesinde derleme" (Ahead-of-Time – AOT compilation) ile uygulama cihaza kurulurken  bytecode derlemesini yapıyor ve bytecode'u makine diline çeviriyor. Her uygulama açılışında yeni bir sanal makine başlatmak gerekmiyor.

ART tam anlamıyla standart olarak kullanıma hazır değil. Birçok optimizasyonu ve testi henüz yapılmamış durumda. ART ile Dalvik arasında fark olduğu kesin ama bunun ne kadar olduğunu ve gerçekte neler kazandıracağını kestirmek zor şimdilik. Test siteleri ve kullanıcılar tarafından yapılan testlerde işlem sürelerinin yarıya yakın azaldığı söyleniyor. ART’a geçiş yaptıktan sonra işletim sisteminin animasyonlarında ve bazı uygulamalarda fark edilir hızlanma gözlenebiliyor. 

Kullanıcılar için uygulamaların daha hızlı çalışması, arayüzdeki geçişlerin ve animasyonların daha yumuşak ve takılmadan görüntülenmesi son derece önemli. Her kullanıcının en önemli istekleri daha hızlı işleme, daha az işlemci gücü gereksinimi olduğu için cihazların pil ömürlerinde de ciddi artış bekleniyor.

Herşey böyle güllük gülistanlık değil. Bunların elbet bir de bedeli var. Uygulamalar cihaza kurulurken makine diline çevrileceği için ilk kurulum süreleri artıyor. Küçük uygulamalarda bu hissedilmeyecek bir fark iken, daha yüklü ve büyük uygulamalarda kurulum süresi fark edilir şekilde artabilir. 

Her bytecode'un makine dilindeki birkaç komuta denk geldiği için, makine diline çevrilmiş olarak saklanan uygulamalar cihazın belleğinde daha çok yer kaplayacaktır. Bu artış sadece çalıştırılabilir kodda olacağı için (resim, video, ses dosyası gibi uygulama kaynaklarında bir değişiklik söz konusu değil) çok da önemli değil. Google % 10 - 20 arasında bir artış olacağını söylüyor.

Uygulamaların ve işletim sisteminin daha hızlı çalışması ve cihazın pil ömrünün artması gibi çok kritik getirilerin yanında cihazdaki depolama alanında kaplanan miktarın artması veya ilk kurulumun daha uzun sürmesinin çok bir öneminin olmayacağını söyleyebiliriz.

Google, Android 4.4 sürümü ile birlikte artık cihazınızda çalışma zamanı olarak Dalvik veya ART'ı seçmenize olanak veriyor. Ancak ART henüz tam anlamıyla hazır değil. Yeni çalışma zamanını ve getirdiği farklılıkları test etmek istiyorsanız ve cihazınızda Android 4.4.x işletim sistemi bulunuyorsa, "Ayarlar" (Settings) > "Geliştirici Seçenekleri" (Developer Options) > "Çalışma zamanını seçin" (Select runtime) kısmından Dalvik seçeneğini değiştirerek ART'ı seçebilirsiniz.

Bu ayarı değiştirdiğinizde cihazınız libdvm.so kütüphanesinden libart.so kütüphanesine geçmek için yeniden başlatılacak ve kurulu bütün uygulamalarınız ART için tek tek derlenecek ve optimize edilecektir. Bu işlem 5 ile 15 dakika arasında sürecektir.

Her uygulama şimdilik ART'ye uyumlu değil. Bazı uygulamalar hatalı çalışabiliyor ve hatta hiç çalışmayabiliyor. Popüler bir mesajlaşma uygulaması olan WhatsApp, ART üzerinde çalışmıyor. Sürekli hata veriyor ve kaldırıp tekrar kurmak isterseniz kuramıyorsunuz şimdilik.

Nesne Yönelimli Programlama Miras Alma (Inheritance)

Nesneye yönelik programlamada, bir nesne, genellikle bir nesne sınıfına ait bir örnektir (instance). Örneğin, Albert Einstein, insan sınıfının bir örneğidir. Bir nesne sınıfından alt sınıflar (subclasses) oluşturulabiliyorsa, türetme özelliği (derivation) var demektir. Örneğin insan sınıfı, canlı sınıfının bir alt sınıfıdır.

Kendisinden alt sınıf üretilen sınıfa, temel sınıf (base class) veya süper sınıf (super class) veya ana sınıf (parent class) adı verilir.
Subclass yerine child class terimi de kullanılmaktadır.

Alt sınıfın nesneleri, türetildikleri temel sınıfa ait özellikleri alır, burada miras alma (inheritance) özelliği vardır denir. Bu anlamda, miras alma özellikli bir nesne yönelimli programlama dilinde, bir nesne sınıfından türetilen alt nesne sınıfına ait nesneler, üst sınıfın özelliklerini (properties) ve metodlarını (methods) aynen alırlar.

6 Şubat 2014 Perşembe

Java Server Faces (JSF)


Java Server Faces bir framewok'dür. Java Server Pages(JSP)’den farklı olarak kullanıcı arayüzü sağlanmaktadır. Java Server Pages’e göre en büyük artısı AJAX’a kolayca hükmedebilmenizdir. 

Hazır bileşenler ve etiketler ile yapmak istediğiniz işlemleri yapabilirsiniz. JSF, üst seviyede programlar yapmayı kolaylaştırmaktadır. 

Java Server Faces‘in çalışması olaylara (events) dayanmaktadır. Tıklandığında veya yapıldığında gibi eylemlere tepki verebilmektedir. Mouse tıklanması , klavye tuşuna basılması gibi bir etkileşim sonrası bir metod çalışır. Java Server Faces, Hibernate, Spring gibi Java tabanlı teknolojiler ile birlikte çalışmaktadır.

4 Şubat 2014 Salı

Apache Lucene


Lucene günümüzde oldukça popülerdir ve pek çok web sitesi ve uygulamada kullanılmaktadır. Full text arama içeren her türlü masa üstü veya web uygulamasında Lucene kullanılabilir. Duydum ki Twitter, Mysql'i bırakıp 2011 yılında Lucene'e geçmiş. Bu geçiş Twitter'ın çok büyük arama ihtiyacını karşılamak için sistemleri 3 kat hızlandırmış. 

Lucene, Java dili ile yazılmış açık kaynak bir kütüphanedir. Her ne kadar Java’da yazılmış olsa da, bugün diğer dillerde de kullanılabilmektedir. Lucene; Delphi, Perl, C#, C++, Python, Ruby ve PHP gibi birçok farklı dilde yeniden yazılmıştır. 

Bir kütüphane olduğu için de hemen kurup kullanabileceğiniz bir uygulama değildir.Sağladığı API ile kolayca fulltext aramaları yapan bir uygulama geliştirebilirsiniz. 

Lucene ile Wildcard, Fuzzy, Proximity, Range, Boosting a Term, Boolean Operatörler kullanılarak arama yapılabilmektedir. Lucene; PDF, HTML ve Microsoft Word belgeleri gibi birçok farklı dosya türü içinde arama yapabilmekte ve sonuçları listeleyebilmektedir. 

Lucene birçok alt projeden oluşmaktadır. Apache'nin projelerinden Nutch, Lucene'i temel almakta, listeleme, arama ve HTML sayfası içinde ayrıştırma yapabilmektedir. Apache'nin diğer projelerinden Solr ise Lucene üzerine kurulmuş gelişmiş bir arama sunucusudur.

Hibernate Nedir?


Hibernate verilerin saklanması, güncellenmesi, silinmesi gibi veritabanı işlemlerini nesne tabanlı modele göre kolaylaştırmak için kullanılan bir java teknolojisidir. Hibernate, bir framewok'dür. 

Hibernate, bir ORM (Object Relational Mapping) aracıdır. Hibernate, bir nesnenin veri tabanında hangi tabloya karşılık geldiğini işaretler. Bu işaretleme işlemine mapping denir. Mapping'in nasıl olacağına biz karar veririz. 

Hibernate, herhangi bir veritabanı işlemi için POJO (Plain Old Java Object)'lardan yararlanır. Bir POJO nesnesi attribute ve getter/setter metotlarından bir java nesnesidir.

Spring


Spring, kurumsal java uygulamaları geliştirmeyi kolaylaştıran ve hızlandıran Application Framework (Uyguluma geliştirme çatısı) dır. Spring ile üzerinde kolayca test edilebilir, yüksek performanslı uygulamalar geliştirilebilmektedir. Rod Johnson tarafından geliştirilmiş olup, ilk olarak 2003 yılında Haziran ayında Apache 2.0 lisansı altında yayınlanmıştır. 

Spring, herhangi bir Java uygulaması tarafından kullanılabilmektedir. Eklentileri ile birlikte Java Enterprise platform üzerinde web uygulamaları geliştirmek için de kullanılabilir. 

Spring Web Framework, popüler olan Struts ve diğer kütüphaneler gibi iyi tasarlanmış bir MVC (Model - View - Controller) alt yapısı sağlamaktadır. Spring framework; paketleri, modülleri, sınıf yapıları ve birçok özelliği ile kaliteli bir yazılımdır. Spring modüler yapısı 20 modülden oluşmaktadır. Tüm modülleri kullanma zorunluluğu olmadan istenilen modülü kullanarak uygulama geliştirmeye izin vermektedir.

3 Şubat 2014 Pazartesi

Apache Solr Nedir?


Diyelim ki bir web uygulamanız var. Bu uygulamanızın en önemli modüllerinden birisi de arama modülü. Arama işlemlerini milyonlarca satır kayıt bulunan bir veritabanı üzerinde gerçekleştiriyorsunuz. Uygulamanız yüksek trafik almaya ve arama modülünüz yavaşlamaya başladı. Uygulamanızın performansı gün gittikçe düşüyor. Artık metin arama (full text search) en karmaşık konulardan birisi haline geldi sizin için. Eğer veritabanı motorunuz, full text search desteklemiyorsa, harici bir arama motoru kullanmanın zamanı gelmiştir demektir. İşinizi kolaylaştıracak arama motorlarından biri Apache Solr artık en iyi yardımcınız. 

Solr, Lucene üzerine kurulu, arama uygulamalarında kullanılan bir Apache ürünüdür. Solr ve Lucene arasındaki ilişki araba ve araba motoru arasındaki ilişkiye benzer. Lucene motor, Solr ise arabadır. Lucene olmadan Solr çalışmaz. 

Lucene; temelde metin analizi, indexleme ve arama gibi temel işlevleri sunan bir Apache projesidir. Solr ise, Lucene temelini kullanan, onun üstüne filtreleme, faceting, önbellekleme, dağıtık mimari desteği gibi şeyleri kolay yapılandırma dosyaları ile yönetebilmenizi sağlar. Verileri XML, JSON, Binary gibi çeşitli formatlarda almanızı sağlar. 

Solr, Java ile geliştirilmiştir. Solr açık kaynak kodludur. Solr farklı sunucular (Jetty, Resin, JRun, Tomcat) üzerinde çalışır. Herhangi bir programlama dili kullanmadan, Solr sunucuyu kurulur. Solr ile verilerinizi sunucuda indekslersiniz. Bu veriler üzerinde arama yapabilmeyi Solr ile sağlarsınız. 

Solr için veriler “Document” olarak adlandırılır. Solr’a veri eklemek demek yeni bir “Document” eklemek demektir. Solr her şeyi bir "döküman" olarak saklar. Dökümanları veritabanındaki satırlar (row) olarak düşünebilirsiniz. Örneğin Vidomix gibi bir video sitesinin veritabanındaki bir "videolar" tablosunu tasarlarken, video_id, video_title, video_info, video_time gibi alanlar (fields) oluşturyorsak aynı mantık ile "Solr Document" tasarlanır. 

Solr’da indekslemek istediğimiz veriyi bir Document olarak tasarlar ve bu Document’in tüm özelleklerini (field) belirledikten sonra uygun şekilde veri setleri oluşturulup Solr’a eklenebilirsiniz. Indekslenen bu veriler üzerinde HTTP isteği ile sorgulama yaparak, sonuçları çok hızlı bir şekilde ve istediğimiz formatta elde edebilirsiniz

Apache Lucene


Lucene günümüzde oldukça popülerdir ve pek çok web sitesi ve uygulamada kullanılmaktadır. Full text arama içeren her türlü masa üstü veya web uygulamasında Lucene kullanılabilir. Duydumki Twitter, Mysql'i bırakıp 2011 yılında Lucene'e geçmiş. Bu geçiş Twitter'ın çok büyük arama ihtiyacını karşılamak için sistemleri 3 kat hızlandırmış. 

Lucene, Java dili ile yazılmış açık kaynak bir kütüphanedir. Her ne kadar Java’da yazılmış olsa da, bugün diğer dillerde de kullanılabilmektedir. Lucene; Delphi, Perl, C#, C++, Python, Ruby ve PHP gibi birçok farklı dilde yeniden yazılmıştır. Bir kütüphane olduğu için de hemen kurup kullanabileceğiniz bir uygulama değildir.Sağladığı API ile kolayca fulltext aramaları yapan bir uygulama geliştirebilirsiniz. 

Lucene ile Wildcard, Fuzzy, Proximity, Range, Boosting a Term, Boolean Operatörler kullanılarak arama yapılabilmektedir. Lucene; PDF, HTML ve Microsoft Word belgeleri gibi birçok farklı dosya türü içinde arama yapabilmekte ve sonuçları listeleyebilmektedir. 

Lucene birçok alt projeden oluşmaktadır. Apache'nin projelerinden Nutch, Lucene'i temel almakta, listeleme, arama ve HTML sayfası içinde ayrıştırma yapabilmektedir. Apache'nin diğer projelerinden Solr ise Lucene üzerine kurulmuş gelişmiş bir arama sunucusudur.