22 Mayıs 2012 Salı

HTML nedir ?

Merhaba arkadaşlar bu makalemde sizlere Html ve XHtml arasındaki farkları anlatmayı düşünüyorum.Farklara değinmeden önce html nasıl çıkmış hikayesi neymiş nasıl bir dilmiş ondan sizlere bahsedicem.
Html dediğimiz teklonoji 80 lilerin sonlarında isviçrede tim barner lee denen bi fizikçi tarafıdan yapılmıştır.Html açılımı Hyper Text Markup Language'dir ve bu bir işaretleme dilidir.Xml ile bu bağlamda benzerlik gösterir.ancak Xml i daha çok farklı platformlar arası veri alışveriş için kullanıyoruz.Html daha çok bu fizikçi abilerimizin düzenli olarak makalelerini yayınlayabilmeri ihtiyacından yola çıkılarak yaratılmıştır.Amaç makalelerini yazıp sunucuya atmak ve farklı laboratuvarlardaki yada farklı lokasyonlardaki bilim insanlarının bu makaleleri okuyarak bilgi sahibi olabilmeleri.Gün geçtikçe bu işlemler dahada günlük hayatımıza girmiştir ve bireysel web sayfaları ortaya çıkmıtır.Kullanımı arttıkça farklı standartlarda ortaya çıkmaya başlamıştır. 1994 yılında W3c adı ile bir standart ortaya çıkmıştır.IBM - Apple - Sun gibi büyük firmalar bu işaretleme dilini standart bir hala getirmişlerdir.Bu büyük adımdan sonra ise web dünyası büyük bir gelişim ve değişim geçirmeye başlamıştır.Web sitelerinin geleceğine bakıcaksak eğer öncelikle geçmişe bir göz atmamız gerekli.eğer versiyon olarak tanımlamak gerekirse ki bu versiyon dediğim daha çok dönemler versiyonlardır web 1.0 90 lı yılların sonuna kadar dönemi kapsamaktadır.Bu dönemde web siteleri web sayfalarından oluşuyor ve üreten ve tüketen diye tabir edebileceğimiz Üretici ve Tüketiciler var.Tüketici kullanıcı.Üretici ise web sayfalarına metinler ve resimler ekleyen kişilerdir.O dönemde 1000 kişi web sayfası üretiyorsa 10000 kişide tüketici durumunda web sayfasına girer bilgi edinir işini gördükten sonra sayfadan çıkar.Üreten'e göre tüketen sayısı o dönemlerde çok fazlaydı.Web 1.0 döneminde aynı bugünkü gazete ve dergiler gibiydi web sayfaları sınırlı üretici ve çok sayıda tüketici.Aslına bakarsak bu büyük bir problem arkadaşlar bunun içinse Web 2.0 dönemine geçildi.Bu dönemde de amaç tüketicileri üretici kısmına kaydırmaktı.Arz talep bir şekilde karşılanması gerekiyordu.Bu dönemde görsellik çok ön plandaydı ve web siteleri oldukça albeni kazanmıştı.Güzel bir örnek vermek gerekirse bu tarz sitelere Youtube diyebilirim.Burda bildiğiniz gibi her tüketici bir video yükleyerek üretici pozisyonuna geçebiliyor.Yani sitedeki içeriği siteyi kullanan kişiler meydana getiriyor.Bu dönemde web programcılığı ortaya çıktı.Cgi -Php -Asp-Jsp gibi diller kullanılarak html ile bütünleşik bir yapıda kullanıcılardan Resim , Metin ve Video gibi daha birçok veri alındı ve işlendi.Bu sayede sayfalara başka kullanıcılarında katılımı sağlandı.Burdan sonrasıda arkadaşlar hepimizin bildiği Facebook , Twitter gibi hayatımızın içinde yerini alan ve sürekli olarak kullandığımız web siteleri.Turistik hikayemizden sonra arkadaşlar gelelim html'e.



<html> <!—Her html sayfa <html> ile başlar </html> ile biter burası kök dizindir.Bu Html kök dizinimizin 2 tane alt elemanı olabilir.-->
<head>
 <!--   //sayfanın görsel olmayan ama ilgili bazı bilgileri barındıran kısımdır. Daha sonra değiniceğim css javascript kodları bu bölüm içine yazılır.Tabi bunlarla kısıtlı değildir.Arama motorları için direktifler.Arama motoru indexlesinmi indexlemesinmi ? hangi süre aralıklarında indexlensin gibi görünmeyen ayarlarımızı bu bölümde yaparız.
</head>
<body>
<!--Bir html dökümanın sayfa içerisindeki göstericeği resim metin her ne gösterilicekse bu bölümde istenildiği gibi biçimlendirilerek gösterilir.
 Selam Dünya
</body>
</html>

Html dünyasına böyle bir giriş yaptıktan sonra ilerlemeye devam edicez arkadaşlar






12 Mayıs 2012 Cumartesi

MSSQL Fonksyonlar -- TSQL --

