Oca 24

Bu desen Factory Method desenine çok benzer. Amaç yine aynıdır. Sistemden nesnelerin oluşma işini soyutlar. Abstract Factory benzer özellikleri olan nesne fabrikalarını gruplar. İçinde birden fazla fabrika vardır.
Örneğimizde birden fazla türde database’de kaydetme ve sorgulama işlemlerini gruplamak için soyut fabrikayı kullanıyoruz :
Kısaca kodlarına da bakalım :
Yazının Devamı »

Oca 23

Bu tasarım deseni nesne oluşturma işini sistemden ayırır ve aldığı parametreye göre nesneleri oluşturarak kullanıcıya geri döner.
Bir örnek verecek olursak düşünün ki gezmeye giderken farklı yöntemleriniz olsun. Ben şimdilik iki tane kullanacağım : Araba ve Bisiklet. Bu iki sınıf “Yöntem” arayüzümüzden türemişler. Bir adet de YöntemFabrika’mız var.

Yöntem.cs

interface Yöntem
{
void Gez();
}

Araba.cs

class Araba : Yöntem
{
public void Gez()
{
MessageBox.Show(”arabayla geziyorum”);
}


}

Bisiklet.cs

class Bisiklet : Yöntem
{
public void Gez()
{
MessageBox.Show(”bisikletle geziyorum”);
}


}

YöntemFabrikası.cs

class YöntemFabrikası
{
public Yöntem yöntemYarat(string opt)
{
if (opt == “arabayla”)
return new Araba();
else if(opt==”bisikletle”)
return new Bisiklet();

return new Araba();//if’lere girmezse


}


}

ve kullanacağımız yer

string parametre = //istenilen yerden dinamik olarak çekilebilir
Yöntem y = new YöntemFabrikası().yöntemYarat(parametre );
y.Gez();
Oca 23

Türkçe’ye Tek Nesne olarak çevrilen bu tasarım desenindeki ana amaç bir nesnenin yalnızca bir kez oluşturulabilmesidir. Buna neden ihtiyaç duyarız sorusuna gelince mesela bir bağlantıyı dinleyen nesneniz olsun. Bunu ikince kez yaratmak kimi zaman sorunlara yol açabilir. Sonuçta bunlar sonsuz threadlerdir. Onun yerine bu nesne bir kez yaratılsın ve ihtiyaç duyulduğu zaman daha önce oluşan nesne oraya gitsin ve işlerini halletsin isteriz.

Basit bir örnek verelim :
class RandomSayıVerici
{
private RandomSayıVerici() { }
private static Random r = new Random();

public static Random nesneAl()
{ return r; }
public static int sayiVer(int min, int max)
{
return r.Next(min, max);
}
public static int sayiVer(int max)
{
return r.Next(max);
}
public static int sayiVer()
{
return r.Next();
}
}

Şimdi biz bu örnekte bir adet RandomSayiVerici oluşturduk. Özellikle Random sınıfını kullandım çünkü özellikle yani başlan bir çok kişi bu sınıfın sürekli aynı sayı ürettiğini düşünüyor. Ama kaçırdıkları şey sınıfı sürekli baştan yaratmaları. Ve bunun bir döngü içinde olduğu düşünülürse mikro saniyeler seviyesinde sayı değişimi çok da fazla olmayacaktır. İstenilen yerde :

TextBox1.Text += RandomSayıVerici.sayiVer(0, 53).ToString() ;
şeklinde kullanılması yeterli.
İyi çalışmalar..
Oca 23
Windows 7 GodMode On
icon1 Volkan ALBAYRAK | icon2 Kısa Bilgi | icon4 01 23rd, 2010| icon3Yorum Yok »

Hani oyunlarda şifreler olur ya bu da windows’un enteresan ve kullanışlı bir şifresi diyebiliriz. Yazdığınızda bütün ayarların tek bir elde toplanması bayağı bir işe yarıyor.
Şİmdi bir klasör oluşturun ve adını :

GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}

koyun. Göreceksiniz ki simgesi değişecek. İçine girdiğinizde ise normal yollardan bulunması çok zor olan bir çok ayar artık elinizin altında.

Oca 20
MasterPage Kavramı
icon1 Volkan ALBAYRAK | icon2 ASP / ASP.NET, C#, Kategorilenmemiş | icon4 01 20th, 2010| icon3Yorum Yok »

