Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Linux İşletim Sistemi Altında Bileşen Tabanlı Yazılım Geliştirmeye Olanak Sağlayan XCOM Sistemi İçin Java Desteği Ahmet Mutlu.

Benzer bir sunumlar


... konulu sunumlar: "Linux İşletim Sistemi Altında Bileşen Tabanlı Yazılım Geliştirmeye Olanak Sağlayan XCOM Sistemi İçin Java Desteği Ahmet Mutlu."— Sunum transkripti:

1 Linux İşletim Sistemi Altında Bileşen Tabanlı Yazılım Geliştirmeye Olanak Sağlayan XCOM Sistemi İçin Java Desteği Ahmet Mutlu

2 İçerik Bileşen Teknolojisi XCOM Sistemi Java Programlama Dili Java Native Interface (JNI) Java – XCOM Köprüsü

3 Yazılım Nesnesi Nedir? Yapabileceği işlevleri (yöntemler – methods) ve bu işlevler için bulunduğu durum (veri üyesi – data member) bilgisini içeren yazılım parçasıdır. Diğer bir değişle nesne, bir veri yapısı ve bu veri yapısını işleyen işlevler bütünüdür.

4 Bileşen Nesne Modeli (Component Object Model)
Bileşen nesneleri oluşturabilmek ve kullanabilmek için Microsoft tarafından ortaya konulan bir modeldir. Açık bir standarttır ve en alt düzeyden en üst düzeye kadar belgelenmiştir.

