MOBİL YAZILIM NEDİR? MOBİL YAZILIM(IPHONE, BLACKBERRY, WINDOWS MOBILE, J2ME) GELİŞTİRME PLATFORMU

29Ağu/100

Windows Mobile Emülatörleri ve İnternet Bağlantısı

Aygıt emülatörlerinin bilgisayarlarımıza bağlantı hikayesi, Visual Studio’nun son sürümü ile beta2 sürümü arasında oldukça radikal bir şekilde değişti. Bu makalede, bu gözden kaçan bazı varsıyalan özellikler üzerinde duracağız. Bu makalenin kalan kısmında, özellikle bu son sürümün beta2 den ayrılan önemli noktaları üzerinde duracağız.

Öncelikle, hala Visual Studio 2005’in beta2 versiyonunu kullanıyorsanız; gerekli kaldırma adımlarını kullanarak onu sistemden kaldırın. Kaldırma ile ilgili detaylı bilgilere aşağıdaki adresten ulaşabilirsiniz.

http://msdn2.microsoft.com/en-us/vstudio/aa718704.aspx

Makalenin bundan sonraki bölümünde, Visual Studio 2005’in son sürümünü ve Windows Mobile 5.0 SDK yı yüklediğinizi varsayarak ilerleyeceğim.

Mobil Emülatörü Başlatma

Visual Studio 2005 kullanarak mobil emülatörü başlatabilmek için üç yol vardır.

Mobil emülatörü çalıştığında, usb üzerinden yuvasına oturtulmamış (cradle) fiziksel bir aygıt gibi davranır. Bu yüzden de herhangi bir internet bağlantısına sahip değildir (mobil emülatörü havadan taşıyıcı olarak herhangi bir bağlantı yakalamadan bir veri almaya planlanmamıştır). Mobil emülatörünü yuvasına oturtmak (cradle) için, Device Emulator Manager ı çalıştırmamız gerekir (Tools > Device Emulator Manager). Device Emulator Manager, o anda çalışan emülatör çeşidini; üzerinde yeşil bir ok ile gösterir.

Mobil Emülatörden İnternet Bağlantısını Sağlama

  • Tools > Connect To Device > {Listeden Bir Emülatör Seçme} > Connect
  • From Tools > Device EmulatorManager. Sonra ekrana gelen listeden herhangi bir emülatörün üzerinde gelerek sağ tıklama ve Connect’e basma.
  • Akıllı aygıt (smart device) projesi yaratma ve ister F5 e basma ya da Solution ı Deploy etme. Ekrana bir diyalog geldiğinde bir tane emülatör seçme (managed projelerde) ya da solution explorer da proje ismine sağ tıklayarak, properties seçme ve deployment ı seçme (native projelerde).
  • Aslında komut satırında mobil emülatörü başlatmak için bir dördüncü yol daha var ama bu makalede bunun üzerinde durmayacağız.

Bilgisayarımızdaki çalışan Visual Studio 2005 uygulamamız, mobil emülatör ile DMA kanalı üzerinden etkileşim kurar. Beta2 de, masaüstü – aygıt emülatörü etkileşimi TCP/IP yığını üzerinde gerçekleşiyordu. Siz sadece, iki windows işlemi (Visual Studio ve Mobil Emülatör) arasında direkt bağlantı olarak DMA yı düşünün. Böylelikle ağ yığını üzerinden elde edilene oranla çok daha sağlam ve hızlı bağlantı elde edeceksiniz.

Masaüstünüz ve mobil emülatörünüz arasında bağlantı olarak sadece DMA Transport a sahip olduğunuzu onaylamak için bir kontrol edin. Visual Studio 2005’in son sürümünde DMA Transport yeni varsayılan özellik olarak geliyor. Beta2 de ise varsayılan olarak TCP/IP transport geliyordu. Tools > Options > Device Tools > Devices bölümünden herhangi bir emülatör için “properties” i seçersiniz, ulaşım (transport) alanında DMA Transport un seçili olduğunu göreceksiniz. Şunu da belirtmek gerekir ki bu seçenek TCP Connect Transport olarak değişebilir (eğer sisteminiz de yüklü Virtual Network Switch Driver var ise) ve bu şu an için kesinlikle öneriliyor.

Mobil Emülatörden İnternet Bağlantısını Sağlama