Selam arkadaşlar bu yazımda sizlere fonksyonlar hakkında bilgi vericem.C#'dan da hatırladığımız gibi işlerimizi çok kısaltan hızlandıran hazır fonksyonlarımız vardı.Bunlar MSSQL'de de var ve bunları sorgularımızda kullanmaktayız.Aşağıdaki resimde Fonksyonları nerde bulabileceğinizi görüceksiniz.Ben hepsine değinmiycem sadece Mathematical (Math) , Date and Time  ve String Fonksyonlar üzerinde durucam.



Bu fonksyonlar üzerinde örnekler yapıcam ve select cümlelerim içinde nasıl işimize yararlar ve işlerimizi kolaylaştırırlar bunlar üzerinde durucam.

MSSQL Select Sorgusu -- TSQL --

Merhaba arkadaşlar makalemde select sorgusu üzerinde durucam. Select sorgusu üzerine örnekler ve açıklamalarla devam edicem. TSQLNedir? makalemde Veri tabanı - Tablo kavramlarından bahsetmiştik.Artık işlerimiz hep bu veri tabanı ve tablolar üzerinden devam edicek.Veri Tabanı verilerimizi düzenli bir biçimde saklamamıza yarardı ama bu veriler sadece saklanırlarsa bir işe yaramazlar.Verileri çekip bunları isteğe göre listeleyip bunlar üzerinden raporlar olsun istitastikler olsun hepsini alabiliriz.Bunları yapabilmek içinde Select sorgusunu iyice öğrenmemiz gerekli arkadaşlar.Uzatmadan Örnekler üzerinde devam edicem.


SELECT * FROM Customers

Temel yazım şeklli şöyledir arkadaşlar SELECT KOLON_ADI FROM TABLO_ADI .Örneğimde Customers diye bir tablom var ve içindeki tüm kolonlardaki verileri bana getir diyorum. Burda *(Yıldız) ifadesi tüm kolonlar anlamına gelir.

select CompanyName,ContactName,ContactTitle from Customers

Burdada 3 tane kolon adı belirtmişim ve Customers Tablosundan bu 3 kolondaki tüm verileri listelemişim.


Daha açıklayıcı olması için ekran görüntüsü ekledim arkadaşlar. Customers tablom aslında 11 kolondan meydana geliyor ama ben sadece 3 kolon belirttim ve onlardaki verileri çektim.

select CompanyName as Firma ,ContactName as Kişi,ContactTitle Ünvan
from Customers

Bu örneğimde ise bir öncekinden çok az bir fark var Üstteki resimde gördüğünüz CompanyName yazan kolon adı yerine Firma yazıcak.Yani görünen kolon adını değiştiricek.Kolon adı arada boşluk bırakılarak yazılamaz arkadaşlar. Birkaç farklı yöntemi daha var bunlarda yazabilirsiniz.Başka örneklerde göstericem.

select FirstName+' '+LastName [Ad Soyad] from Employees

Emloyees tablomda ad ve soyad kolonları var ve ben bunların tek bir kolonda gösterilmesini istiyorum.Burda kolon adı için farklı bir örnek daha var arkadaşlar köşeli parantezler içine boşluk kullanarak Ad Soyad yazılmış eğer boşluk bırakılarak kullanılıcaksa bu yöntem tercih edilmelidir.




select  CompanyName,ContactName,ContactTitle,Country
from Customers where Country = 'Germany'

Örnekte ülkesi Germany olanları listelemişiz.Burda dikkat edilmesi gereken bir değişik var.Where koşulundan sonra Country kolonunun içindeki değer eğer Germany ifadesine eşitse listele diyor.Bu C#'daki karar yapılarına benzerlik gösteriyor arkadaşlar.


select  CompanyName,ContactName,ContactTitle,Country
from Customers where Country = 'Germany' or Country = 'USA' or Country = 'UK'

select  CompanyName,ContactName,ContactTitle,Country
from Customers where Country in ( 'Germany','USA','UK');

Yukarıda iki tane sorgum var ve ikiside aynı işlemi yapıyorlar.İlk sorgu ikincisine nazaran daha uzun.Bu sorgular ülkesi Germany yada USA yada UK olanları listeler.

select Distinct Country from Customers

Yine sorguda bir farklılık var arkadaşlar distinct ifadesi eşssiz tekrarsız anlamındadır.Country kolonunda tekrar eden ülkeler var diyelimki.Bunları tekrarsız getirir yani 10 tane Germany olduğunu varsayarsak sadece 1 tane getirir benzersiz tekrarsız durumdakiler gelir.

select ProductName,UnitPrice
from Products where UnitPrice between 30 and 50

Between arasında anlamındadır.Örnekten yola çıkarsak unitprice(fiyatı) 30 ile 50 arasında olanları listeliyor.


select CompanyName
from Customers where CompanyName like 'T%' -- T ile başlayan.

select CompanyName
from Customers where CompanyName like 'T%S' -- T ile başlayan S ile bten.

select CompanyName
from Customers where CompanyName like '%T%' -- Bi yerlerinde T olsun.


