güzel düşünmüşsün serpantin bende nezamandır istiyodum böle bi yerde c# cılar toplansın diye inşallah tutar. ilk konu da benden gelsin c# ta class kavramı
. CLASS (SINIF) KAVRAMI Class (sınıf) kavramının temelinde sınıflama gelir. Bazı nesneleri düşünelim; evler, arabalar, masalar, vb. Aslında "ev" deyince bütün evlerden söz ederiz. Böylece ortak davranış ve özelliklerin sınıflamasından söz edebiliriz.
Nesne tabanlı programlama kavramı içinde bu iki terim karşımıza çıkar: Nesneler (objects) ve sınıflar (classes). Burada en belirgin ayrımı şu şekilde yapabiliriz: Sınıflar nesnelerin kopyasıdır. Programcıları bir ev planının (nesnesinin) kopyasını çıkartarak kullandıkları gibi ev nesnesinin işlevlerini kullanılırlar.
Nesne tabanlı programlamada; nesneler bir sınıfı temel alarak oluşturulur. Bir sınıftan bir nesne oluşturma işlemine örnekleme (instantiating) denir.
Örnek:
Public static void Main()
{
PersonelClass PersonelNesne = New PersonelClass ();
PersonelClass PersonelNesne1 = New PersonelClass ();
PersonelClass PersonelNesne2 = New PersonelClass ();
}
Yukarıdaki örnekte ise PersonelClass'ınden iki ayrı nesne örneklenmiştir.
Örnek:
class Hesap
{
public void miktar(decimal tutar)
{
borc += tutar;
}
private decimal borc;
}
A. SINIFLARI TANIMLAMAK C#'da sınıf tanımlamak için Class anahtar sözcüğü kullanılır. Ardından küme işaretiyle kodlar eklenir.
Tanımı:
class Sınıf_adı
{
üyeler;
}
Örnek:
class Personel
{
private int personelno;
}
B. SINIF ÜYELERİ Sınıfların başlıca üyeleri metotlar, özellikler (properties) ve olaylardır (events). Yöntemler nesneler üzerinde çalışan kodlardır. Nesne ile bir eylemiş birleştireceksek, metotlar hazırlamamız gerekir. Özellikler yine nesnelerin çeşitli özelliklerini yansıtırlar. Olaylar ise kullanıcı ve sistemden alınan çeşitli tetikleyicilerdir. Örneğin kullanıcının bir alana tıklaması bir olaydır.
Bu arada sınıf üyeleri belli bir kapsama sahiptir:
Kapsam Açıklama public Üyeye sınıfının dışından da erişilmesini sağlar. protected Üyenin sınıfının dışından görülmemesini sağlar. Ancak türetilen sınıflardan erişilebilir. private Üyenin sınıfının dışından görülmemesini sağlar. Ancak türetilen sınıflardan bile bu üyeye erişilemez.
II. NESNE TABANLI PROGRAMLAMANIN ÜÇ TEMEL PRENSİBİ Nesne tabanlı programlama dillerinin temel özellikleri vardır. Bunlar:
Sarma özelliği çok genel bir özelliktir. Bir nesnenin içinde yetenekler içermesi ve onları sergilemesi bu özelliğe girer. Bir sınıfı örnekleyerek türetilen bir nesne üyelerine erişmek bu prensibin sağladığı olanaktır.
Kalıtım ise, var olan bir sınıfı temel alan yeni bir sınıf geliştirme tekniğidir. Türetilen yeni sınıf, temel sınıfın tüm üyelerini devralır. Ardından türetilen sınıf üzerinde istenilen değişiklikler yapılabilir.
Çok işlevlilik ise biraz daha soyut bir kavramdır. Aynı işlemi birçok kez yapabilmek anlamına gelir. Türetilmiş sınıflar devraldığı işlemleri kendi bildiği şekilde uygular.
A. KALITIM (INHERITENCE) Kalıtım izni olan bir taban sınıftan yeni bir sınıf türetmeye (derive) kalıtım denir. Türetilen sınıflar, taban sınıfın sergilediği bütün metot ve öznitelikleri kullanırlar. Ardından türetilen sınıf üzerinde istenilen değişiklikler yapılabilir.
Kalıtımın en önemli özelliği bir sınıf hiyerarşisi oluşturmaktır.
Tanımı:
class TuretilenSınıf: TabanSınıf
{
.....
}
Örnek:
class Ornek
{
private class
}
Örnek:
using System;
class Programlar
{
public Programlar()
{
OrtakOzellik = "Evet"
}
public string OrtakOzellik;
public void OrtakMetot()
{
Console.WriteLine("Programların ortak özellikleri");
Microsoft SQL Server 7.0 ve üst sürüm veritabanlarına erişmek için System.Data.SqlClient aduzayı altındaki SqlConnection nesnesini kullanıyoruz. Bu bağlantı nesnesi (daha doğrusu nesneyi sunan sağlayıcı), sadece SQL Server için tasarlandığı için başka bir veritabanı erişiminde kullanamıyoruz. SQL Server'in daha alt sürümlerine erişim içinse eskiden olduğu gibi yine OLE DB kullanılacak. Peki 7 ve üst versiyonlarında neden ayrı bir sağlayıcı kullanmamız gerekiyor? Aslında böyle bi zorunluluk yok. OLE DB hala bir seçenek. Ancak veritabanı erişimi gibi masraflı bir işte daha yüksek performans arzuluyorsak, tercihimiz SQL Server .NET veri sağlayıcısı olmalıdır. Çünkü bu sağlayıcı, SQL Server ile TDS (Tabular Data Stream) paketleri seviyesinde, yani SQL Server'in anladığı dilde haberleşiyor. Böylece OLE DB gibi bir tercümanı direk saf dışı bırakmış oluyorsunuz
OleDbConnection nesnesi, System.Data.OleDb aduzayına bağlı, OLE DB .NET veri sağlayıcısı üzerinden bir veri kaynağına bağlantı tesis etmemizi sağlar. Kullanımı aynen yukarıda bahsettiğimiz SqlConnection nesnesi gibidir. O nedenle aynı şeyleri tekrar etmeyeceğiz. Yalnız bu tip bağlantıda, bağlantı cümlesini oluştururken, hedef veri kaynağına uygun bir Provider seçmemiz gerekecektir. OLE DB veri sağlayıcısını kullanarak, sistemde OLE DB sağlayıcısı bulunan her veri kaynağına (SQL Server, Oracle, Access, Indexing Service) bağlanabiliriz.
ARKADAŞLAR KİMSE SORU SORMUYO FİKİR BİLDİRMİYOR BİRAZ DAHA AKTİF OLSAK DAHA YARARLI OLACAK.......................................
Ben bi soru sorayım o zaman yukarıda bahsedilen 2 bağlantı şeklini bir component haline getirmek istiyorum bunun için design patternleri kullanıcam design patternin ne olduğunu bilmeyen arkadaşlar için bir döküman koyucam buraya neyse abstract factory pattern ile 4 classım olacak bu class lar databases,SQLConnection,OLEDB Connection ve ConnectionFactory . Programcı seçime göre istediği database e bağlanabilecek.................................
BU KOD ÇALIŞMIYOR ÇALIŞTIRABİLECEK VEYA FİKİR BİLDİREBİLECEK ARKADAŞLARIN MESAJLARINI BEKLİYORUM
using System; using System.Data; using System.Data.OleDb; using System.Data.SqlClient;
namespace Factory { public class databases { protected OleDbConnection conn1; protected SqlConnection conn2; protected string baglanti,sorgu;
}
public class OledbConn : databases { OledbConn(){ baglanti=@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Documents and Settings\koray kirdinli\Belgelerim\vt1.mdb"; sorgu="SELECT * FROM tablo"; conn1=new OleDbConnection(baglanti); conn2.Open(); } }
public class SqlConn : databases { SqlConn(){ baglanti="Server=(local); User id=sa; Password=sa; Database=Northwind"; sorgu="SELECT * FROM Products"; conn2=new SqlConnection(baglanti); conn2.Open(); } }
public class ConnectionFactory { ConnectionFactory(){} public databases SelectConnection(int x){ if(x==1) return new SqlConn(); else return new OledbConn(); } } }
Biz ConnectionFactory nsenesi yaratıcaz o hangi connectionun açılacağına karar verecek
BU KOD ÇALIŞMIYOR ÇALIŞTIRABİLECEK VEYA FİKİR BİLDİREBİLECEK ARKADAŞLARIN MESAJLARINI BEKLİYORUM
using System; using System.Data; using System.Data.OleDb; using System.Data.SqlClient;
namespace Factory { public class databases { protected OleDbConnection conn1; protected SqlConnection conn2; protected string baglanti,sorgu;
}
public class OledbConn : databases { OledbConn(){ baglanti=@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Documents and Settings\koray kirdinli\Belgelerim\vt1.mdb"; sorgu="SELECT * FROM tablo"; conn1=new OleDbConnection(baglanti); conn2.Open(); } }
public class SqlConn : databases { SqlConn(){ baglanti="Server=(local); User id=sa; Password=sa; Database=Northwind"; sorgu="SELECT * FROM Products"; conn2=new SqlConnection(baglanti); conn2.Open(); } }
public class ConnectionFactory { ConnectionFactory(){} public databases SelectConnection(int x){ if(x==1) return new SqlConn(); else return new OledbConn(); } } }
Biz ConnectionFactory nsenesi yaratıcaz o hangi connectionun açılacağına karar verecek
ilk bakista gorunen hatalar:
birincisi bu kod compile olmaz ki, constructorlar'in onune public koyman lazim yoksa new ile yeni class olusturamazsin. (connectionfactory'de yaptigin gibi) oledbconn class'inda conn1 i new'lemissin ama conn2'yi acmissin. bu derleme hatasi vermez ama sonucta calismaz. ayrica dizayn olarak da tuhaf gorunuyor. databases icindeki sorgu'ya nasil ulasmayi dusunuyorsun? bu yontemle actigin database baglantisini nasil kapamayi dusunuyorsun vs vs...
valla bu şekilde olmucakmış zaten banada mantıksız geldi hatalara gelince sadece bir fikir olsun diye yazılmış bi kod yani uğraşmadım üzerinde o yüzden de saçma oldu zaten.. Ama böyle bir tasarım var Factory Design Pattern adı altında ve çok kullanılıyomuş prof uygulamalarda.
Benim yapacağım çalışmada connection stringleri XML dosyasından alıcam
arkadaslar gerçekten güzel bir konu açmissiniz. Zaten çogu sitede c# programlama diline deyinmiyorlar burda hep birlikte birbirimize yardimci olma dilegi ileee........ musti.ksk@hotmail.com c# ta elimden geldigi kadar yardimlasalim.
Rica etsem konunun ehli biri c# ı kullanmanın bize ne gibi kolaylıklar sağlayacağını, diğer OOP dillerden fazlalarını ve/veya eksiklerini, öğrenmek için ne gibi bir altyapımızın olması gerektiğini, dilin database ile nasıl ilişki kurduğunu kısaca anlatabilir mi? Teşekkürler..
_____________________________
MIDDLE EAST TECHNICAL UNIVERSITY COMPUTER ENGINEERING
Rica etsem konunun ehli biri c# ı kullanmanın bize ne gibi kolaylıklar sağlayacağını, diğer OOP dillerden fazlalarını ve/veya eksiklerini, öğrenmek için ne gibi bir altyapımızın olması gerektiğini, dilin database ile nasıl ilişki kurduğunu kısaca anlatabilir mi? Teşekkürler..
C# kullanmak değilde .NET kullanmak desek daha doğru bir yaklaşım olur sanırım.Konunun dediğin kadar ehli değilim ama bazı düşüncelerimi paylaşmak istedim.Bi kere daha önceden C,C++ kullandıysan kod kısmını çözmek o kadarda zor değil...Net birçok standardı bize sağlamış. database kısmına gelince ADO.NET mimarisini kullanıyor.Database e bağlanmakta zor değil. Bence C# ve .NET bilgisayarda yavaş çalışmasına rağmen güzel.
c#'ta sudoku problemlerini çözen program ve kodları. pc netin arka kapağındaki soruları çözmeye çalışıyordum, baya zorlandım, ben de bu programı yapmaya karar verdim. oyunun kuralları basit, her satırda sütunda ve 3x3 'lük karelerde 1-9 arası sayılar bir kere kullanılacak. bu topic gerçekten güzel olmuş böyle çalışmalarımızı burda paylaşabiliriz. herkese iyi çalışmalar..
_____________________________
İyi sözün aslın bilen derdi bu söz nerden gelir Söz aslını anlamayan sanır bu söz benden gelir...