Previous
Next

JAVA - Multiple Inheritance (Çoklu Kalıtım)

by Cem Kefeli 30. Ekim 2012 05:39

Daha önce Inheritance(Kalıtım) nedir?Diamond Problem of Multiple Inheritance adresindeki yazımda ve Interfaces(Arayüzler) adresindeki yazımda 'Kalıtım' ve 'Arayüzler' konularından bahsetmiştim. Çoklu kalıtım (Multiple Inheritance) diyorsak arayüzlerden bahsetmemek olmaz tabi. Kalıtım olmadan da 'çoklu' su olmayacağına göre eğer eksikler varsa ilk önce bu iki yazıyı okumanızı öneririm.

Gelelim asıl konuya, Java'da çoklu kalıtım mevzusuna. Aslında daha uzatmadan Java'da çoklu kalıtım yoktur deyip yazıyı bitirebiliriz ama gelin bakalım neden yoktur. Var olanlarda neden ve nasıl vardır?

Sol tarafta bu konu ile ilgili basit ama güzel bir UML diagram var. Class B ve Class C, Class A'dan türeyen yavru sınıflar. Türemenin doğal özelliğini kullanarak doWork isimli metodu da overwrite etmişler. Ne kadar güzel! İşte kalıtım... Fakat bir de Class D var... Olmaz ama diyelim ki Class D öyle birşey yapmış ki hem Class B'den hem de Class C'den türemiş. Yani çoklu kalıtım uygulanmış, türedikten sonra bir de üstüne üstlük doWork method'unu override etmemiş, ki etme zorunluluğu da yok burada. Şimdi ne olacak? doWork methodu son durumda nasıl oluşur? Class B'deki gibi mi yoksa Class C'deki gibi mi? İşte bu bir paradoks, kalıtımda diamond problemi olarak isimlendiriliyor.

C++'da bu işler oluyor ama hangi sınıfın hangi method'unu çağırmak istediğinizi bizzat kendiniz vermeniz gerekmekte. C++ çoklu kalıtıma bu şekilde bir çözüm bulmuş.

C++ Multiple Inheritance  |  Gizle  |  Göster
#include 
using std::cout;
using std::endl;

class ClassA { public: virtual void print() const = 0; // pure virtual }; class ClassB : public ClassA { public: void print() const { cout << "ClassB\n"; } }; class ClassC : public ClassA { public: void print() const { cout << "ClassC\n"; } }; class ClassD : public ClassB , public ClassC { public: void print() const { ClassB::print(); } }; int main() { ClassD Class_D; ClassB Class_B; ClassC Class_C; ClassA *array[3]; array[0] = &Class_D; // ERROR array[1] = &Class_B; array[2] = &Class_C; for( int i=0 ; i<3 ; i++ ) array[i] -> print(); return 0; }

Tekrar Java'ya geri dönecek olursak. C++'da var da neden Java'da bu iş yok diye düşünebilirsiniz ama bu tamamen dilin dizayn aşaması ile ilgili bir durum. Çok kullanılmaması ve yanlış sonuçlara yol açabilmesi, ayrıca tam anlamıyla hiçbir zaman çoklu kalıtım diye birşeyin olmayacak olması Java'yı geliştirenleri böyle bir duruma yöneltmiş. Sonuç olarak Java'da çoklu kalıtımı bir nebze olsun arayüzler ile sağlayabiliyoruz.

Javatar

by Cem Kefeli 1. Ekim 2012 06:28

İşte open-source böyle birşey... Mizah dahi daha özgürce Wink Mutlaka izlemenizi tevsiye ederim... 

(They appear to be the perfect family)
Father - Export all OLE objects with the command line
Father - So that they will be available for Internet information
(But sometimes appearances can be deceiving.)
Son - Dad?
Son - Why do we always use . Net?
Father - What do you mean?
Son - Are there no other developing platforms? Fazlası...

Kategoriler: Teknoloji

avea.com.tr'yi yeniledik !

by Cem Kefeli 12. Eylül 2012 21:09

Teknik detaylardan çok fazla bahsetmeyeceğim... Yalnızca şunu da belirtmek istiyorum her ne kadar fonksiyonalite anlamında Online İşlemlerde bir değişiklik olmasa da design olarak Online İşlemlerde de büyük ve köklü değişiklikler yapıldı. Yalnızca görüntüleri paylaşacağım, buyrun aşağıdaki gibi... Düşüncelerinizi de paylaşabilirseniz çok mennun olurum.

AVEA Biz Ana Sayfa AVEA Biz Mobil Akademi AVEA Biz Ana Menü
avea.com.tr Cihazlar AVEA Biz Mesajlaşma avea.com.tr Cihaz Ayrıntıları
avea.com.tr Ana Sayfa AVEA Ringa avea.com.tr Ana Menü
Kategoriler: Makaleler

Weblogic şifre değişikliği

by Cem Kefeli 14. Nisan 2012 01:38

SOAP vs. RESTFULWeblogic, yönetim ekranları için lokal kullanıcılara ait şifre bilgilerini lokal LDAP yapısı içerisinde tutmaktadır. Console üzerinde yeni bir kullanıcı oluşturduğunuzda bu kullanıcı Weblogic'e gömülü LDAP üzerinde saklanmaktadır ve bu LDAP yapısı üzerinden yönetilmektedir.

Weblogic yönetim panellerine ait domain'in sahibi bir ana kullanıcı bulunmaktadır. Genellikle de bu kullanıcının varsayılan ismi 'weblogic' olarak verilmektedir. Farklı nedenlerden dolayı bu kullanının şifresini değişitirmek isteyebilirsiniz. Ya da bu kullanıcının şifresini resetlemek de isteyebilirsiniz. Bu tür durumlarda aşağıdaki yol haritasını izleyerek şifre değişikliği işlemini başarıyla gerçekleştirebilirsiniz.