Yukarıda 3 örneğim Like komutu ile ilgili arkadaşlar.Yanlarındada açıklamları var.Yaptığı iş şöyle CompanyName Kolonundaki verilerden belirtilen şartlara uygun olanlarını getiriyor.Şöyleki ilk örnekte baş harfi T olucak devamını dikkate almıyor.Burdaki % işareti sonda olan bir örnek yapmadım eğer like '%T' yapsaydım sonu T ile bitenleri getiricekti.


Select ProductName From Products Order By UnitsOnOrder Asc

Sıralama işlemi yapmamı sağlar.Yazımı Order By KOLON_ADI Asc şeklindedir.Asc alfabetik sıralama içindir yazmak zorunda değilsiniz sadece order by kullansanızda sıralar. Desc'de tam tersi şekilde sıralama işlemi yapar arkadaşlar.


Tüm örneklerimi Microsoft'un verdiği Northwind Db üzerinde yaptım ve bu Db üzerinden devam edicem arkadaşlar.Download etmek isterseniz NorthwindDB 'den indirebilirsiniz. Okuduğunuz için teşekkürler.







8 Mayıs 2012 Salı

C#'da Connection Pooling

Merhaba sayın arkadaşlar bu makalemde kodlarımıza biraz takla attırıcaz.Connection Pooling meselesi üzerinde durucaz.Şimdi Pool havuz demek arkadaşlar.Elimizde bir havuzumuz var . Connection kelimesini açmaya gerekte pek görmüyorum .Bir bağlantı havuzumuz var ve bağlantılarımızı aslında farketmeden bunun üzerinden kuruyoruz bunları biliyormuydunuz?Bilmiyorsanızda artık kafanızda biraz kıvılcım oluşmuştur arkadaşlar.Bir hikaye geldi aklıma hepimizin bildiği yada bilmediği bisiklet kullanmak.Ben biliyorum öğrenene kadar uğraşmıştım baya ama sonunda iyi denebilcek seviyede kullanabiliyorum.Bir kere öğrendikten sonra tekrar öğrenme gibi bir çabaya girmedim doğrusu elimde değil.Aynı şekilde yüzmede 1 kere öğrenebilir.Sonra sıkıntı çekmeden her sene yüzer geçersiniz.Connection Pooling de buna benzer bir tavır sergiler arkadaşlarım.Hani beynimiz nasıl yüzme becerisini edindiğinde bunu unutmuyor.Belleğimizde bunu unutmuyor.Bu sefer diyelim bir bağlantımız var elimizde onu açıp kapattığımızda hız artışı sağlıyor.Bir örnek üzerinde deneyelim arkadaşlar.


            listBox1.Items.Clear();
            SqlConnection con = new SqlConnection("Server=.\\BLACK;Database=Northwind;Trusted_Connection=true;Pooling=False");
            DateTime dtBaslangic = DateTime.Now;
            for (int i = 0; i < 1000; i++)
            {
                con.Open();
                con.Close();
            }
            listBox1.Items.Add((DateTime.Now - dtBaslangic).TotalMilliseconds.ToString());

Örnekte 1000 tane bağlantımı açıp kapattım.5 saniyemi aldı beklemesi biraz sıkıcı oldu.Belkide başınıza hiç gelmemiştir bunun nedeni Default olarak Pooling True gelmesindendir.Başka Defaultlarıda vardır.Bunları birkaç örnek sonra sizlere göstericem.
Örnekte Başlangıcı DateTime.Now diyerek alıyorum ve bitişinde de tekrar anı yakalayıp başlangıç saatimi ondan çıkarıyorum sonucunda detaylı görülebilmesi için milisaniye cinsinden listboxıma aktarıyorum.Burda Pooling Değerimi True yaptığımda ise inanılmaz bir fark oluyor arkadaşlar.Resimlerle göstereyim.




Resimleri pek güzel kesip parçalayamadım ama üstteki False olan milisaniye cinsinden büyük bi zaman farklı olmuş arkadaşlar.Alttakinde ise zaman çok az geçmiş çok hızlı bir şekilde bağlantı işlemlerini gerçekleştiriyor. 

Bir başka bilinçli olarak kullanmadığımız özelliğine daha değinicem arkadaşlar aslında gizliden gizliye bizi bu max pool size diye kısıtlıyor.Default olarka Maximum Açık Bağlantı Sayımız 100 dür arkadaşlar.Kapatmadığımızda bağlantılarımızı ve açmaya devam ettiğimizde maximum sayıya ulaştığımız ve geçmeye çalıştığımız taktirde hata alırız.Sevdiğim bir söz var bir makalede okuduğum.Database bağlantılarında durumumuz şöyle olmalı "mümkün olduğunca geç bağlan,erken çık".
Bir tane deneme yapalım bağlantıları kapatmayıp patlayalım arkadaşlar.



            for (int i = 0; i < 1000; i++)
            {
                SqlConnection con = new SqlConnection("Server=.\\BLACK;Database=Northwind;Trusted_Connection=true;Pooling=True;max pool size=50;");
                con.Open();
            }


