Kategoriler


SON YORUMLAR
Memet
Katılım ödevim var yardıma ihtiyacım var yardımcı olabilecek var mı
Halil
Tatar Ramazan
Bizim Sakarya üniversitesinden iyi yerlere gelen bir sürü adam var. Hatta ödevleri yapmayan tembel bilinen biri katılım bankasına girdi şimdi de Avustralyada programcılık yapıyor. Kurumsal firmalarda her üniversiteden eleman vardır zaten. Mesela Ford Otosan. Çok da para vermez hepsi. Memur maaşına çalışırsın. General Elektrik gibi yerler yüksek maaş verebilir. Ama oralara girmek zordur. İşi de zordur. Ben 2010 yılında KPDS İngilizceden 89 almıştım. Süper bilişim uzmanıyım. İyi öğretim almak, Üniversitede bol proje yapmak kişiyi 1-0 öne geçirir. Veya ortalamada yüksek puanlı, öğretimi iyi olan üniversite mezunları daha başarılı olabilir. İtirazım yok. Ama istisnalar da her zaman mevcuttur. Kocaelinin birincisi elbette yıldızın sonuncusundan daha başarılı olacaktır.
No One
Tatar, sen neye atarlanıyorsun? Boş işler dediğin bütün hayatını etkileyecek kariyer planın ve senin bütün hayatın. Herkes her yere gelemez, kimse kimseyi kandırmasın, en öncelikle de kendini kandırmasın. Verdiğin örnekler istatistik orsnında yüzde kaç acaba? Mesela anadolu okulundan mezun kaç kişi iyi şirketlerde çalışıyor, büyük çoğunluk iş bulamıyor kendi tanıdıklarım var, ben üzerine diyorumki iyi okuldakiler de her yerde istediği gibi bulamıyor, sen burada montajcılık yaparken amerikalısı avrupalısı senin kullandığın teknolojileri üretiyor, senin yaptığın mühendislik mi montajcılık mı şimdi? Tr de en iyi şirketlerde çalışan farklı 10 üzeründe onlarca kişiye sor bakalım neyin dizaynını neyin teknolojisini üretmişler? Söylediğin bakan ingilterede yaşıyorsa sterlin olarak maaş alır 70bin tl diyerek manipule etme 6 ya böl, 11 bin sterlin de, tr de veriyorlarsa kim kime o kadar parayı veeiyor kaç tane bölüm birincisi o parayı alıyor saçmalama lütfen. Ben diyorumki birincil hedef herşeyini kariyere odaklama veya tamamen boşa salma, herkes bir şekilde yaşıyor hayatını zaten ancak neyi istiyorsa ona çabalasın ama bazı şeyler olmuyorsa da hayatını mutsuz geçirme. Sen mesela bırak dünya işlerini ahiretini yaşa diyorsun, milyonluk girişimcilik yapsan ve işlerin tıkırında gitseydi ve birçok hayalini gerçekleştirseydin şu anda beyler şunu şunu yapın hayat çok güzel diyecektin, şimdi gelmiş hayat boş diyorsun, komik. Benim yazdıklarımdan herkes ne demek istediğimi anlamıştır zaten, bazı şeyleri görmek için 40 yaşına gelmeye gerek yok, çok fazla araştırıp çok fazla kişiye sorarsan ve işin içinde bizzat bulunursan görüyorsun zaten ki yazdıklarım çok az şey olmasına rağmen anlaşışır özet bilgiler, seversin kullanırsın, sevmezsin saygı duyar ve okumazsın bu kadar basit.
ali
amk bilgisayar mühendsiliği nerden seçtim seni mis gibi kolay bölümler varken çekilir dert değil...... tavsiye etmiyorum kardeşim.
Tatar Ramazan
No One bırak boş işleri başlarım kariyerine de üniversitesine de! Dünyada bir halt olmadığını anlayın işte. Ahirete yatırım önemli. Herkes bir şekilde yükseliyor ilerde zaten. ODTÜ mezununun 26 yaşında geldiği noktaya Sakarya mezunu 33 yaşında geliyor. Ortalamada ne kadar çalıştıysan hayat sana o kadar verir. Mesele Karadeniz Teknik Maliye bitiren biri vardı. 29 yaşında vergi denetmeni oldu. Ankara Siyasal bitirseydi 22 yaşında işe girerdi. Eski bakan Mehmet Şimşek bölüm birincisi oldu. İngilterede 70 bin lira maaş alıyordu. Her şey ve herkes derece derece.
No One
Yeni mezun olarak birkaç küçük şey yazmak istiyorum, kariyer net veya linkedin deki iş ilanlarına bakarsanız, özellikle yeni mezun olanlar için bile min 2 yıl deneyim ve birçok programlama dilleri vs isterler. 5 kişi işe alınacaktır, 500 kişi başvurur. Her yere gereksiz sayıda birçok üniversite açıldı, avrupanın en kaliteli üniversiteleri ingiltere ve almanyada bile max 50 civarı, bizde ise 150-200 arasında bunun siyasi bazı sebepleri var. Mesela siz her il e üniversite açarsanız, tüm ailelerin çocukları üniversite mezunu olacaktır, çocuk ve aile pskolojikmen rahatlar. Esnaf ise öğrencilerden ciddi gelir elde edecektir. Sorun ise bizim gibi ülkelerde bilim veya teknoloji geri plandadır ve iş istihdamı azdır, mesela 100 kişi işe alınacaktır ancak açılan birçok üniversite ile 1000 kişi mezun olur ve kalan 900 kişi işe giremez, bu sayı her yıl daha da artar ve işsizlik artar, insanlar da artık üniversite mezunu olma fark yapmıyor master yapayım, part time çalışayım der, zaten birçoğu çok kalitesiz eğitim alır ve giriş maaşları 1500-3000 arasında olur yılları işsizlik veya düşük maaşla geçirir. Kişi de sorunu kendisinde sanır, halbuki tüm suç sistemin böyle olmasını sağlayanlar, anca siz yıllar sonra para ve zaman kaybınızı anlarsınız, veya anlasanız bile elinizden çok fazla birşey gelmez. Peki şirketler insanları neye göre seçer, kendini geliştir denilen tavsiye ne kadar doğru? Arz-talep dengesini iyi analiz etmelisiniz, mesela şu anda çok fazla mezun var, ekonomik kriz dolayısı ile iyi okuldan mezunlar bile zannettiğiniz gibi hemen iş bulamıyor. Ya top 5 okul dan 3+gpa ile mezun olacaksınız, ya da torpiliniz olacak. Ben top 5 okuldan mezunum ve okulun zorluğundan dolayı mezun olan herkesin onlarca projesi, jaca, c, c++, python, matlab gibi dilleri, birçok farklı ideleri, oop, mvc, design pstterns, ve çok farklı çeşitte algoritma çeşitleri görmelerine ve ingilizce seviyesinin çok iyi olmalarına rağmen (toefl a girenelerin çoğu 80-100 arası) ve alese girenlerin çoğu 80-95 arası aldığını düşünürseniz, yine de işe girerken sizi beğenmezler, benim gördüğüm kadarıyla şirketlerin insan seçerken yaptıkarı sıralama şu şekilde, 1- okul ismi (boun, koç, itü, odtü, bilkent top 5, ytü, sabancı, tobb, hacettepe vs gibi ikincil seviye okullar, diğerleri daha geri planda, her şirketin kendince filtreleme sistemi var ve bazı okul mezunlarını asla almazlar) 2- gpa ortalama (kurumsal veya büyük şirketler savunma, telekom, banka vs hepsi önem verir, master yapmak istiyorsanız birinci kriterdir, küçük teknokent şirketlerinden de soran çok oluyor ben ve arkadaşlarıma staj için bile) 3- ingilizce (iyi okulların çoğunun ingilizce seviyesi upper dır, ingilizceniz yoksa bilgisayarcı sayılmazsınız) 4- yaptığınız projeler, staj, part time, iş deneyimi (bazı şirketler ilanlarda iyi yerde staj yapmış olma koşulu koyar, iş yaptığınız sektörde staj yapmanızı beklerler vs, 2017 den beri birçok şirket kurumsal ve normal hemen hemen hepsinde artık staj yapmak bile zordur, ya gpa 3+ olacak, ya da torpiliniz, top5 okuldaki ben ve birçok arkadaşım staj bulmada zorlandı, top5 te değilseniz part time veya normal iş tecrübesi sizi direk öne atar, iyi okuldakilerin çoğu derslerinde projeler çok ve zordur, o yüzden diğer okuldakilerin aradaki açığı iş tecrübesi ve hobby projelerle kapatması lazım) 5-referans (okuldaki hocanız veya staj, iş yerindeki mühendisin işe girerken size olumlu referans olması, şu anda yeni mezunlardan 2-3 tane referans istiyor birçok şirket 6-diğerleri, aklıma gelmeyen diğer işler, sosyal sorumluluk, klüp, sertifika, yarışma vs bunlara önem veren ik cı veya şirketler olabiliyor cv nin kenarında durması işe yarayabilir 0- torpil, çevreden veya akraba aile tanıdık ile torpiliniz var ise diğer herşeyden etkili hale gelip herkesin önüne geçebilirsiniz, batıda iş liyakat veya işi en iyi yapana verilir. Doğu toplumlarında ise iş güvenilir kişi ile yapılır, o yüzden tanıdıkları işe alırlar, şirket gizliliği ve güvenliği bazı şirketler için çok sıkıntılı olabiliyor vs, bu kozu olan çok fazla insan var piyasada, o yüzden siz bunlardan birisi değilseniz yukarıdaki beş maddenin hepsini yükseltmeye bakın. İyi okul hiçbirşey mi, veya herşey mi? Top5 ten gpa 2.0 - 2.5 arasında mezun olursanız biraz zor günler sizi bekliyor, master yapamazsınız, paranız yoksa yurt dışına gidemezsiniz, çok ağır ders ve projeler yaptınız ama okulu zor bitirdiniz ve dışarıdaki şirketler size çok önem vermeyebilir, iş bulurken ve bulduktan sonra da min 1 yıl falan zorluk çekersiniz, ilk başlarda iyi kurumsaldan başlamak zordur İyi okul mezunu Gpa 2.5-3.0 arası, savunmaya girmek zorlar, onun dışında bazı kurumsallara ilk başta giremezsiniz ama bazılarına girebilirsiniz, master içinde şartlar biraz zorlar İyi okul mezunu 3gpa+ ile master veya iş bulmak daha kolaydır ancak okuldaki zorluklardan sonra hiçbir zaman tatmin olamayabilirsin, çünkü hayat üniversitede zor projelerle uğraşırken kurduğun hayaller gibi değilmiş onu işe girince öğreniyorsun Diğer okullardan mezunlar, okulda gezip tozduysanız çok güzel, en güzel yıllarınız o yıllardı, zor okuldakiler kadar çalışmadınız ve gençliğiniz full çalışmayla geçmediyse iş hayatı ilk birkaç yıl zorlar, sonrasında kurumsal şirketlerin bazılarında hatta çoğunda devam edebilirsiniz belki (2-3 yıl sonra girenler var oran olarak bilmiyorum, bazı şirketlere çok zor) Yaş 28-30 üstü ise, srtık iş bulmak yeni mezun kadar zordur, çünkü maaş beklentisi fazla ancak şirketler siz ne kadar kaiteli olursanız olun sizden daha ucuza çalışacak birisini bulabiliyor, maaş zamları veya artışı düşük, tl nin alım gücü her seferinde düşüyor, kaygılar çocuk varsa dahada fazla Yurt dışına mastera gitsenizde, phd yapsanızda yaş ilerliyor, 30 una yaklaştığında hala öğrenci gibi takılmak zorunda olmak, avrupada 2-3-4 bin euro ya yaşamak, hangi ara evleneceksin, ev veya araba alacaksın, geri.dönecek misin, hayatın boyunca atomu mu parçalayacaksın? Tr dekiler en azından atom parçalamıyor Sonuçta top5 okuldan yeni mezun, tr de yine top şirketlerin birinde ben ve çoğu arkadaşım 3.5-4.5k ya başladık, savunmadakiler 5k üstü, ancak tavsiye verecek olursam, tünelin ucu bmbk bir yere çıkıyor. Hayatınızı doya doya yaşayın, çok zengin olmadığınız sürece para o kadar önemli değil, ben daha 22-25 yaşındayım (tam yaşım belli olmasın diye) ve umutsuzum bazı şeyler için, hayatınızı ev veya araba almaya mı harcamak istiyorsunuz, büyük şehirde zar zor yaşamaya mı? Öğrenciyken anlamanız pek mümkün değil kapitalist sistemin içine girip para kazanmaya başlayınca, insanların nasıl davrandıklarını çok daha net anlıyorsunuz, okuyun, gezin, eğlenin, anı yaşayın. Ne çok çalışın, ne de çok tembellik edin, herşeyi dozunda yaşayın. Daha çoook şey yazardım da boşver
Tatar Ramazan
Adam ÖSS ilk 3000 e girdi İTÜ mezunu doğru dürüst bir yere giremedi. ilk işini 26 yaşında buldu. O da kıytırık bir firma. Ekmek arslanın kuyruğuna indi. Siz ne bekliyorsunuz? Firmalar kollarını açtılar sizi bekliyorlar. :) :) :)
yazilimci
Java, C/C++, python ve bilgisayar müh. derslerinizin ödevleri garantili yapılır, yazilimcialper@gmail.com
Onder
Java web uygulama da eczane otomasyonu yapılacak Aslında otomasyonu c# DA yaptım. Tasarim tamam dil yazilacak. Veritabanı olarak sqlserver olacak 2 hafta içinde bitmeli Fiyat nedir konder06@hotmail.com
Tatar Ramazan
Eskiden teknoloji geriydi. Sabah soğukta kalkılırdı. Doğalgaz yoktu.İnternet yoktu. Şimdi her şey var. Gençler açısından başarısız olma hakkı yok. Kursa gidip pratik bilgi almak faydalı olabilir ama elzem değildir. Çalışkan değilsen kurs sana yarar sağlamaz. Dershaneye 600 kişi gider. Yüksek puanlı üniversite kazanan 20 kişi çıkar. Üniversite mezunları için de benzer durum söz konusu. 3000 mezun varsa 300-500 tanesi çok iyidir. Endişeye gerek yok. Bu ülke insanı çok çalışmaz zaten. İyilerin arasına girmek zor değildir. Elektronik Devreleri dersinde hoca bir soru çözmüştü ve ders biterken bu sorunun çözümü neydi diye bakanlar dersi geçer demişti. Yani işine önem verenler, umursayanlar başarılı olur. Dersten sınıfın %50 si kalıyormuş. Ben de sınıftan çıkmadan önce defterden çözümüne bakmıştım ve dersi AA ile geçtim. Matematikten kalmaktan korkardım. Türev, integralden 100 aldım. Birkaç şeye bakarak başarılı olup olmayacağınızı anlayabilirsiniz. Biraz endişe olacak. Çok rahatlar başaramaz. Ahiret için de aynı kural geçerlidir. Korku ile ümit arasında olun.
Tatar Ramazan
Bilişim kadar güzel meslek mi var. Her yerinden meslek, uzmanlık fışkırıyor. Ofis programları mı dersin, .NET, Oracle, Java mı dersin, sistem-network mü dersin, Grafikerlik mi dersin, Çizim programları mı dersin...Gıcır gıcır renkli teknolojiler..Yaptığın ürünü iç piyasaya satamazsan yurtdışına satarsın..Gençler için yığınla iş ve uzmanlık alanı. Oturun çalışın işte..Hem para hem keyif...java2s.com diye site var..Bütün teknolojilerin bütün konularıyla ilgili A dan Z ye örnek koymuş adamlar. Bizim öğrenciliğimizde yoktu...Oturun çalışın bahane üretmeyin. Yeniden görüşüciiz...
Yazilimci Alper
Java, C/C++, python ve bilgisayar müh. derslerinizin ödevleri garantili yapılır, yazilimcialper@gmail.com
Ece Maria
Yazılım Mühendisi ne iş yapar? Yazılım mühendisleri sadece bilgisayar programlarımı yoksa mobil programlarınıdamı yapar. İkisini de yapar mı?

