Česky   |  Deutsch   |  English   |  Español   |  Français   |  Indonesia   |  日本語   |  한글   |  Polski   |  Português (BR)   |  Türkçe   |  中文   |  正體中文   |  Your Language  
PlanetNetbeans
NetBeans Gezegeni Blogosferde yer alan NetBeans ile alakalı içerikleri bir araya getirmek üzere oluşturulmuştur.
Takip Edin
[RSS 1.0 Feed] [RSS 2.0 Feed]
[FOAF Subscriptions] [OPML Subscriptions]
NetBeans hakkında günlük mü tutuyorsunuz? NetBeans Gezegenine günlüğünüzü ekleyin.
Üyeler

Powered by:    Planet

Last updated:
May 09, 2012 08:47 AM
All times are UTC

Sponsored by
sponsored by Oracle

visit NetBeans website
Sekkaşı'nın Bayırı » Yazilim - January 19, 2012 11:20 AM
Java Dersleri 22 – Reflection ve Annotation Kullanımı

Programlamaya ilk başladığınızda küçük projeler yaparsınız, dolayısıyla yaptığınız işlem sayısı, kullandığınız tip sayısı pek fazla değildir. Buna bağlı olarak yazdığınız if-else blokları ve switch-case blokları nispeten küçük olacağından okunmasında, takip edilmesinde çok sıkıntı yaşamazsınız. Reflection ve annotation’lar bu durumların tersinin ortaya çıktığı genellikle büyük ölçekli projelerde kullanışlı olduğu için çoğu geliştirici tarafından bilinmeyen mekanizmalardır. reflection [...] İlgili Yazılar:

  1. Java Dersleri 3 – Kontrol Yapıları Bu dersimizde Java’nın kodun akışına yön veren kontrol ifadelerinin...
  2. Eclipse Video Ders (Screencast) #4 – Hibernate Kullanımı Bu makale için yorumlara üye ol. Bunu paylaş:del.icio.us Bunu...
  3. Java Dersleri 20 – JAXB API – Java Nesnelerini XML Dökümanları ile Bağlama Daha önce bloğumuzda Java’da XML işlemlerini anlatan bir ders yayınlamıştık....

Sekkaşı'nın Bayırı » Yazilim - August 11, 2011 08:31 PM
Java Dersleri 21 – Multi Thread Programlama

İşlemciye aynı zaman diliminde birden fazla iş yaptırmanın iki yolu vardır. Bunlar farklı processler oluşturmak ve aynı process içinde farklı threadler oluşturmaktır. İşletim sistemimizde kendi başına çalışan tüm servisler, programlar birer process’tir. Process’lerin kendine ait bir çalışma ortamı bulunur. Burada çalışma ortamından kasıt ram’de kedine has bir çalışma yığınının (execution stack) olmasdır. Çoğu zaman elimizde [...] İlgili Yazılar:

  1. Java Dersleri 10 – Nesne Serileştirme (Serialization) Bu makalede nesnelerin serileştirilmesi ve serileştirilmiş ortamdan tekrar nesnelerimizi oluşturmayı...
  2. Java Dersleri 18 – Network Programlama – UDP Bu makalede Java’nın network programlama kabiliyetlerinden bahsedeceğim. UDP protokolü...
  3. Java Dersleri 20 – JAXB API – Java Nesnelerini XML Dökümanları ile Bağlama Daha önce bloğumuzda Java’da XML işlemlerini anlatan bir ders yayınlamıştık....

Sekkaşı'nın Bayırı » Yazilim - August 06, 2011 08:23 AM
Swing Programlama : 2D Çizim İp Uçları

Bu yazım tam bir ders niteliğinde olmayıp bazı ip uçlarını barındırmaktadır. Eğer Java’da 2D çizim işlemleri hakkında bilginiz yoksa yararlı olmayabilir. Dolgulu çizim yapmak için setPaint() ve fill…() metod çiftlerini kullanıyoruz. Örnek : g2.setPaint(p); g2.fillRect(0, 0, 50, 70); Çizimlerimizde text antialising modunu ayarlamak için : //text antializing on g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); Çizeceğimiz yazının boyutlarını almak için FontMetrics sınıfını kullanıyoruz. Örnek [...] İlgili Yazılar:

  1. Swing Programlama : JTree Java’da sıklıkla arayüzlerde kullanılan elemanlardan birisi de tree(ağaç) görünümüdür. Hiyerarşik...
  2. Swing Programlama : JFileChooser Bu derste Java swing arayüzlerimizden sistemimizdeki dosya sistemine erişimi sağlayan...
  3. Swing Programlama: JTable Temel Kullanım Bu yazımızda en basit haliyle Java UI programlamada sıkça kullandığımız...

Sekkaşı'nın Bayırı » Yazilim - August 04, 2011 08:26 PM
Kabuk Sıralama (Shell Sort) Algoritma Appleti