Patladığımın resmini görüyorsunuz arkadaşlar. Visual Studio burda bana kızıyor.Bağlantı açmışım kapatmamışım maximum 50 tane bağlantı kurucam demişim.ama ben 1000 tane kurmaya çalımışım.Burası çok önemli arkadaşlar çünkü açtığımız her bağlantıyı kapatmamız gerekli.Her açık bağlantı sistem kaynağından tüketir.O zaman şu soru geliyor benim aklıma max pool size ı arttıralım geçelim.Arttıralımda her güzel şeyin birde kötü tarafı vardır arkadaşlar . Burda Connection Pooling işlemi kullanıyoruz ve bu bizim belleğimizden yiyor.Projemizin yapısına göre ihtiyaca göre Pooling sayısını ayarlamalıyız.Ayarlamadık diyelim en ve en önemlisi açtığımız tüm bağlantıları işleri bittiği zaman kapatmalıyız.

Open() ve Close() olaylarını biliyoruz üstünde durmuycam arkadaşlar.Birde Dispose() olayı var tam olarak kurtulmak istiyorsak tam olarak derkende Close()'dan birkaç adım öteye gider .Bağlantının durum bilgisini ve bağlantının bazı özelliklerinide temizler.Şimdilik bilgim dahilinde olan kısım bu kadar arkadaşlar.

Makalem umarım yardımcı olmuştur.Beni Takip etmeye devam edin !

7 Mayıs 2012 Pazartesi

TSQL - Constraint

Selam arkadaşlar Constraint kelimesi sözlüklerde zorlama, baskı, sınırlama gibi anlamlarda geçiyor.Bizde ise Database Constraint yani veri tabanı kısıtları diye geçiyor.Kısıtlar kolonlarda yer almasına izin vereceğimiz verileri belirleyen kuralları tanımlamamızı ve veri bütünlüğünü korumayı sağlarlar.Kısıtlarımız 5 tanedir arkadaşlar.


  1. Primary Key
  2. Foreign Key
  3. Unique Key
  4. Default
  5. Check
Primary Key : Herhangi bir sistem içerisinde var olan her varlığın birbirlerinden ayırt edecek bir değeri olması gereklidir.Bir tabloda bir veriyi diğer veriden ayırmak için Primary key(Birincil Anahtar) kullanırız.Primary key bize benzersizlik sunar ve null değer içermez.Şöyle düşünün bir web siteniz var.Bir üye tablonuz var.Adı Ali soyadıda Kara olan iki kişinin kaydı var.Bu iki aliyide birbirinden ayırmak imkansız duruma geldi.Primary key bize bu kişileri ayırmak için yardımcı olur.


Örnek bir tablom var arkadaşlar burda ID adında bir primary key belirlemişim.İlk önce anahtarı görüyorsunuzdur sanırım sarı renkte olan.Her tabloda bu anahtarlardan bir tane olabilir.Yani her tabloda sadece bir primary key tanımlayabiliyoruz.ID kolonunu gördüğünüz gibi int olarak tanımlamışım.Bu stringde olabilirdi.Neden int derseniz Identity diye bir yapı var.


Kolonun özelliklerinden Identityye gelirseniz ve onu true yaparsanız.Yukarıdaki resimdeki gibi olucaktır.Peki Identity nedir ? Identity Otomatik olarak artan bir sayı değeridir.Başlangıç ve artış değerleri verilebilir.Default olarak 1 den başlıyor ve 1 er 1 er artış gösteriyor.Bu artma olayıda kayıt girildikçe gerçekleşmektedir.İlerideki örneklerde görüceksiniz.

Foreign Key : Arkadaşlar bildiğiniz gibi tablolarımız arasında ilişkilerimiz var.Bir sonraki makalemde bu konuya giricem.Bir tablodaki Primary Key başka bir tabloda temsil ediliyorsa yani başka bir tablodada kullanıyorsa bu kolon Foreign Key olur.



Bir Tabloda Foreign Key Birden fazla olabilir.Resimde 2 adet tanımlanmış ve gri renkli anahtar şeklinde ifade edilmiş.

Unique Key : Benzersiz alanlar için kullanılırlar.Yani Bu kolona girilen her veri birbirinden farklı olmalıdr.Primary Keyle benzerlik gösterirler bu açıdan ama.Bir tabloda Birden fazla Unique Key kullanılabilir ve Primary Key Null değer alamaz.Unique Key 1 kerelik Null değer alabilir onun için benzersiz niteliği taşır.



Unique Key'in de arkadaşlar ters mavi bir anahtardır gösterimi.

Default : Adı üstündedir arkadaşlar default değerler vardır bildiğiniz gibi bir işlem yapılmadığında alınıcak bir değer.Şöyle düşünün arkadaşlar bir üye tablonuz var.Üyelerin kayıt tarihlerini tutuyorsunuz.Bu bölüme default olarak günün tarihini al dediğimizde.Direk olarak o bölüme kayıt girilse yada girilmese bile bir değer atıycaktır.Buda default dediğimiz constrainttir.



Burdada arkadaşlar GETDATE() datetime fonksyonları ile bir kayıt girilmediği zaman direk olarak geçerli tarihi eklemişiz.