Mobil emülatörü çalıştığında, usb üzerinden yuvasına oturtulmamış (cradle) fiziksel bir aygıt gibi davranır. Bu yüzden de herhangi bir internet bağlantısına sahip değildir (mobil emülatörü havadan taşıyıcı olarak herhangi bir bağlantı yakalamadan bir veri almaya planlanmamıştır). Mobil emülatörünü yuvasına oturtmak (cradle) için, Device Emulator Manager ı çalıştırmamız gerekir (Tools > Device Emulator Manager). Device Emulator Manager, o anda çalışan emülatör çeşidini; üzerinde yeşil bir ok ile gösterir.

Cradle etmek istediğimiz o anda çalışan emülatör örneğimiz üzerinde sağ tıklayın (bu örnekte bir tane çalıştığını varsayalım) ve “Cradle” seçeneğini seçin.

Eğer ActiveSync 4.0 veya üzeri bir sürümü sisteminizde yüklüyse (sürümlerini http://www.microsoft.com/downloads/ adresinden indirebilirsiniz), ActiveSync otomatik olarak bağlanmış olan yeni aygıtı tanıyacaktır. Device Emulator Manager ve Device Emulator ActiveSync 3.8 ile çalışır ama Visual Studio 2005 yalnıza ActiveSync 4.0 ı destekler. Bu aşamada mobil emülatörünüz için ister “Guest” hesabı isterseniz de standart bir hesap oluşturabilirsiniz. Ben genellikle emülatör uygulamalarımda otomatik olarak ziyaretçi hesabı ayarlanması için direkt iptal tuşuna basarım.

ActiveSync bağlandı moduna geçer geçmez, mobile emülatörünüzden internet bağlantısına sahip olmanız gerekir. Eğer şirket ağı üzerindeyseniz ve proxy server kullanarak harici web sitelerine erişiyorsanız, bunun ayarını yapmanız gerekecektir. Buradaki kullanılan seçenekler ise kendi masaüstü bilgisayarınızda kullandıklarınız ile benzerdir. (Tools > Internet Options > Connections > LAN settings)

   

PocketPC İçin
Settings > Connections > Advanced > Proxy bölümünden gerekli bilgileri girin.

SmartPhone İçin
Start > Settings > Connections > Proxy bölümünde menüden Add sekmesine tıklayarak yine burada gerekli bilgileri girin.

Bu noktada, hangi emülatör aygıtınız olursa olsun internet explorer ı kullanarak internete erişebilirsiniz (örneğin, www.mobilyazilimnedir.com).
 

VN:F [1.9.3_1094]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.3_1094]
Rating: +1 (from 1 vote)
29Ağu/100

Web Kontrolleri ile Windows Mobile Kontrollerinin Karşılaştırması

ASP.NET Mobil Web Formları, ASP.NET Web Form Sayfaları üzerine kurulmuştur. ASP.NET mobil kontrolleri, size çok geniş bir yelpazeye yayılmış ve arzu edilen tüm mobil cihazları için web uygulamaları ve içerik siteleri yaratmanıza izin veren; esnek araçlar sağlar. ASP.NET mobil kontrollerini kullanarak; bu kontrollerin size getirdiği birçok avantajı kullanabilirsiniz. Görüntü öğelerini birçok özel cihaza ya da cihaz tipine göre özelleştirebilirsiniz. Örneğin; bir el bilgisayarına ya da bir cep telefonuna bir uygulama yazabilirsiniz.

 Aşağıdaki tabloda, ASP.NET web sunucusu kontrolleri ile ASP.NET mobil kontrollerinin karşılaştırmasını adım adım ve tüm detayları ile bulabilirsiniz.

Web Sunucusu Kontrolü

Mobil Kontrolü

Yorumlar ve Farkları

AdRotator

AdRotator

Aynı amaçlar için tasarlanmışlar. Sadece mobil kontrolüne ImageKey ve NavigateUrlKey özellikleri eklenmiş.

Button, ImageButton, LinkButton

Command

Mobil kontrolü, web formların Button, ImageButton ve LinkButton kontrollerinin tüm özelliklerini birleştiriyor.

Calendar Calendar Aynı özellikteler. Sadece mobil kontrolü, HTML e özgü özellikleri direkt olarak sağlamıyor ama WebCalendar özelliği ile Web Form Calendar ın özelliklerini kullandırabiliyor.