package net.orhanbalci.sort.shellsort; import java.util.Random; public class ShellSortExample { public static void main(String[] args) { int[] sortArray = new int[1000]; Random r = new Random(); for(int i = 0; i < 1000; i++) [...] İlgili Yazılar:

  1. Kabarcık Sıralama (Bubble Sort ) Algoritma Appleti Algoritma Adı: Kabarcık Sıralama Algoritması (Bubble Sort) Algoritma Türü: Sıralama...
  2. Seçim Sıralama(Selection Sort) Algoritma Appleti Algoritma Adı: Seçim Sıralama Algoritması(Selection Sort) Algoritma Türü: Sıralama Algoritması...
  3. Eklemeli Sıralama (Insertion Sort) Algoritma Appleti Algoritma Adı: Eklemeli Sıralama Algoritması(Insertion Sort) Algoritma Türü: Sıralama Algoritması...

Sekkaşı'nın Bayırı » Yazilim - July 06, 2011 09:43 PM
Java Dersleri 10 – Nesne Serileştirme (Serialization)

Bu makalede nesnelerin serileştirilmesi ve serileştirilmiş ortamdan tekrar nesnelerimizi oluşturmayı öğreneceğiz. Serileştirme işlemi elimizde bulunan nesneleri belirli bir binary formatta kaydetme işlemidir. Java bu işleme özel bir önem atfettiği için dilin temeline bu işlemleri kolaylaştıracak yapılar eklemiştir ve çoğu işlemi kullanıcının haberi olmadan otomatik gerçekleştirmektedir. Serileştirme işlemi özellikle networkten veri aktarma ve persistence işlemlerinde sıkça [...] İlgili Yazılar:

  1. Java Dersleri 21 – Multi Thread Programlama İşlemciye aynı zaman diliminde birden fazla iş yaptırmanın iki yolu...
  2. Java Dersleri 6 – Arayüzler ve Gerçeklenmesi (Interface and Implementation) Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır....
  3. Java Dersleri 5 – Kalıtım (Inheritance) Bu derste Java’nın nesne yönelimli programlamanın temeli olan kalıtım(Inheritance)...

Sekkaşı'nın Bayırı » Yazilim - June 08, 2011 07:47 PM
Java Dersleri 20 – JAXB API – Java Nesnelerini XML Dökümanları ile Bağlama

Daha önce bloğumuzda Java’da XML işlemlerini anlatan bir ders yayınlamıştık. Bu dersimizde ise bunu bir adım ileriye götürerek Java’nın XML ile Java nesneleri arasında bir köprü niteliği taşıyan JAXB API’sini inceleyeceğiz. JAXB API’sinin ortaya çıkış nedeni XML formatının veri taşımasında neredeyse standart hale gelmiş olmasıdır. XML ile taşınan verinin günden güne çabuk bir şekilde değişebileceği [...] İlgili Yazılar:

  1. NetBeans Video Ders (Screencast) #2 GUI Tasarımcısı Özellik Bağlama Kipi Video dersi izlemek için resme tıklayın. Yazıyı Faydalı Bulduysanız Reklamlara...
  2. Java Dersleri 10 – Nesne Serileştirme (Serialization) Bu makalede nesnelerin serileştirilmesi ve serileştirilmiş ortamdan tekrar nesnelerimizi oluşturmayı...
  3. Java Dersleri 21 – Multi Thread Programlama İşlemciye aynı zaman diliminde birden fazla iş yaptırmanın iki yolu...

Sekkaşı'nın Bayırı » Yazilim - December 14, 2010 11:43 AM
Java Dersleri 19 – İstisnai Durumlar (Exceptions)

Java’nın program akışı esnasında meydana gelebilecek hataları işleme mekanizmasına istisnai durumların işlenmesi denir. Mekanizmnın sentaktik ayrıntılarına geçmeden önce böyle bir aracın ne için ortaya çıktığını ve avantajlarını bilmekte fayda var. İstisnai durumların en önemli avantajı hata işleme kodlarını algoritma kodlarından ayırmaktır. eğer bu mekanizma olmasaydı yaptığımız her işlemden sonra o işlemin doğru olup olmadığını kontrol [...] İlgili Yazılar:

  1. Java Dersleri 21 – Multi Thread Programlama İşlemciye aynı zaman diliminde birden fazla iş yaptırmanın iki yolu...
  2. Java Dersleri 2 – Sınıf Kavramı ve Yapısı (Class Structure) JDK kurulumunu ve derleyici kullanımını öğrendikten sonra kod geliştirmeye...
  3. Java Dersleri 22 – Reflection ve Annotation Kullanımı Programlamaya ilk başladığınızda küçük projeler yaparsınız, dolayısıyla yaptığınız işlem sayısı,...

Sekkaşı'nın Bayırı » Yazilim - October 29, 2010 09:36 AM
Çarpışma Algılama Yöntemleri ve Algoritmaları #1: Matematik Temelleri

Yeni bir makale dizisiyle tecrübelerimi sizinle paylaşmak istiyorum. Yine uzun soluklu bir yazı dizisi olacağını tahmin ediyorum. Çarpışma algılama yöntemleri fiziksel olayların taklit edildiği veya birebir simüle edildiği yazılımlarda nesneler arasındaki etkileşimi gerçekçi kılmak için kullanılırlar. Oyunlar ve simülasyonlar temel kullanım alanları olmakla beraber haptik uygulamaları, sanal gerçeklik uygulamaları da akademik alanda çarpışma kontrol algoritmalarının [...] İlgili Yazılar:

  1. Sobel Kenar Algılama Algoritması Algoritma Adı:Sobel Kenar Algılama Algoritması (Sobel Edge Detection) Algoritma...

Sekkaşı'nın Bayırı » Yazilim - October 08, 2010 10:27 AM
Swing Programlama : JTree

Java’da sıklıkla arayüzlerde kullanılan elemanlardan birisi de tree(ağaç) görünümüdür. Hiyerarşik yapıların görüntülenmesinde kullanılan JTree’de MVC tasarım deseni uygulanmıştır. Yani arayüzümüze eklemek istediğimiz elemanın öncelikle modelini tanımlamalıyız. En basit haliyle JTree şu şekilde oluşturulur : DefaultMutableTreeNode node = new DefaultMutableTreeNode("Masa 1"); DefaultMutableTreeNode [...] İlgili Yazılar:

  1. Swing Programlama : JTable Hücre Editörleri Bu yazıda kısaca JTable hücreleri için öntanımlı olan editörün dışında...
  2. Swing Programlama: JTable Temel Kullanım Bu yazımızda en basit haliyle Java UI programlamada sıkça kullandığımız...
  3. Swing Programlama : JFileChooser Bu derste Java swing arayüzlerimizden sistemimizdeki dosya sistemine erişimi sağlayan...

Sekkaşı'nın Bayırı » Yazilim - August 20, 2010 08:32 PM
Eclipse Video Ders (Screencast) #4 – Hibernate Kullanımı

Bu makale için yorumlara üye ol. Bunu paylaş:del.icio.us Bunu paylaş:Facebook Bunu paylaş:FriendFeed Bunu e-postala:Gmail Google Buzz'da paylaş: Bunu ekle:Google Reader Bunu e-postala:Hotmail Bunu Tweet'le! İlgili Yazılar:Eclipse Video Ders (Screencast) #1 Extract Method Refactoring Video dersi izlemek için resme tıklayın. Bu makale için yorumlara... Eclipse Video Ders (Screencast) #3 Introduce Parameter Refactoring Video dersi izlemek için resme tıklayın. Bu makale için yorumlara... Eclipse Video Ders (Screencast) #2 [...] İlgili Yazılar:

  1. Eclipse Video Ders (Screencast) #1 Extract Method Refactoring Video dersi izlemek için resme tıklayın. Bu makale için yorumlara...
  2. Eclipse Video Ders (Screencast) #3 Introduce Parameter Refactoring Video dersi izlemek için resme tıklayın. Bu makale için yorumlara...
  3. Eclipse Video Ders (Screencast) #2 Extract Super Class Refactoring Video dersi izlemek için resme tıklayın. Bu makale için yorumlara...

Sekkaşı'nın Bayırı » Yazilim - July 28, 2010 10:05 AM
Java Dersleri 18 – Network Programlama – UDP

Bu makalede Java’nın network programlama kabiliyetlerinden bahsedeceğim. UDP protokolü uygulamalar arasında datagram adı verilen paketler aracılığıyla haberleşme sağlar. Bu protokol gönderilen paketlerin karşı tarafa gönderilip gönderilmemesi konusunda garanti vermediği gibi paketlerin gönderim sırasında alınmasını da garanti etmez. Herhangi bir datagram paketi gönderebilmek için bir adrese ve port numarasına ihtiyaç duyarsınız. Adres bilgisi paketin ağ üzerinde [...] İlgili Yazılar:

  1. Java Dersleri 21 – Multi Thread Programlama İşlemciye aynı zaman diliminde birden fazla iş yaptırmanın iki yolu...
  2. Swing Programlama : JFileChooser Bu derste Java swing arayüzlerimizden sistemimizdeki dosya sistemine erişimi sağlayan...
  3. Swing Programlama: JTable Temel Kullanım Bu yazımızda en basit haliyle Java UI programlamada sıkça kullandığımız...

Sekkaşı'nın Bayırı » Yazilim - May 27, 2010 06:17 PM
Java Dersleri 17 – JDBC API (Veritabanı Bağlantısı)

Bu makalede Java’nın veritabanı kabiliyetlerinden bahsedeceğim. Java’nın tüm veritabanlarına ulaşmak için kullandığı ortak bir API vardır. JDBC (Java Database Connectivity ) API uygulamamızı arka taraftaki veritabanı sisteminden soyutlamamıza olanak tanır. Bunu yapabilmek için elimizde bağlanmak isetdiğimiz veritabının JDBC sürücüsü olmalıdır. Örneğin HSQLDB bağlantısı yapmak istiyorsak bu veritabanı yönetim sistemine ait JDBC sürücüsünü içeren JAR dosyasını [...] İlgili Yazılar:

  1. Java Dersleri 4 – Erişim Denetleyicileri (Access Modifiers) Bu dersimizde Java’nın metodlar ve sınıflar üzerinde erişim kurallarını...
  2. Java Dersleri 6 – Arayüzler ve Gerçeklenmesi (Interface and Implementation) Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır....
  3. Java Dersleri 12 – String İşlemleri Bu dersimizde Java’nın ve diğer dillerin en temel elemanlarından...

Sekkaşı'nın Bayırı » Yazilim - April 03, 2010 07:22 PM
Swing Programlama : JFileChooser

Bu derste Java swing arayüzlerimizden sistemimizdeki dosya sistemine erişimi sağlayan JFileChooser sınıfının detaylarını anlatmaya çalışacağım. İlk olarak en temel haliyle bir JFileChooser diyalog penceresi nasıl açılır onu görelim : JFileChooser jfc = new JFileChooser(); jfc.showOpenDialog(null); Bu kod parçacığı kullanıcının ön tanımlı dizinini gösteren bir dosya diyaloğu açar. Ön tanımlı dizininizi linux ortamında komut satırına “env” [...] İlgili Yazılar:

  1. Swing Programlama: JTable Temel Kullanım Bu yazımızda en basit haliyle Java UI programlamada sıkça kullandığımız...
  2. Swing Programlama : JTree Java’da sıklıkla arayüzlerde kullanılan elemanlardan birisi de tree(ağaç) görünümüdür. Hiyerarşik...
  3. Swing Programlama: JTable Hücre Editörleri Bu yazıda kısaca JTable hücreleri için öntanımlı olan editörün dışında...

Sekkaşı'nın Bayırı » Yazilim - March 18, 2010 07:50 PM
Java Dersleri 16 – Enum Yapısı

Java da enum yapıları 1.5 versiyonuyla birlikte gelmiştir. Bu versiyondan önce enum gereksinimi static final int değişkenlerle giderilmekteydi. Bu yaklaşımın tip güvenliği yoktur yani enumlar herhangi bir int, double vs değerle karşılaştırılabilirler, herhangi bir int değere eklenebilirler. Bunun yanında grup olarak kullandığınız bu int değişkenleri sırayla gezemezsiniz. Oysa ki enumlarda bu aranan bir özelliktir. Bunun [...] İlgili Yazılar:

  1. Java Dersleri 2 – Sınıf Kavramı ve Yapısı (Class Structure) JDK kurulumunu ve derleyici kullanımını öğrendikten sonra kod geliştirmeye...
  2. Java Dersleri 5 – Kalıtım (Inheritance) Bu derste Java’nın nesne yönelimli programlamanın temeli olan kalıtım(Inheritance)...
  3. Java Dersleri 10 – Nesne Serileştirme (Serialization) Bu makalede nesnelerin serileştirilmesi ve serileştirilmiş ortamdan tekrar nesnelerimizi oluşturmayı...

Sekkaşı'nın Bayırı » Yazilim - March 17, 2010 03:31 PM
Java Dersleri 15 – Koleksiyon API (Collection API) Map

Map arayüzü anahtar-değer ikililerini bir arada tutmak için tasarlanmıştır. Matemetikteki fonksiyonların yazılım tarafında karşılığı olan map veri yapıları yazılım mimarisinde sıkça kullanılır. Örneğin yazılımımızda bulunan nesnelere birer kimlik numarası vererek bu numara ile nesne arasında anahtar-değer ilişkisi kurabiliriz. Böylelikle istediğimiz nesneye kimlik numarası aracılığıyla rahatlıkla erişebiliriz. Java Map arayüzü herhangi bir sıralama kısıtı getirmez. Map’e [...] İlgili Yazılar:

  1. Java Dersleri 13 – Koleksiyon API (Collection API) Listeler Koleksiyonlar yazılımımızda verinin hafızada nasıl tutulacağına karar veren soyut...
  2. Java Dersleri 14 – Koleksiyon API (Collection API) Kuyruklar (Queue) Koleksiyon API’sine ait diğer bir arayüz kuyruk (queue) arayüzüdür....
  3. Java Dersleri 12 – String İşlemleri Bu dersimizde Java’nın ve diğer dillerin en temel elemanlarından...

Sekkaşı'nın Bayırı » Yazilim - March 09, 2010 06:35 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 36

Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘i3(3())’... Ulusal Bilgisayar Olimpiyadı 2009 – Soru 39 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. Aşağıdakilerden... Ulusal Bilgisayar Olimpiyadı 2009 – Soru 37 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘i3(3([i]>))’... İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 38 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘8(i3(>))’...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 39 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. Aşağıdakilerden...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 37 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘i3(3([i]>))’...

Sekkaşı'nın Bayırı » Yazilim - February 19, 2010 11:49 AM
Java Dersleri 14 – Koleksiyon API (Collection API) Kuyruklar (Queue)

Koleksiyon API’sine ait diğer bir arayüz kuyruk (queue) arayüzüdür. Temel olarak listeye benzemekle birlikte listelerden farkı elemanlarını farklı bir şekilde sıralamasıdır. Kuyruk her zaman olmamakla birlike elemanlarını FIFO (ilk giren ilk çıkar) mantığıyla dizerler. Bunun farklı olduğu durumlar da mevcuttur. Örneğin PriorityQueue (Öncelik Kuyruğu) içindeki elemanları neye göre karşılaştıracağını kullanıcıya sorar. Eğer kullanıcı tarafından bir [...] İlgili Yazılar:

  1. Java Dersleri 13 – Koleksiyon API (Collection API) Listeler Koleksiyonlar yazılımımızda verinin hafızada nasıl tutulacağına karar veren soyut...
  2. Java Dersleri 15 – Koleksiyon API (Collection API) Map Map arayüzü anahtar-değer ikililerini bir arada tutmak için tasarlanmıştır....
  3. Java Dersleri 12 – String İşlemleri Bu dersimizde Java’nın ve diğer dillerin en temel elemanlarından...

Sekkaşı'nın Bayırı » Yazilim - February 17, 2010 06:39 PM
Java Dersleri 13 – Koleksiyon API (Collection API) Listeler

Koleksiyonlar yazılımımızda verinin hafızada nasıl tutulacağına karar veren soyut veri yapılarıdır. Koleksiyon sınıfları verileri sıralaması, tekil veri taşıyıp taşımaması gibi özelliklerine göre birbirinden ayrılır. Yapacağımız işlemlerin sıklığına göre bu kapsayıcı (container) koleksiyon sınıflarından seçim yapmamız gerekir. Bu seçim yazılım performansı için hayati önem taşımaktadır. Örneğin elimizdeki veriye sıralı (sequential) veya rastgele (random) erişip erişmeyeceğimiz önemlidir. [...] İlgili Yazılar:

  1. Java Dersleri 14 – Koleksiyon API (Collection API) Kuyruklar (Queue) Koleksiyon API’sine ait diğer bir arayüz kuyruk (queue) arayüzüdür....
  2. Java Dersleri 15 – Koleksiyon API (Collection API) Map Map arayüzü anahtar-değer ikililerini bir arada tutmak için tasarlanmıştır....
  3. Java Dersleri 12 – String İşlemleri Bu dersimizde Java’nın ve diğer dillerin en temel elemanlarından...

Sekkaşı'nın Bayırı » Yazilim - February 17, 2010 09:05 AM
Python Deneyimleri 3

Python’da resim işlemek için standart bir kütüphane yok. Harici kütüphane olarak PIL kullanılabilir Herhangi bir resim dosyasını açmak için Image.open() kullanılıyor. Teker teker piksellere getpixel() fonksiyonuyla ulaşılabiliyor Herhangi bir ASCII kodu karaktere çevirmek için chr() fonksiyonu kullanılıyor Herhangi bir listedeki değerleri tek string nesnesinde birleştirmek için sıkça join() fonksiyonu kullanılıyor. Örneğin mesaj=[78, 110, 66, 101, [...] İlgili Yazılar:

  1. Python Deneyimleri 2 Fonksiyon tanımlamak için def anahtar kelimesini kullanıyoruz. Fonksiyon çağrılmadan...
  2. Python Deneyimleri 1 http://www.istihza.com buradaki python2.x derslerini takip ediyorum from … import...

Sekkaşı'nın Bayırı » Yazilim - February 04, 2010 12:07 PM
Python Deneyimleri 2

Python Logo

Python Logo

  1. Fonksiyon tanımlamak için def anahtar kelimesini kullanıyoruz. Fonksiyon çağrılmadan önce tanımlanmış olmalı
  2. from … import … ifadesinde birinci importtan sonra gelen yere modül adı importtan sonra gelen yere de fonksiyon adı giriliyor. Yani fonksiyonu import etme durumu var. Modül ednilen şey de bağımsız .py uzantılı dosyalar.
  3. Anladığım kadarıyla fonksiyona parametreler pass-by-value yöntemiyle gönderiliyor.
     def fonksiyon(isim ):
            print "Fonksiyondan çağrıldı", isim
            isim = "hübele"
        isim = "hebele"
        fonksiyon(isim)
        print isim
    

    kod parçacığı

    Fonksiyondan çağrıldı hebele
    hebele
    

    çıktısını veriyor.

  4. Hemen bir recursive fonksiyon deneyip fibonacci yazıyorum. Sorun yok :)
    def fibonacci(number):
        if number == 0:
            return 0
        elif number == 1:
            return 1
        else:
            return number + fibonacci(number-1)
    
    print fibonacci(5)
    
  5. Modülleri import ederken from “modül_adı import *” kullandığımızda “__” ile başlayan fonksiyonları import etmiyormuş dikkat etmek gerek
  6. Klasör oluşturma,silme,klasör içeriğini listeleme,harici çalıştırılabilir dosya çalıştırma, process açma kapama gibi işlemlerios modülü aracılığıyla yapıyoruz. Hayati öneme sahip.
  7. Herhangi bir modülde hangi fonksiyonların olduğunu öğrenmek için dir(module_adı) kullanılıyor.
  8. Text dosya okumak,yazmak çok kolay. Sadece open, write, close gibi fonksiyonlar kullanılıyor. Ama open dedikten sonra size dönen değişkenin tipini anlayamadım doğrusu. Fonksiyonlar modül dönebiliyorlar mı?
  9.  dosya = open("testdosyasi.txt","w")
        print type(dosya)
    

    çıktı olarak type ‘file’ veriyor. Bu file tipi nerede tanımlanmış onu bilmem lazım.

  10. Matematikte üstlü sayıları hesaplamak için ** operatörü kullanılıyor
  11. zip dosyalarıyla ilgili işlemler yapmak için zipfile modülü mevcut. Komut satırından zip dosyası açmak kadar kolay kullanımı var
  12. Bir dosyanın zip dosyası olup olmadığını kontrol etmek için is_zipfile() fonksiyonu mevcut
  13. zip dosyası içinden herhangi bir dosya çıkarmak için extract() dosya meta verisine ulaşmak için getinfo() fonksiyonları mevcut.

İlgili Yazılar:

  1. Python Deneyimleri 1 http://www.istihza.com buradaki python2.x derslerini takip ediyorum from … import...
  2. Python Deneyimleri 3 Python’da resim işlemek için standart bir kütüphane yok. Harici...

Sekkaşı'nın Bayırı » Yazilim - February 02, 2010 11:25 AM
Python Deneyimleri 1

Python Logo

Python Logo

  1. http://www.istihza.com buradaki python2.x derslerini takip ediyorum
  2. from … import … ifadeleri sayfanın başına yazılmalıymış
  3. from’dan sonra gelen şeyin paket importtan sonra gelen şeyin sınıf tarzı bir şey olduğunu zannediyorum
  4. Türkçe karakterleri kullanabilmek için #_*_ coding: utf-8 _*_ yazıyoruz. Yine sayfamızın en başına ekliyoruz bunu
  5. print fonksiyonuna birden fazla argüman verirken , kullanıyoruz
  6. Kullanıcıdan girdi input() ve raw_input() fonksiyonları ile alınıyor. input() nümerik değer dönerken, raw_input() string değer dönüyor
  7. pre/post increment/decrement (++/–) operatörleri mevcut değil.
    a = 1
    while a < 10:
        print "Daha Bitmedi"
        ++a;
    

    ifadesi sonsuz döngüye sebep oluyor. Syntax hatası vermedi ilginç!

  8. döngülerde range() fonksiyonu kullanılıyor. Bu fonksiyon Matlab’dan tanıdık geldi bana.
  9. Java ve C++ dan bildiğim liste veri yapısı Python’da built in type olarak karşıma çıktı. Kullanımı çok kolay. append(), insert() gibi fonksiyonlarla düzenleme yapmak pratik.
  10. Liste içinde farklı veri tipleri barınabiliyor.
  11. Listeler + operatörü ile birleştirlebiliyor fakat – operatörü tanımlı değil
  12. pop() listenin son elemanını atıyor
  13. Listeler tersten indekslenebiliyor liste[-1] son elemanı gösteriyor. Büyük kolaylık
  14. Matlab’da bulunan aralık indeksleme yöntemi mevcut. Liste[1:3] 1. eleman dahil 3. eleman dahil olmamak kaydıyla aralıktaki elemanları belirtiyor
  15. Değiştirilemeten bir liste yapısı (tuple) var. Bunun tam olarak ne işe yaradığından emin değilim.
  16. HashTable benzeri sözlük veri yapısı da built in type olarak mevcut. Farklı bir özellik olarak tüm anahtarlar aynı tipte olmak zorunda değil. Scripting diye buna diyorlar herhalde

İlgili Yazılar:

  1. Python Deneyimleri 2 Fonksiyon tanımlamak için def anahtar kelimesini kullanıyoruz. Fonksiyon çağrılmadan...
  2. Python Deneyimleri 3 Python’da resim işlemek için standart bir kütüphane yok. Harici...
  3. Java Dersleri 13 – Koleksiyon API (Collection API) Listeler Koleksiyonlar yazılımımızda verinin hafızada nasıl tutulacağına karar veren soyut veri...

Sekkaşı'nın Bayırı » Yazilim - January 26, 2010 09:14 PM
Fruchterman-Reingold Graf Yerleşim Algoritması

Fruchterman-Reingold

Fruchterman-Reingold


Algoritma Adı:Fruchterman-reingold Graf Yerleşim Algoritması
Algoritma Türü:
Graf Yerleşim Algoritması
Açıklama:
Graf yerleşim algoritmaları, graf üzerinde bulunan köşelerin verilen alan içerisine en iyi şekilde yerleştirilmesini amaçlar. En iyi yerleşimi sağlamak için şu temel prensipler göz önünde bulundurulur :

  1. Köşeleri verilen alan içerisine homojen bir şekilde yay
  2. Kenar kesişmelerini en aza indirge
  3. Kenar uzunluklarını birbirine eşit tut
  4. Varolan simetriyi yansıt
  5. Alan büyüklüğüne adapte ol

Fructerman-Reingold algoritması bunların tamamını sağlayamasada 1,3 ve 4. prensipler bazında iyi bir performans sunar. Bu algoritma graf köşelerini birer çelik bilye kenarları ise birer yay kabul eden algoritmalar sınıfındandır. Graf yapısını fiziksel bir sisteme benzeterek enerjisini minimuma çekmeye çalışır. Gerçek fiziksel yay kuvvet hesapları kullanılmaz. Ayrıca gerçek sistemlerdeki itme ve çekme kuvvetlerini uygulamak yerine daha basit bir model takip edilir. İtme kuvvetleri tüm köşeler için hesaplanırken, sadece bağlı köşeler birbirini çeker. Algoritmanın pseudo kodu şu şekildedir :

  1. Her köşe üzerine düşen itici kuvvetleri hesapla
  2. Her köşe üzerine düşen çekici kuvvetleri hesapla
  3. Köşeleri hareket ettir
  4. Maksimum mesafeyi azalt
  5. Yukarıdaki 4 maddeyi yeterince tekrarla

Algoritma her basamakta köşelerin maksimum hareket mesafesini biraz daha daraltarak sisteme damper etkisi vermekte. Algoritmanın nasıl çalıştığını daha iyi anlamak için ufak bir uygulama geliştirdim. Kullanmak için öncelikle graf yapınızın kayıtlı olduğu dosyayı açmanız, sonrada animasyon menüsünden başlatı seçmeniz gerekli. Algoritmanın detaylarına ve uygulamaya aşağıdaki linkten ulaşabilirsiniz.
Note: There is a file embedded within this post, please visit this post to download the file.

İlgili Yazılar:

  1. K-Orta Kümeleme Algoritması Algoritma Adı: K-Orta Kümeleme Algoritması(K-Means Clustering) Algoritma Türü: Kümeleme...
  2. Sobel Kenar Algılama Algoritması Algoritma Adı:Sobel Kenar Algılama Algoritması (Sobel Edge Detection) Algoritma...
  3. Kabarcık Sıralama (Bubble Sort ) Algoritma Appleti Algoritma Adı: Kabarcık Sıralama Algoritması (Bubble Sort) Algoritma Türü: Sıralama...

Sekkaşı'nın Bayırı » Yazilim - January 17, 2010 10:16 PM
HSQLDB İpuçları

  1. HSQLDB’yi sunucu kipinde çalıştırmak için :
    java -cp ./hsqldb.jar org.hsqldb.Server -database.0 file:veritabanı dosya adı -dbname.0 veritabanı alias adı
    komutu girilmlidi. Bu komut hsqldb.jar dosyasının olduğu klasör içinde verilmiştir.
  2. HSQLDB’ye dosya kipinde bağlanırken veritabanı dosya yolunu jar dosyanıza göreceli verebilirsiniz. Jar dosyanız ile veritabaı dosyanız aynı klasörde bulunuyorlarsa veritabanı bağlantı Stringiniz :
    "jdbc:hsqldb:file:./veritabanı dosya adı" şeklinde olmalıdır.

İlgili Yazı Yok.

Sekkaşı'nın Bayırı » Yazilim - January 06, 2010 11:16 AM
Proje Bülbül

Bülbül pojesi Twitter API sarmalayan bir Java katmanı geliştirmek için başladığım bir proje. Uygulamalarınızdan Twitter mesajlarınıza, listelerinize ulaşabilir. Yeni mesaj yollayabilirsiniz. Proje halen gelişme aşamasında olup ilgili kaynaklara http://kenai.com/projects/bulbul adresinden ulaşabilirsiniz. Şu anda desteklenen API fonksiyonlarının listesi :

  • statuses/public_timeline
  • statuses/home_timeline
  • statuses/friends_timeline
  • statuses/user_timeline
  • statuses/mentions
  • statuses/retweeted_by_me
  • statuses/retweeted_to_me
  • statuses/retweets_of_me
  • statuses/show
  • statuses/update
  • statuses/destroy
  • statuses/retweet
  • statuses/retweets
  • users/show
  • users/search
  • statuses/friends
  • statuses/followers
  • POST lists(create)
  • POST lists id (update)
  • GET lists(index)
  • GET list id(show)
  • DELETE list id (destroy)

İlgili Yazı Yok.

Sekkaşı'nın Bayırı » Yazilim - December 26, 2009 05:15 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 37

Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun.
‘i3(3([i]>))’ komutu kaç numaralı şekli çizer?
A) (8)
B) (3)
C) (11)
D) (14)
E) (7)