Düşünün ki 100′lerce sayfadan oluşan bir siteniz var ve hepsinde belli yerler sabit. Örnek verecek olursak menüler genelde sabit olur ya da en altta yer alan açıklamalar vs. gibi. Bunların içinde bir yerde değişiklik yapmanız gerektiğinde hepsini tekrar düzenlemeniz gerekiyordu önceleri. Fakat masterpage kavramının gelmesiyle bu sorun ortadan kalktı. Artık sabit olan tarafları masterpage içinde yaratıp normal içerik sayfaları bu masterpage’i kullanarak türeyebiliyor. Sanki yeni gibi anlatıyorum ama bu çıkalı bayağı bir oluyor :) hemen küçük bir örnekle konumuzu özetleyelim :

MasterPage.master

Burada göreceksiniz ki html sayfasında olması gereken ana tag’ler var. Çünkü buradan türeyen sayfalar body taginin içinde yer alan contentpalceholder içine gömülürler serverde işlenirken.

Defalut1.aspx

Hemen solutionExplorer’dan oluşturduğumuz masterpage’e sağ tıklayıp “add content page” diyoruz.Türeyen sayfada hiçbir html tagi bulunmuyor çünkü onlar zaten masterpagede var. Hemen en başta MasterPageFile=”~/MasterPage.master” dikkatinizi çekmiştir. Türeyen sayfalarda “content” tagi bulunur ve sayfa tasarım ve içeriği bu iki tag arasına gömülür.

Default2.aspx

Ayrıca bir sayfanın birden fazla masterpagei olabilir. Bunun faydalarından birisi de; hatta hemen örnek vererek açıklayalım. Bir üniversite sitesi olsun bunun bir ana sayfası var yukarıda üniversite logosu olan. 5 adet fakülte var üniversitede. ve her bir fakültede ayrı ayrı acıklamalar vs var. Bunun tasarımında biden fazla masterpage kullanmak yararımıza olacaktır. Bir tanesi en üstte yer alıp sadece üniversite logosunu ve ana menüleri taşır. Bundan türeyen fakülte masterpage’leri kendi fakültesine özgü menüleri taşır. Ana masterdan türedikleri için üniversite logosunu da taşımış olurlar. ve artık ürettiğimiz fakülte masterpagelerinden dilediğimiz kadar dinamik içerik sayfaları oluşturabiliriz :)
Oca 17

Java ile kolay bir kalıtım örneği yapalım. Car isminde bir arabanın sahip olabileceği temel özelliklere sahip bir ana class yaratalım ve bu classtan kalıtımla türettiğimiz özelleşmiş arabalar oluşturalım. Öncelikle Car classımızı yazalım. Temel olarak bir arabaya hız, fiyat ve renk özelliklerini kazandıralım.

 

public class Car {

    int speed;

    double regularPrice;

    String color;

   

//constructorda bu değerleri initialize edelim

    public Car(int speed,double regularPrice,String color){

        this.speed=speed;

        this.regularPrice=regularPrice;

        this.color=color;

    }

 

//main fonksiyonunda arabanın fiyatına erişebileceğimiz bir metod yazalım

    public double getSalePrice(){ return regularPrice; }

 

}

 

 

Daha sonra bu classtan türetilmiş kendi içinde farklı özellikleri olan farklı arabalar (subclasslar) üretelim.

Bir tane Car classını kalıtımla alan Sedan tipinde araba classı üretelim. Bu araba tipinde temel araba özelliklerinin yanında bir de uzunluğunu belirleyebilelim ve sedanın fiyatını, uzunluğu 20den büyükse 5% indirimli değilse %10 indirimli hale getirelim.

  Yazının Devamı »

Oca 16
Java Swing Örneği
icon1 Volkan ALBAYRAK | icon2 Java, Örnek Kodlar | icon4 01 16th, 2010| icon3Yorum Yok »

