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

Slides:



Advertisements
Benzer bir sunumlar
8. SINIF 3. ÜNİTE BİLGİ YARIŞMASI
Advertisements

.NET FRAMEWORK -MASAÜSTÜ VE SUNUCU YAZILIMLARI
Ders İçeriği Ağaç Veri Modeli Tanım ve Gerçekleştirim İkili Ağaç
Yazılım Geliştirme ve Java
JAVA TEMELLERİ GİRİŞ JAVA TEMELLERİ GİRİŞ signalsec.com & mialkan.com.
SCANNER SINIFI ve KLAVYEDEN VERİ OKUNMASI
Nesnelerin Özellikleri. - Üye nesneler - friend belirtesi - Nesnelerin operatörlere yüklenmesi - this yerel (lokal) değişkeni - inline tanımlı üye fonksiyonlar.
Değişkenler ve bellek Değişkenler
NOKTA, DOĞRU, DOĞRU PARÇASI, IŞIN, DÜZLEMDEKİ DOĞRULAR
SINIFLAR Yılmaz Kılıçaslan.
NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR
Veri ve Veri Yapıları Genel olarak bilgisayarlar.
Ders İçeriği Bağlantılı Liste İki Yönlü Bağlantılı Liste
Programlama-II (Java ile Bilgisayar Programlama)
Nesneye Dayalı Programlama
C Programlama Diline Giriş
Tanım Birbirleriyle ilişkili ve bitişik iki ya da daha fazla bellek hücresinden oluşan yapı Örnek dizi tanımı: int tamsayiDizi[10]; tamsayiDizi[0] /*ilk.
Yönetim Bilgi Sistemleri Şubat TAPU VE KADASTRO GENEL MÜDÜRLÜĞÜ.
Bölüm 9 Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri
String Kütüphanesindeki Arama Fonksiyonları
Bölüm 10 Yapılar ve Birleşimler
Java Programlama Koleksiyon(Collection) Sınıfları
Nesneye Yönelik Programlama Dr. Pelin GÖRGEL
SINIFLAR GİRİŞ Yılmaz Kılıçaslan.
ARALARINDA ASAL SAYILAR
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Nesneye Dayalı Programlama
DİZİLER.
Matematik 2 Örüntü Alıştırmaları.
Veri Yapıları Ve Algoritmalar
C# Metot Overloading (Aşırı yükleme)
JAVADA PROGRAM DENET İ M İ VE OPERATÖRLER. int a ; a=4 ; // do ğ ru bir atama 4=a ; // yanlış bir atama!
Chapter 7: Using Methods. Metotları ve Kodlamayı Gizlemeyi Anlama Metot – Kapsüllenmiş ifadeler serisini gerçekleştiren bir görev – Kullanılan metodun.
Chapter 13: Handling Events. 2Microsoft Visual C# 2012, Fifth Edition Olay İşleme Olay – Bir nesne için ilginç bir şey olduğu zaman oluşur. – Programın.
HABTEKUS' HABTEKUS'08 3.
Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü C ++ Nesne.
Chapter 6: Using Arrays.
© Haluk Bingöl v2.23 Java Programlama Dili - 01 Tek Class ile Programlama Dr. Haluk Bingöl BÜ - CmpE BU-SWE.
ÇOK BİÇİMLİLİK POLYMORPHISM
Kalıtım.
WEB PROGRAMLAMA PHP Temelleri Dr. Erman Yükseltürk.
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
NESNEYE YÖNELİK PROGRAMLAMA
Nesneye Dayalı Programlama
Çocuklar,sayılar arasındaki İlişkiyi fark ettiniz mi?
Toplama Yapalım Hikmet Sırma 1-A sınıfı.
JAVA’DA DİZİLER Dr.Galip AYDIN.
Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü C ++ Veri.
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ VE SINIFLARIN DİĞER ÖZELLİKLERİ Yılmaz Kılıçaslan.
Trees, Vectors, Iterators. ADT Abstract Data Type (ADT) vs implementation -Soyut Veri Türleri - Uygulamaları.
Temel Giriş/Çıkış Fonksiyonları
Ders İçeriği Liste Soyut veri yapısı (ADT)
ÖĞR. GRV. Ş.ENGIN ŞAHİN BİLGİ VE İLETİŞİM TEKNOLOJİSİ.
Bil 102 Bölüm 6 Diziler.
Bil 102 Bölüm 3 Java’da Program Akış Denetimi Bil 1021.
JAVA PROGRAMLAMA ORNEKLER
SINIFLAR ve NESNELER. İlk sınıfımızı ekleyelim class KrediHesap { public ulong HesapNo; public double Limit; public string KartSahibi; }
BTP206– Görsel Programlama II
1 7. HAFTA. 2 Referanslar  Referanslar adres temsilcisidir  İşaretçilerin görevlerini kısmi olarak yapabilirler  Değişken değildirler.  Bellekte yer.
Temel Veri Yapıları Veri Yapıları 1. Bölüm 1. 2 Programlarımızda tanımladığımız nesneler ya tek parçadan ya da birden fazla parçadan oluşurlar. Tek parçadan.
VERİ ve BELLEK & DEĞİŞKENLERİN SAKLANMASI Asst.Prof.Dr.Misket YEKTAY Gizem AYIK.
JAVA 1. GİRİŞ & TARİHÇE Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmıştır. Açık kodlu. Nesneye yönelik. Düzlemden.
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
ALGORİTMA VE PROGRAMLAMAYA GİRİŞ
C Programlama Dili Bilgisayar Mühendisliği.
C Programlama Diline Giriş
3- VERİ TİPLERİ - OPERATÖRLER Nesne Yönelimli Programlama - i
Veri Tipleri 12/4/2018.
Kurucular(Yapıcılar), Yıkıcılar
Nesneye Dayalı Programlama 1
Sunum transkripti:

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

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

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.

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.

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

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

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

Nesne ve Desteklediği Arabirimler

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

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

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

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

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

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

Java Platformu

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

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

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

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

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

JNI ‘ nin Rolü

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

JNI İşlevlerine Erişim

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ı

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

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

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

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

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

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ı

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

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

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) {. . .}

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.

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