CEVAP: Verilen komutu incelersek önce bir defa kuzeye ilerleyip arkasından 9 kere parantez içindeki komutu işletmemiz gerektiği anlaşılır. Parantez içindeki komut ise konumumuzu kaydetmeyi sonra ilerlemeyi sonra kaydettiğimiz konuma geri dönmeyi ve en sonunda sağa 45 derecelik bir dönüş yapmamızı söylüyor. Soru37
Yukarıdaki şekilden tosbağanın izleyeceği yolu takip edelim. Önce ilerle komutuyla 1′den 2′ye gidiyoruz. Kaydet komutu 2. noktada kuzey yönünü kaydeder. İlerle komutu 2′den 3′e gider. Kaydettiğimiz 2 noktasına geri geliyoruz. 45 derece sağa dönüş yapıyoruz. Konumumuzu kaydedip ilerleyerek 2′den 4′e gidiyoruz. Kaydettiğimiz 2 noktasına geri geliyoruz. 45 derece sağa dönüş yapıyoruz. Konumumuzu kaydedip ilerleyerek 2′den 5′e gidiyoruz.Bu işlemi 9 kere tekrarladığımızda yukarıdaki şekili elde etmiş oluyoruz. Doğru şıkkımız A.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 36 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘i3(3(...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 40 Aşağıdakilerden hangisi 13 numaralı şekli çizer? A) 4([i<[i]>[i]]>) B)...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 38 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘8(i3(>))’...

Sekkaşı'nın Bayırı » Yazilim - December 13, 2009 03:57 PM
Birleştirmeli Sıralama (Merge Sort) Algoritma Appleti

Algoritma Adı: Birleştirmeli Sıralama Algoritması (Merge Sort)
Algoritma Türü: Sıralama Algoritması
Açıklama: Parçala yönet mantığıyla geliştirilmiş özyinelemeli (recursive) sıralama algoritmasıdır. Temel olarak üç aşamadan oluşur. Algoritma kendine verilen diziye ikiye böler. Birinci ve ikinci parçaların sıralanmasını sağlar. Son olarak da sıralı iki altdiziyi birleştirir. Örnek olarak 6 elemanlı 6 5 4 3 2 1 dizisini sıralayalım.

1. Adım : Dizi 6 5 4 ve 3 2 1 olmak üzere ikik alt diziye ayrılır.
2. Adım : 6 5 4 alt dizisi 6 ve 5 4 olmak üzere ikiye ayrılır.
3. Adım : 6 tek elemanlı olduğu için sıralanmış kabul edilir.
4. Adım : 5 4 dizisi 5 ve 4 olmak üzere ikiye ayrılır.
5. Adım : 5 ve 4 tek elemanlı olduklarından sıralanmış kabul edilir.
6. Adım : 5 ve 4 birleştirilir. Sıralama 4 5 şeklinde olur.
7. Adım : 6 ve 4 5 dizisi birleştirilir. Sıralama 4 5 6 şeklinde olur. İlk dizimizin ilk alt dizisi sıralanmış olur. 2
8. Adım : 3 2 1 dizisi 3 ve 2 1 olarak ikiye ayrılır.
9. Adım : 3 tek elemanlı olduğundan sıralı kabul edilir.
10. Adım : 2 1 dizisi 2 ve 1 olmak üzere ikiye ayrılır.
11. Adım : 2 ve 1 tek elemanlı olduklarından sıralanmış kabul edilir.
12. Adım : 2 ve 1 birleştirilir. Sıralama 1 2 olur.
13. Adım : 3 ve 2 1 dizileri birleştirilir. Sıralama 1 2 3 şeklinde olur. İlk dizimizin ikinci alt dizisi de sıralanmış olur.
14. Adım : 4 5 6 ve 1 2 3 alt dizileri birleştirilerek 1 2 3 4 5 6 sıralı dizisi oluşur. Algoritma sonlanır.

Algoritma Java Kodu :

int[] mergeSort(int[] siralanacakArray) {

        //eğer sıralanacak dizi uzunluğu 2'den küçükse
        //dizi sıralı sayılır
        if (siralanacakArray.length < 2) {
            return siralanacakArray;
        }

        //ikiye bölünen dizi boyutlarını hesaplıyoruz
        int ilkArrayBoyutu = siralanacakArray.length / 2;
        int ikinciArrayBoyutu = siralanacakArray.length - ilkArrayBoyutu;

        //iki alt diziyi ilklendiriyoruz
        int[] ilkArray = new int[ilkArrayBoyutu];
        int[] ikinciArray = new int[ikinciArrayBoyutu];

        //dizinin ilk parçasını bölüyoruz
        for (int i = 0; i < ilkArrayBoyutu; i++) {
            ilkArray[i] = siralanacakArray[i];
        }

        //Dizinin geri kalanını ikinci diziye atıyoruz
        int j = 0;
        for (int k = ilkArrayBoyutu; k < siralanacakArray.length && j < ikinciArrayBoyutu; k++, j++) {
            ikinciArray[j] = siralanacakArray[k];
        }

        //Böldüğümüz ilk diziyi sıralıyoruz
        int[] siraliIlkArray = mergeSort(ilkArray);

        //Böldüğümüz ikinci diziyi sıralıyoruz
        int[] siraliIkinciArray = mergeSort(ikinciArray);

        int m = 0, n = 0, y = 0;

        //Sıralı iki diziyi tekrar birleştiriyoruz.
        //Sırasıyla bütün elemanları karşılaştırarak küçük olanı önce
        //olmak kaydıyla ilk dizide birleştiriyoruz
        while (m < ilkArrayBoyutu && n < ikinciArrayBoyutu) {
            if (siraliIlkArray[m] <= siraliIkinciArray[n]) {
                siralanacakArray[y] = siraliIlkArray[m];
                m++;
                y++;
            } else if (siraliIlkArray[m] > siraliIkinciArray[n]) {
                siralanacakArray[y] = siraliIkinciArray[n];
                n++;
                y++;
            }
        }

        //Eğer ilk dizide eleman kalmışsa bunları listenin sonuna ekliyoruz
        while (m < ilkArrayBoyutu) {
            siralanacakArray[y] = siraliIlkArray[m];
            y++;
            m++;
        }

        //Eğer ikinci dizide eleman kalmışsa bunları listenin sonuna ekliyoruz
        while (n < ikinciArrayBoyutu) {
            siralanacakArray[y] = siraliIkinciArray[n];
            y++;
            n++;
        }

        //Sıralanmış diziyi dışarı veriyoruz.
        return siralanacakArray;
    }

İlgili Yazılar:

  1. Eklemeli Sıralama (Insertion Sort) Algoritma Appleti Algoritma Adı: Eklemeli Sıralama Algoritması(Insertion Sort) Algoritma Türü: Sıralama Algoritması...
  2. Seçim Sıralama(Selection Sort) Algoritma Appleti Algoritma Adı: Seçim Sıralama Algoritması(Selection Sort) Algoritma Türü: Sıralama Algoritması...
  3. Kabarcık Sıralama (Bubble Sort ) Algoritma Appleti Algoritma Adı: Kabarcık Sıralama Algoritması (Bubble Sort) Algoritma Türü: Sıralama...

Sekkaşı'nın Bayırı » Yazilim - December 11, 2009 05:54 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 38

Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun.
‘8(i3(>))’ Komutu kaç numaralı şekli çizer?
A) (12)
B) (10)
C) (4)
D) (5)
E) (2)

CEVAP : 39. ve 40. soruya nazaran daha kolay bir soru. Yapmamız gereken komutları takip ederek yolu çizmek. Verilen komutu incelersek 8 kere aynı komutların tekrar edilmesini istiyoruz. Tekrar edeceğimiz komut ise ileri gidip sağa 3*45 yani 135 derecelik dönüş yapmak. Yani tosbağamız sırasıyla aşağıda verilen köşelerden geçer :
soru38
Doğru seçenek B şıkkı.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 44 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? int i, a[]...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 39 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. Aşağıdakilerden...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 37 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘i3(3([i]>))’...

Sekkaşı'nın Bayırı » Yazilim - December 07, 2009 09:18 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 39

Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun.

Aşağıdakilerden hangisi (5) numaralı şekli çizer.
A) 4([<i2(3(>)i)]>>)
B) >4([i]>>i>>i)
C) 4([ii3(>>>i)]>>)]
D) 4([ii3(>>>i)]>)]
E) >4([i]>>i>i)

CEVAP: Şekil her ne kadar karmaşık görünsede aynı alt şeklin 4 kere tekrar edilmesinden oluşuyor. Yapı olarak 40. soruya çok benziyor. Biz 5 numaralı şeklin sol üst çeyreğindeki şeklin çizilmesine odaklanalım.
Soru 39
Yukarıdaki şekle göre algoritmamızı yazmaya başlayabiliriz. Tosbağamız kuzeye baktığından dolayı öncelikle 45 derecelik sola dönüş gerekli bize. İfademiz < şeklinde başlıyor. 1′den 2′ye gitmek için ilerliyoruz. İfademiz <i oldu. 2. köşeden saat yönünde 135 derecelik dönüş lazım. İfademiz <i>>> oldu. 2′den 3′e gitmek istiyoruz. İfademiz <igt;>>i oldu. Yine 3. köşede 135 derecelik dönüş yapmamız gerekiyor. İfademiz <i>>>i>>> oldu. 3′den 4′e gitmek istiyoruz. İfademiz <i>>>i>>>i oldu. Diğer tüm alt şekiller için aynı algoritma uygulanabilir. Bunu değişik şekillerde sadeleştirebiliriz. Örneğin <2(i3(>))i veya <i2(3(>)i) şeklinde sadeleştirebiliriz. Diğer şekilleride çizebilmek için bize 90 derecelik dönüşler gerekli. Tabi bunun için öncelikle ilk konumumuzu hatırlamalı ve alt şeklin çizilmesi bittiği zaman tekrar ilk konuma dönmemiz gerekir. Yani ifade [<i2(3(>)i)] şeklini alır. Bunun sonuna 90 derecelik dönüş ekleyip işlemi 4 kere tekrarlamamız 5 numaralı şeklin çizilmesini sağlayacaktır. İfademiz 4([<i2(3(>)i)]>>) şeklini aldı. Doğru seçenek A şıkkı.
Not: Çizim Dia yazılım ile üretilmiştir.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 40 Aşağıdakilerden hangisi 13 numaralı şekli çizer? A) 4([i<[i]>[i]]>) B)...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 38 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘8(i3(>))’...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 37 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘i3(3([i]>))’...

Sekkaşı'nın Bayırı » Yazilim - December 06, 2009 04:15 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 40

Soru40
Soru40-Devam

Aşağıdakilerden hangisi 13 numaralı şekli çizer?
A) 4([i<[i]>[i]]>)
B) 4([i<[i>>i]]>>)
C) >4([i<[i]>>[i]]>>)
D) 4([i<[i]>>[i]]>>)
E) 4([i<[i]>>[i]]>)

CEVAP: 13 Numaralı şekli incelediğimizde Y biçimli bir şeklin 4 defa 4 ana yönde tekrarlandığını görmekteyiz. Öyleyse yapmamız gereken Y biçimli çizim için gerekli olan algoritmayı bulup bunu 4 defa yinelemek olacaktır. Kuzeye bakan Y biçimli yolu çizmeden önce yerimizi kaydetmeliyiz ki geri dönüp diğer yönelere de çizim yapabilelim. O zaman ifademiz [] içinde yeralacaktır. İlk yapmamız gereken kuzeye bir çizgi çizmek. İfademiz [i] şeklini aldı. Bu noktada iki farklı yöntem uygulanabilir. Önce soldaki sonra sağdaki bacak çizilebilir, veya tersi olarak önce sağdaki sonra soldaki bacak çizilebilir. Şıkları incelediğimizde tüm seçeneklerde önce sola dönüş yapıldığını görüyoruz yani önce soldaki bacağın çizilmesi isteniyor. Sol 45 derecelik bir dönüş gerekli. İfade [i<] şeklini alır. Bu noktaya sağ bacağı çizmek için geri döneceğimizden kaydediyoruz. İfade[i<[] şeklini alır. Sol bacağı çiziyoruz. İfade [i<[i] şeklini aldı. Sağ bacağı çizmek için bir önceki konumumuza gidiyoruz. İfade [i<[i]] şeklini aldı. Yönümüzü sağ bacağa çevirmek için 90 derece sağa dönmemiz gerekiyor. Çift dönüş gerekli. İfademiz [i<[i]>>] şeklini aldı. Burada yerimizi kaydetmemize gerek olmamasına rağmen tüm seçeneklerde yer kaydedilmiş. İfademiz [i<[i]>>[] şeklini aldı. Sağ bacağı çiziyoruz. [i<[i]>>[i]. Önce sağ bacağı çizmeden önceki konumumuza daha sonra da ilk konumumuza geri dönüyoruz. İfademiz [i<[i]>>[i]] oldu. Şu anda kuzeye bakan Y şeklini tamamlamış bulunuyoruz ve tosbağamızın yönü kuzeye bakıyor. Burada yine iki farklı yol izlenebilir. Saat yönünde veya saat yönünün tersinde ilerlenebilir. Saat yönünde dönmeyi tercih ediyoruz. 90 derecelik dönüş gerekli. İfademiz [i<[i]>>[i]]>> şeklini aldı. Aynı algoritmayı 4 kere uygulamak istiyoruz. İfademiz 4([i<[i]>>[i]]>>) şeklini aldı. Doğru seçenek D şıkkı. Burada tekrar dikkatinizi çekmek istiyorumaynı şekli çizecek birden fazla algoritma olabilir. Burada seçenekleri takip ederek doğru sonuca ulaşabilirsiniz.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 39 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. Aşağıdakilerden...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 37 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘i3(3([i]>))’...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 49 Aşağıdaki programın derlenip calıştırılması sonucu ne basılır? int i=5, j=7;...

Sekkaşı'nın Bayırı » Yazilim - December 06, 2009 11:29 AM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 41

Aşağıdaki programın çalışması sonucu ekrana ne basılır?

int n=5, t, a, b, c;
main(void)
{ for (a=1; a<=n; a+=1)
     for (b=1; b<=a; b+=2)
        for (c=1; c<=b; c+=3) t += a+b+c;
   printf("%d",t); }

A) 36
B) 54
C) 67
D) 74
E) 93

CEVAP: 42. Soruyla aynı tip soru. Takip edeceğimiz yöntem 42. soru ile aynı olacaktır. Yine döngü değişkenlerinin alabilecekleri değerleri yazarak işe başlayalım.

a : 1, 2, 3, 4, 5
b : 1, 3, 5
c : 1, 4

a = 1 iken b = 1 c = 1 olabilir
a = 2 iken b = 1 c = 1 olabilir
a = 3 iken b = 1 c = 1 olabilir
b = 3 c = 1 olabilir
a = 4 iken b = 1 c = 1 olabilir
b = 3 c = 1 olabilir
a = 5 iken b = 1 c = 1 olabilir
b = 3 c = 1 olabilir
b = 5 c = 1 olabilir
b = 5 c = 4 olabilir
Buradan t değişkeninde birikecek olan değer = [1+1+1] + [2+1+1] + [3+1+1] + [3+3+1] + [4+1+1] + [4+3+1] +[5+1+1] + [5+3+1] + [5+5+1]+ [5+5+4] = 74 Doğru seçenek D.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 42 Aşağıdaki programın çalışması sonucu ne basılır? int n=5, t, a,...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 38 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘8(i3(>))’...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 39 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. Aşağıdakilerden...

Sekkaşı'nın Bayırı » Yazilim - December 03, 2009 06:41 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 42

Aşağıdaki programın çalışması sonucu ne basılır?

int n=5, t, a, b, c;
main(void)
{ for (a=1; a<=n; a+=1)
     for (b=1; b<=a; b+=3)
        for (c=1; c<=b; c+=2) t += a+b+c;
   printf("%d",t); }

A) 36
B) 54
C) 67
D) 74
E) 93

CEVAP : İçiçe geçmiş döngü soruları çetrefilli olabilir. Genelde bu tür sorular için herkesin ayrı bir stratejisi vardır. Benim stretejim döngü değişkenlerinin alabileceği değerleri listeleyip kontrol ifadelerini doğrulamaktır. Yukarıdaki soru için sırasıyla a, b, c değişkeninin alabileceği değerleri yazalım :

a : 1, 2, 3, 4, 5
b : 1, 4
c : 1, 3

a = 1 iken b = 1 ve c = 1 olabilir.
a = 2 iken b = 1 ve c = 1 olabilir.
a = 3 iken b = 1 ve c = 1 olabilir.
a = 4 iken b = 1 ve c = 1 olabilir.
b = 4 ve c = 1 olabilir.
b = 4 ve c = 3 olabilir.
a = 5 iken b = 1 ve c = 1 olabilir.
b = 4 ve c = 1 olabilir.
b = 4 ve c = 3 olabilir.
Buradan t değişkeninde birikecek olan değer = [1+1+1] + [2+1+1] + [3+1+1] +[4+1+1] +[4+4+1] +[4+4+3] + [5+1+1]
+ [5+4+1] + [5+4+3] = 67. Doğrue seçenek C.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 41 Aşağıdaki programın çalışması sonucu ekrana ne basılır? int n=5, t,...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 43 Aşağıdaki programın derlenip çalıştırılmasında ne olur? int i,j; main(void) {...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 50 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? #include <stdio.h> int...

Sekkaşı'nın Bayırı » Yazilim - December 02, 2009 07:20 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 43

Aşağıdaki programın derlenip çalıştırılmasında ne olur?

int i,j;
main(void)
{ for (;i<j<10; i++,j++) printf("*"); }

A)Sonsuz döngüye girip sürekli ‘*’ basar
B) 9 tane ‘*’ basar.
C) 45 tane ‘*’ basar.
D) Derleme hatası oluşacağından çalıştırılamaz
E) Çalışır ama hiç birşey basmaz.