Check : Constraintler arasında en çok bana göre farklılık gösteren Checktir arkadaşlar.Çünkü Uygulandığı alanlar üzerinde kontrol işlemi yapar eğer uygunsa veriyi kaydeder.



İlk adımda önce uygulayacağımız kolonun üstüne geliriz.Ardından Resimde Görünen Check Cons... seçeriz ve karşımıza.



Burda yeni bir Check eklemek için Add diyoruz ve sağ kısmında Expression Satırı diyicem aslında hizasında yazdığım karşılaştırma var.Burdaki karşılaştırmada şöyle bir hikaye var arkadaşlar.Kimsenin yaşı -1 yada -2 olabilirmi tabiki olamaz.bu yüzden gelen verileri kontrol etmemiz gerekiyor.Sonraki adımda ise koşulumuzu yazıcaz arkadaşlar.Burda Checkler C#'da yazdığımız IF neyse ona denk düşmektedir.



Checkimizide burda yazıyoruz arkadaşlar ok dedikten sonra herşey süper bir şekilde çalışıyor.

Aslında diğer Constraintler ile ilgili pek fazla bilgi vermedim denebilir benim asıl bahsetmek istediğim Check Constraintlerdi.Umarım yardımcı olur sizlere.Okuduğunuz için teşekkürler

30 Nisan 2012 Pazartesi

TSQL Nedir ?

TSql nedirmi ?? Bildiğiniz Sql'in üzerine birtakım eklentiler yapılmış bir biçimidir.En kaba ve basit tabir budur arkadaşkar.TSql'i MSSQL kullanmaktadır başka kullanan varmı yokmu pek bir bilgim yok bu konuda.MSSQL üzerinden gidiceğim önceki cümlemden anlaşılıyor gibi herneyse.Sizlere TSQL başlıkları altında kod ile nasıl tablo yaratılır düzenlenir silinir.Tablo içindeki verileri nasıl düzenleriz sileriz yada tablolara veri ekleriz.MSSQL deki tarih saat  ve string fonksyonlar nelerdir nasıl kullanırız bunların üzerinde durucam.Şimdi birkaç genel tanımla başlayalım.


  • Herhangi bir operasyondan sonra meydana gelen değerlere VERİ denir.
  • Veri tabanı - Bu verilerin belli bir Disiplinde saklanmasıdır.
  • Veri tabanında verilerin saklandığı yerler Tablolardır.
  • Tablolar Veri tiplerine göre dizayn edilmelidir.
Birkaç önemli kavram vardı bunlarıda böyle özetliyorum arkadaşlar.Bir sonraki makalemde Constraintler konusuna değinicem.Sql ile ilgili temel kavramlardan sonra asıl güzelliklere doğru yelken açıcaz.

C#'da OOP - 4 İnterface

Selamlar yazılımcı arkadaşlar.Bu makalemde interface nedir ne iş yapar bu kavramlar üstünde durucam.C#'da OOP - 3 Inheritance (Miras Kalıtım Alma) yazımda bahsettimmi hatırlamıyorum ama şimdi bahsedeyim.Şöyle bir durumumuz var C# yarattığımız objeler sadece bir başka objeden miras alabiliyorlar.İnterfacede aslında miras kavramına benzer ama farklıdır.Şöyledirki arkadaşlar OOP gerçek hayatı programlamak demiştik hatırlarsanız.Tüm kuşar uçar demiştik ama penguende bir kuştur ama uçamaz malesef.İşte burda interface dediğimiz yapı devreye girmektedir.O zaman Uçmayı bir interface olarak tanımlarız ve Sadece Uçabilen Kuşlara implemente ederiz ve sorun ortadan kalkar en basit şekilde böyle açıklanabilir gibi geliyor arkadaşlar.Tabi sadece sağladıklarıda bu değildir daha farklı özellikleride vardır.Bunlara tek tek değinicem.Kodlama kısmına geçelim arkadaşlar.Örneğimde Kuş sınıfım olucak buna bağlı olarakta bir penguenim ve bir martım olucak ve birte interface'im olucak IUcmak adında.


    public class Penguen :Kus
    {
        public bool YuzmeDurumu;
    }

Evet arkadaşlar ilk objem penguenim.Bilirsiniz penguenler yüzebilirler.Kuşlardan kalıtım almışım ve penguenimi yaratmışım.İkinci Örneğim Interfaceimin yazılmış hali olucak.

    public interface IUcmak
    {
        void uc();
    }

Interface'imde hazır arkadaşlar şimdi martımı oluşturucam ve Kus sınıfından miras alıp IUcmak interfaceinide implemente edicem.İmplemente işleminde karşıma şöyle bir ekran gelicek IUcmak'ın altı çizilicek ve içinde bir olay var bunuda ekleyelimmi diycek.



Resimde görüldüğü gibi arkadaşlar aşağıdada eklendikten sonraki kodları görüceksiniz.


    public class Martı:Kus,IUcmak
    {
        public void uc()
        {
            throw new NotImplementedException();
        }
    }