Bilgisayar Mühendisleri
Here is the website inspired me to use 
it as a guide when I tried to define 
myself as an engineer candidate a few 
years ago. It really helped me to work
 and study feeling in confidence with 
being on the right way. I suggest this 
website to whom it may direct her/his 
to find the right career path. It 
includes many articles varies from 
real life experiences to detailed 
software engineering issues. But the 
most dignified parts for me are the 
articles in general and career titles.
Son okunan makaleler:
Online Java Dersleri - Polimorfizm
Türkiye'de Bilgisayar Mühendisliğinin Durumu? Bilg. Mühendisliğinin bugünü ve geleceği
Türkiye'de Bilgisayar Mühendisliğinin Durumu? Bilg. Mühendisliğinin bugünü ve geleceği
Türkiye'de Bilgisayar Mühendisliğinin Durumu? Bilg. Mühendisliğinin bugünü ve geleceği
Türkiye'de Bilgisayar Mühendisliğinin Durumu? Bilg. Mühendisliğinin bugünü ve geleceği
Türkiye'de Bilgisayar Mühendisliğinin Durumu? Bilg. Mühendisliğinin bugünü ve geleceği
Türkiye'de Bilgisayar Mühendisliğinin Durumu? Bilg. Mühendisliğinin bugünü ve geleceği
Türkiye'de Bilgisayar Mühendisliğinin Durumu? Bilg. Mühendisliğinin bugünü ve geleceği
CSS Dersleri - CSS Nedir
VNC Nedir? (Virtual Network Computing)
Java Nedir
YAZ TATİLİNDE YAN GELİP YATMAK
Askerlik ve Bilgisayar Mühendisliği
34 yaşındaki Türk, sitesini 100 milyon $’a Google’a sattı
MODEM ÇEŞİTLERİ
İyi bir yazılımcı olmak için yapılması gerekenler
Bilgisayar Mühendisliği Hakkındaki 10 Büyük Yalan!
Üniversitelerin akademik yayın karşılaştırması
Bilgisayar Mühendisliği Hakkındaki 10 Büyük Yalan!
Türkiye'de Bilgisayar Mühendisliğinin Durumu? Bilg. Mühendisliğinin bugünü ve geleceği