CEVAP: Güzel bir operatör associativity sorusu. Associativity baskınlığı aynı olan operatörlerin sağdan sola mı soldan sağa mı hesaplanacağını belirtir. Burada döngü kontrol ifadesi olan

i<j<10

buna bir örnektir. < operatörünün hesaplanma yönü soldan sağadır. Yani yukarıdaki

i<j<10

ifadesinde öncelikle

i<j 

hesaplanır. < operatörü mantıksal (logical) bir operatör olduğu için yanlış olduğu durumda 0 doğru olduğu durumda 1 döner. Soruda i ve j'ye değer atanmadığından dolayı ilk olarak 0 değerini alırlar. Bundan dolayı

i < j 

ifadesi yanlış olur böylelikle 0 değeri döner.

i<j<10 

ifadesi

0 < 10 

olur ve döngüyü doğrular. i ve j değişkenleri döngünün her turunda eşit olacaklarından

i<j 

ifadesi her zaman 0 döncektir. Böylelikle döngü sürekli dönecektir.
Doğru şıkkımız A.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 50 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? #include <stdio.h> int...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 46 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? int a,b,c; int...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 41 Aşağıdaki programın çalışması sonucu ekrana ne basılır? int n=5, t,...

Sekkaşı'nın Bayırı » Yazilim - December 02, 2009 06:49 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 44

Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır?

int i, a[] = {1,2,3,4,5,6,7};
void f(int i, int j)
{ int temp;
  if (i==j) return;
  temp = a[i];
  a[i] = a[j];
  a[j] = temp; }
main(void)
{ f(1,2);
  f(2,6);
  f(6,1);
  for (i=0; i<7; i++) printf("%d ",a[i]); }

A) 1 2 7 4 5 6 3
B) 1 6 3 4 5 2 7
C) 1 2 3 4 5 6 7
D) 1 1 1 1 1 1 1
E) Derleme hatası oluşacağından, çalıştırılamaz.
CEVAP: Nispeten kolay bir soru. Öncelikle programda herhangi bir sentaktik hata yok. Tanımlanan f fonksiyonu bir değiş tokuş fonksiyonu (swap) olup parametrelerde verilen i. ve j. elemanların yerini değiştirir. Yapmamız gereken her f fonksiyonu çağrıldığında a dizisinin içeriğini yazarak takip etmek.
f(1,2) sonrası : 1 3 2 4 5 6 7
f(2,6) sonrası : 1 3 7 4 5 6 2
f(6,1) sonrası : 1 2 7 4 5 6 3
Görüldüğü gibi son durumda dizimizde sırasıyla 1 2 7 4 5 6 3 değerleri bulunur. Doğru seçenek A şıkkı.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 38 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘8(i3(>))’...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 41 Aşağıdaki programın çalışması sonucu ekrana ne basılır? int n=5, t,...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 42 Aşağıdaki programın çalışması sonucu ne basılır? int n=5, t, a,...

Sekkaşı'nın Bayırı » Yazilim - November 24, 2009 07:05 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 45

char a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};

void x(char i,char j)
{ char s;
  s = a[i][j];
  a[i][j] = a[2-i][2-j];
  a[2-i][2-j] = s; }

main(void)
{ int i,j;
  for (i=0; i<4; i++) @@@@@@ ;
  for (i=0; i<3; i++) for (j=0; j<3; j++) printf("%d ",a[i][j]); }

Yukarıdaki programın çalıştırılması sonucu
9 8 7 6 5 4 3 2 1
basılması için @@@@@@ ile gösterilmiş yerde ne olaması gerekir?

A) x((i+1)%3-1,(i-1)%3+1)
B) x((i-1)%3+1,(i+1)%3-1)
C) x((i+1)%3,i/3)
D) x(i/3,i%3)
E) Bu seçeneklerden başka bir ifade.

CEVAP : Programımızın verilen girdideki elemanlarının sırasını tersine çevirmesi beklenmektedir. Bunun için x(i,j) fonksiyonumuz tanımlanmıştır. x(i,j) iki boyutlu dizimizde (i,j) elemanı ile (2-i,2-j) elemanının yerlerini değiştiren bir swap fonksiyonudur. Örneğin i = 0, j = 0 için fonksiyonumu z a[0][0] ile a[2][2] elemanlarının yerlerini değiştirir. Dizimizin tersine çevrilmesi için şu yer değiştirme işlemleri yapılmalıdır :
[0][0] <--> [2][2]
[0][1] <--> [2][1]
[0][2] <--> [2][0]
[1][0] <--> [1][1]
Yani x(i,j) fonksiyonumuzun alması gereken parametreler yukarıdaki değişimlerin sol tarafındaki değerlerdir. @@@@@@ ile gösterilen yer for (i=0; i<4; i++) döngüsünün altındadır. Buradan 1. sütundaki değerleri i/3 integer bölmesi ve i%3 mod işlemi ile elde edilebileceği görülmektedir. Doğru seçeneğimiz D olacaktır.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 44 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? int i, a[]...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 47 Aşağıdaki programın derlenip çalıştırılmasında ne olur? char i, *p="ABCDEFG", q[8]="GFEDCBA";...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 42 Aşağıdaki programın çalışması sonucu ne basılır? int n=5, t, a,...

Sekkaşı'nın Bayırı » Yazilim - November 20, 2009 11:22 AM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 46

Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır?

int a,b,c;
int main(void)
{ a = 9;
{ int b = 8;
c = b;
{ int c=7;
a = b;}}
printf("%d %d %d",a,b,c);}

A) 8 7 8
B) 8 0 8
C) 9 8 7
D) 7 0 8
E) Derleme hatası vereceğinden çalıştırılamaz.

CEVAP: Yine klasik sayılabilecek bir değişken kapsamı (scope) ve gölgeleme (shadowing) sorusu. C’de değişkenlerin kapsamları ve ömürleri kapsama alanı içinde bulundukları süslü parantezlerle {} belirlenir. Örneğin programın başında tanımlanan int a,b,c, değişkenleri herhangi bir parantez içinde olmadıklarından evrensel(global) değişkenlerdir ve kod içinde her yerden ulaşılabilirler. Ömürleri programın başlamasıyla başlar bitişiyle sona erer. main fonksiyonu gövdesi içinde içiçe iki kod bloğu var. Bunlardan birincisinde tanımlanan int b = 8 ifadesi global b değişkenini gölgeler. Yani bu ifadededen sonra gelen ve blok içinde kalan tüm b’ler bu tanımdaki b’ye işaret eder. yine aynı şekilde ikinci iç blokta tanımlanan int c = 7 ifadesi evrensel c değişkenini gölgeler. Bu kurallar gözönünde bulundurarak değişkenlerimize atanan değerleri iç bloktan dış bloğa doğru takip edersek kolayca çözüme ulaşırız. En iç bloktaki a = b ifadesi ile evrensel a değişkenine 8 değeri atanır. İlk bloktaki c = b ifadesi ile de aynı şekil de evrensel c değişkenine 8 değeri atanır. kod bloklarına dikkatlice bakılacak olursa evrensel b değişkenine herhangi bir değer atanmamıştır dolayısıyla varsayılan değer olarak 0 değerindedir. Doğru cevabımız B seçeneği olacaktır.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 43 Aşağıdaki programın derlenip çalıştırılmasında ne olur? int i,j; main(void) {...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 47 Aşağıdaki programın derlenip çalıştırılmasında ne olur? char i, *p="ABCDEFG", q[8]="GFEDCBA";...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 44 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? int i, a[]...

Sekkaşı'nın Bayırı » Yazilim - November 19, 2009 10:15 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 47

Aşağıdaki programın derlenip çalıştırılmasında ne olur?

char i, *p="ABCDEFG", q[8]="GFEDCBA";
main()
{ for(i=1; i<7; i++) q[i-1] -= p[i] % p[i-1];
  printf("%s",q); }

A) i değişkenine sayısal değer atandığından derleme hatası oluşur.
B) p değişkenine atanan ilk değerin türünden ötürü derleme hatası oluşur.
C) FEDCBAA
D) AAAAAAA
E) FFFFFFF

CEVAP : i değişkeni her ne kadar char olarak tanımlansada sayısal değer atanabilir çünkü C’de char değişkenler sayısal değer olarak hafızada tutulurlar. p değişkeni de karakter işaretçi (pointer) olarak tanımlanmış olup atanan ilk değerde sorun yoktur. Döngümüzü inceleyecek olursak i değişkeni 1′den 6′ya kadar değerler alır yani döngümüz 6 kere döner. q[i-1] -= p[i] % p[i-1]; ifadesinin sağ tarafına bakacak olursak p[i] mod p[i-1] hesaplanmıştır yani p dizisinde bir sonraki elemanın bir önceki elemana göre modu alınmıştır. Örneğin döngünün ilk turunda bu ifade ‘B’ % ‘A’ şeklinde olacaktır. p dizisini incelediğimizde birer karakter artarak giden bir seri olduğunu görürüz. Yani bu işlemin sonucu her daim 1 olacaktır. İfademiz q[i-1] -= 1 şekline gelir. Bu da q dizisindeki elemanları birer azaltmak manasına gelir. Doğru şıkkımız C olacaktır.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 46 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? int a,b,c; int...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 50 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? #include <stdio.h> int...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 45 char a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; void x(char i,char j) {...

Sekkaşı'nın Bayırı » Yazilim - November 19, 2009 09:11 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 48

Aşağıdaki programın derlenip calıştırılması sonucu ne basılır?

int i;
main(void)
{ printf("%d",(++i)++); }

Cevap: 49. soruya benzer bir soru. Pre increment ve post increment operatörlerinin kullanımı soruluyor. Bu öoperatörlerin aldığı parametreler lvalue cinsinden olmalıdır yani pointer veya variable cinsinden olmalıdır. Yani 9++ gibi bir ifade geçersizdir. Dolayısıyla (++i)++ ifadesinde (++i) değeri lvalue olamayacağı için ifade geçersizdir. Programımız derleme hatası verecektir.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 49 Aşağıdaki programın derlenip calıştırılması sonucu ne basılır? int i=5, j=7;...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 47 Aşağıdaki programın derlenip çalıştırılmasında ne olur? char i, *p="ABCDEFG", q[8]="GFEDCBA";...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 46 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? int a,b,c; int...

Sekkaşı'nın Bayırı » Yazilim - November 18, 2009 07:45 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 49

Aşağıdaki programın derlenip calıştırılması sonucu ne basılır?

int i=5, j=7;
main(void)
{ ((i>j) ? i : j) = 9;
  printf("%d %d",i,j); }

Cevap: Bu soru biraz detaylı bilgi gerektiren bir soru ve programla dilinden diline değişen cevaplara sahip. Ternary operator (üçlü operator) sentaksının bilinip bilinmediğini ölçen bir soru. C dilnde üçlü ?: operatörü koşullu ifadeler yazmakta kullanılır. Örneğin :

int a;
int b;
b=5;
a = (b > 3) ? 1 : 2;

burada b 3′ten büyük olduğu için ilk değer yani 1 değeri a değişkenine atanacaktır. Sorumuzda önemli olan ifade

((i>j) ? i : j) = 9;

