2 Nisan 2011 Cumartesi

Japonya'da Deprem ve Yaşananlar


Japonya'da yaşanan 8.9'luk deprem sonrası büyük bir tsunami yaşandı ve bazı yerleşimler sular altında kaldı. Depreme karşı her türlü önlemi alan Japonya, bu şiddette depreme karşı da dik durabilirdi ama ülkeyi sarsan,  dev dalgalar oldu. Çok sayıda kayıp var ve bazı yerleşim yerlerinden haber alınamıyor.
Bir nükleer santralde reaktörler patlıyor ve diğer reaktörlerin patlamaması için çaba sarfeden ve reaktörleri soğutmaya çalışan, bunun için  yaşamını feda eden 50 çalışan santralden ayrılmıyor. Bir ırkı kurtarmaya çalışmak da denebilir buna.
İşte o anlardan biri bu fotoğrafta. Ağır radyasyona maruz kalan  bir çalışan...
Santralden ve alandan ayrılmıyor...
Bir kaç hafta içinde maruz kaldığı radyasyon yüzünden yaşamını yitirecek..
Ailesiyle vedalaşıyor...

14 Şubat 2011 Pazartesi

Fatih Akın Filmleri

Kısa ve Acısız (Kurz und Schmerzlos)

Yapım: 1998
Yönetmen: Fatih Akın
Senaryo: Fatih Akın
Oyuncular: Mehmet Kurtuluş (Cebrail)
                 Alexandar Jovanovic (Bobby)
                 Adam Bousdoukos (Costa)
                 Regula Grauwiller (Alice)
                 İdil Güner (Ceyda)

Cebrail, Almanya’da yaşayan ve hapisten yeni çıkmış genç bir Türk göçmenidir. Hapishane Cebrail için dayanılması zor ancak öğretici bir tecrübe olmuştur. Kararı kesindir; her türlü yasadışı işten uzak duracaktır. Cebrailin yakın arkadaşları da kendisi gibi göçmendir. Yunanistanlı Costa hırsızlığı meslek edinmiştir. Sırp Bobby ise gözünü çok daha ciddi işlere dikmiştir; uyuşturucu pazarlayacaktır. Bobby’nin sevgilisi Alice ile Cebrail arasında ise önüne geçilemeyen bir yakınlık yaşanmaktadır. Bobby Arnavut bir mafya lideriyle bağlantıya geçer ve onun adına bazı pis işler çevirir. Başlarda işler iyi gidiyor gibi görünür ancak bir gece Bobby kendisine verilen bir görevi başaramaz ve elindeki tüm malı çaldırır. Artık ne Bobby ne de arkadaşları güvende değildir. Cebrail, Bobby’nin başlarına açtığı sorunu temizlemek zorundadır. Üç arkadaş, dostluklarını hayatlarıyla test etmek durumundadırlar. En ufak hatalarında Hamburg sokakları kana bulanacaktır.


Temmuzda ( Im Juli)


Yapım: 2000
Yönetmen: Fatih Akın
Senaryo: Fatih Akın
Oyuncular: Moritz Bleibtreu(Daniel Bannier)
                   Christiane Paul (Juli)
                   Mehmet Kurtuluş (İsa)
                   İdil Üner (Melek)

Daniel, öğrencileriyle yakın ilişki kurma konusunda isteksiz davranan, kendi dünyasına gömülü genç bir öğretmendir. Juli ile tanıştıktan sonra yaşamının yeni bir yön alabileceğine inanmaya başlar.

Çünkü kadın, Daniel'in falına bakmış ve hayatının aşkını pek yakında bulacağı konusunda onu ikna etmiştir. Bir süre sonra adam, bir Türk kızı olan Melek'e tutulur ve peşinden Türkiye'ye gitmeye karar verir. Juli ise Daniel'in peşindedir ve birlikte bir dolu süpriz ve tesadüflerle dolu keyifli bir yolculuğa başlarlar.        


Solino


Yapım: 2002
Yönetmen: Fatih Akın
Senaryo: Ruth Toma
Oyuncular: Moritz Bleibtreu(Giancarlo Amato)
                    Barnaby Metschurat (Gigi Amato)
                    Antonella Attili (Rosa Amato)
                   Tiziana Lodato (Ada)

Gigi ve Giancarlo'nun babaları Romano ve anneleri Rosa, Apulia’daki evlerini terk edip Almanya’ya taşınmaya karar verirler. Duisburg’un gelişmekte olan tekdüze endüstriyel kesiminde mahallenin ilk pizza dükkanını açarlar.

Romano, restorant sahibi rolüne kolayca alışır fakat Rosa ülkesini özlemektedir ve özlemi yıllar geçmesine rağmen dinmek bilmez. Oğulları Gigi ve Giancarlo ise içine girdikleri yeni sosyal ortamda buldukları özgürlüğün tadını çıkarırlar. İkisi de, aynı kadına aşık olunca araları açılır ve Gigi annesiyle Solino’ya dönmeye karar verir.
                                                                                                                                                                     
                                                                                                                                                      
                                                                                           
Duvara Karşı (Gegen Die Wand)


Yapım: 2004
Yönetmen: Fatih Akın
Senaryo: Fatih Akın
Oyuncular: Birol Ünel (Cahit)
                   Sibel Kekilli (Sibel)
                   Catrin Striebeck
                   Güven Kıraç

Bir intihar girişiminin ardından psikiyatrik tedavi gören alkol ve uyuşturucu bağımlısı Cahit, 40 yaşlarında, Türk kökenli bir Alman'dır. Doktoru ona "İntihar, hayatına nokta koymanın tek yolu değildir" dediğinde yaşama yenidne başlaması gerektiğini anlar. Yine bir Türk olan Sibel, genç ve güzel bir kızdır ve tutucu ailesinin baskısı onu da bir intihar denemesine sürüklemiştir. Sibel, ölmeyi denemek yerine başka bir kurtuluş yolu getirir aklına: yeni tanıştığı Cahit'ten onunla evlenmesini ister!
Hayatına biraz olsun anlam katmak, biraz da kıza yardım etmek isteyen Cahit bu teklifi kabul eder. İlk başta tek paylaşımları, birlikte oturdukları küçük daire olan ikiliye, kaderin oynayacağı bir oyun vardır elbette:
aşktan kaçabilir misiniz?


                                                              
Yaşamın Kıyısında (Auf der anderen Seite)