Benzer Bir Kontrol Yok

PhoneCall

Veri hattını aktif olarak düşürmek ve kabloya bağlı cihazlarda aramayı başlatmak için kullanılır. İstemciye e-posta göndermek için kullanılan mailto şemasına benzer bir kullanıma sahiptir.

CompareValidator

CompareValidator Doğrulama aynıdır.

CustomValidator

CustomValidator Doğrulama aynıdır.

DataList, Repeater

List Aynı özellikteler. Mobil kontrolü, her bir aygıta özel kalıplar (template) uygulayabilir.

DataGrid

ObjectList Aynı özellikteler. ObjectList kontrolü, veri kolleksiyonlarını göstermek için çoklu görüntüleme sağlar.
Benzer Bir Kontrol Yok DeviceSpecific Mobil kontrolleri için override ve kalıp (template) özelliklerine imkan vermek için kullanılır.
Benzer Bir Kontrol Yok Form ASP.NET web uygulamalarındaki sayfaya benzer. Mobil web form sayfaları birçok Form kontrolü içerebilir.
Image Image Aynı özellikteler. Mobil kontrolü, aygıtlara özel resim dizilerinden bir resmi seçebilir.
Label Label Aynı özellikteler.
Hyperlink Link ASP.NET, mobil kontrolünü resim olarak render edemez. Image link (Image kontrolünde NavigateUrl özelliğini belirterek) yaratmak için Image kontrolünü kullanın.
Panel Panel Mobil panelleri, panelleri değiştirmek için ContentTemplate aygıt kalıpları (template) kullanılarak; aygıtlara özgü render lamalarda kullanabilir.
RangeValidator RangeValidator Doğrulama aynıdır.
RegularExpressionValidator RegularExpressionValidator Doğrulama aynıdır.
RequiredFieldValidator RequiredFieldValidator Doğrulama aynıdır.
Checkbox, CheckBoxList, DropDown, DropDownList, ListBox, RadioButton, RadioButtonList SelectionList Mobil kontrolü, ASP.NET web server kontrollerine karşılık gelen tüm özelliklerini birleştirir. Selection list butonun özelliğini belirlemek için SelectType özelliğini (ve onunla ilişkilendirilmiş ListSelectType listesini) kullanın. Örneğin, SelectionList kontrolünün, SelectType özelliğini; ASP.NET web server kontrollerinden CheckBox ve CheckBoxList e karşılık gelen CheckBox liste öğesine ya da DropDown ve DropDownList için DropDown liste öğesine ayarlayın. SelectType özelliği, ListBox ya da MultiSelectListBox olduğunda, listede görünecek öğe sayısını belirlemek için; Rows özelliğini kullanın.
Benzer Bir Kontrol Yok StyleSheet Web formları, StyleSheet kontrollerinden farklı olarak; cascading style sheet leri kullanır.
Table Benzer Bir Kontrol Yok List, ObjectList ve SelectionList mobil kontrollerini kullanın.
TextBox TextBox Aynı özellikteler. Yalnız mobil kontrolü, otomatik postback, read-only ya da multiline fonksiyonlarını desteklemez.
Benzer Bir Kontrol Yok TextView Büyük bloklar halindeki metinleri göstermek için kullanılır. Temel text biçimini destekler.
ValidationSummary ValidationSummary Aynı özellikteler. Mobil kontrolü, herhangi bir form üzerinde doğrulama kontrollerinin hata mesajlarını gösterebilir (FormToValidate özelliğini kullanarak). 
VN:F [1.9.3_1094]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.3_1094]
Rating: +1 (from 1 vote)
29Ağu/100

.NET Compact Framework ile Mobil Uygulama Geliştirme

Windows mobile bildiğimiz gibi pocket pcler için içerisinde
küçük büyük uygulamalar bulunduran bir işletim sistemi biz compact framework
sayesinde mobil cihazlar için kendi uygulamlarımızı oluşturup kullanabiliyoruz.
Örneğin kendimiz kodlayarak oyun yazabiliriz. 

Peki C# ile nasıl mobil uygulama geliştirebiliriz? 

Öncelikle windows mobile 6 professional sdk yı indirip kurmanız
gerekiyor(visual studio 2008 içerisinde 5.0 sürümü mevcut) 