ifadesidir. Burada üçlü operator asignment yani atama operatörünün solunda yer almaktadır. İfadenin sentaks olarak doğru olabilmesi için üçlü operatörün çıktısının lvalue olması beklenir. C dilinin standart versiyonunda yukarıdaki üçlü operatörün çıktısı i > j yanlış olduğu için j değişkeninin değeridir yani 7 dir, değikenin kendisi değildir. 7 = 9 gibi bir ifade geçerli bir ifade olmadığından programımız derleme hatasından dolayı çalışmayacaktır. Daha önce de belirttiğim gibi bu sorunun cevabı tamamen üçlü operatörün programlama dilinde nasıl gerçeklendiğine bağlıdır. Örneğin aynı programı c++ dilinde değiştirmeden derleyip çalıştırırsanız 5 9 değerlerinin basıldığını göreceksiniz. Bu ayrımın sebebi c++’da üçlü operatörün dönüş değerinin değişkenin değeri değil kendisi olmasıdır, bu da geçerli bir lvalue olduğundan program beklenen çıktıyı verir. Yine GNU C eklentilerinde de c++’a benzer bir yaklaşım sergilenmiş olup program 5 9 çıktısını verir. Aşağıdaki linkten daha ayrıntılı bilgiye ulaşabilirsiniz :
http://tigcc.ticalc.org/doc/gnuexts.html#SEC70

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 48 Aşağıdaki programın derlenip calıştırılması sonucu ne basılır? int i; main(void)...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 44 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? int i, a[]...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 43 Aşağıdaki programın derlenip çalıştırılmasında ne olur? int i,j; main(void) {...

Sekkaşı'nın Bayırı » Yazilim - November 18, 2009 06:58 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 50

Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır?

#include <stdio.h>
int x,y,z;
main(void)
{
for (x=1,y=2,z=3; x<10,y<5,z<10; x++,y--,z=x++);
  printf("*");
}

Cevap : Klasik bir dikkat sorusu. Hemen döngünün kaç kere dönmesi gerektiğini hesaplamak yerine sentaktik olarak programı incelememiz gerekir. For döngüsünün hemen sonundaki ; döngü gövdesi yerine geçmiştir. Yani aşağıdaki printf(”*”) satırı döngü dışındadır böylelikle sadece bir kere çalışmış olur. Cevabımız 1 adet * basılır olacaktır. Bu soruda döngü sonundaki ; kaldırılacak olursa cevabımız 5 adet * basılır olacaktır. Döngü sayısını kısıtlayan değişken z değişkenidir. z değişkeni sırasıyla 3,2,4,6,8 değerlerini alarak döngü koşulunu 5 kere sağlamış olacaktır.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 46 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? int a,b,c; int...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 47 Aşağıdaki programın derlenip çalıştırılmasında ne olur? char i, *p="ABCDEFG", q[8]="GFEDCBA";...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 42 Aşağıdaki programın çalışması sonucu ne basılır? int n=5, t, a,...

Sekkaşı'nın Bayırı - October 30, 2009 06:42 PM
İki Tepe, İki Dağ Ortasında Bizim Bağ

Haşhaş

Haşhaş


Malumunuz ekmek kavgası, iş güç ve benzer nedenlerden dolayı ülkemizin nadide şehirlerinden birinde ve hatta en kalabalık olanında ikamet etmekteyim. İstanbul’un boğazıydı, tarihiydi, erguvanıydı, kargaşasıydı, kapkaççısıydı, tinercisiydi derken yedi tane tepesini unutmamak lazım gelir. Buraya “yedi tepe” İstanbul diyorlar. Bu yakıştırma öylesine yerleşmiş ki İstanbullu’ların hayatına, üniversitesinden tutun da giyim markasına (bknz. SevenHill) kadar her alanda karşınıza çıkması mümkün. İyidir güzeldir bu yakıştırma da nereden gelir acep diye biraz googling (internette araştırma yapmanın gavurcası) yaptıkan sonra İstanbul’un suriçi diye tabir edilen eski kısmının yedi adet tepe üzerine kurulu olduğunu öğrendim. Burada sizlere bu tepeleri tanıtacak değilim. O zaman ne diye anlatıyon bize bunları demeden önce bi düşünün bakalım. Bayat’ımızı, etrafını bi hayalinizde canlandırın bakalım. Hah işte şimdi oldu. Kardeşim İstanbul’un yedi tane tepesi varsa bizim de iki tepemiz üstüne üstlük iki tane de dağımız var. Çalca’mız, Dedegırağı’mız, Eğerli’miz, Asar’ımız var. Bunlar da yetmedi bi de ortalarında bağımız Bağyeri’miz var.

Çalca’dan başlamak istiyorum önce. Zira o sevdaların, sevdalıların mekanıdır. Bayat düğünlerinin olmazsa olmazı Çalca gezileri bu tepeyi özel kılar. Koskoca tepede kala kala 3 tane ağaç kalmış bunlarda zirvede. O üç ağacın altında sohbet edilir, ağaca para çakılır. Baraj yapımı sırasında buradan alınan taşlar kullanıldığı için bu tepe bana hep böğründen yaralanmış bir canavarı anımsatırdı. Sekkaşı’na uzak olması hasebiyle pek içli dışlı olamadık kendisiyle ama yine de Bayat coğrafyasının vazgeçilmezidir kendileri. Evimize yakın olmasından dolayı Dedegırağı daha bir hatıra doludur benim için. Bayat’a Ankara yönünden girerseniz üzerindeki gsm antenleriyle ilginizi hemen çekecektir. Bu günlerde eteklerine evler kondurulduğuna, üzerinden yollar geçtiğine bakmayın, küçüklüğümde kendi halinde yeşil mi yeşil bir tepeydi. Bugünkü evlerin yerinde ise harmanyerimiz vardı. Kendimi yeni yeni bildiğim yıllarda harmanyerinde top oynardık abilerle. Şimdinin çim sahalarına taş çıkaracak bir çayırı vardı o zamanlar. O zamanlar Dedegırağı’nın çocuklar için diğer bir manası ise patates közlemesiydi. Evden getirdiğimiz patatesleri bir kaya dibinde közler bir güzel yerdik. O günün izlerini ve islerini hala kayalar üstünde görmeniz mümkündür. Kışın ise Dedegırağı bizler için kızak pistine dönüşürdü. Tepenin dik yamacında hızlı bir kızaktan daha nefes kesici ne olabilir ki. Baharda uçurta uçurmak için mükemmel bir ortam hazırlardı çocuklara Dedegırağı. Kısaca çocukların cennetiydi Dedegırağı ve etekleri. Tepeleri yalnız bırakıp dağlarımıza selam duralım. Asar’ın heybeti, Eğerli’nin muhabbeti…
Asarın kendine has bir duruşu, asaleti olmuştur bana göre. Kaleyi andıran görünüşü insana gözdağı verir.
DEVAM EDECEK

İlgili Yazılar:

  1. Haşkeş Gafeliler Bütün serüven tohumun toprağa düşmesiyle başlar. Toprakta huzura kavuşan tohum...

Sekkaşı'nın Bayırı - October 27, 2009 07:54 PM
Tehlike Anında Camı Kırınız!

İmdat Çekiçi

İmdat Çekiçi


Korkmayın canım herhangi bir acil durum söz konusu değil. Yangın, sel felaketi de yok. Sadece moladan sonra çalışmayan bir otbüs tüm bu yazının esin kaynağı. Nerede, nasıl mı oldu? Ankara’da 23:58′de binilen Kamil Koç Otobüsleri A.Ş. ye ait Setra markalı otobüs saat 03:45 sularında mola verir. Veriş o veriş mola uzar, otobüs çalışmaz, yolcular sabırsızlanır…Aylardan ekim ayı olması hasebiyle ortada çok büyük sıkıntı yaratacak hava şartları yoktur. Mola yerinde olmamız da ayrı bir güvenlik hissiyatı uyandırır. Pekala otobüs kuş uçmaz kervan geçmez bir yerde de arıza yapabilirdi. Yaklaşık bir saat süren arayışlardan sonra rica minnet anlaşılan farklı bir taşımacılık firmasına ait otobüsle İstanbul’a yolcu edildik. Edildik edilmesine de sabah 05:30′da İstanbul’da olmamız gerekirken Selimiye Kışlası’nı saat 07:00 gibi görebildik. Burada söz konusu firmayı ağır şekilde eleştirmek istemiyorum, zira bu tür sorunlar çoğu firmanın başına gelebilir. Anlayış göstermek, empati yapmak gerekir gerekmesine de gözüm biletimdeki sigorta tutarı kısmına takılıyor. Biletin arkasını okuyup bu sigortanın sadece kazalarda ölümle veya yaralanmayla sonuçlanan durumlar için geçerli olduğunu anlıyorum. Aklıma şu soru geliyor otobüs kışın ortasında, dağın başında yolda kalsaydı ve insanlar hasta olsaydı, daha kötüsü donma tehlikesi atlatsaydı sigorta bir işe yarar mıydı? Varmak istediğim nokta otobüs firmalarımızın acil durumlar için herhangi bir acil eylem planının olmayışı. Hangi ülkede yaşıyoruz birader? Daha geçen günlerde İstanbul İkitelli civarında yaşanan sel felaketi devletin acil durum eylem planını gözler önüne serdi. Devlet bu haldeyken biz otobüs firmalarından plan program bekliyoruz. Olacak şey değil. Olmalı arkadaşım olmalı. Herkes 15 liraya yolcu taşırken 30 liraya yolcu taşıyorsan acil eylem planın da olmalı yedek otobüsün de.

İlgili Yazı Yok.

Sekkaşı'nın Bayırı - October 25, 2009 11:58 AM
Mobilya

dsc04295
dsc04294
dsc04293
dsc04292
dsc04296
dsc04291
dsc04288
dsc04290
dsc04289
dsc04287

İlgili Yazı Yok.

Sekkaşı'nın Bayırı - October 10, 2009 06:07 PM
Otobüste Fahiş Fiyatlı Akbile Hayır

İstanbul belediye otobüslerinde sıkça karşılaştığım ve bir türlü içime sindiremediğim modern haraç kesme operasyonu karşısında elimden geldiğince gerekli mercilere şikayette bulunmaya gayret ediyorum. Sizleri de bu konuda hassas olmaya davet ediyorum. İETT müdürlüğünden yapılan duyurulara kulak asmadan bilet parasından rant elde eden, “Bilet parası 1.50 lira değil mi?” demenize karşılık sizi devletin otobüsünden indirmeye çalışan ve bu yaptığının yanına kâr kaldığını zanneden şahısları bir nebze de olsa huzursuz etmeyi kendime görev biliyorum. Yaptığım bir şikayet üzerine bana

Başvurudan bilgi alınmış olup,fazla ücret alan şoför personel hakkında; Toplu İş Sözleşmesi hükümleri gereğince, gerekli işlem başlatılmıştır.

şeklinde bir cevap gönderildi. Başınıza buna benzer bir vaka gelirse şu ayrıntıları aklınızın bir köşesinde tutun ve iett@iett.gov.tr adresine şikayet maili atın:

  1. Otobüs Hat Numarası
  2. Otobüs plakası yada numarası : Bu numara genellikle otobüslerin arkasında 99-*** şeklinde yazılı olan numaradır.
  3. Otobüse hangi tarihte, saat kaçta, hangi duraktan bindiğiniz

İlgili Yazı Yok.

Sekkaşı'nın Bayırı » Yazilim - October 05, 2009 07:41 PM
Java Dersleri 12 – String İşlemleri

Bu dersimizde Java’nın ve diğer dillerin en temel elemanlarından olan String sınıfını inceleyeceğiz. Java’da String nesneleri immutable yani değiştirilemeyen nesnelerdir. Herhangi bir string nesnesi üzerinde değişiklik yapıldığında tamamen yeni bir nesne oluşturularak değişiklikler üzerine yansıtılır. Örneğin toUpperCase metodunu ele alalım :

 String s = new String("orhan");
 s.toUpperCase();
System.out.println(s)

şeklinde yazacağımız kod parçası istenilenin aksine “ORHAN” değil “orhan” yazacaktır çünki toUpperCase metodu üzerinde çalıştığı nesneye herhangi bir değişiklik yapamaz, yeni bir String nesnesi döner. İkinci satırımızı

s = s.toUpperCase();

olarak değiştirisek istenilen çıktıyı alabiliriz. Stringlerle ilgili ikinci hatırlamamız gereken konu ise karşılaştırma meselesidir. Stringler karşılaştırılırken mümkün olduğunca == ifadelerinden sakınılmalıdır. == ifadeleri referans karşılaştırması yaptığından
istenmeyen sonuçlara yol açabilirler. Örneğin :

String s = new String("orhan");
String s2 = new String("orhan");
if(s == s2)
 System.out.println("true");
else
System.out.println("false");

Yukarıdaki kod parçası beklenilenin aksine false yazacaktır. Karşılaştırdığımız iki nesne bellekte farklı yerlerde bulunduğundan dolayı == karşılaştırması yanlış dönecektir. Üçüncü satırımızı :

if(s.equals(s2))

olarak değiştirirsek doğru sonucu elde ederiz. equals() metodu alfabeye göre karşılaştırma yaparak sonuca ulaşır.
Diğer veri türlerinden String tipine dönüşüm yapmak için String sınıfının statik overload metodları olan valueOf() metodları kullanılır. Örneğin :

        int s = 50;
        String k = String.valueOf(s);
        System.out.println(k);

kod parçasında s integer değişkeninden k stringi elde edilmiştir.
Herhangi bir string nesnesinin belirli bir parçasını almak için substring() metodunu kullanabiliriz :

String s = new String("deneme");
String l = s.substring(1);

bu örnekte l string nesnemizin değeri “eneme” olacaktır. Burada substring() metodumuza ikinci parametre olarak bitiş indeksini de verebiliriz. Son olarak split() ve replace metodlarından bahsetmek istiyorum. Herhangi bir string nesnesini belirli ayraçlarla bölmek için split() metodunu kullanabiliriz. Örneğin dosyadan virgülle ayrılmış değerleri bir string nesnesine okuduğumuzu düşünelim :

String s = new String("Afyon,Bayat,İstanbul");
String[] result = s.split(",");

burada result string arrayimizde “Afyon”,”Bayat” ve “İstanbul” elemanları bulunacaktır. replace() metodu ise herhangi bir string nesnesi içinde geçen alt stringi istediğimiz başka bir stringle değiştirmeye yarar. Bu metoda özellikle HTML rapor hazırlarken şablonda gerekli yerleri doldurmada baş vurabilirsiniz. Örneğin :

String s = new String("Hava Durumu : @@@");
s = s.replace("@@@", "Bulutlu");

Son durumda s string nesnemizde “Hava Durumu : Bulutlu” değeri bulunacaktır.

İlgili Yazılar:

  1. Java Dersleri 7 – Çok Biçimlilik (Polymorphism) Bu dersimizde Java’nın nesne odaklı programlamanın olmazsa olmazlarından çok biçimliliği...
  2. Java Dersleri 5 – Kalıtım (Inheritance) Bu derste Java’nın nesne yönelimli programlamanın temeli olan kalıtım(Inheritance) kavramını...
  3. Java Dersleri 9 – Dosya Okuma/Yazma İşlemleri Bu derste sizlere Java’nın dosya işlemlerinden bahsedeceğim. Üç bölümlük serinin...

Sekkaşı'nın Bayırı » Yazilim - October 01, 2009 05:12 PM
Java Dersleri 11 – XML Okuma – Yazma İşlemleri

Bu dersimizde Java’nın XML işlemleri için kullanılan sınıflarının genel özelliklerini öğreneceğiz. XML hiyerarşik ve özyineli yapısı sayesinde günümüz uygulamalarında standartlaşmış bir veri iletim ve depolama biçimidir. Özellikle Web 2.0 ile önemi web tarafında da iyice ortaya çıkan XML biçimli dosyaları uygulamalarımızda işlemek kaçınılmaz olduğuna göre bu işin Java’da nasıl yapıldığına bir göz atalım. Geliştirdiğimiz uygulamaya göre XML’den veri okuyor olabileceğimiz gibi ürettiğimiz veriyi XML biçiminde yazmak da isteyebiliriz. Okuyup yazdığımız XML biçimi standartlaşmış, dünya çapında kullanılan bir biçim olabileceği gibi (RSS,XSPF), biçimini bizim geliştirdiğimiz veriler de olabilir. Örneğin bir çoklu ortam oynatıcısı(multimedia player) geliştirdiğimizi düşünelim. Oynatmak istediğimiz mp3 dosyaları olsun video dosyaları olsun bunların bir listede kayıtlı olması lazım. XSPF (XML Sharable Playlist Format) bu listeyi XML biçiminde saklamaya yarayan bir standarttır.

<?xml version="1.0" encoding="UTF-8"?>
<playlist version="1" xmlns="http://xspf.org/ns/0/">
 <trackList>
  <track>
   <location>LimeWire/Saved/Melihat Gülses - Incesaz - Cok Asigin Var Diyorlar.mp3</location>
  </track>
  <track>
   <location>file:///media/VM/MP3/Aldirma Gonul.mp3</location>
  </track>
 </trackList>
</playlis

Eğer bu biçimi desteklemek istiyorsak yukarıdaki XML dosya tipini okuyabiliyor olmalıyız. Java’da XML işlemlerini yapabilmek için bir org.w3c.dom.Document arayüzünü gerçekleyen bir nesne oluşturmalıyız. Bu nesne XML ağacını (XML içeriğine hiyerarşik yapısından dolayı verilen ad) tüm özellikleriyle hafızada tutar. Herhangi bir XML dosyasından Document nesnesi oluşturma işlemini ise DocumentBuilder sınıfı yapar. DocumentBuilder sınıfı soyut bir sınıf olduğundan farklı alt sınıfları tarafından farklı XML parçalama (parse) algoritmaları gerçeklenir. Bu algoritmalar iteratif yada öz yineli (recursive) olabilir. DocumentBuilder nesnesini ise DocumentBuilderFactory sınıfı üzerinden elde ederiz. Bu işlemin kodunu görelim :

        DocumentBuilder builder = null;
        Document doc = null;
        try {
              builder  = DocumentBuilderFactory.newInstance().newDocumentBuilder();
              doc = builder.parse(new File(fileName));
             }
        catch (ParserConfigurationException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (SAXException ex) {
            ex.printStackTrace();
        }

Document nesnesi elde edildikten sonra ihtiyacımız olan XML elemanlarına ulaşma kolaydır. Örneğin yukarıdaki örnek XML dosyasındaki etiketleri arasındaki veriyi almak istiyorsak Document arayüzünün getElementsByTagName metodunu kullanabiliriz. Bu metod bize bir düğüm listesi döndürecektir. Bu düğüm listesi üzerinden bir bir giderek tüm metinlerini okuyabiliriz. Eğer dosyanın tamamına düğüm düğüm ulaşmak istiyorsak XML’in ağaç yapısından yararlanmalıyız. Bunun için önce kök düğüme ulaşmalıyız. Document arayüzünün getDocumentElement metodu bize kök elemanı verecektir. Bu kök elemanın çocuk elemanlarına oradan da onların çocuklarına gidebiliriz. Yukarıdaki XML örneğinden location etiketleri arasındaki metni okumak istersek :

            NodeList songs = doc.getElementsByTagName("location");
               if(songs.getLength() != 0) {
                model = new PlayListModel();
            }
            for (int i = 0; i < songs.getLength(); i++) {
                model.addSong(songs.item(i).getTextContent());
            }

Burada getElementsByTagName ve getTextContent metodlarına dikkat edelim. getTextContent metodu Node arayüzüne dahil olup o düğümün metin içeriğini almaya yarar.
XML Yazma işlemi de yine okuma işlemi gibi Document nesneleri üzerinden yürütülür. Hafızadaki herhangi bir veriyi XML olarak yazabilmek için öncelikle bu veriden bir DOM ağacı oluşturmalıyız. Örneğin elimizdeki şarkı listesinden DOM ağacı oluşturmak için :

    private static Document createDOM(final IPlayListModel playListToBeExported) throws DOMException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = null;
        Document doc = null;
        Element root = null;
        try {
            builder = factory.newDocumentBuilder();
            doc = builder.newDocument();
            root = (Element) doc.createElement("playlist");
            doc.appendChild(root);
        } catch (ParserConfigurationException ex) {
            ex.printStackTrace();
        }

        if(root != null) {
            List songList = playListToBeExported.getSongList();

            for(int i = 0; i < songList.size(); i++) {
                Element el = doc.createElement("location");
                el.setTextContent((String)songList.get(i));
                // el.setNodeValue();
                root.appendChild(el);
            }
        }

        return doc;
    }

DOM ağacında herhangi bir düğüme çocuk düğüm eklemek için appendChild metodunu, herhangi bir düğümün metin içeriğini girmek için ise setTextContent metodunu kullanıyoruz. DOM ağacımızı dosyaya yazmak için ise javax.xml.transform paketi sınıflarını kullanabiliriz. Bu paketten Source, Result arayüzleri Transformer soyut sınıfı aracılığıyla herhangi bir DOM ağacını çeşitli çıktılara yönlendirebiliriz. DOM ağacımızı dosyaya yazmak için :

  private static void writeDocToFile(Document doc, String fileName) {
        try {
            JFileChooser ch = new JFileChooser();
            if (ch.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
                Source source = new DOMSource(doc);
                File file = new File(ch.getSelectedFile().getAbsolutePath());
                Result result = new StreamResult(file);
                Transformer xformer = TransformerFactory.newInstance().newTransformer();
                xformer.transform(source, result);
            }
        } catch (TransformerConfigurationException e) {
        } catch (TransformerException e) {
        }
    }

İlgili Yazılar:

  1. Java Dersleri 9 – Dosya Okuma/Yazma İşlemleri Bu derste sizlere Java’nın dosya işlemlerinden bahsedeceğim. Üç bölümlük serinin...
  2. Java Dersleri 6 – Arayüzler ve Gerçeklenmesi (Interface and Implementation) Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır. Bir...
  3. NetBeans Video Ders (Screencast) #4 İkilik (Binary) Dosya Okuma Sitede yaptığım anketler sonucunda java video derslerimizin sesli anlatımlı...

Sekkaşı'nın Bayırı » Yazilim - September 17, 2009 08:30 PM
Sobel Kenar Algılama Algoritması

sobel2
Algoritma Adı:Sobel Kenar Algılama Algoritması (Sobel Edge Detection)
Algoritma Türü: Görüntü İşleme Algoritması
Açıklama: Sobel kenar algılama algoritması görüntü işleme algoritmaları arasında en çok bilinenlerdendir. Verilen herhangi bir resimdeki kenarları elde etmeye yarar. Böylelikle resimler içindeki isteğe yönelik nesneler algılanıp gerekli işlemler yapılabilir. Sobel algoritmasında iki adet konvolusyon kerneli kullanılır. Bunlardan birisi yatay kenarları bulmaya yararken diğeri dikey kenarları bulmaya yarar. Bu kerneller görüntü içerisinde ışık yoğunluk değişiminin ani olduğu yerleri belirlememize yarar. Bir nevi türev yaklaşımıdır. Bu kerneller sırasıyla :

1 0 -1
2 0 -2
1 0 -1
Yatay Sobel Kernel
1 2 1
0 0 0
-1 -2 -1
Dikey Sobel Kernel

şeklindedir. Gradyanlar (kernel uygulamasından sonraki yoğunluk değerleri) herhangi bir pixel için hesaplandıktan sonra büyüklükleri hesaplanarak kenarlar bulunmuş olur. Gradyan büyüklüğü iki gradyanın kareleri toplamının karekökü olarak hesaplanır. Java’da geliştirilmiş örnek bir sobel filtresini aşağıdan indirebilirsininiz.
Note: There is a file embedded within this post, please visit this post to download the file.

İlgili Yazılar:

  1. K-Orta Kümeleme Algoritması Algoritma Adı: K-Orta Kümeleme Algoritması(K-Means Clustering) Algoritma Türü: Kümeleme...
  2. Seçim Sıralama(Selection Sort) Algoritma Appleti Algoritma Adı: Seçim Sıralama Algoritması(Selection Sort) Algoritma Türü: Sıralama Algoritması...
  3. Kabarcık Sıralama (Bubble Sort ) Algoritma Appleti Algoritma Adı: Kabarcık Sıralama Algoritması (Bubble Sort) Algoritma Türü: Sıralama...

Sekkaşı'nın Bayırı - September 04, 2009 10:27 AM
Her Çocuğun Rüyası Charlie’nin Çikolata Fabrikası

Charlie'nin Çikolata Fabrikası

Charlie'nin Çikolata Fabrikası


Sizi bilmem ama ben küçükken ekmek üstü sarelle ziyafetine bayılırdım. Malum ailenin maddi durumu da pek öyle ahım şahım olmadığından annem o sarelleden maksimum sayıda ekmek dilimi çıkarmakta ustaydı. Peki ya annem evde olmayınca ne olurdu. Tabi ki sarelle kavanozuna bir iki parmak daldırılırdı. O dönemlerde insan çikolata denizinde balık olmak ister de anca ekmek dilimiyle yetinirdi. İşte Charlie’nin Çikolata Fabrikası bu felsefe üzerine bina edilmiş eğitici yanı ağır basan bir film. Fantastik filmlerin meşhur üçlüsü Tim Burton, Johnny Depp ve Helena Bonham Carter’ın hayata geçirdiği filmde ufak bir veledin dünyanın en meşhur çikolata fabrikası olan Wonka diyarında geçirdiği yolculuk anlatılmakta.

Filmin eğitici yanına pek değinmek istemiyorum. Açgözlülüğün kötülüğü üzerine çocuklara sosyal mesajlar vermeye çalışılıyor filmde. Kısaca

Mütevazi ol insan evladı

demek istiyor masal yazarı. O değil de asıl fantastik üçlüyü yazmak istiyorum. Bu arakadaşlar galiba çocukluklarını yaşayamamışlar, nerede masal var onu beyaz perdeye yapıştırıyorlar. Sanki gerçek hayatta değil bu şahıslar kendileri de birer masal kahramanı. Şu Johnny Depp denen adamın bir kadın kılıklı erkek rolü oynamadığı kalmıştı onu da bu filminde gördüm. Nedir o gülüş, o saçlar falan. Bir de bu adamın çocukken çikolata yiyememek içine oturmuş, sonra da oturmuş çikolatadan dünya kurmuş. Helena bacı için ise söyleyeceğim tek şey var artık o siyah eldivenlerden kurtulma vakti geldi. Hatun annesinden gotik doğmuş sanki, tarz olayı bu kadar da abartılmaz ki. Bu ablanın siyah elbise giymediği şöyle hanım hanımcık giyindiği, gotik takılmadığı bir film bilen varsa benimle paylaşsın lütfen. Çağımızın masal dedesi Tim Burton’a diyecek laf yok.
Şaka bi yana yaptığı her işte bu kaliteyi yakalayabilen bir takım var mı bilmiyorum. Takdir ediyorum, takip ediyorum, severek izliyorum.

İlgili Yazı Yok.

Sekkaşı'nın Bayırı » Yazilim - August 23, 2009 12:43 PM
NetBeans Video Ders (Screencast) #4 İkilik (Binary) Dosya Okuma

Gerekli NetBeans Sürümü
Sitede yaptığım anketler sonucunda java video derslerimizin sesli anlatımlı olması gerektiğine karar verdim. Video derslerle ilgili yaptığım ikinci ankette ise derslerin NetBeans ile anlatılması çoğunluk tarafından istenmekte. Bu doğrultuda ilk video dersimi yayınlıyorum. Bu video derste mp3 dosyalarından id3 etiketlerini okuyarak binary dosya okuma yöntemini göstereceğim. Sesli anlatım nispeten yazılıya göre zor olduğundan kötü olabilir. Yorumlarınızı bekliyorum.

NetBeans Video Ders #4 Bölüm 1

NetBeans Video Ders #4 Bölüm 1



DEVAM EDECEK

İlgili Yazılar:

  1. Netbeans Video Ders (Screencast) #1 JUnit Birim Test Video dersi izlemek için resme tıklayın. ...
  2. NetBeans Video Ders (Screencast) #2 GUI Tasarımcısı Özellik Bağlama Kipi Video dersi izlemek için resme tıklayın. ...
  3. NetBeans Video Ders (Screencast) #3 Kod Şablonları Video dersi izlemek için resme tıklayın. ...

Sekkaşı'nın Bayırı - August 11, 2009 05:20 PM
Berber Dükkânından Diyaloglar

Berber Dükkânından Diyaloglar

Berber Dükkânından Diyaloglar

Meseleye giriş yapmadan belirtmek isterim ki bu yazı blogum için bir ilk teşkil ediyor. 2007 yılında yayına başlayan Sekkaşı’nın Bayırı’nda prensip gereği şimdiye kadar günlük tarzında herhangi bir yazı yayımlamadım. Bu yazıyla başlayarak bu kuralı tarihin tozlu sayfalarına göndermeyi planlıyorum.

Hafta sonu arkadaşımın düğününe icabet etmek amacıyla Anadolu’muzun güzide şehirlerinden birindeydim. İstanbul’dan gecenin geç saatlerinde başladığım otobüs yolculuğu ertesi sabahın erken saatlerinde sonlandı. Şehrin adını özellikle zikretmek istemiyorum. Pek saçına sakalına özen gösteren birisi olmadığım için yine sakal traşı olmadan yola çıkmıştım. Sonra birden aklıma “düğün” sebebiyle orada olduğum dolayısıyla da traş olmam gerektiği aklıma geldi. Şöyle bir çarşı turu attıktan sonra mağazaların, dükkânların büyük çoğunluğunun kepenk kaldırmadığını gördüm. Tamam hafta sonu olabilir, pekâla sabah 9 olabilir ama benim esnaflık anlayışım dükkânı erken açmak olduğundan durumu garipsedim. 15 20 dakikalık bir yürüyüşten sonra nihayet açık bir berber dükkânı bulup daldım içeri. 3 koltuklu klasik bir berber dükkânıydı burası. Koltuklardan birisi doluydu. Hemen ortadaki boş koltuğa kuruldum. Klasik soruya :

- Sakal

diyerek cevap verdim.

- Şu saçları da geriye tararsan tam olacak.

Sabah rahatsız olduğum konuyu sordum berbere:

- Buraların yabancısıyım. Hep böyle geç mi açar esnaf dükkânını buralarda? Sabahtan beri açık berber dükkânı arıyorum.
- Tok esnaf

Öyle ya tok esnaf paraya ihtiyacı yok. Ülkenin hatta dünyanın içinde bulunduğu durumu düşünürsek bazılarına kriz teğet geçiyor hakkaten. Berber sakalımı sabunlarken yan koltuğa bir müşteri oturuyor. Konuşmalardan müşterinin düğün hazırlığı yapan damat adayı olduğunu anlıyorum. Dükkânın yerli müşterisi olduğu da çıkıyor kelimelerden. Bu arada berber iklisi koyu bir muhabbette dalıyor aralarında:

Berber1 : Abi tatile gidecem ben.
Berber2 : Git git iyi olur. Nereye gidecen?
Berber1 : Marmaris yada Turgutreis. Neresi daha güzel sence ?
Berber2 : Hadi len ordan sen daha şuraya pikniğe gidemezsin ne
          Marmaris'i  :)  ?
Berber1 : Abi ciddiyim neresi güzel sen gitmiştin oralara.
Berber2 : Marmaris güzel. Hem halk plajı var beleş.
Berber1 : Abi para mühim değil. Hem öyle ben halk malk uğraşamam
          kalabalık olur.
Berber2 : Ulan cebinde harçlık yok bir de halk malk uğraşamam diyosun.
          Gir özel plaja bayıl giriş parası, bayıl şemsiye parası,
          bayıl şezlong parası göreyim ben seni.
          Hem Turgutreis'de cami yok.
Berber1 : Küçük mescid de mi yok abi.
Berber2 : Yok
Berber1 : Abi girerim otele kılarım namazı ne olacak.
Berber2 : He bi de plajdan otele namaz kılmaya gideceksin.

Parasını halktan kazanan esnafımız bile halk olmaktan bıkmış baksanıza halk plajına gitmeye imtina ediyor. Sakal traşım bitip saçım tarandıktan sonra borcumu sorup “K” lirayı berbere ödedim. Günün kalan kısmında damat adayı arkadaşımla buluştuk. Sabah çorba faslından sonra arkadaşı damat traşı olmak üzere kuaföre götürdük. Berber değil ha kuaför, yanlış anlaşılmasın. Berberle kuaför arasındaki farkı söylememe gerek yok zaten çalışanlar arasındaki yumuşaklık katsayısı kendini zonk diye belli ediyor. Kuaför salonu her ne kadar
daha çekiciymiş gibi görünse de size garanti edebilirim ki berber dükkânı kuaför salonundan daha bakımlıydı.
Her neyse arkadaşın damat traşını bitirdikten sonra borcumuzu sorduk tekrar. “10K” borcu duyunca biraz yadsımadık değil. Tamamdır damat traşıdır, fondotenidir, hedesidir, hödösüdür lakin insaftır. Altı üstü bir traştır. Ne kadar pazarlık ettiysek de “10K” lira borcumuzu ödedik.
Velhasılı kelam berber dükkânında yan koltukta traş olan damat adayımız “K” liraya traş olurken, kuaför salonunda traş olan damat adayı arkadaşım “10K” liraya traş oldu. Yani berber abim sen ne kadar benim halk plajında yerim yok desen de halksın hem de dibine kadar. İyi ki öylesin orası ayrı mesele. Kuaför salonundaki arkadaşa da bir tavsiye biraz daha halk olsun. Hem kim bilir halk olmak yarar belki.

İlgili Yazı Yok.

Sekkaşı'nın Bayırı » Yazilim - August 04, 2009 10:33 AM
Java Dersleri 9 – Dosya Okuma/Yazma İşlemleri

Bu derste sizlere Java’nın dosya işlemlerinden bahsedeceğim. Üç bölümlük serinin ilkinde genel dosya girdi çıktı mekanizmasından bahsedip metin dosyalarını nasıl okuyup yazabileceğimize bakacağız. Java’da üm girdi çıktı işlemleri, bu dosya olabilir, network soketi olabilir, Stream (akım) sııfları vasıtasıyla gerçekleştirilir. Stream sınıflarını içerisinden veri akan yollar şeklinde düşünebilirsiniz. Bu sınıflar içerisindeki verilere ve buffering (tamponlama) vs gibi özelliklerine göre birbirlerinden ayrılırlar. Genel olarak taşıdıkları verilere göre üçe ayrılırlar:

  1. İkilik Veri Akımları (Byte Streams) : İkili tipteki dosyaları okuyup yazmakta kullanılırlar
  2. Karakter Akımları(Char Streams): Metin belgeleri okuyup yazmakta kullanılırlar
  3. Nesne Akımları(Object streams): Serializable olan Java nesnelerini okuyup  yazmakta kullanılırlar

Bu sınıfların dışında akım sınıflarının özelliklerini değiştiren sarmalayıcı akım sınıfları da mevcuttur. Örneğin BufferedReader sınıfı herhangi bir Reader sınıfını sarmalayarak tamponlama özelliği katar.

İlk olarak karakter akımlarını incelemeye çalışalım. Yazılım geliştirme sürecince çokça karşımıza çıkan metin dosyalarını Java’da okumak için Reader soyut sınıfından türeyen InputStreamReader alt sınıfı olan FileReader sınıfı kullanılır. Dosyaya yazmak için ise API’de bu sınıfın muadili FileWriter sınıfı mevcuttur. Örnek olarak herhangi bir metin dosyasının satır başlarına satır numarasını ekleyen şu kod satırlarını inceleyelim:

    FileWriter fw = null;
                try {
                    int lineNumber = 1;
                    FileReader fr = new FileReader(fileName);
                    fw = new FileWriter("linenumber.txt");

                    int c = fr.read();
                    do {
                        if ((char) c == '\n') {
                            lineNumber++;
                            fw.write(c);
                            fw.write( Integer.toString(lineNumber));
                        }
                        else
                        {
                            fw.write(c);
                        }

                        c  = fr.read();
                    } while (c != -1);

                } catch (IOException ex) {
                    Logger.getLogger(FileIOUI.class.getName()).log(Level.SEVERE, null, ex);
                } finally {
                    try {
                        fw.close();
                    } catch (IOException ex) {
                        Logger.getLogger(FileIOUI.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }

Metin dosyamızı okumak için FileReader sınıfını kullandık. Öncelikle okumak istediğimiz dosya adını kullanarak bir FileReader nesnesi oluşturup, bu nesne üzerinde read() metodunu çağırdık. Bu sınıfın dosyadan okumak için birden fazla metodu bulunmakla beraber burada dosyayı karakter-karakter okumamızı sağlayan int dönüş değerine sahip olan read() metodunu kullandık. Bu metodun dışarıya verdiği int tipindeki değişken aslında char tipinde bir değişken olduğundan tür dönüşüm operatörünü uygulamamızda bir sakınca yoktur yani :

 int c = fr.read();
 if ((char) c == '\n') {
}

kullanımı doğrudur. Burada son olarak dikkat etmemiz gereken husus read() metodunun dosya sonuna geldiğinde değer olarak -1 döndürmesidir. Yani dosya sonuna gelip gelmediğimizi dönüş değerinin -1 olup olmadığını kontrol ederek anlayabiliriz.

Metin dosyası yazmak için ise FileWriter sınıfını kullandık. Yine bu sınıfta da dosyaya yazmak için birden fazla metod bulmak mümkün. Biz burada yine karakter-karakter yazmamıza olanak sağlayan write(int) metodunu kullandık. Sadece satır başlarına yazdırmak isediğimiz satır sayısını String tipine dönüştürüp write(String) metodunu kullanarak dosyaya yazdık. Bu iki farklı kullanımı gösterirsek :

int c = fr.read();
if ((char) c == '\n')
{
	lineNumber++;
        fw.write(c);
        fw.write( Integer.toString(lineNumber));
}

Metin dosyalarını işlerken genellikle karakter-karakter okuma/yazma yerine kelime-kelime okuma/yazma yada satır okuma/yazma işlemlerini kullanırız. FileReader ve FileWriter sınıfları bu yeteneklere sahip değildir dolayısıyla bunun için sarmalayıcı sınıflar mevcuttur. Bu sınıfları ve yeteneklerini bir sonraki derste anlatacağım.

İlgili Yazılar:

  1. Java Dersleri 11 – XML Okuma – Yazma İşlemleri Bu dersimizde Java’nın XML işlemleri için kullanılan sınıflarının genel özelliklerini...
  2. NetBeans Video Ders (Screencast) #4 İkilik (Binary) Dosya Okuma Sitede yaptığım anketler sonucunda java video derslerimizin sesli anlatımlı...
  3. Java Dersleri 4 – Erişim Denetleyicileri (Access Modifiers) Bu dersimizde Java’nın metodlar ve sınıflar üzerinde erişim kurallarını düzenleyen...

Sekkaşı'nın Bayırı » Yazilim - July 13, 2009 06:49 PM
Java Dersleri 8 – İç, Gömülü ve İsimsiz Sınıflar (Inner, Nested and Anonymous Classes)

Bu dersimizde Java’nın gömülü sınıf yapısını öğreneceğiz. Java programlama dili kullanıcıya bir sınıf içerisinde başka bir sınıf tanımlama olanağı sağlar. Bu tür sınıflara Gömülü Sınıf (Nested Class) adı verilir. Gömülü sınıflar statik ve statik olmayan gömülü sınıflar olmak üzere ikiye ayrılırlar. Statik olmayan gömülü sınıflara İç Sınıf(Inner Class) adı verilir. Gömülü sınıfların üç temel faydası vardır. Bunlar :

  1. Sınıfların Mantıksal Gruplanması : Ortak iş yapan sınıfların bir arada bulunmasını sağlayarak daha sağlıklı API’ler oluşturmanızı sağlar
  2. Daha İyi Kapsülleme : Sınıf değişkenlerinin private kalmasını sağlayarak daha iyi kapsülleme sağlar
  3. Kod Okunabilirliği : Üst seviye sınıflar altında iş gören gömülü sınıflar kod okunabilirliğini arttırır.

Gömülü sınıf hiyerarşisi aynı zamanda arayüzler için de geçerlidir. Yani arayüzlerde birbirleri içerisinde tanımlanabilirler. Java JDK içerisinde gömülü sınıf kullanımına örnek olabilircek çok sayıda sınıf ve arayüz vardır. Bunlardan bir tanesini inceleyelim :

//üst seviye arayüz tanımı
public interface Map<K ,V> {
int size();
boolean isEmpty();
boolean containsKey(Object key);
boolean containsValue(Object value);
V get(Object key);
V put(K key, V value);
V remove(Object key);
void putAll(Map<? extends K, ? extends V>m);
void clear();
Set<K> keySet();
Collection<V> values();

//gömülü arayüze referans var
Set<Map.Entry<K, V>>; entrySet();

//gömülü arayüz tanımı
interface Entry<K ,V>
{
K getKey();
V getValue();
V setValue(V value);
boolean equals(Object o);
int hashCode();
}

boolean equals(Object o);
int hashCode();
}

Örnekte görüldüğü üzere Map arayüzünün altında Entry gömülü arayüzü tanımlanmış ve

//gömülü arayüze referans var
Set<Map.Entry<K, V>>entrySet();

metod imzasında gömülü arayüz kullanılmıştır. Bu kullanımdan yola çıkarak gömülü arayüz/sınıf tanımlarına nasıl ulaşabiliriz onu görelim. Burada yine statik gömülü sınıflar ve iç sınıflar arasında ayrım yapmalıyız. Statik gömülü sınıftan bir nesne oluşturmak istiyorsak :

ÜstSeviyeSınıf.StatikGömülüSınıf  s  = new ÜstSeviyeSınıf.StatikGömülüSınıf();

Statik gömülü sınıftan bir nesne oluşturmak için üst seviye sınıftan nesne oluşturmamıza gerek yoktur. Oysa ki iç sınıflar üst seviye sınıf olmadan oluşturulamazlar. Yani statik olmayan iç sınıfların varlığı üst seviye sınıfa bağlıdır. Herhangi bir iç sınıfdan nesne oluşturmak için ise :

ÜstSeviyeSınıf s = new ÜstSeviyeSınıf();
ÜstSeviyeSınıf.İçSınıf i = s.new İçSınıf();

Burada en çok dikkat etmemiz gereken kullanım s.new kullanımıdır.

Sınıf tanımı veya herhangi bir metod tanımı içinde isim vermeden yeni bir sınıf tanımı yapılabilir. Bu şekilde tanımlanan sınıflara isimsiz (anonymous) sınıflar denir.  İsimsiz sınıflar sadece tanımlandıkları yerde kullanılırlar.  En klasik kullanım alanları …Listener (ActionListener,MouseMotionListener vs) gerçeklemeleridir. Örneğin NetBeans tarafından düğme kontrolü için üretilen kodları inceleyelim :

jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

Burada addActionLisener metodu parametre olarak ActionListener arayüzünü gerçekleyen bir nesne alır.  Bu nesne isimsiz olarak tanımlanıp ActionListener’da gerçeklenmesi gereken actionPerformed metodunu içerir. Görüldüğü gibi sadece sınıf tanımı yapılıp sınıfa herhangi bir isim verilmemiştir.  İsimsiz sınıf tanımlama sentaksı

new Sınıfİsmi/Arayüzİsmi () {}

şeklindedir. Eğer Sınıfİsmi verilmişse isimsiz sınıf bu sınıftan türer. Eğer Arayüzİsmi verilmişse isimsiz sınıf bu arayüzü gerçekler.

İlgili Yazılar:

  1. Java Dersleri 6 – Arayüzler ve Gerçeklenmesi (Interface and Implementation) Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır. Bir...
  2. Java Dersleri 7 – Çok Biçimlilik (Polymorphism) Bu dersimizde Java’nın nesne odaklı programlamanın olmazsa olmazlarından çok biçimliliği...
  3. Java Dersleri 5 – Kalıtım (Inheritance) Bu derste Java’nın nesne yönelimli programlamanın temeli olan kalıtım(Inheritance) kavramını...

Sekkaşı'nın Bayırı » Yazilim - June 24, 2009 06:12 PM
Java Dersleri 7 – Çok Biçimlilik (Polymorphism)

Bu dersimizde Java’nın nesne odaklı programlamanın olmazsa olmazlarından çok biçimliliği nasıl gerçeklediğini öğreneceğiz. Çok biçimlilik aynı tip değişken üzerinden birbirinden farklı davranışlar elde etme tekniğidir. Programlama dillerinin dinamik bağlama (dynamic binding) yada koşum zamanı bağlama (runtime binding) özelliğinden faydalanılarak hayata geçirilir. Tabiki dinamik bağlamadan yararlanabilme için metod ezme (method overriding) tekniğini bilmemiz gerekiyor. Öncelikle bahsettiğimiz terimleri örneklerle açıklayalım. Metod ezme işlemi kalıtım esnasında ana sınıfta halihazırda tanımlı olan methodu yeniden yazarak ana sınıftaki metodu geçersiz kılma işlemidir. Örneğin :

public class KMeansCluster {

    public String toString()
    {
        return "KMeansCluster";
    }
}

yukarıdaki kod parçasında KMeansCluster sınıfı varsayılan ana sınıfı olan Object (Java’da her sınıf Object sınıfından türer)
sınıfının toString metodunu ezmiştir. Bu metod KMeansCluster cinsinden herhangi bir nesnenin print() metodlarından herhangi birine verildiği zaman çalışır yani :

KMeansCluster kmc = new KMeansCluster();
System.out.print(kmc);

satırları ekrana KMeansCluster yazacaktır. Burada dikkat etmemiz gereken iki temel nokta var :

  1. Ezdiğimiz metodların imzaları aynı olmalıdır. Metod imzası ise metod adı, metod parametre sayısı ve metod parametre tiplerinden oluşur.
  2. static tanımlanan metodlar ezilemezler

Dİnamik bağlama referans tiplerinin derleme zamanında değil de çalışma zamanında atanması esasında dayanır. Bir örnekle açıklarsak :

public class ClusteringBase
{
    public void cluster()
   {
           System.out.println("Cluster Base");
   }
}

public class KMeansClustering extends ClusteringBase
{
    public void cluster()
   {
           System.out.println("KMeansClustering");
   }
}

public class HierarchicalClustering extends ClusteringBase
{
    public void cluster()
   {
           System.out.println("HierarchicalClustering");
   }
}

Yukarıda bir tane ana sınıf (ClusteringBase) iki tane de bu ana sınıftan türeyen alt sınıf tanımladık(KMeansClustering,HierarchicalClustering). Alt sınıflarda cluster(kümeleme) metodunu ezdik. Şimdi bu sınıfları kullanarak çok biçimlilik esasına göz atalım :

ClusteringBase cluster1 = new ClusteringBase();
ClusteringBase cluster2 = new KMeansClustering();
ClusteringBase cluster3 = new HierarchicalClustering();

cluster1.cluster();
cluster2.cluster();
cluster3.cluster();

Buradaki

ClusteringBase cluster2 = new KMeansClustering();
ClusteringBase cluster3 = new HierarchicalClustering();

ifadeleri kalıtım kuralları çerçevesinde doğrudur. Yani bir üst sınıf referansına alt sınıf referansı atanabilir(Tersi yanlıştır).
Dikkat etmemiz gereken kısım üst sınıf referansıyla yapılam cluster() metod çağrımlarıdır. Burada referans tipi her ne kadar
üst sınıf olan ClusteringBase tipinde olsa da çağrılan metodlar çalışma zamanında (runtime) belirlenerek ilgili alt sınıfların metodlarının çağırımı sağlanır. Yukarıdaki kod parçası :

ClusterBase
KMeansClustering
HierarchicalClustering

çıktısını verir. Çok biçimliliğin yazılımcıya sağladığı en büyük avantaj farklı türden nesneleri ana sınıflarını baz alarak aynı ortamda yönetebilme ve gerektiğinde özel fonksiyonaliteyi tekrar kazanabilme avantajıdır.

İlgili Yazılar:

  1. Java Dersleri 6 – Arayüzler ve Gerçeklenmesi (Interface and Implementation) Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır. Bir...
  2. Java Dersleri 5 – Kalıtım (Inheritance) Bu derste Java’nın nesne yönelimli programlamanın temeli olan kalıtım(Inheritance) kavramını...
  3. Java Dersleri 8 – İç, Gömülü ve İsimsiz Sınıflar (Inner, Nested and Anonymous Classes) Bu dersimizde Java’nın gömülü sınıf yapısını öğreneceğiz. Java programlama dili...

Sekkaşı'nın Bayırı » Yazilim - June 18, 2009 10:11 PM
K-Orta Kümeleme Algoritması

screenshot-k-orta-kumeleme-algoritmasi

Algoritma Adı: K-Orta Kümeleme Algoritması(K-Means Clustering)
Algoritma Türü: Kümeleme Algoritması
Açıklama: K-Orta kümeleme algoritması varolan veriyi K nokta etrafında toplamaya yarar.
Bu algoritmada önemli olan veriler arası yakınlık-uzaklık tanımlamasıdır. Örneğin iki boyutlu yada üç boyutlu nokta verilerinin benzerliğini geometrik olarak hesaplayabilirken iki renk arasındaki benzerlik bağıntısını kurmak tamamen kullanıcıya bağlıdır. İlk olarak rastgele belirlenen küme orta noktaları her iterasyonda yeniden hesaplanarak yer değiştirir. Algoritma verilerin kümelerde sabitlenmesiyle sona erer. Bu kümeleme algoritmasının zayıf noktası küme sayısının kullanıcı tarafından belirlenmesidir. Örneğin doğası gereği iki kümeye ayrılması gereken veriyi daha fazla kümeye ayırabilir. Bunun tam tersi de mümkündür.
Note: There is a file embedded within this post, please visit this post to download the file.

İlgili Yazılar:

  1. Sobel Kenar Algılama Algoritması Algoritma Adı:Sobel Kenar Algılama Algoritması (Sobel Edge Detection) Algoritma...
  2. Seçim Sıralama(Selection Sort) Algoritma Appleti Algoritma Adı: Seçim Sıralama Algoritması(Selection Sort) Algoritma Türü: Sıralama Algoritması...
  3. Kabarcık Sıralama (Bubble Sort ) Algoritma Appleti Algoritma Adı: Kabarcık Sıralama Algoritması (Bubble Sort) Algoritma Türü: Sıralama...

APIDesign - Blogs - May 18, 2009 05:43 PM
API Podcast #2: Reentrancy

Listen to podcast #2: to learn about our take on Swing and its poor reentrancy. Find out what it may mean for your own API design and especially Runtime_Aspects_of_APIs that you create. Learn to fight with that problem by maximizing the declarative nature of your API. --JaroslavTulach 17:43, 18 May 2009 (UTC)

APIDesign - Blogs - May 12, 2009 07:50 PM
API PodCast #1

Listen to this: ! It is almost a year since we (me and Geertjan) started our regular API Design Tips podcasts. They used to be part of larger NetBeans podcasts, however recently I needed some promotion material for TheAPIBook and I decided to extract the API Tip parts. I am glad I can offer these sketches to you. Enjoy podcast #1. --JaroslavTulach 19:50, 12 May 2009 (UTC)

Sekkaşı'nın Bayırı - May 06, 2009 09:10 AM
NetBeans Yerelleştirmesi İçin Gönüllüler Aranıyor

NetBeans 6.7 versiyonunu İngilizce bilmeyenlerin de kullanabilmesi amacıyla Türkçeleştirmeye çalışıyoruz. Bu konuda çeviri ve test başta olmak üzere her türlü desteğe ihtiyacımız var. Çevirilere ben de el atmak istiyorum derseniz benimle orhanbalci@gmail.com adresinden iletişime geçebilirsiniz.

İlgili Yazılar:

  1. NetBeans Video Ders (Screencast) #3 Kod Şablonları Video dersi izlemek için resme tıklayın. ...
  2. Netbeans Video Ders (Screencast) #1 JUnit Birim Test Video dersi izlemek için resme tıklayın. ...
  3. NetBeans Video Ders (Screencast) #2 GUI Tasarımcısı Özellik Bağlama Kipi Video dersi izlemek için resme tıklayın. ...

Sekkaşı'nın Bayırı » Yazilim - May 05, 2009 06:19 PM
Java Dersleri 6 – Arayüzler ve Gerçeklenmesi (Interface and Implementation)

Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır. Bir başka deyimle arayüzler sınıflar arası iletişimde imzalanan kontratlardır. Bir arayüzü gerçekleyen sınıf o arayüze ait metodların tamamını gerçeklemek zorundadır. Java prensip olarak çoklu mirası desteklememektedir. Bunun yerine ise çoklu arayüzleri gerçekleme imkanı sağlamıştır. Arayüzleri tanımlamak için “interface” anahtar kelimesi kullanılır.

Örnek bir arayüz tanımı :

public interface IDatabaseConnection {

   public void initConnection(String databaseName, String userName,
	    String password) throws SQLException;

    public void destroyConnection() throws SQLException;

    public Connection getConnection();
}

Arayüzler “interface” anahtar kelimesiyle tanımlanırken herhangi bir sınıf belirli bir arayüzü gerçekleyeceğini “implements” anahtar kelimesiyle bildirir. Şimdi yukarıdaki arayüzü gerçekleyen sınıfa bir gözatalım :

public class MYSQLDatabaseConnection implements IDatabaseConnection {

	private Connection mysqlConnection;

	public MYSQLDatabaseConnection() {
	}

	public void initConnection(String databaseName, String userName,
			String password) throws SQLException {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException ex) {
			ex.printStackTrace();
		}
		mysqlConnection = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/"
				+ databaseName, userName, password);
		mysqlConnection.setEncoding("utf8");
		mysqlConnection.setCharacterEncoding("utf8");
		mysqlConnection.setUseUnicode(true);

	}

	public Connection getConnection() {
		return mysqlConnection;
	}

	public void destroyConnection() throws SQLException {
		if (mysqlConnection != null)
			mysqlConnection.close();

	}

}

Burada dikkat etmemiz gereken hususlar şunlardır:

  1. Arayüz tanımıdaki metodlar public veya default erişim seviyesinde olabilir.
  2. Arayüz kendisi public veya default erişim seviyesinde olabilir.
  3. Arayüzlerde sadece final sınıf değişkeni tanımlanabilir.
  4. Bir sınıf sadece bir sınıftan miras alabilirken, birden fazla arayüzü gerçekleyebilir.
  5. Arayüz ile bu arayüzü gerçekleyen sınıf arasında mirastakine benzer bir ilişki vardır(is-a relationship).
    IDatabaseConnection dc = new MYSQLDatabaseConnection();
    

    kullanımı doğrudur.

  6. Arayüzler birbirinden miras alabilirler.

İlgili Yazılar:

  1. Java Dersleri 4 – Erişim Denetleyicileri (Access Modifiers) Bu dersimizde Java’nın metodlar ve sınıflar üzerinde erişim kurallarını düzenleyen...
  2. Java Dersleri 8 – İç, Gömülü ve İsimsiz Sınıflar (Inner, Nested and Anonymous Classes) Bu dersimizde Java’nın gömülü sınıf yapısını öğreneceğiz. Java programlama dili...
  3. Java Dersleri 5 – Kalıtım (Inheritance) Bu derste Java’nın nesne yönelimli programlamanın temeli olan kalıtım(Inheritance) kavramını...

Sekkaşı'nın Bayırı » Yazilim - April 26, 2009 11:56 AM
Java Dersleri 5 – Kalıtım (Inheritance)

Bu derste Java’nın nesne yönelimli programlamanın temeli olan kalıtım(Inheritance) kavramını nasıl gerçeklediğini öğreneceğiz. Yazılım terminolojisinde kalıtım bir sınıfın diğer bir sınıfın özelliklerini belirli kısıtlar çerçevesinde kazanmasıdır. Aynı kod parçalarının tekrar tekrar yazılmasını engellemenin yanı sıra nesneler arasında gerçek hayata benzer mantiki bağlar kurulmasını
kolaylaştırır. Kalıtımın gerçeklenmesini sağlayan anahtar kelime “extends” dir. Örneğin :

public class PointPlotter extends JXGraph

sınıf tanımında PointPlotter sınıfının JXGraph sınıfından miras aldığını belirtmiş oluyoruz. Buradaki JXGraph sınıfına PointPlotter sınıfının üst sınıfı denir. Kalıtım sınıflar arasında tek yönlü bir ilişki tanımlar. PointPlotter sınıfının her nesnesi aynı zamanda bir JXGraph nesnesinin özelliklerini taşımakta iken tersi yeni JXGraph nesnelerinin PointPlotter nesnesi özellikleri taşıması söz konusu değildir. Buradaki sınıf değişkenleri ve metodlarının miras alınmasında erişim denetleyicilerin kısıtlamaları söz konusudur.
Erişim denetleyicilerin anlatımı için buraya bakabilirsiniz. Bit örnekle kalıtım mekanizmasının nasıl işlediğini daha iyi anlayalım:

package net.orhanbalci.data;

/**
 *
 * @author Orhan BALCI
 */
public class Point2D<t> {

    protected T x_;
    protected T y_;

    public Point2D(T x_, T y_) {
        this.x_ = x_;
        this.y_ = y_;
    }

    public Point2D(Point2D</t><t> p)
    {
        this.x_ = p.getX();
        this.y_ = p.getY();
    }

    public Point2D()
    {

    }

    public T getX() {
        return x_;
    }

    public void setX(T x) {
        this.x_ = x;
    }

    public T getY() {
        return y_;
    }

    public void setY(T y) {
        this.y_ = y;
    }

    @Override
    public String toString() {
        return "Point2D ["+x_+"," +y_+"]";
    }

}
package net.orhanbalci.data;

/**
 *
 * @author orhan
 */
public class Point3D</t><t> extends Point2D</t><t> {

    private T z_;

    public Point3D(T z) {
        this.z_ = z;
    }

    public Point3D(Point2D</t><t> p, T z) {
        super(p);
        this.z_ = z;
    }

    public Point3D(T x, T y, T z) {
        super(x, y);
        this.z_ = z;
    }

    public Point3D(Point3D</t><t> p)
    {
        this.z_ = p.z_;
        this.y_ = p.y_;
        this.x_ = p.x_;
    }

     public T getZ() {
        return z_;
    }

    public void setZ(T z) {
        this.z_ = z;
    }

    @Override
    public String toString() {
        return "Point3D ["+x_+","+y_+","+z_+"]";
    }
}

Yukarıdaki örnekte yazılımımızda kullanmak üzere iki ve üç boyutlu noktaları temsil eden iki tane sınıf tanımlıyoruz. Point2D sınıfımızın x_ ve y_ olmak üzere iki adet sınıf değişkeni var. Point3D sınıfımızın kendisinde ise sadece z_ sınıf değişkeni varken Point2D sınıfından miras alarak x_ ve y_ değişkenlerine de sahip olmuştur. Dikat edilecek olursa x_ve y_ değişkenlerinin erişim denetleyicisi protected olarak ayarlanmıştır. Böylelikle alt sınıflardan erişilebilirsler. Burada dikkat etmemiz gereken bir diğer husus ise üst sınıf metodlarının alt sınıftan nasıl çağrıldığıdır. “super” anahtar kelimesi alt sınıftan üst sınıf metodlarına ve değişkenlerine erişimi sağlayan kapıdır.

public Point3D(T x, T y, T z) {
        super(x, y);
        this.z_ = z;
    }

yapıcı metodunda super(x, y); satıları üst sınıfın

 public Point2D(T x_, T y_) {
        this.x_ = x_;
        this.y_ = y_;
    }

yapıcı metodunun çağrılmasını sağlar. Yapıcı metodlar dışındaki metdolara “super.” şaklinde ulaşabiliriz.

İlgili Yazılar:

  1. Java Dersleri 4 – Erişim Denetleyicileri (Access Modifiers) Bu dersimizde Java’nın metodlar ve sınıflar üzerinde erişim kurallarını düzenleyen...
  2. Java Dersleri 6 – Arayüzler ve Gerçeklenmesi (Interface and Implementation) Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır. Bir...
  3. Java Dersleri 7 – Çok Biçimlilik (Polymorphism) Bu dersimizde Java’nın nesne odaklı programlamanın olmazsa olmazlarından çok biçimliliği...

Sekkaşı'nın Bayırı - April 12, 2009 04:52 PM
Java Dersleri 4 - Erişim Denetleyicileri (Access Modifiers)

Bu dersimizde Java’nın metodlar ve sınıflar üzerinde erişim kurallarını düzenleyen anahtar kelimelerini ve nasıl kullanıldıklarını örnekleriyle öğreneceğiz. Java’da dört adet erişim düzeyi bulunmakla birlikte üç adet erişim denetleyici anahtar kelime vardır. Dördüncü erişim düzeyi ise bu kelimelerin bulunmadiği seviyedir. Erişim kontrolü yazılımda her birimin kendi işine odaklanmasına yardımcı olur. Temelde nesne yönelimli programanın ana unsrlarındandır. Veri kapsülleme, miras ve çok biçimlilik paradigmalarının hayata geçirilmesine olanak tanırlar. Java’da erişim denetleyici anahtar kelimeler şunlardır:

1)Public
2)Protected
3)Private