Yapım: 2006
Yönetmen: Fatih Akın
Senaryo: Fatih Akın
Oyuncular:Nurgül Yeşilçay (Ayten Öztürk)
                Nejat İşler (Baki Davrak)
                Patrycia Ziolkowska(Lotte Staub)
                Nursel Köse (Yeter)

Emekli bir dul olan Ali, yalnızlığını paylaşacağı bir insan ararken fahişelik yapan Yeter ile tanışır. Para karşılığı kendisine hayat arkadaşlığı yapmasını öneren Ali'nin bu teklifini, Alman Dili Ve Edebiyatı profesörü olan oğlu Nejat hiç olumlu karşılamaz. Nejat için Yeter'in mesleği kabul edilemezdir.

Yeter'in asıl amacının Türkiye'de üniversitede okuyan kızını rahat ettirebilmek olduğunu anlayan Nejat, Yeter'e karşı daha sıcak duygular beslemeye başlar. Yeter'in beklenmedik bir şekilde hayatını kaybetmesi üzerine kızı Ayten'i bulmaya Türkiye'ye gitmeye karar veren Nejat'ın hayatında bambaşka bir pencere açılacaktır.

Bilmediği tek şey ise, siyasi eylemci Ayten'in kaçak olarak Almanya'ya gitmiş olduğudur. Nejat'ın tahmin ettiği zamanda ve şekilde olmasa da, bir gün tüm bu karakterlerin yaşamları beklenmedik bir şekilde kesişecektir.

 Aşka Ruhunu Kat ( Soul Kitchen)


Yapım: 2009
Yönetmen: Fatih Akın
Senaryo: Fatih Akın, Adam Bousdoukos
Oyuncular: Adam Bousdoukos(Zinos Kazantsakis)
                   Moritz Bleibtreu (Illlias Kazantsakis)
                   Birol Ünel (Shayn Weiss)
                   Anna Bederke (Lucia Faust)


Restoranında sunduğu özensiz ve ucuz yemeklerden para kazanamadığı için başı derde girdiği bir dönemde, sevgilisiyle de- hem duygusal hem fiziki olarak- arası açılan Zinos'un, 'star' bir ahçıyı işe alarak nasıl yeni bir müşteri kitlesine kavuştuğu, son derece esprili bir dille anlatılıyor.




11 Şubat 2011 Cuma

Yazılım Mühendisliği, Yazılım Mühendisliği Süreçleri

Yazılım Mühendisliği 1993 IEE tanımıyla; "sistemli, düzenli, ölçülebilir yaklaşımın yazılım geliştirmede, yazılımın işlenilmesinde ve bakımında uygulanmasıdır, başka deyişle mühendisliğin yazılıma uygulanmasıdır." Yazılım için en önemli özellik, bir yazılımın sürdürülebilir, güvenilir, verimli ve kullanılabilir olmasıdır.Günümüzde bir çok yazılım türü mevcut. Bunlardan bir kaç örnek verecek olursak; sistem yazılımları, gerçek zaman yazılımları, iş yazılımları, mühendislik ve bilimsel yazılımlar, gömülmüş yazılımlar,yapay zeka yazılımları. Bu yazılımlar çeşitli alanlarda kullanılmakta. Bir yazılım üretimi yaparken, bu süreçte öncelikle belirteçlerin hazırlanmasını sağlamalıyız. Burada yazılımın işlevselliği ve işlemlere koyulmuş sınırlamalar tanımlanmalıdır. Yani sistem ne yapar ve geliştirim kısıtları nelerdir. Geliştirme bölümünde, daha önceden belirlemiş olduğumuz belirteçlere göre yazılımın üretimini sağlarız. Ürettiğimiz bu yazılımın doğruluğunu test etmeliyiz. Bu süreçte yazılım müşteri isteklerini karşılıyor mu sorusuna cevap ararız. Bu doğruluğu yaptıktan sonra yazılımımız evrim sürecine geçer. Bir yazılımın en uzun süreci evrimdir. Çünkü müşteri istekleri sürekli değişir ve hatalar her an çıkabilir.

Çeşitli yazılım geliştirme modelleri mevcut. Şelale modeli, evrimsel geliştirme, formal sistem geliştirme, yeniden kullanılabilirliğe dayalı geliştirme bu modellere örnek olarak verilebilir. Bunlardan en çok kullanılan şelale modeli ve evrimsel geliştirmeyi inceleyelim.

Şelale Modeli (Waterfall Model):
Faaliyetlere ayrı süreçler gibi bakılıyor.


Gereksinimlerin Belirlenmesi: Sistem servisleri ve sınırları analiz edilir, sistem tanımlanması yapılır.
Sistem ve yazılım tasarımı: Donanımın ve yazılımın gerekliliklerine göre bölme yapılır.
Çalıştırma ve Birim Denemesi: Yazılım dizaynı uygulanır ve yazılımın birimi test edilir.
Bütünleşik ve Sistem Denemesi: Yazılımın birimleri birleştirilir ve bütün bir sistem olarak test edilir.Yazılım bu işlemin ardından müşteriye gönderilir.
Bakım:Sistem işletilir. Hatalar düzeltilir, uygulama geliştirilir.Genellikle uzun fazdır.

Şelale modelinin yetersiz yönü, süreç tamamlandıktan sonra değişikliklerin yapılmasının zorluğudur. Projenin farklı aşamalara esnek biçimde bölünmemesi, değişen müşteri gereksinimlerini yerine getirmekte zorluklar yaratır.
Şelale modeli, gereksinimlerin yalnızca çok iyi tanımlandığı takdirde uygun modeldir. Şelale modeli yavaş yavaş popülerliğini yitirmektedir.

Evrimsel Geliştirme (Iterative Development) :
Keşif Geliştirmesi ve Prototip Geliştirme olarak ikiye ayrılır.


Keşif Geliştirmesi:Müşteri ile çalışarak gereksinimlerin keşfi yapılır.Başlangıç ana hatlarıyla verilmiş belirteçten son sisteme doğru evrimsel geliştirme yapılır. Sistemin anlaşılır kısmı ile başlanılmalıdır. Müşterinin önerdiği yeni özellikleri ilave etmekle evrimleşir.Daha iyi anlaşılır ve yüksek öncelikli gereksinimler ile başlanır.
Prototip Geliştirme: Sistem için gereksinimlerin en iyi tanımlanması yapılır. Zayıf anlaşılır müşteri gereksinimleri ile başlar.Bunun nedeni onları daha iyi anlamaktır.Çünkü çok iyi anlaşılan gereksinimler için prototipe gerek yoktur.