Şimdi gelelim sadece arkadaşlar.Interfacein bize sağladıklarından bir tanesi çok biçimlilik oldu burda.Bazı Kuşlar Uçabilir bazılarıysa uçamazlar.Ancak bir intercafe'i eklediğiniz zaman içindeki methotlarıda kullanmak zorundayız arkadaşlar.Bir açıdanda bir sözleşme.Beni kullanırsan benim methot yada methotlarımıda kullanmak zorundasın.Der şöyle düşünün winamp a bir eklenti yazıcaksınız diyelim winamp sizin yazdıklarınızı nerden bilicek nasıl algılıycak.Winamp'ın verdiği interfaceleri kullanırsınız ve bunlar sizi bazı methotları kullanmaya mecbur bırakır ve sizde mecburen kullanırsınız.Şimdi bu kısa notu da geçeyim ve uçan başka bir hayvanı ele alayım yarasa kuş değildir bildiğiniz gibi ama uçabilir.O zaman yarasa diye bir objem olsa bunada UIcmak interfaceini eklemem gerekicek.Yarasamda uçabilicek.
Anlatmak istediklerimi sizlere aktarabildiysem birşeyler aktarabilmişim demektir dostlar :)Okuduğunuz için teşekkürler.

C#'da FileSystemWatcher

Selam dostlar bu yazımdada size FileSystemWatcher nesnesinden bahsedicem. Bu nesne izler arkadaşlar neyi izler ?? Siz bir path verirsiniz ve o pathteki mesela ben c:\izleniyo diye bir path diyeyim size burayı izler.Burada dosya yaratıldımı ,değiştirildimi , silindimi ve yeniden adlandırıldımı bir dosya bana bunları izlememi sağlar.4 tane eventı vardır.Bunlarıda bir önceki cümlede söylemiştim .


Resimde eventlarını görüyoruz ben içlerine basit kodlar yazarak bir uygulama yaptım.


Şimdide Kodlara geçelim arkadaşlar.


        private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
        {
            listBox1.Items.Add("yaratıldı");
        }

        private void fileSystemWatcher1_Deleted(object sender, System.IO.FileSystemEventArgs e)
        {
            listBox1.Items.Add("silindi");
        }

        private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e)
        {
            listBox1.Items.Add("değiştirildi");
        }

        private void fileSystemWatcher1_Renamed(object sender, System.IO.RenamedEventArgs e)
        {
            listBox1.Items.Add("yeniden adlandırıldı");
        }

Kodlarımızda bu şekilde .Belirttiğim path de bir dosya işlemi yapıldığında FileSystemWatcher bana hemen birşey yapıldı diye ispiyonluyor.Burda önemli bir Husus da vardır.Örnek veriyorum büyük bir dosya kopyalıyorsunuz.FileSystemWatcher da bu dosyanın kopyalandığı pathi izliyor diyelim.Dosyanın kopyalamasının bitmesini beklemiyor direk yaratıldı diyor sizde tam olarak bu dosyanın kopyalaması ne zaman tamamlanmış şeklinde bir sonuç alamıyorsunuz.Okduğunuz için teşekkürler.Sağlıcakla kalın.

C# Örnekleri - Otobüs Koltukları

Selam millet bu makalemde sizlerle bir windows kontrolü yaratma , özelliklerini belirleme ve forma yerleştirme işlemleri üzerinde durucam.Bunun için bir otobüs'ün koltuk dizilimini örnek olarak kullanıcam.


Evet arkadaşlar Kodlarımız çalıştığında Ekran görüntüsü bu şekilde olucaktır kodlara geçicek olursak.