Bu anahtar kelimelerle işaretlenmemiş her türlü Java yapısı default erişim seviyesine sahip olur ki bu da
dördüncü erişim seviyesidir. Sırasıyla bu seviyeleri ve aralarındaki erişim ilişkilerini açıklamaya çalışalım.

1)Public Erişim Seviyesi
Bu anahtar kelime önüne geldiği sınıfı,değişkeni, methodu diğer bütün kod bloklarından erişilebilir olarak işaretler. Sınıf seviyesinde kullanılabildiği gibi sınıf elemanları seviyesinde de kullanılabilir. Örneğin :

public class FrmVet extends JPanel implements IDataChangeListener, ListSelectionListener {
}

FrmVet sınıfı tanımında kullanılan public anahtar kelimesi bu sınıfın proje kapsamında diğer tüm sınıflar tarafından kullanılabilieceğini belirtir. Bu örnekte ise :

public abstract class QueryManagerBase {

	public ResultSet runSelectQuery(String query) throws SQLException
	{
		Statement s = (Statement) connection.getConnection().createStatement();
		return (ResultSet) s.executeQuery(query);
	}

}

public anahtar kelimesi runSelectQuery(String query) metodunu diğer sınıflar tarafından kısıtlama olmadan erişilebilir olarak işaretlemiştir.