Bilgisayar Mühendisleri Portalı

Online Java Dersleri - Polimorfizm

 
BÖLÜM 6
 
Altuğ B. Altıntaş
© 2004
Polimorfizm
Polimorfizm, nesneye yönelik programlamanın önemli kavramlarından biridir ve sözlük anlamı olarak "bir çok şekil" anlamına gelmektedir. Polimorfizm ile kalıtım konusu iç içedir. Kalıtım konusunu geçen bölüm incelenmişti; kalıtım konusunda iki taraf bulunmaktadır, ana sınıf ve bu sınıftan türeyen alt sınıf/sınıflar. )
6.1. Detaylar
Alt sınıf, türetildiği ana sınıfa ait tüm özellikleri alır; yani, ana sınıf ne yapıyorsa türetilen alt sınıfta bu işlemlerin aynısını yapabilir ama türetilen alt sınıfların kendilerine ait bir çok yeni özelliği de olabilir. Ayrıca türetilen alt sınıfa ait nesnenin, ana sınıf tipindeki referansa bağlamanın yukarı doğru (upcasting) işlemi olduğu geçen bölüm incelenmişti. Burada anlatılanları bir örnek üzerinde açıklarsak; ()
Örnek:PolimorfizmOrnekBir.java ()
 
class Asker {
 public void selamVer() {
      System.out.println("Asker Selam verdi");
 }
} 
 