Evrimsel geliştirmenin sorunları; tüm geliştirme süreci iyi görülmüyor, sistemler çoğu zaman zayıf yapılandırılmış oluyor.Örneğin hızlı prototip oluşturan diller gibi özelliklere sahip olunması gerekir.
Küçük ve orta boyutlu projeler için daha uygundur. Büyük sistemlerin bazı bölümleri için örneğin arayüz yapımında kullanılabilir. Kısa yaşam devirli sistemler için daha uygundur.


3 Şubat 2011 Perşembe

Java Applet: MouseListener

Java Applet'de mouse listener olaylarını inceleyelim. Mouse Listener default olarak gelen ve bulunması zorunlu olan bir kaç fonksiyon içeriyor. Bunlar; mouseClicked, mousePressed, mouseReleased, mouseEntered, mouseExited. İngilizcelerinden de anlaşılacağı üzere mouse'un hangi olaya tepki vermesini istiyorsak, o fonksiyonun içini dolduruyoruz.

Mouse listener olaylarını örneklendirecek olursak; sabit bir applet boyu oluşturalım. İçerisine dikdörtgen şekli çizelim. Applet sınırlarına faremiz ile gelindiğinde ve Applet içinde olduğumuzda, panelde "mouse applet içinde" yazdıralım, fare ile Applet dışına çıktığımızda ise "mouse applet dışında" yazdıralım. Applet'de herhangi bir yere tıkladığımızda, tıklanan koordinat mouseClicked fonksiyonu içerisinde yazılan kod ile alınıp, Applet'e yazdırılsın.

Bu örneğin Java kodu aşağıdaki gibidir.

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

public class MouseClickTesting extends Applet implements MouseListener
{
 int xcoor;
 int ycoor;
 int rectxcoor,rectycoor,rectwidth,rectheight;
 boolean mouseEnter;
 boolean rectClick;
 
 public void init() 
 {
  rectxcoor = 20;
  rectycoor = 20;
  rectwidth = 100;
  rectheight = 50;
  addMouseListener(this);
 }
 
 public void paint(Graphics g) 
 {
  this.resize(500, 300);
  g.setColor(Color.red);
  g.fillRect(rectxcoor,rectycoor,rectwidth,rectheight);
  g.setColor(Color.black);
  g.drawString("("+xcoor+","+ycoor+")",xcoor,ycoor);
  if (rectClick) g.drawString("Dikdörtgen icine tikladiniz",20,120);
  else g.drawString("Dikdörtgen disina tikladiniz",20,120);
  
  if (mouseEnter) g.drawString("Mouse applet icinde",20,160);
  else g.drawString("Mouse applet disinda",20,160);
 }
public void mouseClicked (MouseEvent me) {
 xcoor = me.getX();
 ycoor = me.getY();
  if (xcoor > rectxcoor && xcoor < rectxcoor+rectwidth && ycoor >rectycoor && ycoor < rectycoor+rectheight) 
   rectClick = true;
    else 
     rectClick = false;
 
  repaint();
 }
 public void mousePressed (MouseEvent me) {}
 public void mouseReleased (MouseEvent me) {}
 public void mouseEntered (MouseEvent me) {
  mouseEnter = true;
  repaint();
 }
 public void mouseExited (MouseEvent me) {
  mouseEnter = false;
  repaint();
 }
}  
  

Kolay gelsin.

1 Şubat 2011 Salı

Owl Belgesinde Java ile İşlemler Yapmak


Owl belgesinde hazırladığımız sistemde, java ile bazı işlemler gerçekleştirelim. Bunun için öncelikle ide'mize bazı kütüphaneler eklemeliyiz. Owl için mevcut kütüphaneler jena,owlapi vb.. İşlemlerim için gerekli olacak owlapiyi Eclipse'e import ediyorum. Projem basit bir e-magaza sistemi. Bu sistemi protege ile açıyorum. Şekilden de görüldüğü üzere musteri isminde bir sınfım var. Musteri1 ve musteri2 isminde individuallerim var. 




