2)Protected Erişim Seviyesi
Bu erişim seviyesi sınıflara uygulanamamakla birlikte metodlara ve sınıf değişkenlerine uygulanır. Önünen geldiği elemana
“alt sınıflardan” ve “aynı pakette bulunan sınıflardan” ulaşılmasına izin verir. Örneğin :

public abstract class QueryManagerBase {

	protected IDatabaseConnection				connection;
	protected ArrayList<idatachangelistener>	dataChangeListeners;
}

bu sınıftaki connection ve dataChangeListeners değişkenlerine ancak QueryManagerBase sınıfının alt sınıflarından yada bu
sınıfla aynı pakette yer alan sınıflardan erişilebilir. Yukarıdaki sınıfın alt sınıfı olan bu örnekte kullanımı görelim :

public class QueryManager extends QueryManagerBase {
public boolean addClient(EntityClient client) throws SQLException
	{
		java.sql.PreparedStatement ps = connection.getConnection()
				.prepareStatement(_insertClientQuery);
		ps.setString(1, client.getAd());
		ps.setString(2, client.getSoyad());
		ps.setString(3, client.getAdres());
		ps.setString(4, client.getTelefonEv());
		ps.setString(5, client.getTelefonCep());
		ps.setString(6, client.getAciklama());
		int result = ps.executeUpdate();
		notifyDataChangeListeners(DataChangeKey.CLIENT);
		return result == 1;
	}
}