DOWNLOAD 

C# ile mobil uygulama geliştirmeye daha yeni başladım genelde ilk uygulama
olarak “hello world” yazılır biz de şimdi hello world değilde bir menü oluşturup o menüden sms gönderme işlemini yapacağız. 

Öncelikle new project diyerek smart new project
oluşturuyoruz. 

Bize bir şablon hazırlıyor bu şablon bizim formumuz ve kontrollerimizi bu forma ekliyoruz. 

menü kısmına gelip aşğıdaki tasarımı oluşturuyoruz. 

using Microsoft.WindowsMobile.PocketOutlook; 

Bu referansı ekledikten sonra Sms Gönder butonuna tıkladığında işletilecek kodu yazıyoruz. 

private void menuItem2_Click(object sender, EventArgs e)
{
     SmsMessage mesaj = new SmsMessage(“Mesajın gideceği kişinin      nosu”, “mesajınız”);
    mesaj.Send();
}
private void menuItem2_Click(object sender, EventArgs e)        
{
    SmsMessage mesaj = new SmsMessage("Mesajın gideceği kişinin nosu", "mesajınız"); mesaj.Send();
}
VN:F [1.9.3_1094]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.3_1094]
Rating: +1 (from 1 vote)
29Ağu/104

Mobil Uygulama Geliştirme Platformları Üzerine

Lider Symbian

İlk olarak  symbian ezici bir yüzde'ye sahip görünsede bana symbian tarafı çekici gelmiyor.Çin sitelerinden vs.. sertifika alınarak çok rahat bir şekilde kırılabiliyor ve kırmanın bir yan etkiside olmuyor.Symbian tarafında uygulama satışı için ovi store var fakat sanal alemde o kadar çok uygulaması dolaşıyorki insanlar neden satın alır bilemiyorum.

Nokia cihazların kullanıcı deneyiminde çok zayıf olduğunu düşünüyorum.Eski bir n96 kullanıcısı olarak şunu rahatlıkla söyleyebilirim ki 1000-1500 tl ler verip aldığınız cihazlar asla bir iphone,android gibi kullanıcı deneyimi vermeyecektir.Symbian tarafında uygulama geliştirmek için c++,java ve python kullanılabiliyor.

Potansiyel pazar Android

Android uygulama sayısının az olması nedeniyle girilebilicek bir macera fakat Türkiyede birçok uygulama kullanılamadığı cihazların ülkemizde çok yaygın olmaması sebebiyle dünya ya hitap eden bir uygulama daha avantajlı olabilir.Kullanıcı deneyimi konusunda Android in dokunmatik ekranını seri ve başarılı buldum.Android tarafında Windows,Linux veya Mac OS X işletim sistemleri ile java dilini kullanarak eclipse üzerinde uygulama geliştirebilirsiniz.

Appstore lu iPhone

iPhone tarafı ise uygulama çılgını bir taraf.AppStore üzerinde o kadar çok uygulama varki yeni fikirler bulmanız biraz zor olabilir.Fakat appstore da öyle bir uygulama satın alma çılgınlığı varki akıllı bir projeyle kısa sürede çok ciddi paralar kazanabileceğiniz bir taraf.Örneğin geçenlerde facebook video player adında bir uygulama facebook daki videoları oynatabilme özelliği sayesinde bir anda top 10 a girdi halada orda.Uygulamanın arkada yaptığı ise videoların source unu alıp direk iphone un kendi playerında oynatması tarzında basit bir olay.

iPhone tarafındada korsan kullanım yaygın olsada bazı yan etkileri olabiliyor ek olarak çok fazla bedava uygulama olması,paralı uygulamaların ise birçoğunun 0.99$ gibi fiyatlara satılması sebebiyle ben telefonumu kırmadım.Benim gibi düşünen insanların sayısının oldukça fazla olduğunu düşünüyorum.Ek olarak iPhone kırmanın nadiren wireless çalışmaması gibi sorunlara yol açtığıda bilinen bir durum.

