• Java/JSP 31.07.2008 No Comments

    /*<applet code=”ImageMenu” width=150 height=180 hspace=0 vspace=0>
    <param name=”img” value=”MENU.jpg”>
    <param name=”urlPrefix”
    value=”http://www.programlama.ustasi.com/”>
    <param name=”urlList”
    value=”MYSELF/index+HOME/index+LESSONS+EXAMPLES/index+SITE_MAP+LINKS”>
    <param name=”targetList”
    value=”_self+_self+_self+_self+_self+_self”>
    <param name=”urlSuffix” value=”.html”>
    </applet>
    */

    import java.awt.* ;
    import java.awt.event.*;
    import java.applet.*;
    import java.util.*;
    import java.net.*;

    public class ImageMenu extends Applet {
    Dimension d;

    Image img, off;
    Graphics offg;
    int MAXITEMS = 64;
    String url[] = new String[MAXITEMS];
    String target[] = new String[MAXITEMS];
    String urlPrefix, urlSuffix;
    int selectedCell = -1;
    int oldCell = -1;
    int cellH;
    int cells;

    public void init() {
    d = getSize();
    urlPrefix = getParameter(”urlPrefix”);
    urlSuffix = getParameter(”urlSuffix”);
    StringTokenizer st;
    st = new StringTokenizer(getParameter(”urlList”), “+”);
    int i=0;
    while(st.hasMoreTokens() && i < MAXITEMS)
    url[i++] = st.nextToken();
    cells = i;
    cellH = d.height/cells;
    st = new StringTokenizer(getParameter(”targetList”), “+”);
    i=0;
    while(st.hasMoreTokens() && i < MAXITEMS)
    target[i++] = st.nextToken();
    addMouseListener(new MyMouseAdapter());
    addMouseMotionListener(new MyMouseMotionAdapter());
    }

    private void lateInit() {
    off = createImage(d.width, d.height);
    try {
    img = getImage(getDocumentBase(), getParameter(”img”));
    MediaTracker t = new MediaTracker(this);
    t.addImage(img, 0);
    t.waitForID(0);
    } catch(Exception e) {
    showStatus(”error: ” + e);
    }
    }

    public void update(Graphics g) {}
    public void paint(Graphics g) {
    if(off == null)
    lateInit();

    offg = off.getGraphics();
    offg.drawImage(img, 0, 0, this);
    if (selectedCell >= 0) {
    offg.clipRect(0, selectedCell * cellH, d.width, cellH);
    offg.drawImage(img, -d.width, 0, this);
    }
    g.drawImage(off, 0, 0, this);
    }

    class MyMouseMotionAdapter extends MouseMotionAdapter {
    public void mouseDragged(MouseEvent me) {
    mouseMoved(me);
    }
    public void mouseMoved(MouseEvent me) {
    int y = me.getY();
    selectedCell = (int)(y/(double)d.height*cells);
    if (selectedCell != oldCell) {
    paint(getGraphics());
    showStatus(urlPrefix + url[selectedCell] + urlSuffix);
    oldCell = selectedCell;
    }
    }
    }

    class MyMouseAdapter extends MouseAdapter {
    public void mouseExited(MouseEvent me) {
    selectedCell = oldCell = -1;
    paint(getGraphics());
    showStatus(”");
    }

    public void mouseReleased(MouseEvent me) {
    URL u = null;
    try {
    u = new URL(urlPrefix + url[selectedCell] + urlSuffix);
    } catch(Exception e) {
    showStatus(”error: ” + e);
    }
    if (me.isShiftDown())
    getAppletContext().showDocument(u, “_blank”);
    else
    getAppletContext().showDocument(u, target[selectedCell]);
    }
    }
    }

  • Java/JSP 31.07.2008 1 Comment

    Java neden iyidir ? - 1
    • Küçük cihazlardan büyük sistemlere kadar birçok
    ortamda çalışır.
    • Akıllı kartlarda (Smart cards)
    • Gömülü cihazlarda (JStamp),
    • Cep telefonlarında (Nokia, Ericsson, Motorola, .. vb),
    • PDA (Palm, Symbian, Sharp),
    • Diz üstü bilgisayarda, masaüstü bilgisayarlarda (MacOS,
    Linux, Windows)
    • Sunucularda (Unix, Linux)
    • Kesintisizi sunucularda (non stop servers) (Tandem)
    • Büyük bilgisayarlarda (Mainframes) ( IBM )

    • Satıcı bağımsızlığı
    • .NET bir pazarlama programıdır. Java pazarın kendisidir.
    – James Gosling
    • Java teknolojileri birçok satıcı tarafından
    desteklenmektedir.
    • Örneğin “Java Mesajlaşma Servisi (JMS) “
    IBM, SpiritSoft , Fiorina , Swift , Open3 , JBoss gibi
    çeşitli satıcılar tarafından desteklenmektedir.
    • Bunun anlamı özgürlüktür. Yani siz tek satır kod
    değiştirmeden, istediğiniz satıcının “Java Mesajlaşma
    Servisini (JMS)” kullanabilirsiniz”
    • Peki bu özgürlüğün aynısı Microsoft ürünleri için geçerli
    midir ?
    Java neden iyidir ? - 2

    • Açık Toplum Süreci (Open Community Process)
    • Java Toplum Süreci – JCP – (Java Community Process –
    www.jcp.org ) , satıcılara, organizasyonlara ve bireylere Java
    teknolojilerinin geleceğine katkıda bulunmak için bir ortam sunar.
    • JCP ‘de bir çok konu bulunur.
    – Real-time Specification for Java
    – Mobile Game API
    – JavaTM 3D API 1.4
    – …..
    • JCP herkes üye olabilir.
    • Örneğin Mobile Game API de olması gereken özellikler veya
    olmaması gereken özellikler burada oylanarak bir sonuca varılır.
    • Bu sonuç, belirtime (specification) dönüştürülür.
    • Son olarakta bu belirtime (specification) sadık kalınarak çeşitli
    üreticiler tarafından gerçekleştirilerek piyasaya sunulur.
    • Bu belirtimlere sadık kalınmadan ilgili ürün üretilirse hukuki bir suç
    işlenmis olur.
    Java neden iyidir ? - 3

    • Gerekli ortamın daha ufak olması.
    • Java uygulamalarını çalıştırmak için gerekli olan
    JRE’in (Java Runtime Environment) boyutu 8 MB’dır.
    • .NET uygulamalarını çalıştırmak için gerekli olan
    ortamın (.NET Runtime Environment ) boyutu ise 23.1
    MB’dır.
    • Binlerce makinanın bulunduğu bir şirkette, bu
    ortamların güncel sürümlerini tüm makinalara
    yüklemek istersek, ortamın boyutu ciddi sorunlar
    oluşturabilir.
    Java neden iyidir ? - 4

    • Ticari kalitedeki IDE ‘lerin (Integrated
    Development Environment ) fiyatları
    • Eclipse ve NetBeans IDE’leri ne tür yazılım (ticari
    / akademik) geliştirirseniz geliştirin bedavadır.
    • JBuilder and JDeveloper IDE’leri akademik
    yazılım projeleri için bedavadır.
    • Visual Studio.NET fiyatı ise 500$ civarlarındadır.
    Java neden iyidir ? - 5

    • Gelecek Güvencesi - 1
    • Java gelecek sürümlere uyumluluktan öte gelecek güvencesi
    verir.
    • İspat : 1997 yılında yazılan bir program, bügün tüm VM’lerin
    (Sanal Makina – Virtual Machine) üzerinde sorunsuz bir
    şekilde çalışır.
    • Fakat aynı güvence Microsoft teknolojileri için söylenemez
    (bkz .NET)
    • Canlı bir örnek olarak VB 6’ya olan desteğin kesilmeseni
    gösterebiliriz.
    • DNA, Microsoft’un iptalinden önce kaç sene piyasa da kaldı ?
    Java neden iyidir ? - 6

    • Gelecek Güvencesi - 2
    • Java’nın eski sürümlerini (Java 1.0.2 ye kadar) Sun Microsystems’in
    sitesinden indirebilirsiniz.
    • Peki Microsoft, Visual C++ ‘ın eski sürümlerini size verebiliyor mu ?
    Para verseniz bile bu eski sürümleri Microsoft’dan temin edemezseniz.
    • Örnek :
    • Visual Studio .NET 2003, sadece .NET 1.1 sürümünde çalışacak olan
    kodu üretir.
    • Visual Studio .NET 2002 ise sadece .NET 1.0 sürümünde çalışacak
    olan kodu üretiyor.
    • Yani kısacası siz .NET 1.1 sürümünü kurup Visual Studio.NET 2002 ile
    uygulama geliştiremezsiniz.
    • Eğer geliştirtirmeye kalkarsanız Visual Studio.NET 2002 ürününü
    sizden güncellemenizi isteyecektir.
    Java neden iyidir ? - 7

    • Google ve Kaynak olanakları
    • İşte sonuçlar (19.05.2004 tarihinde yapılan
    arama)
    • Java , 71,100,000
    • C# , 4,750,000
    • Visual basic , 5,270,000
    • Arama sonuçları Java’nın Visual Basic
    ‘den bile daha önde olduğunu
    göstermektedir.
    Java neden iyidir ? - 8

    • Diğer Programlama Dilleri ile Uyum
    • Java, diğer programlama dilleri ile uyumlu bir şekilde çalışır.
    Örneğin Perl, PHP veya Python ile;
    • Kısacası PHP Script’lerini alıp Java ile konuşturup Linux
    üzerinde koşturabilirim. Görünenin aksine bu iş sanıldığı kadar
    zor değildir.
    • Bu iş yerel kütüphaneler (native libraries ) ile standart arabilirim
    arasındaki uyumun sonucudur. (Ör : JNI – Java Native
    Interface) .
    • JNI dışında JSR-223 belirtiminide diğer diller ile ortak
    konuşmayı sağlamaya yöneliktir.
    http://www.jcp.org/en/jsr/detail?id=223
    Java neden iyidir ? - 9

    • Java ve Depolanmış İşlemler (Stored
    Procedures)
    • Java‘yı kullanarak Oracle, DB2 ve Sybase için depolanmış
    işlem yazabilirsiniz.
    • Bunun için Oracle, DB2, Sybase ve Informix tarafından
    desteklenen SQLJ kullanılabilir.
    • .NET ortamında deponlamış işlem yazmak için TSQL
    kullanmanız gerekli. TSQL, C# veya VB.NET’ den çok farklı bir
    yazılım şekline sahiptir.
    Java neden iyidir ? - 10

    • Milyonlarca Java uyumlu cep telefonu…
    • Bugün yaklaşık 250 milyon adet Java uyumlu cep telefonu piyasaya
    sürülmüştür.
    – 250 milyon adet Java uyumlu cep telefonu
    – Bu telefonlar üreten 31 adet üretici
    – 77 operatör ile Java bu sektörün lideridir.
    – Bkz:
    http://www.microjava.com/articles/pe…ontent_id=3811
    • Bunun karşılık .NET ortamında çalışan cep telefonu bulmak çok
    zordur.
    Java neden iyidir ? - 11

    • Milyonlarca Java uyumlu cep telefonu… -2
    Java neden iyidir ? - 12

    • Büyük Yazılım Projelerinin %75 Java ile
    Geliştiriliyor.
    • Avrupa Finansal Enstitüsü yaptığı araştırmada büyük yazılım
    projelerinin %75 inin Java teknolojileri kullanılarak geliştirildiği
    ortaya çıkmıştır.
    • Bir başka ankette bu sonuçları doğruluyor.
    http://www.sdtimes.com/news/092/story5.htm
    • Büyük projelerde en fazla kullanılan uygulama sunucuları
    (Application Server) ise IBM ve BEA fırmalarına ait.
    Java neden iyidir ? - 13

    • Akademisyenlerin ve Araştırmacıların Bakış Açısı
    • Java teknolojileri sadece üniversitelerde öğretilen bir ders
    değildir.
    • Java teknolojileri birçok araştırma ve geliştirme çalışmalarında
    yoğun olarak kullanılmaktadır ve desteklenmektedir.
    • UC Berkeley, Matt Welsh tarafından yapılan çalışmalar sonucu
    Yeni I/O sistemi Java 1.4 sürümüne dahil edildi.
    • Güney Avustralya Üniversitesi tarafından Java 1.5 ‘de gelecek
    olan “Generic Java Language Extension” özelliği geliştirildi.
    • Bunun yanı sıra CERN ve HEP gibi araştırma organizasyonları
    kullanıcılar için Java projeleri geliştirip sunmaktadırlar.
    Java neden iyidir ? - 14

    • Java’da Zorunlu güncelleme ücreti yoktur.
    • Sizce kaç tane Yönetim Bilgi Sistemi fırması, Microsoft’un
    lisans ücreti politıkası yüzünden mağdur durumdadır ?
    • Google ‘dan “how to avoid Microsoft’s license 6″
    şeklinde aratırsanız bu firmaların hiçde az olmadığını
    anlarsınız.
    • .NET bedava ama .NET kullanmak için Windows işletim
    sistemine ihtiyaç duyarsınız. Bunun anlamı lisanslanmanız
    gerektiğidir.
    Java neden iyidir ? - 15

    • Paralel sistemlerde ucuz fiyat
    • Google‘ın başarılı olmasında ki sebep nedir ?
    • Bu başarının sebeplerinden biri çokta maliyetli olmayan 10.000
    adet sunucunun paralel bir şekilde çalışmasıdır.
    • Yeni uygulama, tek ve güçlü bir sunucu almaktansa, ucuz ama
    bir çok sunucu alıp bunları paralel bir şekilde çalıştırmak.
    • Diyelim ki sizde bir çok sunucu aldınız ve .NET ortamında bir
    proje geliştiriyorsunuz, bu durumda sizin lisanslanmanız
    ortamda çalışan her bir sunucu başına olur.
    • Google‘ın böyle bişey yaptığını düşünebiliyor musunuz ? 10.000
    adet ufak sunucunun her biri için lisans ücreti vermek büyük
    ihtimalle onları iflas ettirirdi.
    • Java teknolojilerinde ise sizin iş modeliniz nasılsa, ona göre bir
    çözüm bulabilirsiniz.
    Java neden iyidir ? - 16

    Java neden iyidir ? – 17
    Sourceforge.net Projeler ve Programlama Dilleri

    67 projects Eiffel
    77 projects Ada
    283 projects Ruby
    778 projects TCL
    1,259 projects C#
    1,612 projects Javascript
    2,999 projects Python
    5,317 projects Perl
    8,437 projects PHP
    11,203 projects Java
    12,762 projects C
    12,765 projects C++
    Java neden iyidir ? – 18
    Sourceforge.net Projeler ve Programlama Dilleri

    Java neden iyidir ? – 19
    İş bulma konusu
    Kaynak : www.dice.com, 2004/02/18
    • Ada 121
    • C# 911
    • C++ 3565
    • Java 5060
    • Perl 1702
    • PHP 131
    • Python 110
    • SQL 6315
    • VB 2349

    Java neden iyidir ? - 20
    • Yüksek Maaş
    • Ortalamada Java programcısı, Visual Basic programcısına göre
    daha fazla maaş almaktadır (çalışma yıl tecrübesi aynı).
    • Bunun sebebi Java teknolojileri ile geliştirilen projelerin yüksek
    bütçeli olması değildir.
    • Bunun sebebi kabaca Java teknoloji ile geliştirilen projelerin
    başarısının, kiralanan / çalıştırılan adam sayısı ile orantılı
    olmasıdır.
    http://www.fawcette.com/javapro/2002_06/
    magazine/features/salarysurvey/
    http://www.fawcette.com/vsm/2003_06/ma
    gazine/features/salarysurvey/

    Java neden iyidir ? - 20
    • Türkiye’nin Geleceği
    • Türkiye‘nin yazılım sektöründe yükselebilmesinin tek
    yolu bağımsız teknolojiler kullanmasından geçer.
    • Özgürce teknoloji üretmek için kesin olarak Java
    teknolojilerini kullanamanız gerekmez.
    • Ama .NET kullanmamamız gerektiğide ortadır.
    • VB veya .NET ile geliştirilen ürünlerin satılması güzel
    bir olay olabilir ama her zaman için Microsoft’a bir
    bağımlılık söz konusudur.
    • Bağımsız teknolojiler kullanarak üretim yapıp
    Türkiye’nin kaynaklarının yurt dışına gitmesini
    engellemek hepimizin başlıca görevi olmalıdır.
    • Kısacası üretmeliyiz ama özgürce…

    Java Basittir.
    Java, kendisine yakın güçteki dillerin en basitidir. Örneğin, Java model olarak aldığı C++’tan çok daha kolaydır. C++’ın çok güçlü bir dil olduğu tartışılmaz. Ama C++ ve C# çoğu bir dilde bulunması çok da şart olmayan karmaşık bir çok özellik içermektededir. Bütün bu özelliklerin öğrenilmesi çok zaman alır. Oysa Java gereksiz çok fazla özellik içermez. Ve Java’da bir özelliğin öğrenilmesi ve kullanılması çok kolaydır. Başka dillerde çok zor yazılan işlemler Java’da çok basit ifadelerle gerçekleştirilebilmektedir.
    Java’nin basitliği yanlış anlaşılmamalıdır. VisualBasic/ASP, Delphi/Pascal, Perl, PHP gibi dillerden ve ortamlardan daha basit değildir. Bu sayılan diller çok kolay öğrenilebilen, kısa zamanda yeterli düzeye ulaşılabilen dillerdir. Ancak bu dillerde yapılabileceklerin belli bir sınırı vardır. Bu dillerde büyük çaplı ve karmaşık işler yapamazsınız veya yapmanız durumda çok zorluk çekersiniz. Oysa Java programlamanın her dalında iddia sahibidir. Her geçen gün Java yeni bir alanda söz sahibi olmaktadır. Bu bağlamda ‘basit’ demek, ‘çok gelişmiş işlemlerin basit bir şekilde yapılabilmesini sağlayan’ demektir. Yoksa ‘programcı bunu anlamaz’ diye düşünülmesinden ötürü hiç bir özellik dışarda bırakılmamıştır.
    Java Nesneye Yöneliktir.
    Java tamamen (bazı kişilere göre %99) nesneye yönelik’tir. Diğer bazı diller gibi nesneye yöneliklik sonradan dile eklenmemiştir, başından beri Java’da bulunmaktadır. Bir Java programında olabilecek her şey ya nesnedir ya da bir nesnenin parçasıdır. Java nesneye yönelik programlamayı sadece mümkün değil aynı zamanda kolay kılmıştır. Java’da bir nesnenin yapılması, kullanılması, geliştirilmesi, başka bir yere aktarılaması çok kolaydır.
    Java Dağıtıktır.
    Java ‘dağıtık’ bir dildir. ‘Dağıtık’ birden fazla bilgisayarda çalışan programların bir biriyle uyumlu çalışabilmesidir. Bir yazılım parçasının bir kısmının bir makinede diğerinin başka makinede aynı anda çalışması mümkündür. Bu yüzden Internet’in dilinin Java olduğu söylenmektedir. Günümüzde tek bir makine üzerinde çalışan, başka hiç bir yerle bağlantısı olmayan uygulama kalmamış gibidir. Bir çok işletme Interenet üzerinden iş yapmaktadır. Bir çok işletmede birden fazla makine birbirine bağlı olarak çalışmaktadır. Bu yüzden Java dağıtık programlama için en uygun çözümlerden biridir.
    Java Sağlamdır.
    Java sağlam bir dildir. Programlamadaki hataların çoğu daha yazılma aşamasında anlaşılabilmektedir. Yazılma aşamasında anlaşılmayanlar, programın çalışması esnasında yakalanabilmektedir. Bir ‘exception’la, programda hatanın ne olduğu, nerede olduğu ve hangi işlemi yaparken olduğu bile belirtilebilmektedir. Başka dillerin aksine çalışma esnasında bir Java programı “Bir hata oldu!” deyip çökmez. Bir çok durumda hataya rağmen program çökmeden çalışmaya devam eder. Hata olması durumunda da programı çalıştıranlar hatayı ayrıntılarıyla öğrenme olanağına sahip olur.
    Java Güvenlidir.
    Java güvenli bir dildir. Java diliyle virüs yapılamaz. Hiç bir virüs bir Java programına bulaşamaz. Bir Java programının yaptığı her hareket takip edilir. Kötü niyetli bir program, bir işlemi eğer izin verilmediyse yapamaz. Bu özellik, Internet gibi herkesin başkasının makinesine erişebildiği bir ortmada çok önemlidir. Java’yı güvenlik gereksinimi yüksek bir çok firma bu yüzden tercih etmektedir.
    Mimarilere Yansızdır.
    Sıradan kullanıcıların bildiğinin aksine dünya üzerinde bir çok işletim sistemi vardır. Hatta kullanıcın çoğunun iyi bildiği Windows işletim sistemi bazı bilgisaya alanlarında hiç kullanılmaz. UNIX/Linux, Apple Mac, IBM’in çeşitli işletim sitemleri dünya işletim sistemi pazarında büyük yer tutmaktadır. Bir çok masaüstü kullanıcısının tek bildiği işletim sisteminin, bazı sektörlerde adı dahi geçmemektedir. Java’da yazılan bir program hemen hemen bütün işletim sistemlerinde hiç değiştirmeye gerek duymaksızın çalışır. Diğer dillerde bu özellik yoktur. Hatta Windows’un bir versiyonunda çalışan program diğer bir versiyonda çalışmayabilmekte, bazen makinenin çökmesi gibi büyük sonuçlar bile doğurabilmektedir. Windows’u üreten Microsoft firmasının yazdığı programlar bile kendilerinin işletim sistemlerinin bazılarında çalışmamaktadır. Kendilerinin yazdığı belgelerde hangi işletim sistemlerinin hangi versiyonlarında hangi programlarının çalışmadığını belirtilmektedir. Bu durum bütün işletim sistemi ve bütün programlar için geçerlidir. Ürettiği yazılımların her platformda çalışmasını isteyen firmalar giderek daha çok Java’ya yönelmektedir.
    Java Taşınabilirdir.
    Java programları her ortamda aynı veya benzer bir şekilde çalışır. Her ortam/makine için ayrı bir program yazmaya gerek kalmaz. Programcı programın çalışacağı makinenin durumunu göz önüne almak zorunda kalmaz. Bir programın görüntüsü çalıştığı hey yerde hemen hemen aynıdır. C programları da hemen hemen her işletim sisteminde yeniden derlenmek suretiyle çalışabilir. Ama programcı bunun için hazırlık yapmalıdır. Bir işletim siteminde tamsayı -2^15 ile 2^15 arasında değer alırken diğerinde -2^31 ile +2^31 arasında alabilir. Ama Java bu farkları programcıya şeffaf kılar. Programcı her işletim sistemi ve her sürüm için ayrı bir program yazmak zorunda kalmaz.
    Java Yorumlanır.
    Java ‘yorumlamalı’ bir dildir. Yani bir Java programının komutları, çalışırken makinenin anlayacağı formata çevrilir. Java’da bu Java Virtual Machine (JVM) tarafından yapılır. Bunun avantajı bir programın kullanıdığı standart kütüphanelerin programla birlikte taşınması zorunluluğunu ortadan kaldırmasındır. Bir yorumlayıcı herhangi bir ortamda varsa, bir dildeki standart her özellik o ortamda var demektir. Programla birlikte bu kütüphanelerin de taşınması gerekmez. Bu da bir Java programının bir makineden başka makineye indirilmesini çok hızlandırır. Çünkü sadece programcının yazdığı nesneler yolculuk yapar. Applet’lerin çalışma prensibi budur. Ana makinede bulunan applet, tarayıcı tarafından kullanıcının makinesine alınır ve çalıştırılır. Java ortamı, yani JVM tarayıcının içinde mevcutur.
    Java Yüksek Başarımlıdır.
    Diğer dillerde olmayan bir çok özelliğe sahip olmasına rağmen, Java’da bunun için fazla bir performans kaybı yoktur. Java’nın ilk versiyonlarında çalışan programlar diğer dillerde yazılan eşdeğerlerine göre elbette yavaştır. Ancak Java’nın gelişmesiyle birlikte Java bu farkı, üstün özelliklerinde vazgeçmek zorunda kalmaksızın kapatmaktadır. En son Java sürümüyle birlikte JIT (Just-In Time-Tam Zamanında Derleme) teknolojisi devreye girmiş bulunlaktadır. Bununla birlikte Java programları, diğer dillerde en iyi yazılmış programların hızını hemen hemen yakalayabilmektedir. Java yapılması ‘imkansız’ gibi görüneni çok da fazla performans kaybına yol açmadan yapar.
    Java’nın yavaşlığı en fazla eleştiri alan özelliklerden biridir. Bir programın hızlı çalışması, makinelerin hafıza veya işlemcisini terfi ettirerek çözülebilir. İşlemcinin ve hafızanın çok ucuzladığı günlerde, bu, bir işletme için pek fazla maddi bir yük değildir. Bir programcının sağlam, güvenli ve Java’nı sahip olduğu üstün özelliklere sahip program üretmesi daha fazla masraflıdır. Bir işletmenin, durup dururken bir programın makineyi çökertmesinden dolayı katlanacağı külfet az değildir. Programı yapanların bile hatayı anlamak için saatlerce bazen günlerce uğraşması işletmeye yine maliyet olarak yansıyacaktır. Bu kadar eleştiri almasına rağmen Java’nın giderek daha fazla yaygınlaşmasının elbette nedenleri vardır. Java’nın yavaşlığından sadece Java’yı bilmeyenler ve kullanmayanlar şikayet etmektedir. Ancak Java ‘hızla’ yayılmaktadır.
    Java Çok Kanallıdır.
    Java dili başından ‘çok kanallıdır’ (multi-threaded’dir). Çok kanallılık, bir programın aynı anda birden fazla işlemi yürütebilmesi demektir. Bir program herhangi bir şeyi beklerken arada başka bir işlemi gerçekleştirebilir. Beklenen olay gerçekleşince ilk işlem kaldığı yerden aynen devam ettirilir. Üstelik bunun için programcının fazla bir şey yapması da gerekmemektedir. Çok kanallılık bir çok dilde hiç yoktur. C++ gibi dillerde de dilin özelliği değil, ona sonradan eklenmiş kütüphanelerle kullanılabilmektedir. Ama Java’nın kendisi doğuştan çok kanallıdır. Bu yüzden çok kanallı program yapmak için en kolay dil Java’dır.
    Java Dinamiktir.
    Java’da bir programla kullandığı birimlerin (kütüphaneler,modüller veya sınıfların) birbirine bağlanması çalıştırma anında yapılır. Buna ’sonradan bağlama’ (late binding) denir. Kullanılan birimlerin iç yapısı değiştirildiğinde, bu birimleri kullanan programın değişmesi gerekmez. Yeter ki birimlerin dışarıdan çağırma şekilleri değişmesin. Oysa C++ gibi dillerde herhangi bir değişiklikte (bu bir modülün iç yapısında çağıranları ilgilendirmeyen çok ufak bir değişiklik bile olsa) herşeyin yeniden işleme tabi tutulması gerekir. Buna da ‘erken bağlama’ (early binding) denir. Java’da late-binding bu özellik olmasaydı, Java kütüphanlerindeki her hata düzeltme ve değişiklikte dünyadaki bütün programları yeniden işleme tabi tutmamız gerekirdi ki bu mümkün değildir.
    Sonuç
    Java iyi bir programlama dilidir. Giderek yaygınlaşması, diğer dillerin giderek Java’ya benzemeye başlaması ve taklitlerinin çıkması da bunu göstermektedir. Java’yı tercih etmeyenler elbette olmuştur ve olacaktır. Ama buzdolabının bile Java bildiği bu dönemde bu dili hiç bilmemek, tümüyle yok saymak bilgisayar alanında var olmak isteyen insanlar için büyük bir eksiklik olacaktır.

    Java Platform’u
    Java Platform’u
    Java sadece bir programlama dili değildir. Aynı zamanda bir yazılım platformudur. Java Platform’u işletim sistemi üzerinde çalışan, uygulamalara çok çeşitli servisler veren, bunu her işletim sistemi için standart bir biçimde başarabilen bir platformdur. Java Programlama Dili ise bu platform üzerinde yazılım geliştirmek için kullanılan programlama dilidir. O yüzden Java’yı öğrenmek sadece Java dilini öğrenmek demek değildir. Java platformu üzerinde çalışan farklı bir dil de üretilebilir. Ancak Java dilinin iyi bir programlama dili olması nedeniyle böyle bir ihtiyaç doğmamışır.
    Java platformunun yapısı, daha önce benzer bir platform olmaması nedeniyle, özellikle başka dillerle çalışmış insanlara karmaşık gelebilir. Ancak Java, diğer dillerdeki, özellikle de C/C++ dilindeki “çözümsüz” veya “çözümü zor” konulara pratik çözümler üretmiştir. O yüzden başka dillerle profesyonel programlama yapmış olan insanlar sık karşılaştıkları bir çok sorunun Java’da çok kolay çözülmüş olduğunu görebilmektedirler. Bu bölümde bir Java programının çalışma biçimini, öncellikle diğer dillerde yazılmış programların çalışma biçimlerini gözden geçirerek inceleyeceğiz.
    Derleme (Compilation) ve Yorumlama (Interpretation)

    Programalama dili, insanla makine (bilgisayar) arasında iletişim kurmak için kullanılan dildir. Başka bir deyişle programcı bilgisayara, özellikle de işlemciye istediklerini yaptırmak için bir dil kullanır. Bu dil konuşma diline yakın bir dil olmalıdır ki insanlar rahatça kullanabilsin. Bilgisayar işlemcisinin dili ise sadece sayılardan oluşur. Bilgisayarlar sayısal (dijital) aygıtlardır. İşlemciler sadece belli sayılarla ifade edilen makine kodlarından anlar. Bu kodlardan oluşan dile ‘makine dili’ denir, üretilen koda da ‘makine kodu’ (machine code) denir. Bilgisayarın ilk dönemlerinde insanlar programlarını sayı kodları kullanarak yazıyorlardı. Bu kodlar her işlemci türü için değişik olduğundan, yazılan programlar sadece belli bir işlemci ile çalışabiliyordu. Hatta bir işlemci sürümü için yazılan kod bir önceki sürümde çalışmayabiliyordu. Bu yüzden ‘programlama dili’ kavramı ortaya çıkmıştır. Bu yapıda, programcı bilgisayarın yapması gerekenleri ona, konuşma diline yakın bir dille söyler. Bu dilde yazılanlar makine diline çevrilir. Böylece programcılar, hem işlemciminin kendine komut kümesini öğrenmek zorunda kalmazlar; hem de yazdıkları programlar birden fazla işlemciyle çalışabilir.

    Programalama diliyle düz metin şekinde olan programa ‘kaynak kodu’ (source code) denir. Makine dilinde olan koda da “ikili kod” (binary code) denir. Programlama dilinden makine diline çevirme işi iki şekilde yapılabilir. Biri ‘anında’, ikincisi ‘önceden’. Anında çevirmek, programa dilindeki ifadeleri bir yandan okuyup bir yandan makine diline çevirmek demektir. Buna ‘yorumlama’ (interpretation) denir. Önceden çevirme ise, programlama dilindeki ifadelerin çalıştırılmadan önce makine diline çevrilmesi, sonra da çalıştırılması anlamına gelir. Buna da ‘derleme’ (compilation) denir. Derleme’nin faydası daha hızlı olmasıdır. Çünkü makine diline çevirme sadece ve sadece bir kere yapılmaktadır. Yorumlama da ise her çalıştırmada çevirme işlemi yapıldığından daha yavaştır. Derlemenin zararı da, programdaki her değişiklikte önce derlemeyi sonra çalıştırmayı gerekli kılmasıdır. Sık değişiklik yapılan durumlarda bu, programcı için ciddi bir sorundur. Oysa yorumlama anında olduğu için, değişiklik de anında etkili olmaktadır. Perl, Basic gibi diller yorumlamalı, C ve Pascal gibi diller de derlemeli dildir.
    JVM - Java Virtual Machine (Java Sanal Makinesi)
    Java’daki durum biraz daha karışıktır. Java hem ‘derlemeli’ bir dildir, hem de ‘yorumlamalı’. Java programlama diliyle yazılmış kaynak kodu, sanal bir işlemcinin anlayabileceği makine koduna çevrilir. Bu kod gerçek bir makine olmadığından ona makine kodu denmez. Ama programala dili gibi konuşma dilinde de olmadığından kaynak kodu da değildir. Bu ara dille yazılmış koda ‘bayt kod’ (bytecode) denir. Çünkü makine kodu gibi baytlardan oluşur. Yani kaynak kodu bayt koduna ‘derlenir’. Sanal işlemci bu bayt kodlarının makine koduna programın çalışması esnasında çevirir. Her işletim sistemi ve işlemci için ayrı bir sanal makine vardır. Java kaynak kodları Java derleyicisi tarafından bayt koda çevrilir. Üretilen bu kod bütün işlemciler için aynıdır. Her işletim sistemi ve işlemciye göre sanal makine, bu bayt kodu ilgili işlemcinin makine diline anında çevirir yani yorumlar. Bu sanal makineye Java Sanal Makinesi - Java Virtual Machine (JVM) denir.
    Şimdi teorik olarak anlattığımız sürecin, uygulamadaki bileşenlerini inceleyelim. Java platformunun programlama dili ‘Java’ dır. Bu dilde yazılmış kaynak kodları ‘.java’ uzantılı dosyalarda saklanır. “javac” adlı bir derleyici ile ikili koda çevrilir. İkili kod’lar ‘.class’ uzantılı dosyalarda saklanır. Bu dosyalar ‘java.exe’ adlı yorumlayıcı tarafından çalıştırılır. Java kaynak kodu herhangi bir metin düzenleyici ile yazılabilir. Java’nın derleyicisi ücretsiz olarak dağıtılmaktadır. Java’nın yorumlayıcısı (JVM)’de plug-in olarak yüklenebilmektedir. Bu plug-in de ücretsizdir. Ayrıca bilinen bütün tarayıcılar’ın bir JVM’i bulunmaktadır.
    Bir JVM içerinde çalışan Java application’u C ile yazılmış native kodu çağırabilir. Bu durumda performans’tan kazanılmakla birlikte platform bağımsızlığı kaybedilmiş olur. O yüzden bu, sadece çok hız gerektiren az sayıda işlem için kullanılabilir. Java’nın hızı giderek arttığından buna zamanla daha az ihtiyaç duyulmaktadır. Bir .exe programı da Java programlarının içerisinden çalıştırılabilir. Ancak bu durumda çalışan proses tamamen JVM’in dışında, aşağıdaki işletim sisteminin kontrolünde bulunur. Application’la veri alışverişi bulunmayan programları dışarıdan çağırmak için kullanılabilir.

  • Java/JSP 31.07.2008 No Comments

    Önce daha sonra kolaylikla kullanabilmek için birkaç degisken yaratalim :

    import java.io.*;

    public class SayiCevirici{

    public static final String[] birler={”",”bir”,”iki”,”uc”,”dort”,”bes”,”alti”,”y edi”,”sekiz”,”dokuz”};
    public static final String[] onlar={”",”on”,”yirmi”,”otuz”,”kirk”,”elli”,”atmis “,”yetmis”,”seksen”,”doksan”};
    public static final String[] basamaklar={”",”bin”,”milyon”,”milyar”,”trilyon”,” katrilyon”};

    Daha sonra bir sayinin belli bir basamagindaki rakami bulacak bir metod yazalim :

    public static int rakamBul(int i,int sayi){ //sayinin i basamagindaki rakamini bulur
    if(i<=0) return 0;
    else return ((int)(sayi%Math.pow(10,i))/(int)(Math.pow(10,i-1)));
    }

    Burada ise bir sayinin yuzluklerini ayiriyoruz.
    Yani örnek olarak : sayiAyir(36479348946)’nin sonucu {946,348,479,36} oluyor…

    public static int[] sayiAyir(long sayi_){ //sayiyi ucer ucer ayirir
    String sayi=”"+sayi_;
    int uzunluk=sayi.length();
    int[] sayilar=new int[uzunluk/3+((uzunluk%3==0)?0:1)];
    sayi=”000″+sayi;
    int i=0;
    try{
    while(i<uzunluk/3+((uzunluk%3==0)?0:1)){
    sayilar[i]=Integer.parseInt(sayi.substring(sayi.length()-3));
    sayi=sayi.substring(0,sayi.length()-3);
    i++;
    }
    }catch(StringIndexOutOfBoundsException e){
    sayilar[i]=Integer.parseInt(sayi);
    }

    return sayilar;
    }

    yuzlukCevir() metoduyla da üç basamakli sayilari yaziya dönüstürüyoruz :

    public static String yuzlukCevir(int sayi){ //uc basamakli sayiyi cevirir
    if(sayi/1000>0) return “hatali sayi !”;
    else if(sayi==0) return “sifir”;
    else{
    String sayininBirleri=birler[rakamBul(1,sayi)];
    String sayininOnlari=onlar[rakamBul(2,sayi)];
    String sayininYuzleri;
    if(rakamBul(3,sayi)==0) sayininYuzleri=”";
    else if(rakamBul(3,sayi)==1) sayininYuzleri=”yuz”;
    else sayininYuzleri=birler[rakamBul(3,sayi)]+”yuz”;
    return sayininYuzleri+sayininOnlari+sayininBirleri;
    }
    }

    En önemli metodumuza yardimci bütün metodlar tamam.
    Simdi geriye sadece herhangi bir sayiyi çevirecek bir metod kaldi :

    public static String sayiCevir(long sayi){ //1 kentrilyondan kuçuk sayiyi cevirir.
    if(sayi==0) return “sifir”;
    String sonuc=”";
    String eksi=”";
    if(sayi<0) { eksi=”eksi “; sayi=-sayi; }
    int[] bolumler=sayiAyir(sayi);
    if(bolumler.length>6) return “Cok buyuk sayi”;
    else{
    for(int i=0;i<bolumler.length;i++){
    if(i==0) {
    if(bolumler[i]!=0) sonuc=sonuc+yuzlukCevir(bolumler[i]);
    }
    else if(i==1){
    if(bolumler[i]==1) sonuc=basamaklar[i]+” “+sonuc;
    else if(bolumler[i]!=0) sonuc=yuzlukCevir(bolumler[i])+basamaklar[i]+” “+sonuc;
    }
    else{
    if(bolumler[i]!=0) sonuc=yuzlukCevir(bolumler[i])+basamaklar[i]+” “+sonuc;
    }

    }
    return eksi+sonuc;
    }

    }

    Yazdigimiz bu metodlari deneyelim :

    public static void main (String args []) throws IOException {
    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader in = new BufferedReader(isr);

    System.out.println(”Bir sayi girin :”);
    String sayi=in.readLine();
    long longSayi=0;
    try{
    longSayi=Long.parseLong(sayi);
    }catch(NumberFormatException e){
    System.out.println(”Geçersiz sayi”);
    System.exit(0);
    }

    System.out.println(” “+sayi+” sayisinin yaziyla degeri : “+sayiCevir(longSayi));
    }
    } // class definition’in sonu

  • Java/JSP 31.07.2008 No Comments

    mport javax.media.*;
    import com.sun.media.ui.*;
    //import javax.media.protocol.*;
    //import javax.media.protocol.DataSource;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.net.*;
    import java.io.*;
    import java.util.Vector;

    public class MediaApplication extends Frame {

    public static void main(String args[]) {
    MediaApplication mdi = new MediaApplication();
    }

    static void Fatal(String s) {
    MessageBox mb = new MessageBox(”JMF Hatasııı!”, s);
    }

    JMFrame jmframe = null;
    JDesktopPane desktop;
    FileDialog fd = null;
    CheckboxMenuItem cbAutoLoop = null;
    Player player = null;
    Player newPlayer = null;
    String filename;

    public MediaApplication() {
    super(”Playerr”);

    setLayout( new BorderLayout() );
    desktop = new JDesktopPane();
    desktop.setDoubleBuffered(true);
    add(”Center”, desktop);
    setMenuBar(createMenuBar());
    setSize(640, 480);
    setVisible(true);

    try {
    UIManager.setLookAndFeel(”javax.swing.plaf.metal.M etalLookAndFeel”);
    } catch (Exception e) {
    System.err.println(”Metal Look and Feell olusturulamadı!”);
    }
    addWindowListener( new WindowAdapter() {
    public void windowClosing(WindowEvent we) {
    System.exit(0);
    }
    } );

    Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, new Boolean(true));
    }

    private MenuBar createMenuBar() {
    ActionListener al = new ActionListener() {
    //tdundaralp@msn.com
    public void actionPerformed(ActionEvent ae) {
    String command = ae.getActionCommand();
    if (command.equals(”Ac”)) {
    if (fd == null) {
    fd = new FileDialog(MediaApplication.this, “Dosya Ac”,
    FileDialog.LOAD);
    // fd.setDirectory(”/videoClip”);
    }
    fd.show();
    if (fd.getFile() != null) {
    String filename = fd.getDirectory() + fd.getFile();
    openFile(”file:” + filename);
    }
    } else if (command.equals(”Cikis”)) {
    dispose();
    System.exit(0);
    }
    }
    };

    MenuItem item;
    MenuBar mb = new MenuBar();

    Menu mnFile = new Menu(”Dosya”);
    mnFile.add(item = new MenuItem(”Ac”));
    item.addActionListener(al);
    mnFile.add(item = new MenuItem(”Cikis”));
    item.addActionListener(al);

    Menu mnOptions = new Menu(”Seçeneker”);
    cbAutoLoop = new CheckboxMenuItem(”Suerkli Tekrar Et”);
    cbAutoLoop.setState(true);
    mnOptions.add(cbAutoLoop);

    mb.add(mnFile);
    mb.add(mnOptions);
    return mb;
    }

    public void openFile(String filename) {
    String mediaFile = filename;
    //author : Toygar Dundaralp
    Player player = null;

    URL url = null;
    try {

    if ((url = new URL(mediaFile)) == null) {
    Fatal(”URL bulunamadı ” + mediaFile);
    return;
    }

    try {
    player = Manager.createPlayer(url);
    } catch (NoPlayerException e) {
    Fatal(”Hata: ” + e);
    }
    } catch (MalformedURLException e) {
    Fatal(”Hata:” + e);
    } catch (IOException e) {
    Fatal(”Hata:” + e);
    }
    if (player != null) {
    this.filename = filename;
    JMFrame jmframe = new JMFrame(player, filename);
    desktop.add(jmframe);
    }
    }
    }

    class JMFrame extends JInternalFrame implements ControllerListener {
    Player mplayer;
    Component visual = null;
    Component control = null;
    int videoWidth = 0;
    int videoHeight = 0;
    int controlHeight = 30;
    int insetWidth = 10;
    int insetHeight = 30;
    boolean firstTime = true;

    public JMFrame(Player player, String title) {
    super(title, true, true, true, true);
    getContentPane().setLayout( new BorderLayout() );
    setSize(320, 10);
    setLocation(50, 50);
    setVisible(true);
    mplayer = player;
    mplayer.addControllerListener((ControllerListener) this);
    mplayer.realize();
    addInternalFrameListener( new InternalFrameAdapter() {
    public void internalFrameClosing(InternalFrameEvent ife) {
    mplayer.close();
    }
    } );

    }

    public void controllerUpdate(ControllerEvent ce) {
    if (ce instanceof RealizeCompleteEvent) {
    mplayer.prefetch();
    } else if (ce instanceof PrefetchCompleteEvent) {
    if (visual != null)
    return;

    if ((visual = mplayer.getVisualComponent()) != null) {
    Dimension size = visual.getPreferredSize();
    videoWidth = size.width;
    videoHeight = size.height;
    getContentPane().add(”Center”, visual);
    } else
    videoWidth = 320;
    if ((control = mplayer.getControlPanelComponent()) != null) {
    controlHeight = control.getPreferredSize().height;
    getContentPane().add(”South”, control);
    }
    setSize(videoWidth + insetWidth,
    videoHeight + controlHeight + insetHeight);
    validate();
    mplayer.start();
    } else if (ce instanceof EndOfMediaEvent) {
    mplayer.setMediaTime(new Time(0));
    mplayer.start();
    }
    }
    } __

  • Java/JSP 31.07.2008 No Comments

    Java kodlarını yazarken kullanabileceğimiz editorlerden biriside EDITPLUS dır. Piyasada pekçok başka Java editorü mevcut ama bunlar içinde en kullanışlısı ve en basiti EditPlus’tır. Java veya herhangi bir programlama dili ile kodlar yazabilirsiniz.Kod yazımında o dile ait komutlar renkli olarak gösterilir.
    {mosgoogle}New komutuna basıp çıkan menüden kullanacağımız dili seçebiliriz. Burada bulunmayan dil desteği için

    adresinden User Files bölümüne girerek indirebiliriz.

    Java’nın yeni sürümlerinde eklenen yeni komutlar için yine bu adresten indireceğimiz ufak bir dosya ile yeni komutlar içinde destek ekleyebiliriz.
    1 - Java Kodlarının Derlenmesi:

    Javada yazdığımız kodları dosyaismi.java ile kaydedip bunları komut satırından (Command Prompt )
    javac dosyaismi.java
    ile dosyayı derliyoruz. Eğer hata vermezse bu java dosyasını

    java dosyaismi

    komutu ile java dosyasını çalıştırıyoruz.
    ( DİKKAT : çalıştırmak için dosyanın uzantısını yazmayız. Yani dosyaismi.class olarak değil dosyaismi olarak yazılır. )
    Bu işlemleri EditPlus ile çok rahat ve hiç zahmetsiz yapabiliriz.
    Bunun için editplus’ın Kullanıcı Araçlarını ( User Tools) kullanacağız. Üstteki menüden Tools menüsünden Configure User Tools seçeneğini işaretleyelim.Açılan menü aşağıdaki gibidir.

    Burada Add tools diyerek Program seçeneğini işaretleyelim. Şimdi menu text olarak buna dilediğimiz bir isim verelim
    mesela :

    Java compiler

    Command menüsüne çalıştırmak istediğimiz dosya ismini seçelim.( veya yandaki … işaretine basarakda açılan menüden seçebiliriz.)
    Argument seçeneğinin yanında ok işaretine basarak açılan menüden File Name ( dosya ismi) seçeneğini seçelim ve son olarakda Capture Output seçeneğini işaretleyerek derleme sonunda verilecek çıktıyı Editplus içinden görebiliriz. Artık bu işlemi tamamladık.
    Bundan sonra bir java dosyasını derlemek için uzun uzun komut yazmak yerine

    Ctrl + 1

    tuşlarına basarak bu işlemi otomatik olarak yapabiliriz.

    Derleme işleminin ne kadar sürdüğü de ayrıca saniye olarak yazılmaktadır. Eğer derleme sırasında hata verirse bu hata mesajına iki kere tıklayarak program kodunda hatanın verildiği satıra otomatik olarak gidilebilir.
    2 . Java Kodlarının Çalıştırılması :

    Şimdi de aynı işlemi derlediğimiz java dosyalarını çalıştırmak için yapalım.

    Üstteki menüden Tools menüsünden Configure User Tools seçeneğini işaretleyelim.Add tools diyerek Program seçeneğini işaretleyelim. Şimdi menu text olarak buna dilediğimiz bir isim verelim mesela : Run java.
    Command menüsüne çalıştırmak istediğimiz dosya ismini seçelim.(veya yandaki … işaretine basarakda açılan menüden seçebiliriz.)
    Argument seçeneğinin yanında ok işaretine basarak açılan menüden File Name Without Extension ( dosya ismini dosya uzantısı olmadan kullan ) seçeneğini seçelim.Böylece dosya isminin uzantısı olan class dosyasını kullanmadan sadece dosya_ismi kullanılmış olacaktır.
    Bu seçeneğede Ctrl + 2 tuşları ile ulaşabiliriz.
    Bu iki seçenekte kullanılırken EditPlus ‘ın soldaki klasör(directory) menüsünden seçtiğimiz klasördeki dosyaları listeleyebiliriz.
    En alttaki seçenekten belirli bir dosya uzantısına görede listeleme yapabiliriz.
    Mesela java dosyalarını veya JSP dosyalarını listeleyebiliriz. Ctrl +1 ve Ctrl +2 tuşlarına bastığımızda derlenecek olan dosyanın yandaki klasörde olması gerekir.
    Yani bir dosyaya çift tıklayarak açıp içinde değişiklik yaptıktan sonra derlersek program derlenecektir.
    Fakat bu klasörü değiştirirsek o zaman derleme işlemi olmayacak çünkü yol ( path) değişmiş olacaktır ve bu yüzden derlenecek dosya bu path’de bulunamayacak ve hata verecektir.
    Örnek mesela c:\javaornekleri klasöründen ornek.java dosyasını açtık ve daha sonra d:\deneme dizinine geçtik.
    Daha sonra açtığımız bu java dosyasını derlemek için CTRL +1 tuşuna basarsak programın derlenmediğini görürüz çünkü o klasörde böyle bir dosya yok.
    Yeni ( New ) düğmesine basarak yeni bir Java dosyası açalım. Yeni bir java dosyası açtığımızda java’nın template olarak kaydedilen dosyası açılacaktır. Bu dosya editplus klasöründedir ve istenildiği gibi değiştirilebilir.
    3 - Editplus Ek Özellikleri:

    Editplus’da Java ile çalışırken döngü açmak veya Mantıksal ifadeler kullanmak istediğinizde sizin için otomatik olarak { } işaretlerini koyar.
    Mesela : IF yazdığınız anda

    IF ( ) {
    }

    şeklinde parantezleri () ve {} kendisi otomatik olarak koyar ve imleç () parantezin içine konumlanır.
    EditPlus’ta birden fazla dosya üzerinde işlem yapılabilir.Açılan herbir dosya aynı windows’un altındaki bar ile benzer bir bar’da dosya isimlerini gösterir.

    Böylece açılan herbir dosyaya alttaki dosya ismine tıklayarak ulaşabiliriz.
    4 - Editplus’ta Bul ve Değiştir :

    EditPlus’ın en güzel özelliklerinden biriside açılan tüm dosyalardan belli bir kelimenin veya cümlenin değiştirilebilmesidir.
    Mesela bütün JSP dosyalarımızdaki

    Connection con = DriverManager.getConnection(URL, “cskou”, “q”);

    Satırındaki kullanıcı adı ve şifresini değiştirelim.

    Connection con = DriverManager.getConnection(URL, “ogrenci”, “qwerty”);

    Önce bütün Jsp dosyalarını soldaki klasör menüsünden seçerek sağ tıklayıp open diyelim ve daha sonra Ctrl+H düğmesine tıklayarak değiştirme işlemini yapacağımz Bul/Değiş(Search/Replace) menüsünü açalım. Bul(find) seçeneğine bulunması gereken cümleyi değiştir (replace) seçeneğinede değiştirmek istediğimiz cümleyi yazalım.

    Ve alttaki Bütün dosyalar ( All open files) düğmesine tıklayıp tümünü değiştir (Replace All) düğmesine basalım. Böylece bütün açık dosyalar üzerinde değiştirme işlemi gerçekleşmiş olur.Ve altta bilgi olarak kaç tane değişiklik yapıldığı rakam olarak yazılır.

  • Java/JSP 31.07.2008 No Comments

    Merhaba, Java 5 (Tiger ) beraberinde dil,kütüphane, arayüz,performans özellikleri ile ilgli pek çok yenilik getirdi. Ben bu makale serisinde Java 5.0 ile gelen yeni dil özelliklerinden sırasıyla bahsetmeye çalışacağım.
    Öncelikle Java 5.0 ile gelen yeni dil özellikleri nelerdir onlara bir bakalım;

    Generic yapılar
    Autoboxing/Unboxing
    Gelişmiş for döngüsü
    Typesafe Enum (Güvenli sıralama yapıları)
    Varargs (Değişken sayıda argüman)
    Static Import
    Metadata (Annotations)
    İlk makalemizde Generic sınıflardan ve metotlardan bahsedeceğiz.
    C# 2.0 ile çalışmışsanız veya halen çalışıyorsanız size generic kelimesi size yabancı gelmeyecektir. Java daki generic yapılar, C# taki yapılardan çok farklı değildir.

    Generic Sınıflar

    Generic sınıf demek içerisinde her türlü tipi (primitive veya referans) tutabilen , hangi tipi tutacağına sınıftan bir nesne yaratılırken karar verebileceğimiz.Nesne yaratılırken belirlediğimiz tip ne olursa olsun bütün tipler için aynı işlemleri yapabilmemizi sağlayan sınıftırtır.

    Örneğin bir sınıf tanımlıyoruz ve içerisinde bir başka bir sınıf barındırması(composition) gerekiyor .Fakat içerisinde barındıracağı sınıfın ne olacağına bu sınıfı yazarken yazarken değil bu sınıfı kullanırken karar vermek istiyoruz. O zaman sınıfımızı aşağıdaki gibi generic tanımlamamız gerekir.

    HTML Code:
    public class BizimGenericClass <E>
    {
       private E genericDeger;
       public BizimGenericClass(E genericDeger)
              {
                 this.genericDeger = genericDeger;
              }
       public void genericTipiYaz()
              {
                 System.out.println(genericDeger.getClass().toString());
             }
       public void genericDegeriYaz()
             {
                 System.out.println(genericDeger.toString());
              }
    }


    Sınıfımızı yukarıdaki gibi tanımlarsak artık içerisinde hangi tipten bir nesne tutacağımıza bu sınıftan nesne yaratırken karar verebiliriz.Yukarıdaki kodda yazdığımız <E> sınıf içinde tutacak olduğumuz değişkenin tipine karşılık geliyor.Yani BizimGenericClass sınıfından nesne yaratırken <E> yerine yazdığımız tipte bir değişken tutacağımız anlamına geliyor. <E> yerine herhangi bir değişken adı yazabiliriz (<T>,<Tip>… gibi) değişken isminin bir önemi oktur.<E> gösterimi sadece genel bir tipi temsil eder.

    Generic sınıflardan nesne yaratmak normalden biraz farklıdır;

    BizimGenericClass<String> bizimnesne = new BizimGenericClass<String>();
    Burada sınıf tanımındaki <E> yerine <String> koyuyoruz bu bizimnesne adlı nesne içerisinde String tutacağımız anlamına gelir. Eğer <String> yerine herhangi bir tip yazmazsak bu sınıf içerisinde Object tipini saklayacağımız anlamına gelir.

    Aşağıdaki kod bu generic sınıfı nasıl kullanacağımızı açıklamaktadır

    HTML Code:
    public class MainProgram
    {
       public static void main(String[] args)
       {
              BizimGenericClass<String> s = new BizimGenericClass<String>("Ayhan"); //generic classın hangi nesneyi tutacağını burada belirtiyoruz
              s.genericTipiYaz();
              s.genericDegeriYaz();
    
              BizimGenericClass<Integer> t = new BizimGenericClass<Integer>(8);//generic classın hangi nesneyi tutacağını burada belirtiyoruz
              t.genericTipiYaz();
              t.genericDegeriYaz();
       }
    }

    Generic Metotlar

    Generic metotlar ise yukarıda kullandığımız generic sınıftaki yapıcı (constructor) metot gibi yazılmaktadır.
    Aşağıda generic metot tanımıyla ilgili kısa bir örnek yeralmaktadır;

    HTML Code:
    public class YeniGenericClass<T>
    {
       public void BizimGenericMethod(T genericDeger)
       {
               System.out.println(generi.getClass().toString());
               System.out.println(generi.toString());
       }
    }

    Generic metot yazarken dikkat edilmesi gereken tek şey 3. satırdaki (metot tanımındaki ) T genel tipinin metodu içeren YeniGenericClass sınıfın 1. satırında sınıf isminden sonra yazılan <T> ile aynı olmasıdır.
    Kullanırken yine generic sınıf gibi kullanacağız.

    HTML Code:
    public class MainProgram <T>
    {
      public static void main(String[] args)
       {
               YeniGenericClass<String> y = new YeniGenericClass<String>();
               y.BizimGenericMethod("Hello Generic Method");
       }
    }

    Java 5.0 Generic Koleksiyon yapıları

    Şimdi kendimiz generic sınıf ve metot yazmak yerine Java 5.0 ile gelen işlerimizi kolaylaştırmak için yazılmış generic koleksiyonları nasıl kullanacağımızı görelim.

    Öncelikle eskiden Java da koleksiyon(Collection) yapılarını kullanırken eskiden (Java 5.0 dan önce) nasıl bir problemimiz olduğunu görelim.
    Bir koleksiyon kullanmak için tanımını yapıp “new” anahtar kelimesiyle yani bir nesne yaratmamız gerekiyor. Daha sonra bu koleksiyon nesnesinin içerisine istediğimiz nesneleri “add()” methodunu kullanarak ekleyebiliyoruz. Aşağıdaki kodda yeni bir vektör nesnesi yaratılıp içerisine istediğimiz nesneleri ekliyoruz. (NOT: Unutmayın koleksiyon yapıları içerlerinde sadece nesne tuabilirler primitive tip tutamazlar)

    HTML Code:
    import java.util.Vector; //Kullanacağımız koleksiyon classını import ediyoruz
    
    public class MainProgram
    {
    public static void main(String[] args)
              {
                 Vector v = new Vector(); //Yeni bir vektör nesnesi yaratıyoruz
                 String isim = "AYHAN";
                 Integer no = new Integer(888);
                 v.add(isim); //vektör koleksiyonumuza isim değişkenini ekliyoruz.
                 v.add(no); //vektör koleksiyonumuza no nesnesini ekliyoruz ekliyoruz.
                 String name = (String)v.elementAt(0); //Type Casting (5.0 dan önce tür dönüşümü işlemini mutlaka yapmamız gerekiyordu)
                 Integer id = (Integer)v.elementAt(1); //Type Casting (5.0 dan önce tür dönüşümü işlemini mutlaka yapmamız gerekiyordu)
              }
    }


    Aslında yukarıdaki kodda şu ana kadar bir problem yok.Problemimiz koleksiyon nesnelerinin içerisine koyduğumuz nesneleri geri almaya çalıştığımızda olacak.Koleksiyon nesneleri içerisine aldıkları bütün nesneleri “Object” tipinde tuttukları için geri almaya kalktığımızda bize bir “Object” nesnesi geridöndürecek. Bu durumda bizim bir tür dönüşümü (type casting) işlemi yapmamız gerekiyor.Her geri alacağımız nesne için maalesef bu işlemi tekrar tekrar yapacağız.

    Yukaridaki kodda 12. satırda “elementAt()” metodunu kullanarak koleksiyona koyduğumuz “AYHAN” stringini geri almaya çalışıyoruz.”elementAt()” metodu bize nesne geri döndürdüğü için mecburen bir tür dönüşümü işlemi yapmak zorunda kaldık. Tür dönüşümü işlemini yapmasaydık derleme sırasında hata alacaktık.Koleksiyonumuzun tüm elemanlarının anı tipte olsaydı bile yine tür dönüşümü yapmak zorundaydık. Aslında görüldüğü gibi tür dönüşümü yaptığımız sürece hiçbir problemimiz yok.İsterseniz Java 5.0 kullandığınız halde hala bu yöntemle uygulama geliştirmeye devam edebilirsiniz , bir problem çıkmaz.
    Ama işlerimizi kolaylaştırmak istiyorsak (özellikle koleksiyonda aynı türden nesneler tutuyorsak) Generic koleksiyon yapılarını kullanmamız gerekecek.
    Java 5.0 dan önce var olan kolaksiyon sınıfları Java 5.0 için generic sınıflar olarak tekrar yazılmıştır.Generic koleksiyon sınıfları sayesinde koleksiyonun içinde ne tür nesneler tutacağımızı önceden belirtip içerisine nesnelerimizi koyuyoruz. Geri alırken herhangi bir tür dönüşümü işlemi yapmamıza gerek kalmıyor.

    Örnek ;

    HTML Code:
    import java.util.Vector;
    public class MainProgram
    {
    public static void main(String[] args)
                 {
                    Vector<String> v = new Vector<String>();
                    String isim = "AYHAN";
                    String soyisim="OZTURK";
                    v.add(isim);
                    v.add(no);
    
                     String name = v.elementAt(0); //String tutacağımızı önceden belirttiğimiz için tür dönüşümü yapmamıza gerek kalmıyor .
                     String lastname = v.elementAt(1);
               }
    }

    Fakat yukarıdaki örnektede görüldüğü gibi koleksiyonumuzun hangi tipi tutacağını koleksiyon nesnesini yaratırken söylüyoruz.Bu yüzden içerisine o tipten başka bir tip koyamıyoruz. Örneğin string vektörünün içerisine Integer koyamıyoruz.

    Bu makale serisinin ikincisinde Autoboxing/Unboxing konusundan bahsedeceğim. Görüşmek üzere.
    Bilgiyi paylaşalım….

  • Java/JSP 31.07.2008 No Comments

    JDK Kurulumu

    Giriş

    Java, platform bağımsız ve yüksek performanslı uygulamaların geliştirilmesine olanak sağlayan basit,nesne tabanlı bir programlama dilidir. Java kullanılarak yazılan bir programın işletim sisteminden bağımsız olarak her bilgisayarda çalışabiliyor olması diğer hiçbir yazılım programında olmayan bir özelliktir.
    Ayrıca Java tamamiyle ücretsizdir.Tabi Sun istediği bir zamanda bunu ücretli halede getirebilir.
    Java ile program geliştirebilmek için önce Java geliştirme sistemini (JAVA 2 SOFTWARE DEVELOPMENT KID - STANDART EDITION = J2SK ) Sun Microsystem’in internet adresinden indirmemiz gerekiyor. JDK ücretsiz bir yazılımdır. http://www.java.sun.com/ adresinden J2SDK’nın 1.3 versiyonu indirin ( J2SDK 1.3.1 versionuda çıktı).İndirdiğiniz program .exe olarak geliyor.Tek yapmanız gerek iki kere tıklamak )
    JDK nedir?

    Java ile geliştirme (development) yapmak için Java Development Kit’e (JDK) ihtiyacınız var. Bu paket Java ile geliştirme yapmak için bütün araçları içeriyor..
    Bu tool’lara editör (düzenleyici) dahil değildir. Piyasada bir çok GUI(Graphical User Interface) Java Editör’ı var. Bunlar genelde ücretlidir. Ayrıca oldukça güçlü bir makinede bile oldukça ağır çalışırlar. Programın nasıl çalıştığına zaman harcayıp öğrenmemiz gerekir ; üstelik, en önemlisi, kodun içine kendiliğinden bir sürü kod eklerler, bu da yazdığınız kodu anlamamanıza yol açar. Bence bu gibi araçlar Java’ya yeni başlamış olanlar için uygun değil.
    JRE nedir?

    JRE (Java Runtime Environment) Java Virtual Machine, Java Platform çekirdek class’larını ve destekleyici dosyalar gibi paketleri içerir. Yani java kodu geliştirmek için gerekli olan derleyici (compiler), debugger gibi paketleri içermez. JRE zaten JDK’nın içinde vardır. Böyle bir paketin oluşturulmasının nedeni ise basit: Yazdığınız ve derlediğiniz (compile) Java class’larını herhangi başka bir makinede çalıştırmak için bu pakete ihtiyacınız olabilir.
    JDK 1.3.1 Kurulumu :

    Kuruluma, aynen diğer Windows uygulamalarında olduğu gibi, jdk1_3_1-win.exe adlı dosyaya çift tıklayarak başlıyoruz.
    Önce paketlerin açılmasını bekliyoruz
    ve ilk gelen ekranda Next’e,
    daha sonraki ekranda ise Yes’e tıklıyoruz. Daha sonra gelen ekranda kurulum yapacağımız klasörü girmemizi istiyor. Bu değeri değiştirebilirsiniz fakat daha ileride anlatacağım bazı işlemleri yapmada zorluklar yaşayabilirsiniz, normali olan c:\jdk1.3.1 olarak seçmeniz daha uygundur.(tabi bu tamamen size kalmıştır ama classpath ayarlarını yaparken biz bu klasöre göre ayarlamalarımızı yaptık)
    Daha sonra gelen ekranda tüm seçenekleri seçtikten sonra Next’e tıklayın Böylece kurulum başlamış oldu. Birçok dosyayı kopyaladıktan sonra JDK kurulumu için tekrar bir ekran gelecek burada da Yes’e tıklayın.
    Daha sonra gelen ekranda dizini yine normalinde bırakıp Next’e tıklayın.Finish’e tıklayın.
    PATH ve CLASSPATH değişkenlerini ayarlama:

    Bunlar CLASSPATH ve PATH adını verdiğimiz ortam değişkenleridir. PATH bildiğimiz çalışan dosyaları arama listesidir. Yazdığımız Java komutlarının herhangi bir yerde çalışması için bulundukları yerleri PATH olarak gösterilmesi lazımdır. CLASSPATH ise derleme sırasında gerekecek temel kütüphanelerin, classların yani API’lerin bulunduğu yeri gösterir. Autoexec.bat dosyasındaki şu iki satır herşeyi halledecektir. Böylece dosya kopyalama işlemi tamamlanmış oldu. Şimdi bize bazı kolaylıklar sağlaması için makinenizin çevre değişkenlerinde bazı değişiklikler yapacağız. Bu kısımda oldukça dikkatli olmak gerekiyor.
    WİNDOWS 98 İÇİN CLASSPATH VE PATH AYARLARI:

    Önce sistem editörünü (system editör) çalıştırıyoruz. Start ondan sonra Run’a tıklayıp, gelen alana sysedit yazın, Enter’a basın.İçinde bir çok pencere olan System editör çalışmış oldu.Bu pencerelerden AUTOEXEC.BAT yazılı olanı seçin.PATH ile başlayan satırı bulun. Bu satırın en sonuna
    ;C:\JDK1.3.1\BIN
    değerini ekleyin. Örnek:
    PATH = C:\WINDOWS;C:\WINDOWS\COMMAND;C:\JDK1.3.1\BIN
    Eğer PATH ile başlayan satır yoksa bu durumda en alta aşağıdaki satırı ekleyin.
    PATH C:\JDK1.3.1\BIN
    Daha sonra ise en alta aşağıdaki satırı ekleyin
    SET CLASSPATH = .;c:\java1.3.1\lib\tools.jar
    Daha sonra File’dan Save’e tıklayıp System editor’ı kapatın. (NOT: Sistem editöründe başka herhangi bir değerle oynamak sistemin bir daha açılmamasına neden olabilir. PATH değişkenini aktif hale getirmek için Start | Run’a tıklayıp gelen alana c:\autoexec.bat yazıp Enter’a basın. Bir DOS Penceresi açılacak gerekli işlemleri yapacak. Yaptığından emin olmak için bir DOS penceresi açıp(Start | Run a tıklayıp gelen alana command yazıp Enter’a basın) path yazıp Enter’a basın. Size path değişkeninin değerlerini verecek. Bunların arasında C:\JDK1.3.1\BIN’in olup olmadığını ve doğru yazılıp yazılmadığını kontrol edin.
    Bu işlem bize C:\JDK1.3.1\BIN dizini altındaki programları(java, javac vb.) hangi dizinde olursak olalım çalıştırabilme olanağını erecek. Ayrıca CLASSPATH değişkeni ise yazacağımız programları çalıştırmamızda yardımcı olacak.Böylece kurulum tamamlanmış oldu.
    WINDOWS 2000 İÇİN CLASSPATH AYARLARI:

    Windows 2000′de Control Panel’den System özelliğine tıklayarak gelen menüden
    Environment Variables seçeneğini seçiyoruz.
    çıkan menüden üst tarafta “path” değişkenini tanımlamamız gerek. Eğer sizde Path değişkeni hiç yoksa New komutu ile yeni bir PATH değişkeni tanımlamalısınız.
    Variable Name : PATH

    Variable Value : c.\jdk1.3\bin

    Variable Value : C:\jdk1.3\bin;c:\mysql\bin;.
    yazmanız yeterlidir Birden fazla değer atamak için ; ile klasörleri birbiriden ayırabilirsiniz.
    Şimdi Şekil-K2 deki pencereden aşağıdaki New seçeneğini seçip
    Variable Name : CLASSPATH

    Variable Value : c:\jdk1.3\lib\tools.jar
    değerini ekliyoruz.Artık Java ile program geliştirmeye başlayabilirsiniz..