class Er extends Asker {
 public void selamVer() {
      System.out.println("Er Selam verdi");
 }
}
 
class Yuzbasi extends Asker {
 public void selamVer() {
      System.out.println("Yuzbasi Selam verdi");
 }
}
 
public class PolimorfizmOrnekBir {
 public static void hazirOl(Asker a) {
      a.selamVer(); // ! Dikkat !
 }
 
 public static void main(String args[]) {
      Asker a = new Asker();
      Er e = new Er();
      Yuzbasi y = new Yuzbasi();
      hazirOl(a); // yukarı cevirim ! yok !
      hazirOl(e); // yukarı cevirim (upcasting) 
     hazirOl(y); // yukarı cevirim (upcasting)
 }
}
 
Yukarıdaki örnekte üç  kavram mevcuttur, bunlardan biri yukarı çevirim (upcasting) diğeri polimorfizm ve son olarak da geç bağlama (late binding). Şimdi yukarı çevirim ve polimorfizm kavramlarını açıklayalım. Bu örneğimizde ana sınıf Asker sınıfıdır; bu sınıfdan türeyen sınıflar ise Er ve Yuzbasi sınıflarıdır. Bu ilişki "bir" ilişkisidir ; ()
·       Er bir Askerdir, veya 
·       Yüzbası bir Askerdir, diyebiliriz. 
Yani Askersınıfının yaptığı her işi Er sınıfı veya Yuzbasi sınıfı da yapabilir artı türetilen bu iki sınıf kendisine has özellikler taşıyabilir, Asker sınıfı ile Er ve Yuzbasi sınıflarının arasında kalıtımsal bir ilişki bulunmasından dolayı, Asker tipinde parametre kabul eden hazirOl()yordamına Er ve Yuzbasi tipindeki referansları paslayabildik, bu özelliğinde yukarı çevirim (upcasting) olduğunu geçen bölüm incelenmişti. ()
Polimorfizm ise hazirOl()yordamının içerisinde gizlidir. Bu yordamın (method) içerisinde Asker tipinde olan a referansı kendisine gelen 2 değişik nesneye (Er ve Yuzbasi) bağlanabildi; bunlardan biri Er diğeri ise Yuzbasi’dır. Peki bu yordamın içerisinde neler olmaktadır? Sırası ile açıklarsak; ilk önce Asker nesnesine bağlı Asker tipindeki referansı, hazirOl()yordamına parametre olarak gönderiyoruz, burada herhangi bir terslik yoktur çünkü hazirOl()yordamı zaten Asker tipinde parametre kabul etmektedir. ()
Burada dikkat edilmesi gereken husus, hazirOl() yordamının içerisinde Asker tipindeki yerel a değişkenimizin, kendi tipinden başka nesnelere de (Er ve Yuzbasi) bağlanabilmesidir; yani, Asker tipindeki yerel a değişkeni bir çok şekle girmiş bulunmaktadır. Aşağıdaki ifadelerin hepsi doğrudur: ()
·       Asker a = new Asker() ;
·       Asker a = new Er();
·       Asker a = new Yuzbasi();
Yukarıdaki ifadelere, Asker tipindeki adeğişkenin açısından bakarsak, bu değişkenin bir çok nesneye bağlanabildiğini görürüz, bu özellik polimorfizm 'dir -ki bu özelliğin temelinde kalıtım (inheritance) yatar. Şimdi sıra geç bağlama (late binding) özelliğinin açıklanmasında.... ()
6.2.Geç Bağlama (Late Binding)
Polimorfizm olmadan, geç bağlamadan bahsedilemez bile, polimorfizm ve geç bağlama (late binding) bir elmanın iki yarısı gibidir. Şimdi kaldığımız yerden devam ediyoruz, Er nesnesine bağlı  Er tipindeki referansımızı (e) hazirOl() yordamına parametre olarak gönderiyoruz. ()
Gösterim-6.1:
hazirOl(e); // yukari dogru cevirim (upcasting)
Bu size ilk başta hata olarak gelebilir, ama arada kalıtım ilişkisinden dolayı (Er bir Askerdir) nesneye yönelik programlama çerçevesinde  bu olay doğrudur. En önemli kısım geliyor; şimdi, hangi nesnesin selamVer() yordamı çağrılacaktır? Asker nesnesinin mi? Yoksa Er nesnesinin mi ? Cevap: Er nesnesinin selamVer() yordamı çağrılacaktır. Çünkü Asker tipindeki yerel değişken (a) Er nesnesine bağlanmıştır. Eğer Er nesnesinin selamVer() yordamı olmasaydı o zaman Asker nesnesine ait olan selamVer()yordamı çağrılacaktı fakat Er sınıfının içerisinde, ana sınıfa ait olan (Asker sınıfı)selamVer() yordamı iptal edildiğinden (override) dolayı, Java,  Er nesnesinin selamVer()yordamını çağırılacaktır. Peki hangi nesnesininselamVer()yordamının çağrılacağı ne zaman belli olur? Derleme anında mı  (compile-time)? Yoksa çalışma anında mı (run-time)? Cevap; çalışma anında (run-time). Bunun sebebi, derleme anında hazirOl()yordamına  hangi tür nesneye ait referansın gönderileceğinin belli olmamasıdır. ()
Son olarak,  Yuzbasi nesnesine bağlı  Yuzbasi tipindeki referansımızı hazirOl() yordamına parametre olarak gönderiyoruz. Artık bu bize şaşırtıcı gelmiyor... devam ediyoruz. Peki şimdi hangi nesneye ait selamVer() yordamı çağrılır? Asker nesnesinin mi? Yoksa Yuzbasi nesnesinin mi? Cevap Yuzbasi nesnesine ait olan selamVer() yordamının çağrılacağıdır çünkü Asker tipindeki yerel değişkenimiz heap alanındaki Yuzbasi nesnesine bağlıdır ve selamVer() yordamı Yuzbasi sınıfının içerisinde iptal edilmiştir (override). Eğer selamVer() yordamı Yuzbasi sınıfının içerisinde iptal edilmeseydi o zaman Asker sınıfına ait (ana sınıf)selamVer() yordamı çağrılacaktı. Aynı şekilde Java hangi nesnenin selamVer() yordamının çağrılacağına çalışma-anında (run-time) da karar verecektir yani geç bağlama özelliği devreye girmiş olacaktır. Eğer bir yordamın hangi nesneye ait olduğu çalışma anında belli oluyorsa bu olaya geç bağlama (late-binding) denir. Bu olayın tam tersi ise erken bağlamadır (early binding); yani, hangi nesnenin hangi yordamının çağrılacağı derleme anında bilinmesi. Bu örneğimiz çok fazla basit olduğu için, "Niye !  derleme anında hangi sınıf tipindeki referansın hazirOl()yordamına paslandığını bilemeyelim ki, çok kolay, önce Asker sınıfına ait bir referans sonra Er sınıfına ait bir referans ve en son olarak da Yuzbasi sınıfına ait bir referans bu yordama parametre olarak gönderiliyor işte..." diyebilirsiniz ama aşağıdaki örneğimiz için aynı şeyi söylemeniz bu kadar kolay olmayacaktır ()
 