iPhone tarafında uygulama geliştirmek için yakın zamana kadar farklı çözümler bulunuyordu fakat apple son yayınladığı kurallar ile Xcode dışında bir ide ile uygulama geliştirmeye artık izin vermediğini açıkladı.O yüzden artık iPhone,iPad vb.. cihazlar için mac os x işletim sistemine ihtiyacınız var.Geliştirmek için kullanılan dil ise object c dili.Bu arada çok yakında windows üzerinde iphone uygulaması geliştirme konulu bir yazı yazacağım blogumda.Tabi bu teknik sayesinde windows üzerinde ipad uygulaması geliştirme yide anlatmış olucağım.Son olarak bende bir iPhone kullanıcısıyım.

Windows Mobile ve Windows Phone 7

Windows mobile tarafında ise benim en rahat olduğum taraf orası diyebilirim.Fakat uygulama satmak için çok düzgün bir ortam olmaması sebebiyle bence windows phone 7 tarafına yönelmekte fayda var.Yaz aylarında çıkacak windows phone 7 ile iphone da tutulan uygulamaların muadillerini windows phone tarafına taşıyarak iyi paralar kazanabilirsiniz.Çünkü windows phone tamamiyle yeni bir altyapıyla gelicek ve eski uygulamalar onunla çalışmıyacak.

Windows phone 7'nin gelişi size windows mobile 6.5 serisinin biteceğini düşündürmesin.Çünkü windows mobile 6.5 cihazlar daha geliştirilmeye devam edicek.Windows phone 7 cihazların ülkemizede yakın zamanda gelmeyek.

Windows mobile için linux tarafında mono ile geliştirme yapılıp yapılmadığı konusunda bir bilgim yok.Windows üzerinde ise .net framework ün desteklediği diller ile mobile uygulama geliştirebilirsiniz.Windows phone 7 tarafında ise ana platform silverlight olduğu için blend 4 ve visual studio nun windows phone için olan sürümü ile rahat bir şekilde uygulama geliştirebilirsiniz.

ve Blackberry

Blackberry tarafı yine bana uzak olan bir taraf.Blackberry cihazlar bana çokta çekici gelmiyor olsada pazar payının büyüklüğü sizi o tarafa çekebilir.Blackbarry tarafında uygulama geliştirme dili ise java.

Tüm Platformlarda çalışan uygulama yazma

Herhalde birçok yazılımcının hayalidir bu.Tek bir dilde kod yazıp tüm cihazlarda çalışsın.Bu aslında tam olarak hayal değil.Çünkü web uygulamaları geliştirip onları cihazlara hızlı bir şekilde yükleyebilirsiniz.Örneğin basit bir havadurumu uygulaması için güzel bir arayüz tasarımı yaparak sanki onun gerçekten bir uygulama gibi görünmesini sağlayabilirsiniz.Buna windows mobile 6.5 tarafında widget diyorlar ve kullanımıda çok kolay.Diğer platformlardada web uygulamalarınız çalışmasını kolaylıkla sağlayabilirisiniz.

VN:F [1.9.3_1094]
Rating: 2.5/5 (1 vote cast)
VN:F [1.9.3_1094]
Rating: +1 (from 1 vote)
29Ağu/100

Objective-C (Bölüm 2)

Önceki bölümde gördüklerimizin yanı sıra bu bölümde özellikler (property), medotlara (mesajlaşma) çoklu argüman gönderme, dinamik yükleme, çok biçimlilik ve kalıtım konularını işleyeceğiz. Onların yanı sıra protokoller hakkında bilgi vereceğiz. En son olarak da Objective-C de hata kontrolünü ele alacağız.

Özellikler (Properties)

Hatırlayınız, Objective-C nesnelerini kullanırken basitçe işaretçileri manipule ediyordunuz. İşaretçiler de bellekte ayrılan alanları işaret ediyordu. Objective-C 2.0 ile gelen properties geliştiriciler için büyük kolaylıklar sağlamıştır. Özellikler, değişken işaretçileri için kısayol oluştururlar. Derleyici direktifleri ile belirlenen bu yazım stilinde @property direktifi özelliği tanımlar. @synthesize ise derleyiciye özellik metodlarının derleme anında oluşturulmasını sağlar. @dynamic tanımı ise özellik metodlarının çalışma zamanında oluşturulmasını emreder.

@property ve @synthesize komutları kolay bir şekilde “get” ve “set” metodları tanımlamak için kısayollardır. @property tanım dosyalarında (.h), @synthesize ise uygulama dosyalarında (.m) kullanılır.