Kısaca bir bakalım neymiş bu “swing” kütüphanesi. Aslında windowsform’larda sıkça karşılaştığımız button, label vs. gibi objeleri barındıran bir kütüphanedir. Biraz da kodlayalım bakalım :

 

 //Gerekli kütüphaneleri ekliyoruz

 import java.awt.EventQueue;

 import java.awt.FlowLayout;

 import javax.swing.JButton;

 import javax.swing.JFrame;

 import javax.swing.JLabel;

 import javax.swing.WindowConstants;

 

 public class SwingExample {

     public static void main(String[] args) {

 

        EventQueue.invokeLater(new Runnable() {

            @Override

            public void run() {

                //Penceremizi oluşturuyoruz

                JFrame f = new JFrame(”swing örnek”);

  Yazının Devamı »

Oca 16
Windows DLL’leri ile Pencere Kontrolü
icon1 Volkan ALBAYRAK | icon2 C# | icon4 01 16th, 2010| icon3Yorum Yok »

Şimdi asıl olay şu yaptığımız bir programdan diğer açık olan program pencerelerini nasıl kontrol ederiz? Tabiki user32 DLL’i ile :)

[DllImport("user32.dll")]
public static extern int FindWindow(
string lpClassName, // class name
string lpWindowName // window name
);

Bu fonksiyon bizim açık olan programı buluyor ve bize onun Windows altındaki ID’sini veriyor. Tabiki “windows name” parametresine programın tam adının yazılması gerekli.

[DllImport("user32.dll")]
public static extern int SetForegroundWindow(
int hWnd // handle to window
);

Burası ise biraz önceki ID değerini alarak, bu ID’ye sahip olan pencereyi ön tarafa getiriyor.

[DllImport("user32.dll")]
public static extern int SendMessage(
int hWnd, // handle to destination window
uint Msg, // message
int wParam, // first message parameter
int lParam // second message parameter
);

Bu fonksiyonla ise açık olan pencereye mesaj gönderebiliyoruz. Mesela klavyeye dokunmadan notpad’i aktif yapıp oraya birşeyler yazabiliriz :)
Gerisi sizin hayal gücünüze ve yapmak istediklerinize kalmış. Sormak istediğiniz bir şey varsa çekinmeyin hemen sorun. Mümkün olan en kısa sürede cevaplamaya çalışacağım.
İyi çalışmalar..

Oca 3

Merhaba Arkadaşlar,

IDE olarak vaz geçilmezim VS. Bu aralarda 2010 üzerinde çalışamaları artırdılar. Peki ben size desemki şimdi bir IDE var ve web üzerinden size istediğiniz tipte proje oluşturmanızı sağlıyor. bununla yetinmezmiş gibi intellisense ve diğer özelliklerede sahip, hadi be oradan seslerini duyar gibiyim. buyrun deneyin benim hoşuma gitti. http://www.coderun.com/ide/

Kas 27

MDI formlarda child formun iki kere açılmasını önlemek için singleton tasarım desenini kullanacağız. MDI form olarak tanımlanmış formumuz Form1 olsun. Bunun içinde açacağımız child form ise Form2 olsun. Form1de herhangi bir şekilde Form2 çağrıldığında sadece bir tane instance oluşturarak bir tane açılmasını istiyorum. Bunun için Form2nin classına şu kodu yazalım.

 

static Form2 myform;

public static Form2 Myform()

{

 

    if (myform == null)

    {

        myform = new Form2();

    }

    return myform;

 

}

 

if (myform == null) yazmamız burada çok önemli. Form2nin sadece bir tane nesnesi oluşturulsun istiyoruz ve bu nesne daha önce oluşturulmamışsa yani null ise oluştur diyoruz. Bu şekilde buraya singleton desenini uyguladık. Daha sonra Form1 den bir buton eventından veya buna benzer herkangi bir şeyden Form2 yi çağırırken şu kodu yazıyoruz.

Form2 yeni = Form2.Myform();

yeni.MdiParent = this;

yeni.Show();

yeni.Activate();

 

Form2nin nesnesini oluştururken new Form2() diye değil de Form2.Myform() diye oluşturduk buna dikkat edelim. En son olarak da Form2nin kapanış eventına bi kod cümlesi daha eklememiz gerekiyor.

private void Form2_FormClosing(object sender, FormClosingEventArgs e)

{

     myform = null;

}

 

Bunu yazmazsak nesnesini oluşturup açtığımız Form2yi kapatıp tekrar açmak istediğimizde bir hatayla karşılaşırız. Bunu engellemek için bu cümleciği yazıyoruz. Nedeni form nesnemizi bir kere oluşturabilmek üzere oluşturduk ve bunun için “nesne null ise yarat” dedik. Bu yüzden nesneyi null yapmadan tekrardan oluşturamayız. Dolayısıyla form kapatılırken nesneye null değerini atıyoruz ki istediğimizde Form2yi tekrardan yaratabilelim.

« Önceki Yazılar