Örnek: PolimorfizmOrnekIki.java ()
 
class Hayvan {
 public void avYakala() {
      System.out.println("Hayvan avYakala");
 }
}
 
class Kartal extends Hayvan {
 public void avYakala() {
      System.out.println("Kartal avYakala");
 }
}
 
class Timsah extends Hayvan{
 public void avYakala() {
      System.out.println("Timsah avYakala");
 }
}
 
public class PolimorfizmOrnekIki {
  public static Hayvan rasgeleSec() {
      int sec = ( (int) (Math.random() *3) ) ;
      Hayvan h = null ;
      if (sec == 0) h = new Hayvan();
      if (sec == 1) h = new Kartal();
      if (sec == 2) h = new Timsah();
      return h;
 }
  public static void main(String args[]) {
      Hayvan[] h = new Hayvan[3];
      // diziyi doldur
      for (int i = 0 ; i < 3 ; i++) {
       h[i] = rasgeleSec(); //upcasting
      }
      // dizi elemanlarini ekrana bas
      for (int j = 0 ; j < 3 ; j++) {
       h[j].avYakala(); // !Dikkat!
      }
 } 
}
 
 Yukarıdaki örnekte bulunan kalıtım (inheritance) ilişkisini, UML diyagramında gösterirsek:
Şekil-6.1. Kalıtım, Polimorfizm ve Geç Bağlama
PolimorfizmOrnekIki.java örneğimizde rasgeleSec()yordamı, rasgele Hayvan nesneleri oluşturup geri döndürmektedir. Geri döndürülen bu Hayvan nesneleri, Hayvan tipindeki dizi içerisine atılmaktadır. Hayvan dizisine atılan Kartal ve Timsah nesnelerine Java’nın kızmamasındaki sebep kalıtımdır. Kartal bir Hayvan'dır diyebiliyoruz aynı şekilde Timsah bir Hayvandır diyebiliyoruz; olaylara bu açıdan bakarsak Hayvan tipindeki dizi içerisine eleman atarken yukarı çevirim (upcasting) olduğunu fark edilir. ()
Geç bağlama ise, Hayvan dizisinin içerisindeki elemanlara ait avYakala() yordamını çağırırken karşımıza çıkar. Buradaki ilginç nokta hangi nesnenin avYakala() yordamının çağrılacağının derleme anında (compile-time) bilinemiyor olmasıdır. Nasıl yani diyenler için konuyu biraz daha açalım. rasgeleSec() yordamını incelersek, Math.random() yordamının her seferinde 0 ile 2 arasında rasgele sayılar ürettiği görülür. Bu üretilen sayılar doğrultusunda Hayvan nesnesi Kartal nesnesi veya Timsah nesnesi döndürülebilir; bu sebepten dolayı uygulamamızı her çalıştırdığımızda Hayvan tipindeki dizinin içerisine değişik tipteki nesnelerin, değişik sırada olabilecekleri görülür. Örneğin PolimorfizmIki uygulamamızı üç kere üst üste çalıştırıp çıkan sonuçları inceleyelim; Uygulamamızı  çalıştırıyorum. ()        
 