Genellikle @synthesize tipi kullanılır ancak örneğin Core Data üzerinde iş yapıyorsanız ya da o kütüphaneyi ele alırsan genelde @dynamic türü kullanıldığını görürüz.

Property Özellikleri

nonatomic, değişkene erişimin atomik olması gerekmediğini söyler. Aynı değişkene farklı kanallardan (thread) erişmek istemiyorsanız bunu kullanabilirsiniz.

assign, copy, retain “set” metodlarında girdi olarak verilen değişkenin kendi değişkenimize nasıl atanacağını belirler.

assign, doğrudan bir atama yapar. Genellikle int, float gibi “primitive” türler için uygundur. Bir nesne icin dogrudan atama genellikle kullanılmaz.

copy, gönderilen değişkenin bir kopyasını alır ve kendi değişkenimize koyar. NSString icin uygundur.

retain, kendi değişkenimizdeki nesneyi serbest bırakıp gönderilen değiskeni kendi değişkenimizde güvenli bir şekilde saklar. Böylece o nesne siz ihtiyaç duyduğunuz sürece silinmeyecektir.

assign ve retain çöp toplayıcısının aktif olduğu ortamlarda aynı görevi görür.

Bunların dışında:

readonly, @synthesize komutu ile yalnızca bir “get” metodu yaratılacağını, “set” metodu yaratılmayacağını söyler.

readwrite‘ta ise hem “get” hem de “set” metodları yaratılır.

Özelliklerin Serbest Bırakılması (Releasing)

Özelliklerin bellek sızdırma problemleri için her zaman bilmeniz gereken tek kural: nonatomic yada retain modunda kullanıyorsanız her zaman dealloc metodu ile serbest bırakmanız gerekir.

- (void) dealloc {
[super dealloc];
[myString release];
}

Çoklu Argumanla Mesajlaşma

Öncelikle daha önce programlama ile uğraşanlar için Objective-C’de ki çoklu arguman gönderme yapısı size garip gelecektir. Mantığı kavradıktan sonra C++ ya da Java’dan daha kolay olduğunu göreceksiniz ve seveceksiniz. Neden seveceksiniz? Çünkü okuması anlaşılması daha kolay bir yapıda olduğu için. Örneğin;

[objMyClass startPlay: @"Adventures of Tom Thumb" audienceMembers:44 pie:
[[CherryPie alloc] init] supportingActor:@"Jack Sprat" extrasNeeded:77];

Yukarıda gördüğünüz üzere objMyClass sınıfındaki startPlay metodunun gerekli parametreler (argumanlar) ile çalıştırılmasını görüyorsunuz. Şimdi de bunun metod tanımını da görelim ki açıklamalarımız daha anlaşılır olsun.

- (void) startPlay: (NSString*) title audienceMembers: (int) value pie:
(CherryPie*) pievalue supportingActor: (NSString*) actorvalue
extrasNeeded: (int) extrasvalue;

startPlay metodumuzun tanımı böyle, bir üstte ise parametlere içe çalıştırılmasını görüyorsunuz. İlk parametre olan title, tetikleme anında parametre adı yazılmadan gönderiliyor, diğerleri ise parametre adı ve gönderilen değer ile beraber yazılıyor (audienceMembers:44 gibi). Dikkat ettiyseniz parametreler arasında virgül (,) yada noktalı-virgül (;) yok. Sadece boşluk ile diğer parametrenin bölümüne geçiyoruz.

Kalıtımı Anlamak

Aslında yukarıdaki örneklerde kalıtım ile ilgili bazı örnekler yaptık ancak konuyu henüz incelemediğimiz için tam ayrıntısını bilmiyoruz.

@interface SimpleChild : Simple

Yukarıdaki örnekte gördüğümüz gibi SimpleChild sınıfı Simple sınıfından miras alınarak türetilen yeni bir sınıf.

yeniSinifAdi : parentSinif

dizilimi ile kullanabileceğiniz bu tanımlamada bilmeniz gerekenler arasında C++’ın aksine Objective-C’de sadece 1 tek üst parent sınıftan kalıtım alabilirsiniz. Yani yeni sınıfımız hem parentA hemde parentB den kalıtım alarak türeyemez.

Metodların Ezilmesi

