Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

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.

Benzer bir sunumlar


... konulu sunumlar: "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."— Sunum transkripti:

1

2 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

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

4 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.

5 4 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. Bileşen Nesne Modeli (Component Object Model)

6 5 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; } Örnek Bir Yazılım Nesnesi : Stack

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

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

9 8 Nesne ve Desteklediği Arabirimler

10 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

11 10 XCOM İkili Biçimi – Sayısal Veri Türleri IDL AdıTürBoyXCOM TürüJava Türü Octet[0,255] tamsayı1Octetbyte boolean[0,1]1Boolboolean Short[-2 15, ] tamsayı2Shortshort Long[-2 31, ] tamsayı4Longint unsigned short[0, ] tamsayı1UShortshort unsigned long[0, ] tamsayı4ULongint FloatIEEE kayan nokta4Floatfloat DoubleIEEE kayan nokta8Doubledouble Longlong[-2 63, ] tamsayı8LongLonglong

12 11 XCOM İkili Biçimi – Karakter Veri Türleri IDL AdıTürBoyXCOM TürüJava Türü char ISO Latin 1 karakter1Charchar wchar Unicode UCS4 karakter4WCharchar string0 la sonlandırılmış char disizi2Stringjava.lang.String wstring0 la sonlandırılmış wchar dizisi4WStringjava.lang.String

13 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; }

14 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

15 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

16 15 Java Platformu

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

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

19 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ırpass by value

20 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 ’,?,?} }

21 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

22 21 JNI ‘ nin Rolü

23 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

24 23 JNI İşlevlerine Erişim

25 24 Java – JNI Temel Veri Türü Eşleştirmesi Java TürüJNI TürüAçıklama booleanjboolean işaretsiz 8-bit bytejbyte işaretli 8-bit charjchar işaretsiz 16-bit shortjshort işaretli 16-bit intjint işaretli 32-bit longjlong işaretli 64-bit floatjfloat 32-bit kayan ayırımlı doubleJdouble 64-bit kayan ayırımlı

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

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

28 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

29 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

30 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); }

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

32 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”);}... }

33 32 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); }

34 Component.so int findFast(Char *str, Char *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.class int fastFind(String str,String s) { return findFastNative(str,s) } Java Uygulaması... IComponent ic = new IComponent(); c.fastFind(“aaaafsdflkjsf”,”flk”);... IComponent Arabirimi

35 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.

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


"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." indir ppt

Benzer bir sunumlar


Google Reklamları