var sayac = 0;
            for (int j = 1; j < 14; j++)
            {
                for (int i = 1; i < 6; i++)
                {
                    if ((i == 3 && j != 13) || (j == 7 & i > 2))
                        continue;

                    Button btn = new Button();//Yeni Bir Buton
                    btn.Text = (++sayac).ToString();
                    btn.Size = new Size(40, 40); //Butonun Boyutunu Ayarlar.
                    btn.Location = new Point(40 * i, 40 * j); //Butonun Yerini ayarlar.
                    btn.BackColor = Color.White;
                    this.Controls.Add(btn); //Oluşan btn Nesnesini Form’a ekler.


                }

Kodlarda gayet açık arkadaşlar.İç içe 2 tane döngümüz var.İf içerisinde de koltuk eklenmemesi gereken durumlar mevcut eğer şart sağlanıyorsa  continue diyip  Button yaratmıyor.Okuduğunuz için teşekkürler.

29 Nisan 2012 Pazar

C#'da String Fonksyonlar

Merhaba yazılım dostları.Bu makalemde sizlere String Fonksyonları örnekliycem.Nedir ne işimize yarar bu fonksyonlar dediğimizde ise işimizi aşırı kolaylaştıran methotlar diyorum bunlara.Örnek üstünde anlatarak gidicem.


Örnek olarak böyle bir form tasarladım arkadaşlar ve bu form üzerinden işlemlerime devam edicem. Formda 1 adet textboxım var ve bir listboxım var.Textboxım üzerinde uygulanan fonksyonlardan çıkan sonuç listboxımda görülüyor.Şimdi kod kısmına geçersek daha detaylıca sizlere kodları göstericem.


string kelime = txtYazi.Text.ToLower();
listBox1.Items.Add(kelime);
//kelime değişkenine txtyazı textboxındaki değerleri küçülterek aktarır.

string kelime = txtYazi.Text.ToUpper();
listBox1.Items.Add(kelime);
//kelime değişkenine txtyazı textboxındaki değerleri büyülterek aktarır.

string kelime = txtYazi.Text.TrimStart('b');
listBox1.Items.Add(kelime);
//3 farklı trim vardır arkadaşlar TrimStart,Trim,TrimStop olarak isimlerindende belli olduğu gibi biri baştan biri sonran biride orta kısımdan belirtilen char yada charlar diyrorum yani char dizisindeki karakterleri kaldırır.

string kelime = txtYazi.Text.Substring(4, 5);
listBox1.Items.Add(kelime);
//2 overloadı vardır.
//1.sinde Verilen indexden sona kadar Kopyalar.
//2.sinde Kaçıncı İndexten Kaç Tane Kopyalayacağını Belirleriz.

string kelime = txtYazi.Text.Remove(2, 3 );
listBox1.Items.Add(kelime);
//Substring'in Tersidir.Belli bir kısmı almak yerine siler.

string kelime = txtYazi.Text.Replace("bilge Adam", "Adam Bilge");
listBox1.Items.Add(kelime);
//Yer değiştirme işlemi yapar.1 Parametresinde olan string veriyi 2.Parametresi ile yer değiştirir.

string[] kelimeler = txtYazi.Text.Split(' ');
listBox1.Items.AddRange(kelimeler);
//String içindeki belli karakterlere göre bölmek için kullanılır.Mesela her a harfinde böl.string dizi haline dönüştürür.Bizim örneğimizde boşluktan sonra bölüyor.

Örnek : Baş Harfleri Büyütme
string[] kelimeler = txtYazi.Text.Split(' ');
string cikis = "";
foreach (var item in kelimeler)
{
   cikis = cikis + item.Substring(0, 1).ToUpper() + item.Substring(1) + " ";
}
listBox1.Items.Add(cikis.TrimEnd());

Örnek : Harf Piramidi
for (int i = txtYazi.TextLength; i > 0; i--)
{
   listBox1.Items.Add(txtYazi.Text.Substring(0, i));
}

Örnek : Comboboxta Ayları listeletmek istiyorum ama 1,2,3,4.. yerine 01,02 şeklinde olsun istiyorum.
for (int i = 1; i <= 12; i++)
{
   comboBox1.Items.Add(i.ToString().PadLeft(2,'0'));
}
//Burada yaptığımız işlem ise şöyle arkadaşlar.String değerimin 2 karakter olmasını istiyorum.Eğer 2 karakter değilse soluna 0 ekle demek oluyor.

Önemli bir hususu atlamadan geçmek istemiyorum arkadaşlar. Makaledeki en önemli kısımlardan biri burası olucak çünkü string fonksyonlar direk örneklerdeki kelime değişkeni üzerinde işlem yapmaz . Onun üzerinden bir kopya alır üstünde işlem yapar sonrada yeni veriyi aktarır yada artık siz ne yapmak istiyorsanız onu yapar. Birazda olsa yardımcı olabildiğime inanıyorum dostlar okuduğunuz için teşekkürler.




24 Nisan 2012 Salı

C#'da OOP - 3 Inheritance (Miras Kalıtım Alma)

OOP ile ilgili yazılarıma devam ediyorum arkadaşlar.Bu yazımda miras alma konusundan bahsedicem.Örnek olarak Kangal köpeklerini ele alalım.Kangal bir köpektir.Köpek bir hayvandır.hayvanlarda canlıdır.Arada omurgalı hayvanlar omurgasız hayvanlar diyede ayrılabilir ama o kadar detaya girmiycem.Her canlının bir ismi vardır.her hayvan hareket eder.her köpek 4 ayak üstünde yürür.Buraya kadar geldiğimizde hepsini köpek üstünde birleştirebiliriz.Sonrada Kangal köpeğinin Koruma özelliğini ekleyebiliriz. Eğer böyle yapmazsak boş vere fazladan kod yazmış oluruz.Şöyle düşünün hayvandan sonra kedilerin geldiğini ve kedilerden sonrada Van kedisinin geldiğini.Neden tekrar tekrar özellikleri yazayımki.Daha alt bir katmandan miras alırım ve özellikleri üstüne inşa ederim.Yine gerçek hayatı kodlarımıza dökelim ve temel bir katmandan başlayalım.

İlk Olarak Hayvan katmanını temel aldım.


    public class Hayvan
    {      
        public bool _Cinsiyet;
    }

Bir hayvan Class'ım var ve Hayvan tipinde bir Obje yarattım.Her hayvanın bir cinsiyeti vardır ve bool tipinde tutucam bu cinsiyeti.



public class Kopek : Hayvan//Burada miras alma işlemi iki nokta ve miras alınıcak class olarak gerçekleşiyor
    {
        public string _ad;

        private void NefesAl()
        {
            MessageBox.Show("Nefes Aldım");
        }

        private void NefesVer()
        {
            MessageBox.Show("Nefes Verdim");
        }

        public void Havla()
        {
            NefesAl();
            MessageBox.Show("Hav Hav");
            NefesVer();
        }
    }

Kopek objemizide yarattık ve Hayvan'dan miras aldık şimdi resime bakalım


Kopek classımızda _ad isminde bir field tanımlamamıştık ama kopek objesi hayvandan miras aldığı için artık köpek nesnesindede cinsiyet fieldı görülebilmekte.Burda yaptığım tekrar yazmamak oldu.Burda 3 tanede methot tanımladım arkadaşlar bunlar NefesAl , NefesVer ve Havla methotları C#'da OOP - 2 Encapsulation konusunda fieldları kapsüllemiştik burdada erişim belirleyici olarak NefesAl ve NefesVer methotlarını private tanımladım.Yani burda yaptığım işlem Methot Encapsulation işlemi oldu.Dışarıdan Havla methodunu çalıştırdığımda önce nefes alıcak sonra havlıycak ardından da nefes vericek.Şimdi bir adım daha üst katmana geçelim.Kangal köpeğinin en bilindik özelliklerinden biri korumacı yapısıdır.Çobanların yoldaşıdır Kangallar.Kodlara dönersek bu sefer hayvan sınıfından değilde kopek sınıfından miras alıcak Kangal.


    class Kangal: Kopek
    {
        public void SuruyuKoru()
        {
            MessageBox.Show("Koruyorum");
        }
    }


Kangalın SuruyuKoru methotunuda yazdıktan sonra arkadaşlar miras alma işlemim tamamlanıyor.


            Kangal kng = new Kangal();
            kng._ad = "Karabaş";
            kng._Cinsiyet = true; // erkek olursa true dişi olursa false die düşündüm.
            kng.Havla();
            kng.SuruyuKoru();


Yukardaki örnekte bir Kangal yarattık ve miras aldığı özelliklerle beraber kangalı biçimlendirdik.Miras alma ile ilgili anlatabileceğim bu kadar arkadaşlar okuduğunuz için teşekkürler.


C#'da OOP - 2 Encapsulation

Merhaba arkadaşlar .Bu yazımda OOP'de Encapsulation işlemlerine değişnicem.Başlamadan önce birkaç durumdan bahsetmek istiyorum.Önceki yazımda  C#'da OOP - 1. Field diye birşeyden bahsetmiştim. Bu yazımdada Fieldlari kapsüllemekten bahsedicem. Kapsülleme işlemini yapan kısma Property denir.Bunu şöyle düşünebilirsiniz.Bir anne var birde çocuğu.Anne çocuğuna zarar gelmesini tabiki istemez.Senaryoyu şöyle canlandıralım gözümüzde .Bir bebek var ortada bir anne işte anne çocuğuna mama yediricek. Anne bu mamayı çocuğuna yedirmeden önce mamanın özelliklerini araştırır . Uygunsa çocuğuna mamayı yedirir.Kapsüllemede aynen böyle bir durumdur arkadaşlar.Fielda değer atamadan önce gelen değeri kontrol edip vericeğimiz koşula göre değer aktarma işlemini güvenli olarak yapmamızı sağlar. Burda sadece değerleri kontrol etmeyiz üstünde işlemler de yapabiliriz.  C#'da OOP - 1 yazımdaki örneği kullanarak devam edelim arkadaşlar.



    public class Insan
    {
        private string ad;
        private  string soyad;
        private  DateTime dogumtarihi;


        public string Ad { get; set; }
        public string Soyad { get; set; }
        public DateTime DogumTarihi { get; set; }
    }

Örneğimizde field alanlarını private yaptık.Burdaki amacımız dışarıdan yani Insan Class'ı dışından erişimi fieldlarımıza kesmektir yani erişimi engelliyoruz.Propertylerin get ve set methotları vardır.set methotu veriyi almamıza ve get methotuda veriyi göndermemize yarar bu methotlar içerisinde kotrollerimizi uygulayabiliriz. Mesela dışarıdan gelen doğum değerini kontrol edelim.



         public DateTime DogumTarihi 
         {
            get
            {
                return  dogumtarihi ;
            }
            set
            {
                if (value < DateTime.Now)
                {
                     dogumtarihi  = value;
                }
            }
         }


Örneğimizde arkadaşlar girilen yaş değeri üzerinde encapsulation uyguladık.Burdaki amaç örnek olarka 01.01.2010 yılındaysanız ve girilen doğum tarihi 01.02.2010 ise bunu yakalamak yani hatalı girişi engellemek.

Bir örnek daha yapalım ve bu sefer dışarıdan Ad değerinin tamamını string bir fonksyon kullanarak büyük harflere çevirelim.


        public string Ad
        {
            get
            {  
                return ad.ToUpper();
            }
            set
            {
                ad = value;
            }

        }



Örneklerdende anlaşılacağı üzere get ve set methotlarının kullanımı böyledir arkadaşlar. Property yapısı böyle işlemektir.Umarım yardımcı olabilmişimdir.