Bu örnekte QueryManager sınıfı QueryManagerBase sınıfının alt sınıfıdır. QueryManagerBase sınıfında protected olarak işaretlenen

connection değişkeni java.sql.PreparedStatement ps = connection.getConnection()
				.prepareStatement(_insertClientQuery);

satırında kullanılmıştır.

3)Private Erişim Seviyesi
Protected erişim seviyesine benzer olarak sadece sınıf elemanlarına yani sınıf değişkenlerine ve metodlarına uygulanabilir,
sınıf seviyesinde uygulanamaz. İşaretlediği elemanı sadece sınıf içerisinden erişilebilir kılar. Yani ne aynı paketteki diğer
sınıflar ne de alt sınıftan bu elemanlara erişilemez. Örnek :

public class MYSQLDatabaseConnection implements IDatabaseConnection {

	private Connection mysqlConnection;

}

Buradaki MYSQLDatabaseConnection sınıfına ait olan mysqlConnection değişkeni private olarak işaretlenmiş yani sadece sınıf elemanları
tarafından kullanılabilir, MYSQLDatabaseConnection sınıfı haricinde kullanılamaz.

4) Default Erişim Seviyesi
Java’da sınıf seviyesinde veya sınıf üyeleri seviyesinde herhangi bir erişim belirleyici anahtar kelimenin kullanılmadığı durumdur.
Bu tip sınıflara ve elemanlara kullanıldıkları sınıf içerisinden ve aynı paketteki diğer sınıflardan erişilebilir.

Anlattıklarımızı aşağıdaki tabloda özetleyebiliriz:

Erişimci Sınıf Paket Alt Sınıf Diğer
Public Erişim Var Erişim Var Erişim Var Erişim Var
Protected Erişim Var Erişim Var Erişim Var Erişim Yok
Default Erişim Var Erişim Var Erişim Yok Erişim Yok
Private Erişim Var Erişim Yok Erişim Yok Erişim Yok

Kaynaklar:

İlgili Yazılar:

  1. Java Dersleri 5 - Kalıtım (Inheritance) Bu derste Java’nın nesne yönelimli programlamanın temeli olan kalıtım(Inheritance) kavramını...
  2. Java Dersleri 6 - Arayüzler ve Gerçeklenmesi (Interface and Implementation) Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır. Bir...
  3. Java Dersleri 2 - Sınıf Kavramı ve Yapısı (Class Structure) JDK kurulumunu ve derleyici kullanımını öğrendikten sonra kod geliştirmeye başlayabiliriz....

Sekkaşı'nın Bayırı - April 08, 2009 08:06 PM
Java Dersleri 3 - Kontrol Yapıları

Bu dersimizde Java’nın kodun akışına yön veren kontrol ifadelerinin kullanımını öğreneceğiz. Java kontrol ifadeleri
temel olarak şunlardan oluşmaktadır:

1)if-else if - else blokları
2)for ve foreach döngüleri
3)while ve do-while döngüleri
4)switch-case blokları

Şimdi sırasıyla bunları örneklerle açıklayalım.

1)if-else if-else blokları

Genel manada doğrulanabilir bir ifadenin sonucuna göre yazılımın dallanmasına olanak tanır. Temel bir “if”
deyiminin yapısı:

if(doğrulanabilir ifade)
{
	doğru ise çalışacak ifadeler;
}

şeklindedir. Burada doğrulanabilir ifadenin sonucu boolean veri tipinde olmak zorundadır. Burada bir diğer husus
ise if deyiminden sonra sadece bir ifade yer alacaksa parantezlerin kullanımı kullanıcıya bağımlıdır zorunlu değildir. Yani

if(doğrulanabilir ifade)
	tek ifade;

kullanımı doğrudur. Test edilen durumun yanlış olması durumunda çalışacak kod bloğunu ise “else” anahtar kelimesiyle belirtiyoruz.

if(doğrulanabilir ifade)
{
	doğru ise çalışacak ifadeler;
}
else
{
	yanlış ise çalışcak ifadeler;
}

Doğrulama durum sayısı arttığında ise bunu “else if” anahtar kelimesiyle belirtiyoruz. Burada kontrol etmek istediğimiz durum sayısı
kadar “else if” bloğu kullanabiliriz.

if(doğrulanabilir ifade)
{
	kontrol doğru ise çalışacak ifadeler;
}
else if(farklı doğrulanabilir ifade)
{
	kontrol doğru ise çalışacak ifadeler;
}
...

else
{
	yanlış ise çalışcak ifadeler;
}

Bloklar arası sıralama önemlidir. İsteğe bağlı “else if” blokları “if” bloğundan sonra “else if” bloğundan önce gelmelidir. Ayrıca
isteğe bağlı “else” bloğu mutlaka sonda yer almalıdır. Doğrulanabilir ifade yazarken yapılan en sık hatalardan bir tanesi karşılaştırma “==” operatörü yerine değer atama (assignment) “=” operatörünün kullanılmasıdır. Değer atama operatörünün sonucu değer atama işleminden sonra sol tarafta bulunan değişkenin değeridir. Örnekleyecek olursak :

boolean a = false;
if(a = true)
{
	System.out.println("a doğrudur");
}

Yukarıdaki kod parçasında amaç a nın doğru olup olmadığını tespit etmek iken yanlışlıkla a değişkenine doğru değeri atanıp ekrana “a doğrudur” mesajı basılır. Oysaki “=” yerine “==” kullanılsa ekrana herhangi birşey yazılmadığı görülecektir.
İf-else bloğu kullanmak yerine üçlü operatörü de kullanabiliriz. Üçlü operatörün kullanım şekli :

ireturnValue = (x>y) ? x :y;

Örnek if-else if-else bloğu :

if(subTreeNode == null)
            return false;
        else if(element.compareTo(elementAt(subTreeNode)) == 0)
            return true;
        else if(element.compareTo(elementAt(subTreeNode)) < 0)
            return search(element,subTreeNode.left);
        else if(element.compareTo(elementAt(subTreeNode)) > 0)
            return search(element, subTreeNode.right);
        else
            return false;

2)for ve foreach döngüleri
Döngüler kod içinde tekrarlanan bölümlerin tanımlanmasında kullanılırlar. For döngüsü tanımı temel olrak üç kısımdan oluşur :
a)Döngü değişkeni tanımı : döngü hayatını kontrol edecek değişkenin tanımlandığı ifade
b)Döngü kontrol ifadesi : döngünün bitip bitmeyeceğini kontrol eden ifade
c)Döngü ilerleme ifadesi : döngü ilerleme ifadesi, döngü değişkeninin güncellendiği ifade

for(döngü değişkeni tanımı; döngü kontrol ifadesi; döngü ilerleme ifadesi)
{
	döngü gövdesi;
}

Örnek :

 for (int i = 0; i < numberOfPoints; i++) {
            Random r = new Random();
            int k = r.nextInt(xUpperLimit) % (xUpperLimit - xLowerLimit) + xLowerLimit;
            int j = r.nextInt(yUpperLimit) % (yUpperLimit - yLowerLimit) + yLowerLimit;
            Point2D<Integer> p = new Point2D<integer>(k, j);
            al.add(p);
        }

Java 1.5 ile gelen syntax değişimlerinden biriside geliştirilmiş for döngüsü olarak adlandırılan for each döngüsüdür. Listelerde ve arraylarda rahat
bir şekilde gezinmek amacıyla geliştirilmiştir. Kullanımı :

for(eleman : array)
{
	döngü gövdesi;
}

şeklindedir.

Örnek :

ArrayList&lt;Point2D &lt;Integer&gt;&gt; al = new ArrayList &lt;Point2D &lt;Integer&gt;&#62;();
	for(Point2D&lt;Integer&gt; a : al)
        {
                System.out.println(a);
        }

Bu örnekte içinde Point2D tipinde nesneler barındıran bir liste elemanları geliştirilmiş for döngüsü kullanılarak ekrana yazdırılıyor.

3)while ve do-while döngüleri
while döngüleri tekrar edilecek kod bloğunun kaç defa tekrar edeceğini bilmediğimiz durumlarda kullanılır. Kullanımı:

while(döngü kontrol ifadesi)
{
	döngü gövdesi;
}

şeklindedir. For döngüsünden farklı olarak döngü kontrol değişkeninin tanımı while döngüsünden önce yapılmalıdır.
while(int i = 0) kullanımı yanlıştır.
do-while döngüsü while döngüsünden farklı olrak kapsadığı kod bloğunun en az 1 kere çalıştırılmasını garanti eder. Kullanımı:

do
{
	döngü gövdesi;
}while(döngü kontrol ifadesi);

4)switch-case blokları
switch-case blokları dallanmış if-else if-else bloklarını daha okunabilir hale getirmek için oluşturulmuştur. Genel yapısı :

switch(ifade)
{
	case sabit :
	kod bloğu;
	case sabit 2:
	kod bloğu;
	....
	default:
	kod bloğu;
}

şeklindedir. Burada “ifade” int,short,byte,char ve enum tiplerinde olabilir. Sabitler ise switch ifadesi tipiyle aynı tipte olmalıdır.
Yukarıdaki ifadede sabit ve sabit 2 değerleri aynı olamaz. Kod blokları sonunu “break” anahtar kelimesiyle belirtmezsek doğru case bloğunun altındaki
tüm bloklar çalışır.Yani :

switch(1)
{
	case 1: System.out.println("sayi bir");
	case 2: System.out.println("sayi iki");
	default: System.out.println("varsayilan");
}

çıktı olarak :
sayi bir
sayi iki
varsayilan
verecektir.

İlgili Yazılar:

  1. Java Dersleri 7 - Çok Biçimlilik (Polymorphism) Bu dersimizde Java’nın nesne odaklı programlamanın olmazsa olmazlarından çok biçimliliği...
  2. Java Dersleri 6 - Arayüzler ve Gerçeklenmesi (Interface and Implementation) Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır. Bir...
  3. Java Dersleri 5 - Kalıtım (Inheritance) Bu derste Java’nın nesne yönelimli programlamanın temeli olan kalıtım(Inheritance) kavramını...