Gösterim-6.2:
java  PolimorfizmIki 
Uygulamanın çıktısı aşağıdaki gibidir;
 
Kartal avYakala
Hayvan avYakala
Kartal avYakala
Aynı uygulamamızı tekrardan çalıştırıyorum;
Timsah avYakala
Timsah avYakala
Hayvan avYakala
Tekrar çalıştırıyorum;
Timsah avYakala
Hayvan avYakala
Kartal avYakala
 
Görüldüğü üzere dizi içerisindeki elemanlar her sefersinde farklı  olabilmektedir, dizi içerisindeki elemanlar ancak çalışma anında (runtime) belli oluyorlar. h[j].avYakala()derken, derleme anında (compile-time) hangi nesnenin avYakala() yordamının çağrılacağını Java tarafından bilinemez, bu olay ancak çalışma anında (run-time) bilinebilir. Geç bağlama özelliği bu noktada karşımıza çıkar. Geç bağlamanın (late-binding) diğer isimleri, dinamik bağlama (dynamic-binding) veya çalışma anında bağlamadır. (runtime-binding). ()
6.3. Final ve Geç Bağlama
5. bölümde, finalözelliğinin kullanılmasının iki sebebi olabileceğini belirtmiştik. Bunlardan bir tanesi tasarım diğeri ise verimliliktir. Verimlilik konusu geç bağlama (late binding) özelliği ile aydınlamış bulunmaktadır, şöyle ki, eğer biz bir sınıfı final yaparsak, bu sınıfa ait tüm yordamları final yapmış oluruz veya eğer istersek tek başına bir yordamı da final yapabiliriz. Bir yordamı final yaparak şunu demiş oluruz, bu yordam, türetilmiş olan alt sınıfların içerisindeki diğer yordamlar tarafından iptal edilemesin (override) Eğer bir yordam iptal edilemezse o zaman geç bağlama (late binding) özelliği de ortadan kalkar. ()
Uygulama içerisinde herhangi bir nesneye ait  normal bir yordam  (final olmayan) çağrıldığında, Java, acaba doğru nesnenin uygun yordam mu çağrılıyor diye bir kontrol yapar, daha doğrusu geç bağlamaya (late-binding) ihtiyaç var mı kontrolü yapılır. Örneğin Kedi sınıfını göz önüne alalım. Kedi sınıfı final olmadığından dolayı bu sınıftan türetilme yapabiliriz. ()
 Örnek: KediKaplan.java  ()
 