5 Örnek Bir Yazılım Nesnesi : Stack
class Stack { int num_; // Yığıttaki eleman sayısı int stack_[MAX];// Yığıt için bellek alanı int sp_; // Yığıt göstergesi public: Stack(); ~Stack(void); void push(int elem) const; int pop(void) const; void clear(void) const; int numElem(void) const; int topElem(void) const; }

6 IStack Arabirimi interface IStack { void push(in long elem);
long pop(void); void clear(void); long numElem(void); }

7 IStack2 Arabirimi interface IStack2 { long topElem(void); }

8 Nesne ve Desteklediği Arabirimler

9 XCOM Linux işletim sistemi altında bileşen tabanlı yazılım geliştirmeye olanak sağlayanü, Microsoft COM benzeri bir sistemdir. İki kesimden oluşur: Programlama dilinden bağımsız ikili bileşen standardı İkili biçime uygun bileşenlerin C++ dili ile oluşturulabilmesine ve kullanılabilmesine olanak tanıyacak araçlar ve yazılım kütüphanesi

10 XCOM İkili Biçimi – Sayısal Veri Türleri
XCOM İkili Biçimi – Sayısal Veri Türleri IDL Adı Tür Boy XCOM Türü Java Türü Octet [0,255] tamsayı 1 byte boolean [0,1] Bool Short [-215,215-1] tamsayı 2 short Long [-231,231-1] tamsayı 4 int unsigned short [0,216-1] tamsayı UShort unsigned long [0, 232-1] tamsayı ULong Float IEEE kayan nokta float Double 8 double Longlong [-263,263-1] tamsayı LongLong long

11 XCOM İkili Biçimi – Karakter Veri Türleri
IDL Adı Tür Boy XCOM Türü Java Türü char ISO Latin 1 karakter 1 Char wchar Unicode UCS4 karakter 4 WChar string 0 la sonlandırılmış char disizi 2 String java.lang.String wstring 0 la sonlandırılmış wchar dizisi WString

12 XCOM İkili Biçimi-Yapısal Veri Türleri
IDL Tanımı : struct tarih { short gun,ay,yil; string gun_adi; } XCOM Karşılığı : struct tarih { xcom::Short gun,ay,yil; xcom::Char *gun_adi; } Java Karşılığı : class tarih { public short gun,ay,yil; public String gun_adi; }

13 Java Sun Microsystems tarafından geliştirilen, özellikle ağ üzerinde çalışan uygulamalar geliştirmeye yönelik ancak çok amaçlı, nesneye yönelik ve eşzamanlı programlamaya da olanak sağlayan bir programlama dilidir

14 Neden Java ? Platformdan bağımsız Tamamen nesneye yönelik Otomatik bellek yönetimi ve sıkı tür denetimi ile güvenli Kullanımı kolay ve standart

15 Java Platformu

16 Java Sınıf Tanımı class tarih { public short gun,ay,yil;
public String gun_adi; } Java Derleyicisi tarih t = new tarih() tarih.class

17 Otomatik Bellek Yönetimi : Garbage Collection
Tarih Nesnesi Tarih t = new Tarih(); t Garbage Collector Tarih Nesnesi t = null; t

18 Java ‘ da Parametre Geçişi
Java programlama dilinde yöntemlere parametre geçişi sadece bir şekilde yapılır. Tüm parametreler değerleri kopyalanarak (pass by value) yönteme geçirilir. Nesneler parametre olarak geçirilemez Bir parametrenin değeri ya temel veri türüdür, ya da bir nesneye referanstır

19 Örnek Parametre Geçişi
void method(String s, char c[], float f) { s = s + “123”; c[0] = ‘A’ c[1] = ‘C’; f = 3.14; } void caller() float f = 1.0; String s = “abc”; char c[] = new char[4]; // 4 karakterlik dizi method(s,c,f); // çağırı sonucunda f = 1.0 // s = “abc”, c ={‘A’,’C’,?,?}

20 Java Yerel Arabirimi (Java Native Interface)
JNI, java ortamının en önemli özelliklerinden birisidir. JNI kullanan java programları, C ve C++ ile yazılmıp derlenmiş olan yerel uygulamalarla ve kütüphanelerle (native library) birlikte çalışabilme olanağına sahip olurlar

21 JNI ‘ nin Rolü

22 JNI Nerede Kullanılmalı ?
Java uygulama geliştirme arabirimi (Application Programming Interface- API) bazı platform-bağımlı özellikleri desteklemiyor olabilir Görevlerarası iletişimin getireceği performans kaybı olmaksızın bir yerel kütüphanenin işlevlerinin kullanılması gerekebilir Zaman kısıtlı bir uygulama parçasının alt düzeyde gerçekleştirilmesi gerekebilir

23 JNI İşlevlerine Erişim

24 Java – JNI Temel Veri Türü Eşleştirmesi
Java – JNI Temel Veri Türü Eşleştirmesi Java Türü JNI Türü Açıklama boolean jboolean işaretsiz 8-bit byte jbyte işaretli 8-bit char jchar işaretsiz 16-bit short jshort işaretli 16-bit int jint işaretli 32-bit long jlong işaretli 64-bit float jfloat 32-bit kayan ayırımlı double Jdouble 64-bit kayan ayırımlı

25 Java – JNI Referans Veri Türü Eşleştirmesi
Java – JNI Referans Veri Türü Eşleştirmesi

26 JNI İşlevlerinin Kullanımı
class MyClass { private native print(String s); public static void main(String args[]) print(s); } . . . extern “C” Java_MyClass_print(JNIEnv *env,jobject obj,jstring s) { printf(“%s\n”,(char *)env->GetStringUTFChars(s,NULL)); }

27 Geliştirilen Java – XCOM Köprüsü
XCOM bileşenlerini java programcılarının kolaycakullanabilmelerini sağlayacak ara katman modelinden ve bu katmanların otomatik olarak oluşturulmasını sağlayan bir modül

28 Component Bileşen Nesnesinin C++ Uyarlaması
class Component { . . . public: // Verilen harfi büyük harfe dönüştürür void toUpper(xcom::Char *c){ }; // str karakter dizisi içerisinde s karakter dizisinin // ilk bulunduğu yeri döndürür int fastFind(xcom::Char *str, xcom::Char::char *s) { }; } C++ Derleyicisi Component.so Bileşen kütüphanesi

29 IComponent Arabirimi IDL Tanımı
interface IComponent::IUnknown { // Verilen harfi buyuk harfe donusturur void toUpper(in out char c); // str karakter dizisi içerisinde s karakter dizisinin // ilk bulunduğu yeri döndürür long fastFind(in string str, in string s); }

30 Component Bileşen Nesnesinin Java Uyarlaması
class Component { public void toUpper(char c[]) { }; int fastFind(String str, String s); } Java Derleyicisi Component c = new Component(); c.FastFind(“aaaafsdflkjsf”,”flk”); Component.class Java sınıfı

31 IDL Derleyicisi Tarafından Oluşturulan IComponent.java Arabirimi
class IComponent extends IUnknown { private native int iPtr; private native int initNative() private native void toUpperNative(int iPtr,char[] c); private native int fastFindNative(int iPtr,String str,String s);  public void toUpper(char[] c) toUpperNative(iPtr,c); } public int fastFind(String str, String s) return fastFindNative(iPtr,str,s); static { System.loadLibrary(“WrapperIComponent”);}

32 IDL Derleyicisi Tarafından Oluşturulan libWrapperIComponent
IDL Derleyicisi Tarafından Oluşturulan libWrapperIComponent.cpp Ara Kütüphanesi void Java_IComponent_toUpperNative(. . .,jcharArray c) { . . . Char *c_ = (Char *) env->GetCharArrayElements(c_,NULL); // XCOM Bileşen arabirimine yönlendirme iPtr_->toUpper(c_[0]); // Bileşen arabirimine yönlendirme env->ReleaseCharArrayElements(c,c_,NULL); } jint Java_IComponent_fastFindNative(. . .,jstring str,jstring s) { Char *str_ = (Char *) env->GetStringUTFChars(str); Char *s_ = (Char *) env->GetStringUTFChars(s); // XCOM Bileşen arabirimine yönlendirme return (jint) iPtr_->findFast(str_,s); }

33 Java Uygulaması . . . IComponent.class libWrapperIComponent.so
IComponent ic = new IComponent(); c.fastFind(“aaaafsdflkjsf”,”flk”); IComponent.class int fastFind(String str,String s) { return findFastNative(str,s) } libWrapperIComponent.so jint Java_IComponent_findFastNative(. . .,jstring str, jstring s) { . . . Char *str_ = (Char *) env->GetStringUTFChars(str); Char *s_ = (Char *) env->GetStringUTFChars(s); return (jint) iPtr_->findFast(str,s) } IComponent Arabirimi Component.so int findFast(Char *str, Char *s) {. . .}

34 IDL Derleyicisi IDL tanımları verilen arabirim ve veri türü tanımlarından uygun java arabirimi ve C++ ara kütüphanesini otomatik olarak oluşturur OMG’nin (Object Management Group) belirlediği CORBA IDL belirtim dilinin bir alt kümesini desteklemektedir. omniORB adlı açık kaynak kodlu bir proje için geliştirilmiş olan IDL derleyicisine arka modül eklenmiştir.

35 Diğer Sistemler Microsoft SDK For Java JACOB (Java-COM Bridge)


"Linux İşletim Sistemi Altında Bileşen Tabanlı Yazılım Geliştirmeye Olanak Sağlayan XCOM Sistemi İçin Java Desteği Ahmet Mutlu." indir ppt

Benzer bir sunumlar


Google Reklamları