  1. İlerleyen bölümlerde zaten yapacağımız işlem ile birlikte değişecek bölümlerin yedeğini alıyor olacağız ama yine de adettendir ve usüldendir herhangi bir işleme başlamadan önce ve 2. adımdaki tüm server'lar kapatıldıktan sonra tüm makinelerde üzerinde işlem yapıalcak olan domain'in yedeği alınması faydalı olacaktır. Yedek alma işlemi domain dizininin doğrudan olduğu gibi kopyasını almak şeklinde de yapılabilir ya da tüm ortamı yedeklemek istemiyorsanız yalnızca konfigüratif yapının yedeğini almak istiyorsanız domain'in template'ini de oluşturabilirsiniz.
     
  2. Admin console, node manager ve üzerinde işlem yapılmak istenen domain üzerinde çalışan tüm manager server'lar kapatılmalıdır. Üzerinde işlem yapılmak istenen domain'e ait tüm process'ler kapatılmış olmalıdır. Eğer birden fazla makineden oluşan bir cluster sistem varsa tüm makinelerde ilgili domain'e ait process'ler kapalı olmalıdır.
     
  3. 'Middleware home' ve 'Domain home' değişkenleri aşağıdaki gibi export edilmelidir;

    export MW_HOME=/u01/app/weblogic/wls1213
    export DOMAIN_HOME=$MW_HOME/user_projects/domains/baseDomain
  4. Admin server altındaki 'data' dizininin yedeği alınmalıdır;

    cd $DOMAIN_HOME/servers/AdminServer
    cp -r data data_old
  5. Ortam değişkenleri aşağıdaki script yardımıyla set edilmelidir;

    cd $DOMAIN_HOME/bin
    ./setDomainEnv.sh
  6. Admin server altındaki 'security' dizini altında 'DefaultAuthenticatorInit.ldift' dosyasının yedeği alınmalıdır;

    cd $DOMAIN_HOME/security
    mkdir old
    mv DefaultAuthenticatorInit.ldift old
  7. Aşağıdaki komut yardımıyla yeni şifre belirlenmelidir. Burada varsayılan domain sahibi kullanıcının 'weblogic' olduğu düşünülerek yazılmıştır. yeni şifre yazıldıktan sonra bir boşluk ve nokta karakteri unutulmamalıdır. Bu komut koşturulduktan sonra yeni ldift dosyası oluşacaktır.

    cd $DOMAIN_HOME/security
    java weblogic.security.utils.AdminAccount weblogic yeni_sifre .
  8. Eğer boot.properties dosyası daha önceden set edilmişse ve kullanılıyorsa bu dosya içöerisinde de yeni kullanıcı adı ve şifre yedeği alındıktan sonra güncellenmelidir;.

    $DOMAIN_HOME/servers/AdminServer/security
    cp boot.properties boot_old.properties
  9. Son adım olarak domain varsayılan start komutu yardımıyla ayağa kaldırılarak yeni kullanıcı adı ve şifre ile login olunabilir;

    $DOMAIN_HOME
    nohup ./startWebLogic.sh >> startWebLogic.out &
    tail -f startWebLogic.out

Tabiki her zaman hata oluşma ihtimali mevcut ve hata oluşması durumunda en azından yeni yapı çalışmıyor olsa bile eskiye geri dönebiliyor olmamız gerekir. Eğer bir hata ile karşılaşılırsa aldığımız backup dosyalarına geri dönülerek domain değişiklik öncesi hali ile çalıştırılabilir.

Hakkımda...

Cem KEFELİ

Electronics and
Telecommunication Eng.
devamı...


Son yapılan yorumlar...

Comment RSS

Yasal bir uyarı...

Disclaimer"Bu web sitesinde görmüş olduğunuz bilgilerin, dokümanların ve diğer materyallerin kullanılmasından doğabilecek hiç bir sorumluluktan site sahibi sorumlu tutulamaz. Web sitesi içerisinde yer alan yazılar, yorumlar, resimler ve diğer tüm içerikler yalnızca sahibinin görüşünü yansıtmakta olup içeriğin sahibi kişilerin çalıştığı kurumları bağlayıcı hiç bir nitelik taşımamaktadır. Yapılan tüm alıntılar mutlaka kaynak gösterilerek verilmeye çalışılmaktadır. Web sitesi içerisinde bulunan ilgili materyaller, ilgili yasal kurumlar tarafından uygun görülmemesi durumda kaldırılacaktır."
General