Metodların ezilmesi (overriding) nesne yönetimli programlamada kullanılan bir özelliktir. Metodları ezmek, bu metodu başka birisi ile değiştirmekten çok, genişletmek yada rütuş yapmak anlamına gelir.

#import "Foo.h"
@implementation Foo
- (void) dealloc {
   NSLog(@"deallocating Foo....");
[super dealloc];
}
---snip---
@end

Zaten daha önce buna benzer dealloc kullanımı görmüştük, şimdi ise bunun bir overriding olduğundan bahsedeceğiz. Asıl dealloc metodu NSObject sınıfı altında tanımlanmıştır. Biz ise aynı yapı, aynı isim ile o metodu alıp kendi projemizde ilgili bölümde kullanıyoruz. Burada yaptığımız şey o metoda NSLog ile bir çıktı vermekten ibaret.

NOT: Örnekte kullanılan “super” terimi sınıfın parentini işaret eder. Yani NSLog ile (Ya da o blokda neler yapacaksanız onlar tamamlandıktan sonra) işimiz bitince parent sınıfdaki dealloc metodunu çalıştırıyoruz.

Metodların Aşırı Yüklenmesi (Overloading)

Java’nın aksine Objective-C’de aşırı yükleme özelliği yoktur. Yani aynı isim ve farklı parametreler ile birden fazla metod tanımlayamazsınız. Örneğin;

- (void) myMethod: (NSString *) name;
- (void) myMethod: (int) age;

Şeklinde bir tanımlama size derleyici hatası olarak geri dönecektir. Aslında pek çok nesne tabanlı programlama dilinde olan aşırı yükleme özelliği henüz Objective-C’de yoktur.

Java da buna benzer bir örnek yaptığımızı var sayarsak

public void myMethod(String name);
public void myMethod(int age);

Ne zaman bu metodlardan birini çağırıp parametre bölümüne string tipinde bir arguman girersek ilk metodu, integer tipinde bir arguman girersek ikinci metodu çağıracaktıır.

Peki Objective-C’de bunun çözümü nasılıdır? Farklı isimlerle tanımlama yapmak!

- (void) myMethodString: (NSString *) name;
- (void) myMethodInt: (int) age;

Şeklinde metod isimlerinin sonlarına tip biçimlerini de ekleyerek hem karmaşayı önlemiş olursunuz hemde derleyici herhangi bir hata göstermez.

Protokoller

Protokoller Java’da “interface” ile aynı işi yapmaktadır. Objective-C’de protokol tanımı şu şekilde yapılır.

@protocol Locking
- (void)lock;
- (void)unlock;
@end

ve aşağıdaki şekilde de implement edilir.

@interface SomeClass : SomeSuperClass
@end

Bu konu ileri düzey olabileceği için çok fazla ayrıntı verilmeyecektir. Dilerseniz Apple SDK dökümanlarından ayrıntılı olarak okuyabilirsiniz.

Hataları Yakalamak

Java ve C++’da olduğu gibi Objective-C’de de hata yakalama aynı şekildedir. Try-Catch bloğu kullanarak “try” bloğunda hata oluşturabilecek kod bloğunu gözetim altında tutarsınız ve herhangi bir hata durumunda “catch” bloğunda hatanın türüne göre programa nasıl yön vereceğinizi belirlersiniz.

@try {
        }
@catch(NSException *e) {
     }
@finally {
    }

Ayrıca @throw direktifi de bulunmaktadır. Aşağıdaki kod bloğunu çalıştırarak olayları daha iyi gözlemleyebilirsiniz.

int main(int argc, char **argv)
{
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init] ;
   int result = 0  ;
   @try {
      if (argc > 1)        {
   @throw [NSException exceptionWithName:@"Thrwoing a test exception" reason:@"Testing the @throw directive." userInfo:nil];
    }
}
   @catch (id theException) {
    NSLog(@"%@", theException);
    result = 1;
}
@finally {
   NSLog(@"This always happens.");
   result += 2     ;
}
  NSLog(@"Leaving ...");
  [pool release]  ;
  return result   ;
}
VN:F [1.9.3_1094]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
Rss Feed Tweeter button Facebook button Technorati button Reddit button Myspace button Linkedin button Webonews button Delicious button Digg button Flickr button Stumbleupon button Newsvine button Youtube button