Şimdi Id ile typeName isimli sınıfın bir individual'ini yaratıp, bu individual'ın porpName isimli objectProperty'sinin değerini parametre olarak aldığı indv ile dolduralım. Elde ettiğimiz yeni ontoloji yapısını sabit diske kaydedip, geri dönüş değeri olarak geri döndürelim.
Fonksiyonumuzu; public OWLOntology addIndividual(String ID, String typeName, String propName, OWLIndividual indv) olarak yazalım. Yani bu ontolojimizde musteri sınıfına ait individual yaratıyoruz(ya da var olan indivual'i kullanıyoruz), bu individual'i yarattığımız ürün individual'i ile birleştiriyoruz.

Bu işlemden sonra ontolojimiz şekildeki gibi olacaktır.


Şekilden de görüldüğü üzere musteri2 individual'ine masaustu ürünü verildi. Musteri2 artık masaustu2 ye sahiptir.


Diğer bir fonksiyon olarak; tipi parametre olarak elde edilen typeName isminde OwlClass olan tüm individual'lerin silinmesi işleminde sorumlu olsun. Elde ettiği yeni ontoloji yapısını yine sabit diske kaydetsin ve dönüş değeri olarak döndürsün.Bu işlemde fonksiyonumuz; public OWLOntology removeIndividuals(String TypeName) .

Bu işlemden sonra ise ontolojimiz şekildeki gibi olacaktır.





















Görüldüğü üzere Musteri sınıfındaki tüm individualler silindi. 


Bu işlemlerin yapıldığı Java kodu aşağıdadır. 


import java.io.File;
import java.util.Collections;
import java.util.Set;
import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.io.SystemOutDocumentTarget;
import org.semanticweb.owlapi.model.AddAxiom;
import org.semanticweb.owlapi.model.IRI;
import org.semanticweb.owlapi.model.OWLClass;
import org.semanticweb.owlapi.model.OWLClassAssertionAxiom;
import org.semanticweb.owlapi.model.OWLDataFactory;
import org.semanticweb.owlapi.model.OWLIndividual;
import org.semanticweb.owlapi.model.OWLObjectProperty;
import org.semanticweb.owlapi.model.OWLObjectPropertyAssertionAxiom;
import org.semanticweb.owlapi.model.OWLOntology;
import org.semanticweb.owlapi.model.OWLOntologyCreationException;
import org.semanticweb.owlapi.model.OWLOntologyManager;
import org.semanticweb.owlapi.model.OWLOntologyStorageException;
import org.semanticweb.owlapi.model.PrefixManager;
import org.semanticweb.owlapi.model.UnloadableImportException;
import org.semanticweb.owlapi.util.DefaultPrefixManager;
import org.semanticweb.owlapi.util.OWLEntityRemover;

public class OwlTest{
 public static void main(String[] args) 
 {
  try {   
   OWLOntology ontology = null;
   OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
   OWLDataFactory dataFactory = manager.getOWLDataFactory();
   String base = "http://www.semanticweb.org/ontologies/2011/0/Ontology1294596587406.owl#";
         PrefixManager pm = new DefaultPrefixManager(base);
         
         OWLClass sinifim=dataFactory.getOWLClass(":Masaustu",pm);
         ontology = manager.loadOntologyFromOntologyDocument(new File("E:\\projesonhali.owl"));
   OWLIndividual urunIndv = dataFactory.getOWLNamedIndividual(IRI.create(base+"masaustu2"));
   OWLClassAssertionAxiom sinifIndBirlestirim=dataFactory.getOWLClassAssertionAxiom(sinifim,urunIndv );
   manager.addAxiom(ontology, sinifIndBirlestirim);
   manager.saveOntology(ontology);
   
   //addIndividual("musteri2", "Musteri", "sahiptir", urunIndv);
   removeIndividuals("Musteri");
   
  } catch (OWLOntologyCreationException e) {
   
  }
  catch (OWLOntologyStorageException e) {   
  } 
 }

public static OWLOntology addIndividual(String ID,String typeName,String propName,OWLIndividual indv) throws OWLOntologyStorageException{
   OWLOntology magazaontology = null;
    try {          
             OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
             File file = new File("E:\\projesonhali.owl");
             magazaontology = manager.loadOntologyFromOntologyDocument(file);
             System.out.println("Loaded ontology: " + magazaontology);
             IRI documentIRI = manager.getOntologyDocumentIRI(magazaontology);
             System.out.println("    from: " + documentIRI);             
             
             OWLDataFactory dataFactory = manager.getOWLDataFactory();
String base = "http://www.semanticweb.org/ontologies/2011/0/Ontology1294596587406.owl#";
             PrefixManager pm = new DefaultPrefixManager(base);
             
             OWLIndividual newIndividual = dataFactory.getOWLNamedIndividual(IRI.create(base + ID));
             OWLClass sinifAdi = dataFactory.getOWLClass(":"+typeName, pm);
             OWLClassAssertionAxiom SinifIndBirlesimi = dataFactory.getOWLClassAssertionAxiom(sinifAdi, newIndividual);
             manager.addAxiom(magazaontology,SinifIndBirlesimi);
             manager.saveOntology(magazaontology, new SystemOutDocumentTarget());

             OWLObjectProperty owlProperty = dataFactory.getOWLObjectProperty(propName, pm);
             
             OWLObjectPropertyAssertionAxiom propertyekleme = dataFactory.getOWLObjectPropertyAssertionAxiom(owlProperty, newIndividual, indv);
             AddAxiom aksiomekle = new AddAxiom(magazaontology, propertyekleme);
             manager.applyChange(aksiomekle);                                  
                        
             manager.saveOntology(magazaontology, IRI.create(file.toURI()));
             System.out.println();
             System.out.println();
             manager.saveOntology(magazaontology, new SystemOutDocumentTarget());       
         }     
          catch (UnloadableImportException e) {
             System.out.println("Could not load import: " + e.getImportsDeclaration());
             OWLOntologyCreationException cause = e.getOntologyCreationException();
             System.out.println("Reason: " + cause.getMessage());
         }          
          catch (OWLOntologyCreationException e) {
             System.out.println("Could not load ontology: " + e.getMessage());
         }
          return magazaontology;
  }

  public static OWLOntology removeIndividuals(String typeName)
  {
   OWLOntology magazaOntology = null;
    try
   {
    File newFile = new File("E:\\projesonhali.owl");
    OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
    OWLDataFactory dataFactory = manager.getOWLDataFactory();
    magazaOntology = manager.loadOntologyFromOntologyDocument(newFile);
    String base = "http://www.semanticweb.org/ontologies/2011/0/Ontology1294596587406.owl#";
    PrefixManager pm = new DefaultPrefixManager(base);
    
    OWLEntityRemover remover = new OWLEntityRemover(manager,Collections.singleton(magazaOntology));
    OWLClass Sinif = dataFactory.getOWLClass(":"+typeName, pm);
    Set < owlindividual >  SilinecekIndv = Sinif.getIndividuals(magazaOntology);
    for (OWLIndividual ind : SilinecekIndv) 
    {
       ind.asOWLNamedIndividual().accept(remover);
    } 
    
    manager.applyChanges(remover.getChanges()); 
    remover.reset();
    manager.saveOntology(magazaOntology);
    System.out.println(SilinecekIndv);
    }
   catch (OWLOntologyCreationException e) {
      System.out.println("Could not load ontology: " + e.getMessage());
      } 
   catch(Exception e)
   {
    System.out.println(e.getMessage());
   }
   return magazaOntology;
  } 
 }

Kolay gelsin.

26 Ocak 2011 Çarşamba

Owl, Owl Belgesi Yazma (2)

Equivalent Class, Equivalent Property

<owl:class rdf:id="TexasThings">
  <owl:equivalentclass>
      <owl:restriction>
          <owl:onProperty rdf:resource="#locatedIn"/>
          <owl:someValuesFrom rdf:resource="#TexasRegion"/>
       </owl:restriction>
   </owl:equivalentclass>
</owl:class>

sameAs

<Wine rdf:Id="MikesFavouriteWine">
  <owl:sameAs  rdf:resource="#StGenevieveTexasWhite"/>
</Wine>

İndividuals'lar arasındaki eşitliği gösteriyor.

DifferentFrom, allDifferent Individuals

<WineSugar rdf:Id="Dry"/>

<WineSugar rdf:Id="Sweet">
  <owl:differentFrom rdf:resource="#Dry"/>
</WineSugar>

<owl:Alldifferent>
  <owl:distinctMembers rdf:parseType="Collection">
   <vin:WineColor  rdf:about="#Red"/>
   <vin:WineColor rdf:about="#White"/>
  </owl:distinctMembers>
</owl:Alldifferent>

Intersection-OWL-DL
Kesişimini alır. hasColor özelliği White olan şaraplara WhiteWine denilsin.

<owl:Class rdf:Id="WhiteWine">
  <owl:IntersectionOf  rdf:parseType="Collection">
    <owl:Class rdf:about="#Wine"/>
      <owl:restriction>
          <owl:onProperty rdf:resource="#hasColor"/>
          <owl:hasValue  rdf:resource="#White"/>
      </owl:restriction>
  </owl:restriction>
</owl:Class>

Union-Owl-Dl
Birleşimi ifade ediyor. SweetFruit ve NonSweetFruit'in birleşimi Fruit oluyor.

<owl:Class rdf:Id="Fruit">
  <owl:unionOf rdf:parseType="Collection">
     <owl:Class rdf:about="#SweetFruit">
     <owl:Class  rdf:about="#NonSweetFruit">
   </owl:unionOf>
</owl:Class>

Complement-Owl-Dl
Olumsuzluk katıyor.

<owl:Class rdf:Id="ConsumableThing"/>

<owl:Class rdf:Id="NonConsumableThing">
  <owl:complemetOf  rdf:resource="#ConsumableThing"/>
</owl:Class>

oneOf-owl-dl
Şarap rengi bu üç renkten biridir.

<owl:Class rdf:Id="WineColor">
  <rdfs:subClassOf  rdf:resource="#WineDescriptor"/>
    <owl:oneOf rdf:parseType="Collection">
       <owl:Thing  rdf:about="#White"/>
       <owl:Thing rdf:about="#Rose"/>
      <owl:Thing rdf:about="#Red"/>
   </owl:oneOf>
</owl:Class>

disjointWith  -owl-dl
Ayırma işlemi yapıyoruz. Pasta sınıfı bunlardan biri olamaz.

<owl:Class rdf:Id="Pasta">
   <rdfs:subClassOf rdf:resource="#EdibleThing"/>
     <owl:disjointWith rdf:resource="#Meat"/>
     <owl:disjointWith rdf:resource="#Fowl"/>
     <owl:disjointWith rdf:resource="#SeaFood"/>
     <owl:disjointWith rdf:resource="#Fruit"/>
</owl:Class>

25 Ocak 2011 Salı

Java'da Taban Çevirme Programı

Test isimli main sınıfımız:

public class Test {
	public static void main(String[] args) {
		System.out.println(TabanCevir.tabanCevir(12121, 8));
	}
}
İşlemlerin yapıldığı TabanCevir isimli sınıfımız:

public class TabanCevir {
public static String reverse(String deger)
{
	String sonuc = "";
	for (int i = deger.length(); i >0; i--) 
   {
	sonuc += deger.substring(i-1, i);
    }
	return sonuc;
}
static int i=0;
static String cevrilenString="";
public static String tabanCevir(int sayi, int cevTaban)
{
	if(cevTaban < 2 || cevTaban > 16)
	{
		return "Taban 2-16 arasinda olmali";
	}
else if(sayi < cevTaban)
{
	cevrilenString+=sayi;
	return reverse(cevrilenString);
}
else
{
	while(true)
	{
		if(sayi < cevTaban)
		{
			cevrilenString+=sayi;
			break;
		}
else if(sayi > cevTaban && cevTaban > 10)
			{
			sayi = OndanBuyukTaban(sayi, cevTaban);

			}
else{
			cevrilenString+=sayi%cevTaban;
			sayi=sayi/cevTaban;
		}
	}
	if(i==1)
	{
		return cevrilenString;
	}
	return reverse(cevrilenString);
	}
}
private static int OndanBuyukTaban(int sayi, int cevTaban) {
		if(sayi/cevTaban==10)
		{
			cevrilenString+="a";
			sayi=sayi%cevTaban;
			i=1;
		}else if(sayi/cevTaban==11)
		{
			cevrilenString+="b";
			sayi=sayi%cevTaban;
			i=1;
		}else if(sayi/cevTaban==12)
		{
			cevrilenString+="c";
			sayi=sayi%cevTaban;
			i=1;
		}else if(sayi/cevTaban==13)
		{
			cevrilenString+="d";
			sayi=sayi%cevTaban;
			i=1;
		}else if(sayi/cevTaban==14)
		{
			cevrilenString+="e";
			sayi=sayi%cevTaban;
			i=1;
		}else if(sayi/cevTaban==15)
		{
			cevrilenString+="f";
			sayi=sayi%cevTaban;
			i=1;
		}else{
			sayi = OndanKucukTaban(sayi, cevTaban);

		}
		return sayi;
	}
	private static int OndanKucukTaban(int sayi, int cevTaban) {
		if(sayi%cevTaban==10)
		{
			cevrilenString+="a";
			sayi=sayi/cevTaban;
			i=0;
		}else if(sayi%cevTaban==11)
		{
			cevrilenString+="b";
			sayi=sayi/cevTaban;
			i=0;
		}else if(sayi%cevTaban==12)
		{
			cevrilenString+="c";
			sayi=sayi/cevTaban;
			i=0;
		}else if(sayi%cevTaban==13)
		{
			cevrilenString+="d";
			sayi=sayi/cevTaban;
			i=0;
		}else if(sayi%cevTaban==14)
		{
			cevrilenString+="e";
			sayi=sayi/cevTaban;
			i=0;
		}else if(sayi%cevTaban==15)
		{
			cevrilenString+="f";
			sayi=sayi/cevTaban;
			i=0;
		}
		else{
		cevrilenString+=sayi%cevTaban;
		sayi=sayi/cevTaban;
		i=0;
		}
		return sayi;
	}
}

Owl, Owl Belgesi Yazma (1)

OWL yazımına başlamadan önce hangi tür kelimelerin kullanılacağı tanımlanmalı.Bu tanımlar XML-Namespace düzeninde yapılmalıdır.
OWL’nin en önemli özelliği birçok veriyi dağıtık ortamlardan toplayabilir ve bunlarla ilgili çıkarsama yapabilir.

Ontoloji genel olarak; sınıflar, sınıflara ait özellikler, sınıfa ait örnekler ve bu örneklerin kendi aralarındaki ilişkilerini göstermektedir.

Owl yazımına başlayalım.

Sınıf Tanımlamaları

owl:thing  = Owl’de her sınıfın ait olduğu üst sınıftır.
owl:Nothing = OWL tarafından boş sınıf olarak tanımlanmaktadır.

Sınıf tanımlamasına örnek verelim:

<owl:class rdf:id="Magaza"/>
<owl:class rdf:id="Kullanici"/>

Burada Magaza ve Kullanici isminde sınıf tanımlamış olduk.

Rdf:ID = Sınıf isimlerinin tanımlandığı alandır.

-rdfs:subClassOf
Alt sınıf tanımlamak için kullanılır.

<owl:class  rdf:id="Musteri">
<rdfs:subclassof  rdf:resource="#Kullanici"/>
….
</owl:class>

Individuals
Bir sınıfa ait üyelerin tanıtılmasıdır.

<musteri rdf:id="Musteri1"/>

<owl:thing rdf:id="Musteri1"/>
<owl:thing rdf:about="#Musteri">
<rdf:type rdf:resource="Musteri"/>

Musteri sınıfına ait bir Musteri1 isminde bir üyeyi iki şekilde tanımladık.

Özelliklerin Tanımlanması

Datatype Properties: Daha çok nicelik tanımlamasıdır. Örneğin; Tip tanımlaması.
<owl:datatypeproperty rdf:id="Adi">
   <rdfs:domain rdf:resource="#Kullanici"/>
   <rdfs:range rdf:resource="&xsd;string/">
</owl:datatypeproperty>

Object Properties: Daha çok nitelik tanımlanamasıdır. Örneğin iki sınıf arasındaki bağlantı.
<owl:objectproperty rdf:id="sahiptir">
    <rdfs:domain rdf:resource="#Kullanici/">
    <rdfs:range rdf:resource="#Urunler"/>
</owl:objectproperty>

Restrictions
<owl:class rdf:about="#mathCourse">
   <rdfs:subclassof>
      <owl:restriction>
           <owl:onproperty rdf:resource="#isTaughtBy"/>
           <owl:hasvalue rdf:resource="#949318"/>
      </owl:restriction>
   </rdfs:subclassof>
</owl:class>

Bu örneğimizde matematik kursuna bir kısıtlama getirmişiz. Bu ders sadece 949318 numaralı kişi tarafından öğretilir.

Transitive Özellik
<owl:ObjectProperty rdf:ID="locatedIn">
  <rdf:type rdf:resource="&owl;TransitiveProperty"/>
     <rdfs:domain rdf:resource="&owl;Thing"/>
     <rdfs:range rdf:resource="#Region"/>
</owl:ObjectProperty>

Symmetric Özellik
<owl:ObjectProperty rdf:ID="adjacentRegion">
   <rdf:type rdf:resource="&owl;SymmetricProperty"/>
   <rdfs:domain rdf:resource="#Region"/>
   <rdfs:range rdf:resource="#Region"/>
</owl:ObjectProperty>

Functional Özellik
<owl:ObjectProperty rdf:ID="husband">
   <rdf:type rdf:resource="&owl;FunctionalProperty"/>
   <rdfs:domain rdf:resource="#Woman"/>
   <rdfs:range rdf:resource="#Man"/>
</owl:ObjectProperty>

Woman sadece bir Man'e sahip olabilir.

Inverse Functional Özellik
<owl:ObjectProperty rdf:ID="has social security number">
   <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/>
   <rdfs:domain rdf:resource="#Person"/>
   <rdfs:range rdf:resource="#SocialSecurityNumber"/>
</owl:ObjectProperty>

İki farklı nesne aynı social security number'a sahip olamaz.

InverseOf Özellik
<owl:ObjectProperty rdf:ID="hasChild">
   <owl:inverseOf  rdf:resource=#hasParent"/>
</owl:ObjectProperty>

hasChild, hasParent birbirinin tersidir. 

allValuesFrom,someValuesFrom Özelliği
<owl:Class rdf:ID="Wine">
  <rdfs:subClassOf  rdf:resource="food;PotableLiquid"/>
  ...
  <rdfs:subClassOf>
       <owl:Restriction>
            <owl:onProperty rdf:resource="#hasMaker"/>
            <owl:allValuesFrom rdf:resource="#Winery"/>       
</owl:Restriction>
</rdfs:subClassOf>
....
</owl:Class>


<owl:Class rdf:ID="Wine">
  <rdfs:subClassOf  rdf:resource="food;PotableLiquid"/>
  ...
  <rdfs:subClassOf>
       <owl:Restriction>
            <owl:onProperty rdf:resource="#hasMaker"/>
            <owl:someValuesFrom rdf:resource="#Winery"/>       
</owl:Restriction>   
</rdfs:subClassOf>
....
</owl:Class>

hasValue Özellik
<owl:Class rdf:ID="Burgundy">
...
  <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty  rdf:resource="#hasSugar"/>
         <owl:hasValue rdf:resource="#Dry"/>
       </owl:Restriction>
   </rdfs:subClassOf>
</owl:Class>


Devamı ikinci kısımda anlatılacaktır.





22 Ocak 2011 Cumartesi

XML'e Giriş, XML Schema

Xml (Genişletilebilir İşaretleme Dili); hem insanlar, hem bilgi işlem sistemleri tarafından kolayca okunabilecek dökümanlar oluşturmaya yarayan bir standarttır. Farklı sistemler arasında veri alış verişi yapmaya yarayan ara bir format görevi de görür.

Xml, üst veri (meta data) ortamı için standart bir gösterim sunar. Veri ve belge için ortak yapısal standartlar sunar. Uygulama bağımsız veri ve belge yaratmaktadır.

Xml dökümanları, ağaç veri yapısında olurlar.Bağımsız imler yapıyı oluştururken, içerik ya imin özelliği olarak ya da iki imin arasında gösterilir. Yapıyla ilgili ayrıntılar DTD (Document type definition) ya da XML Schema adı verilen harici dökümanlar ile tanımlanır.

Xml Schema, Xml dökümanlarının yapı ve içerik elemanlarını düzenlemeye yarayan bir dildir.
Xsd (XML Schema Definition), Xml dosyalarında taşınan verilerin nasıl yorumlanacağını tanımlayan dosya. Xsd, Dtd'nin eksikliklerini gidermek üzere geliştirilmişlerdir.

Xml dilinin kullanılmasıyla, veri sadece sınıflandırılabilmekte ve bu tür sınıflandırılmış veriler sadece insanların yorumlama yetenekleriyle anlamlı hale gelmektedir. Bu noktada verilerin yapısallığının son derece düşük olması Xml'in eksi yanlarındandır.

21 Ocak 2011 Cuma

Ontoloji (Ontology), Ontoloji Mühendisliği


Ontoloji daha çok felsefe alanında kullanılan bir terimdir. Felsefede varlık bilim olarak tanımlanır. Bilgisayar biliminde ise ontolojiler semantic web’in gerçekleştirilmesinde kullanılan anahtar teknolojidir. Doksanlı yıllarda yapay zeka alanında popüler bir terim olarak belirli bir alandaki bilgilerin paylaşımını ve yeniden kullanımını sağlayacak “kavramlaştırmaların biçimsel ve açık belirtimi“ olarak tanımlanmış ve kullanılmıştır. Son zamanlarda ontolojilerin kullanımı zeki bilgi entegrasyonu, elektronik ticaret, doğal dil işleme ve bilgi yönetimi konularında daha çok yaygın hale gelmektedir.

Ontolojiler, ontoloji dilleri (RDFS, DAML+OIL, OWL, ..) ile tanımlanır.Bunları daha sonra inceleyeceğiz. Ontoloji geliştirme araçları (editörleri) ontolojilerin görsel olarak kolayca tanımlanmasını sağlar. Bir çok alan için değişik ontoloji dillerinde ontolojiler geliştirilmektedir. (www.daml.org/ontologies)

Ontoloji Mühendisliği: Ontoloji geliştirme süreci, ontoloji yaşam döngüsü, ontoloji yapılandırma için metotlar ve metodolojiler, tüm bunları destekleyen araç aileleri ve dilleri ile bağlantılı tüm etkinlikler ile ilgili bir çalışma alanıdır.

Ontoloji Mühendisliği; bilgi mühendisliği, yapay zeka, bilgisayar bilimleri, yazılım mühendisliği ile ilgili bir mühendisliktir. Bilgi yönetimi, doğal dil işleme, e-ticaret, zeki bilgi bütünleştirme, bilgi elde edimi, veritabanlarının bütünleştirimi, biyo-bilişim, eğitim ve benzeri uygulama alanları vardır.

19 Ocak 2011 Çarşamba

Semantic Web (Anlamsal Ağ)

Web üzerinde aranılan bilgiye ulaşmak gün geçtikçe bir hayli zorlaşmaktadır. Neden olarak şunları söyleyebiliriz:
-Web üzerinde bulunan bilgilerin yapılandırılmış olmaması.
-Dinamik ve dağıtık bir ortam olması.
-Hızlı bir şekilde büyümesi.

Semantic Web, web içeriklerinin sadece doğal dillerde değil, aynı zamanda ilgili yazılımlar tarafından kullanılabilir, anlaşılabilir ve yorumlanabilir bir şekilde ifade edilebileceği, böylelikle bu yazılımların veriyi kolayca bulmasını, birleştirmesini, paylaşmasını sağlamayı amaçlayan, bir internet eklentisidir.

Semantic Web(Anlamsal Ağ)'deki temel amaç; iyi tanımlanmış ve ilişkilendirilmiş bilgilerin web ortamında kolayca, bilgisayar tarafından okunabilir ve anlaşılabilir olmasını sağlayacak standartların ve teknolojilerin geliştirilmesidir.

Semantic Web'in uygulama alanları :

Anlam tabanlı web arama makineleri
Anlam tabanlı sayısal kütüphaneler
Yazılım ajanı tabanlı dağıtık işlem uygulamaları
Ontoloji destekli kurumsal bilgi yönetimi
Otomatik web servisi keşfi, aktive edilmesi, karşılıklı işleyebilirliği ve izlenebilirliği


18 Ocak 2011 Salı

Binary Trees ( Ağaçlar )

Ağaçlar; lineer olmayan belirli niteliklere sahip iki boyutlu veri yapılarıdır. Bağlı listeler, yığıtlar ve kuyruklar gibi doğrusal bir veri yapısı değildir. İkili ağaçlar (Binary Trees) düğümlerinde en fazla iki bağ içerir ve sol düğüm root'dan küçük ve sağ düğüm root'dan her zaman büyüktür.

İkili ağaç yapısını Java kodu ile örneklendireceğim. Bu kodda ikili ağaca ait bir çok özellik ve fonksiyon mevcut.

class Tree
{
private TreeNode root;
int h1 = 0,h2=0;
public Tree()
{ 
root = null; 
}
public TreeNode getRoot()
{ 
return root; 
}



int dugumsayisi(TreeNode p)    //Ağaçtaki node sayısını bulur
{
if(p==null)return 0;
if(p.leftChild!=null)
{
h1=dugumsayisi(p.leftChild);
}
if(p.rightChild!=null)
{
h2=dugumsayisi(p.rightChild);
}
return(max(h1,h2)+1);
}


private int max(int h1, int h2) {
if(h1>h2)return h1;
return h2;
}


public void preOrder(TreeNode localRoot)    //Önce kök sonra left child
{                                           //Son olarak right child taranır
if(localRoot!=null)
{
localRoot.displayNode();
preOrder(localRoot.leftChild);
preOrder(localRoot.rightChild);
}
}

public void inOrder(TreeNode localRoot)     //Önce left child sonra kök
{                                           //Son olarak right child taranır
if(localRoot!=null)                       //Aynı zamanda ağacı sıralı bir şekilde yazar
{
inOrder(localRoot.leftChild);
localRoot.displayNode();
inOrder(localRoot.rightChild);
}
}

public void postOrder(TreeNode localRoot)      //Önce left child
{                                              //Sonra right child
if(localRoot!=null)                          //Son olarak kök taranır
{   
postOrder(localRoot.leftChild);
postOrder(localRoot.rightChild);
localRoot.displayNode();
}
}


public void insert(int yenidata)            //Ağaca eleman ekleme
{
TreeNode yeniNode = new TreeNode();
yeniNode.data = yenidata;
if(root==null)
root = yeniNode;
else
{
TreeNode current = root;
TreeNode parent;
while(true)
{
parent = current;
if(yenidata < current.data)
{
current = current.leftChild;
if(current==null)
{
parent.leftChild=yeniNode;
return;
}
} 
else
{
current = current.rightChild;
if(current==null)
{
parent.rightChild=yeniNode;
return;
}
}
}   
}
}



int derinlik(TreeNode root)              //Ağacın derinliğini hesaplama
{ 
if (root==null) 
{ 
return -1; 
} 
else { 
int lDepth = derinlik(root.getLeftChild()); 
int rDepth = derinlik(root.getRightChild());
if (lDepth > rDepth)
return(lDepth+1); 
else return(rDepth+1); 
} 
}




public int minValue() { 
return( minValue(root) ); 
} 

private int minValue(TreeNode node) { 
TreeNode current = node; 
while (current.getLeftChild() != null) { 
current = current.getLeftChild(); 
}
return(current.getData()); 
}





public int maxValue() { 
return( maxValue(root) ); 
} 


private int maxValue(TreeNode node) { 
TreeNode current = node; 
while (current.getRightChild() != null) { 
current = current.getRightChild(); 
}
return(current.getData()); 
}






static void lookup(TreeNode node, int target)    //Ağaçta arama
{ 
if (node == null) 
{ 
return; 
} 
else 
{ 
if (target == node.getData()) 
System.out.println(node.getData()+"bulundu"); 
else { 
if (target < node.getData()) lookup(node.getLeftChild(), target); 
else lookup(node.getRightChild(), target); 
} 
} 
}


public boolean isBST() {        //Ağaç ikili ağaç mı?
return(isBST(root)); 
}

private boolean isBST(TreeNode node) 
{ 
if (node==null) return(true);
if (node.leftChild!=null && maxValue(node.leftChild) > node.data) 
return(false); 
if (node.rightChild!=null && minValue(node.rightChild) <= node.data) 
return(false);
return( isBST(node.leftChild) && isBST(node.rightChild) ); 
} 


public boolean sameTree(Tree other) {      //İki ağaç eşit mi?
return( sameTree(root, other.root) ); 
}

boolean sameTree(TreeNode a, TreeNode b) 
{ 
if (a==null && b==null) 
return(true);
else if (a!=null && b!=null) 
{ 
return( a.data == b.data && 
sameTree(a.leftChild, b.leftChild) && 
sameTree(a.rightChild, b.rightChild) 
); 
} 
else return(false); 
} 

} 

17 Ocak 2011 Pazartesi

Merge Sort (Birleştirmeli Sıralama)

Merge Sort (Birleştirmeli Sıralama), divide and conquere yaklaşımına sahip bir sıralama algoritmasıdır. Yani elimizdeki diziyi sonuna kadar parçalar ve sonrasında birleştiririz.

Bu algoritmanın adımlarını şu şekil ifade edebiliriz.
1-Sıralı olmayan listeyi ortadan eşit olarak iki alt listeye ayır .(Bu adım liste ikiye ayrılmayana dek devam eder.)
2-Alt listeleri kendi içinde sırala.
3-Sıralı iki alt listeyi tek bir sıralı liste olacak şekilde birleştir.

Bir sayı dizisi üstünde örneklendirecek olursak;
Dizimiz : 45-56-28-18-72-14-23-32

[45-56-28-18]  [72-14-23-32]                       //Dizimizi ikiye ayırdık
[45-56]  [28-18]  [72-14]  [23-32]                 //Tekrar ikiye ayırıyoruz.
[45] [56] [28] [18] [72] [14] [23] [32]            //Dizimiz parça parça oldu.
 \          /   \        /    \         /    \        /    
 [45-56]   [18-28]   [14-72]    [23-32]           //İkili ikili sıralı bir şekilde birleştirmeye başlıyoruz.
  \                      /        \                    /
  [18-28-45-56]        [14-23-32-72]              //Yeniden sıralı bir şekilde birleştirme yapıyoruz.
   \                                                 /
      [14-18-23-28-32-45-56-72]                   // Tüm diziyi sıralı bir şekilde birleştiriyoruz.


Bu algoritma recursive şekilde gerçeklenir.
Merge sort sıralama algoritmasının java kodu aşağıdaki şekilde olur.

public static void mergeSort(int array[],int lo, int n){
int bas = lo;
int son = n;
if (bas >= son) {
return;
}
int middle = (bas + son) / 2;
mergeSort(array, bas, middle);
mergeSort(array, middle + 1, son);
int basinSonu = middle;
int sonunBasi = middle + 1;
while ((bas <= basinSonu) && (sonunBasi <= son)) {
if (array[bas] < array[sonunBasi]) {
bas++;
} else {
int Temp = array[sonunBasi];
for (int k = sonunBasi- 1; k >= bas; k--) {
array[k+1] = array[k];
}
array[bas] = Temp;
bas++;
sonunBasi++;
}
}
}    

Kolay gelsin.




3 Ocak 2011 Pazartesi

Selection Sort(Seçmeli Sıralama)

Selection Sort(Seçmeli Sıralama) algoritmasını anlatmaya çalışacağım.

Selection Sort algoritması; sıralı olmayan dizi içinden ilk elemanı, dizinin en küçüğü kabul eder ve her iterasyonda dizinin diğer elemanlarıyla karşılaştırma yapar. Böylelikle dizinin en küçük elemanı bulunur ve ilk elemanla yer değiştirir. Daha sonra ikinci eleman ele alınır, yine aynı şekilde bu eleman dizinin en küçük elemanı kabul edilir ve her iterasyonda dizinin diğer elemanlarıyla karşılaştırılarak, kalan dizide en küçük eleman bulunmuş olur.Bulunan sayı ikinci elemanla yer değiştirir. Bu döngü dizinin sonuna dek devam eder. Böylece dizi sıralanmış olur.

Örnek verecek olursak:
En basitinden dizimizin ilk hali şu şekil olsun.
8-12-10-4-11
1.iterasyon: 4-12-10-8-11 //4 ile 8 yer değiştirdi
2.iterasyon: 4-8-10-12-11 //8 ile 12 yer değiştirdi
3.iterasyon: 4-8-10-12-11 //10 yer değiştirmedi
4.iterasyon: 4-8-10-11-12 //11 ile 12 yer değiştirdi


Bu algoritmayı java ile kodlayacak olursak:

public void selectionSort(int[] arr) { 
int i, j, minIndex, tmp;       
int n = arr.length;       
for (i = 0; i < n - 1; i++) {   
minIndex = i;               
for (j = i + 1; j < n; j++)
if (arr[j] < arr[minIndex])
minIndex = j;
if (minIndex != i) {
tmp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tmp;
}
}
}