Previous
Next

JAVA - Hidden Inheritance (Gizli Kalıtım)

by Cem Kefeli 31. Ekim 2012 01:34

JavaAslında buradaki linki takip ederseniz birkaç başlık halinde Java'da kalıtımı ilgilendiren birçok bilgiye ulaşabilirsiniz. Gizli kalıtım da bu yazıların birisi içerisinde yer bulabilirdi fakat hem zamanında yazmayı atlamışım hem de sonradan bu konuyu farklı bir başlık olarak ele almanın daha uygun olacağını düşündüm.

Gizli kalıtım, hem kalıtımla ilgili tabiki hem de aslında Java'da sınıflar ve nesnelerin doğal işleyişi ve dil yapısı ile ilgili de mantıksal bilgiler veriyor. Nasıl?

Hidden inheritance example  |  Gizle  |  Göster
public class HiddenEx {
    // Hic bir sey yok!
}
public static void main(String[] args) {
    HiddenEx Class1 = new HiddenEx(); 
    HiddenEx Class2 = new HiddenEx(); 
    HiddenEx Class3 = Class2;
    System.out.println("Class1.toString(): " + Class1);
    System.out.println("Class2.equals(Class1): "+Class2.equals(Class1));
    System.out.println("Class2.equals(Class3): "+Class2.equals(Class3));
    System.out.println("Class2.hashCode(): " + Class1.hashCode());
}
Class1.toString(): HiddenEx@addbf1
Class2.equals(Class1): false
Class2.equals(Class3): true
Class2.hashCode(): 11394033

Şimdi bu örneğe bakınca ilk önce şu soruları sormanız gerekir. "İyi de ben HiddenEx isimli sınıfta ne toString isminde bir method tanımladım ne equals ne de hashCode? Nereden geldi peki bu methodlar? Tanımlamadığım bir methodu nasıl kullanabildim?"

Hidden inheritance (Object class)  |  Gizle  |  Göster
public class HiddenEx extends Object {
    // Hic bir sey yok!
}

Bu soruların tümünün cevabı da yukarıdaki bir numaralı boyalı satırda saklı. Çünkü Java'da tüm nesneler gizli olarak Object sınıfından türer. Object tüm sınıfların atasıdır diyebiliriz, bu Java'nın sınıf yapısının kurgusudur. Siz bir sınıf oluşturduğunuzda bu sınıf aslında gizli bir şekilde Object sınıfından extend edilir. Dolayısı ile yukarıdaki saydığım üç adet method zaten Object sınıfının içerisinde tanımlı olduğu için HiddenEx sınıfı içerisinde kullanılabildi. Yalnızca bu üç method değil başka methodlar da var bu şekilde... İşte gizli kalıtım bu şekilde ifade edilebiliyor...

Peki Bir sınıf daha düşünün bu sınıf da HiddenEx sınıfından türesin ve adı da HiddenEx2 olsun. HiddenEx2 hem Object hem de HiddenEx sınıflarından aynı anda mı türeyecektir? Cevap hayır... Çünkü Java'da multiple inheritance (Çoklu kalıtım) yoktur. HiddenEx2 sınıfı HiddenEx sınıfından türer, HiddenEx ise Object sınıfından türer.

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.

Trend Analyzer Software

by Cem Kefeli 5. Ekim 2012 09:41

TREND ANALİZİ / TREND ANALYZER

ÖZETÇE: Müşterilerin hizmetine sunulan IT sistemlerinin erişilebilirliği zaman zaman faklı nedenlerden (Firewall, Servis hataları, veritabanı hataları, vb.) dolayı azalmaktadır ve bu da servis kayıplarına ve hatta bazen servis kesintilerine neden olmaktadır. Servis kayıpları müşterilerin almak istedikleri servislerin bir bölümünü zaman zaman alamamalarına ya da eksik almalarına neden olmaktadır. Servis kesintileri ise müşterilerin ulaşmak istedikleri servislere hiç bir şekilde ulaşamamasına neden olmaktadır. Tüm bu servis kaybı ve servis kesintileri servis için cevap sayılarına (RPI - Responses Per Interval) düşüş olarak yansımaktadır. Fakat bu düşüşler gün içerisinde belirli saatlerinde ve geceleri kullanımın az olduğu zamanlarda da yaşanmaktadır fakat bu düşüşler olağandır ve olağan olmayan durumlardan ayırt edilmesi oldukça zordur. Java dili ile geliştirilen Trend Analizi yazılımı bu ikisi arasındaki farkı kolayca saptayabilmektedir. Tüm trendler ve trafik değerleri CA Wily üzerinden realtime olarak gözlenebilmekte ve alarmlar oluşturulabilmektedir.
Anahtar Kelimeler: Trend Analizi

ABSTRACT: Sometimes, occurs reduction in services as traffic values from a variety of reasons (ex: Firewall, service errors, database errors, etc…) and this will cause service disruptions. However, similar reductions in traffic at night traffic zone may also occur. This difference between the two is difficult to detect. Trend analysis software, that developed by me in Java and uses innovative algorithms, can determine whether changes in normal traffic levels. And also, the traffic values can inform the owners of the service generating the alarm in case of extraordinary changes. All trend and traffic values can be monitored through CA Wily at real-time, and retrospectively recorded.
Keywords: Trend Analyzer, Trend Analysis

WEB Responses Per Interval (RPI) WEB Responses Per Interval (RPI) Trend
Şekil-1: WEB RPI Şekil-2: WEB RPI Trend
 
WEB Responses Per Interval (RPI)
Şekil-3: WEB RPI & Trend


Şekil-1'de 23:30 ile 00:30 arasında yaşanan servis kaybı görülmektedir. Bu servis kaybı sırasında müşteri isteklerinin bir kısmı karşılanamamıştır. Şekil-2'deki grafikte ise kesinti süresince trend değişimi görülmektedir. Trend analizi yazılımı trafik seviyelerini yüzde (%) cinsinden hesaplayarak tespit edebilmektedir. Örneğin bu kesinti sırasında %70-75'lik bir servis kaybı oluşarak servis cevap değerleri normalin %25-30'una kadar düşmüştür. Şekil-3'de ise her iki metriğin (RPI ve RPI Trend) aynı grafikte çakıştırılmış hali verilmektedir. Grafikten de görüleceği gibi gece yarısından sonra RPI değerleri servis kaybı anındakinden daha düşük de olsa olağan dışı bir durum olmadığı için raporlanmamıştır ve trafik %100 seviyelerinde görünmektedir. Oysa ki PRI'a göre sabit bir eşik belirlenecek olsa ya servis kaybı durumu algılanamayacaktı ya da geceleri gereksiz yere alarm durumları oluşacaktı.

 

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

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