class Kedi {
      
    public void yakalaAv() {
       System.out.println("Kedi sinifi Av yakaladi");
    }
      
}
 
class Kaplan extends Kedi {
 
 public static void goster(Kedi k) {
      k.yakalaAv(); 
  }
 
 public void yakalaAv() {
       System.out.println("Kaplan sinifi Av yakaladi");
 }
 
 public static void main(String args[] ) {
       Kedi k = new Kedi() ;
       Kaplan kp = new Kaplan();
       goster(k); 
        goster(kp); // yukari dogru cevirim (upcasting)       
 } 
}
 
Kaplan sınıfına ait statik bir yordam olan goster()  yordamının içerisinde Kedi tipindeki kyerel değişkene bağlı olan nesnenin, yakalaAv() yordamı çağrılmaktadır ama hangi nesnenin yakalaAv() yordamı? Kedi nesnesine ait olan mı? Yoksa Kaplan nesne
Bu makaleyi beğendin mi? Yorumunu Yaz!







Sizden Gelen Yorumlar:

Yorum Yazın

biri(25.11.2010 16:16:56)
çok yararlı paylaşımlar ayrıca çok teşekkür ederim.
%61 %11 %29
Katılıyorum Çekimserim Katılmıyorum



Abdulkadir(15.9.2010 13:32:44)
Elinize saglik
%67 %13 %20
Katılıyorum Çekimserim Katılmıyorum



smtha(31.5.2010 08:02:16)
Çok güzell teşekkürler
%64 %20 %16
Katılıyorum Çekimserim Katılmıyorum



cücü :)(5.1.2010 20:54:26)
çok begendimm abiiii eywallahh gurban olurumm senaaa beynnn :)) heheee
%62 %10 %28
Katılıyorum Çekimserim Katılmıyorum





Yazılan yorumlar tek sayfaya sığmadı. Daha fazlasını okumak için aşağıda sayfa numarasına tıklayın:
1   > 2 

Copyright© 2001-2018. Bilgisayar Mühendisleri Portalı | Bütün hakları saklıdır.