Download as pdf or txt
Download as pdf or txt
You are on page 1of 41

T.C.

MLL ETM BAKANLII


BLM TEKNOLOJLER
NESNE TABANLI PROGRAMLAMA - 1
482BK0074
Ankara, 2011
Bu modl, mesleki ve teknik eitim okul/kurumlarnda uygulanan ereve
retim Programlarnda yer alan yeterlikleri kazandrmaya ynelik olarak
rencilere rehberlik etmek amacyla hazrlanm bireysel renme
materyalidir.
Mill Eitim Bakanlnca cretsiz olarak verilmitir.
PARA LE SATILMAZ.
i
AIKLAMALAR ....................................................................................................................ii
GR ....................................................................................................................................... 1
RENME FAALYET1 .................................................................................................... 3
1. NESNE TABANLI PROGRAMLAMA.............................................................................. 3
1.1. Nesne Tabanl Programlama Nedir?............................................................................. 3
1.1.1. Kapslleme (Encapsulation) .................................................................................. 4
1.1.2. Kaltm (Inheritance) ............................................................................................. 5
1.1.3. ok Biimlilik (Polymorphism) ............................................................................ 7
1.2. Net Framework ............................................................................................................. 7
1.2.1. Bu Platformu Nasl Edineceim? .......................................................................... 8
1.2.2. NET'in ekirdek Kurulumu (21MB)..................................................................... 8
1.2.3. NET Framework SDK (134 MB) .......................................................................... 8
1.2.4. Hangi letim Sistemlerinde alyor? ................................................................. 9
1.2.5. .Net Frameworkn Yaps .................................................................................... 9
1.3. MSIL (Microsoft Intermediate Language).................................................................... 9
1.4. Assembly Kavram...................................................................................................... 10
1.5. JIT Derleyiciler (Just in Time).................................................................................... 11
1.6. The Base Class Library - Temel Snf Ktphaneleri ................................................. 11
1.7. Trler (TYPES)........................................................................................................... 12
1.7.1. Referans Trleri ................................................................................................... 14
UYGULAMA FAALYET .............................................................................................. 16
LME VE DEERLENDRME .................................................................................... 17
RENME FAALYET2 .................................................................................................. 18
2. SINIFLAR (Classes) .......................................................................................................... 18
2.1. Snf, ye ve Nesneleri ............................................................................................... 19
2.1.1. Snf yeleri ........................................................................................................ 21
2.2. e Tipler................................................................................................................. 21
2.3. Kullanc Tanml Tipler ............................................................................................. 22
2.4. Metotlar ve Dn Deeri Tipi ................................................................................... 22
2.5. Eriim Trleri.............................................................................................................. 24
2.5.1. Eriim Belirleyicileri ........................................................................................... 24
2.5.2. Eriim Trleri ...................................................................................................... 24
UYGULAMA FAALYET .............................................................................................. 31
LME VE DEERLENDRME .................................................................................... 32
MODL DEERLENDRME .............................................................................................. 33
CEVAP ANAHTARLARI ..................................................................................................... 34
SZLK................................................................................................................................ 35
NERLEN KAYNAKLAR.................................................................................................. 36
KAYNAKA......................................................................................................................... 37
NDEKLER
ii
AIKLAMALAR
KOD 482BK0074
ALAN Biliim Teknolojileri
DAL/MESLEK Veri Taban Programcl
MODLN ADI Nesne Tabanl Programlama - 1
MODLN TANIMI
Nesneye ynelik programlama dilinin evresini
hazrlayabilme ve snf, metot ve yaplar ile alabilme ile
ilgili bilgi ve becerilerin kazandrldn salamaya
ynelik renme materyalidir.
SRE 40/32
N KOUL Grsel Programlama dersi modllerini bitirmi olmak
YETERLK
Nesne tabanl programlama dilinin gerekliliklerini yerine
getirmek
MODLN AMACI
Genel Ama
Nesneye ynelik programlama dilinin evresini
hazrlayabilecek ve snf, metot ve yaplar ile
alabileceksiniz.
Amalar
Nesneye ynelik programlama dilinin evresini
hazrlayabileceksiniz.
Snflar, metotlar ve yaplar ile alabileceksiniz.
ETM RETM
ORTAMLARI VE
DONANIMLARI
Bilgisayar laboratuvar, bu programlar kullanan iletmeler.
LME VE
DEERLENDRME
Her faaliyet sonrasnda o faliyetle ilgili deerlendirme
sorular ile kendi kendinizi deerlendireceksiniz.
retmen modl sonunda size lme arac (uygulama,
soru-cevap) uygulayarak modl uygulamalar ile
kazandnz bilgi ve becerileri lerek
deerlendirecektir.
AIKLAMALAR
1
GR
Sevgili renci,
Her geen gn programlarn daha karmak bir hal almas, program kodunun kurumsal
uygulama projelerinde on binlerce satr bulmas ve yazlm gelitirme maliyetinin ok
artmas gibi nedenlerden dolay bilim adamlar, programclara yeni bir yaklamn
kullanlabilineceini rettiler. Bu yaklamn ismi Nesne Tabanl Programlama (Object
Oriented Programming) dr.
Nesne tabanl programlama teknii, dier yaklamlara nazaran, yazlm gelitiren
insanlara byk avantajlar salamaktadr. Birincisi karmak yazlm projelerinin
retilmesini ve bakmn kolaylatryor olmasdr. Dieri ise program kodunun tekrar
kullanlabilmesine (code-reusability) olanak salamasdr. Bu noktada program kodunun
tekrar kullanlabilmesi profesyonel yazlm irketlerinin maliyetlerini azaltmtr. Dolays ile
programlarn lisans cretleri dm ve sektrn srekli olarak canl kalmasna ve rekabet
iinde gelimesine yardmc olmutur.
Bu blmde gnmz programlarnn bel kemiini oluturduuna inandmz nesne
tabanl programlamadan bahsedilecektir.
GR
2
3
RENME FAALYET1
Uygun ortam salandnda hatasz bir ekilde programlama dilinin evresini
hazrlayacaksnz.
Bu faaliyet ncesinde aada belirtilen aratrma faaliyetlerini yapmalsnz:
lk zamanlarda kullanlan programlarda nesne diye bir kavram var myd?
Nesne tabanl programlamaya neden ihtiya duyulmutur?
Gnmzde kullanlan programlama dillerinden hangisi nesne tabanl
programlamay desteklemektedir?
1. NESNE TABANLI PROGRAMLAMA
1.1. Nesne Tabanl Programlama Nedir?
Nesne tabanl programlamada esas olan, gerek hayatta var olan olgularn
programlamaya aktarlmasndaki yeni yaklamdr. Klasik prosedrel programlamada
verilerimiz ve fonksiyonlarmz vard. Yani her ey veri ve bu veriyi ileyen metotlar
etrafnda dnyordu.
Aslnda nesne tabanl programlamada da iki nemli birim; veri ve veriyi ileyip
mantkl sonular reten metotlar bulunur. Ama buradaki fark gerek hayattaki olgularn da
daha iyi gzlenip programlama dnyasna aktarlmasndadr.
Resim 1.1: Nesne tabanl programlama modeli
RENME FAALYET1
AMA
ARATIRMA
4
Mesela elimizde bir tmz olsun. tnn markas, modeli, rengi, alt elektrik
voltaj, ne tr kumalar tleyebildii bu tye ait zelliklerdir (veri). Ayn zamanda
tmz stabiliriz, tleme iinde kullanabiliriz ve soumaya brakabiliriz. Bunlar ise
tnn fonksiyonlardr (metot).
Resim 1.2: Snf (Class) ve nesne (Object) kavram
Eer t ile ilgili bir program yapm olsak ve nesne tabanl programlama tekniini
kullansak hemen bir t snf (class) olutururduk. Bu snfta tye ait bilgiler (veriler) ve
t ile yapabileceimiz iler (metot) bulunurdu. O zaman nesne tabanl programlamada bir
snfta, snfa ait veriler ve bu verileri ileyip bir takm faydal sonular reten fonksiyonlar /
metotlar bulunur.
Dahas, biz bir tane t snf tasarlarsak bu snftan istediimiz sayda deiik tler
(Object veya instance) yapabiliriz. Resim 1.2de bu ekilde t snf ve bu snftan
oluturduumuz nesnelerin grsel olarak anlatm bulunmaktadr.
Nesne tabanl programlamann baz temel kavramlar vardr. imdi bu kavramlardan
bahsedelim.
1.1.1. Kapslleme (Encapsulation)
lemlerin ve verilerin gizlenmesine veya bir grup ierisinde toplanmasna kapslleme
denir. Kapsllleme sayesinde, snfmz iinde kullandmz alanlarn dardan herhangi bir
etki ile dorudan deitirilmelerini engellemi oluyoruz. Bu durum bizim isteimiz dnda
oluabilecek atamalarn nne gememize ve ille de bu alanlarn deerleri deiecekse bizim
belirlediimiz bir izgide olmasna neden oluyor. Bu da programclkta ve zellikle nesne
5
tabanl programlamada ok byk bir yere sahip olan kontroln elimizde olmasn salyor.
Yandaki resimde grdnz saat iinde ok
karmak mekanizmalar bulunmaktadr. Ama bu karmak
mekanizma saatin kullancsn ilgilendiren bir olay
deildir. Kullanc iin nemli olan saatin dzn
almasdr.
Resim 1.3: Kapslleme
1.1.2. Kaltm (Inheritance)
Normalde bu kavram gerek hayattan biliyoruz. En basit anlamda, rnein Ben,
annemin gzlerini almm. dediimde, tp uzmanlarnn buna getirdikleri yorum " siz
annenizden kaltmsal olarak u zelikleri almsnz." oluyor. Programlama dillerinde de
kaltmn rolnn ayn olduunu syleyebiliriz. Zaten nesne tabanl programlama dillerini
tasarlayan uzmanlar, gerek hayat problemlerini, bilgisayar ortamna tayabilmek amacyla
en etkili modelleri gelitirmiler, bu model ierisine kaltm da katarak ok nemli bir
zelliin kullanlabilmesini salamlardr.
Resim 1.4: Kaltm (Inheritance) kavram
Kaltm kavramnn programlama dilleri ierisinde bir tanmn yapmak lazm. En
genel tanm ile kaltm, "Bir snftan yeni snflar tretmektir" Hereyden nce kaltm
yolu ile bir snftan yeni snflar tretmenin, tretilen snflara etkisi nedir? Bu sorunun
cevab kaltmn da zn oluturmaktadr. Tretilen her bir snf, tredii snfn
zelliklerini de devralr. Buradan, tretilmi bir snf ierisinden, tredii snfa ait yelere
6
eriilebilecei sonucunu kartabiliriz. Elbette bu eriimin de baz kurallar vardr. rnein
eriim belirleyicilerinin etkisi veya ayn yelerin kullanl gibi durumlar.
Neden bir snftan baka snflar tretiriz? Bunun cevab udur: Tm snflarda ortak
olan zellikleri tek bir snf ierisinde toparlamak. Bu modellerimizi gelitirirken, her snf
iin ortak olan yelerin tekrar yazlmasn engellemekle kalmayacak, snflar arasnda
dzenli bir hiyerari yapsnn olumasn da salayacaktr.
Resim 1.5: Kaltm kavramna bir baka rnek
imdi gzel bir rnek verelim. Gerek hayat modelleri bu i iin biilmi kaftantr.
rnein, otomobilleri bir temel snf olarak dnebiliriz.
Bu snftan otomobillere ait deiik kategorileri tretebiliriz.(Resim 1.5e baknz)
Buradaki tm snflarn ortak bir takm zellikleri var. Bir motorlarnn olmas,
tekerleklerinin olmas, viteslerinin olmas vb. ama ayn zamanda her ayr snfn kendine has
zellikleri de vardr. rnein ralli aralar iin gvenlik bariyerlerinin olmas, pilotlar iin
kasklarn kullanlmas gibi. Bu tabloyu inceleyince Her ralli arac bir otomobildir
diyebiliriz. Bu ralli aralarnn otomobil snfndan trediini gsterir. Dier yandan Her
WRC bir ralli aracdr. da diyebiliriz. Bu ise, WRC aralarnn ralli aralarnn birtakm
ortak zelliklerine sahip olduunu ayrca otomobillerin de bir takm ortak zelliklerine sahip
olduunu gsterir.
lk aamada ralli, ticari, zel ve spor snflarnn otomobil snfndan trediini
syleyebiliriz. Bununla birlikte WRC ve GrupN snflarda otomobil snfndan treyen ralli
snfndan tremitir. Yani burada unu syleyebilmek mmkndr. WRC snf hem ralli
snfnn hem de otomobil snfnn zelliklerine kaltmsal olarak sahiptir.
7
1.1.3. ok Biimlilik (Polymorphism)
Bir metodun farkl nesnelerde veya farkl ortamlarda farkl sonular retmesidir.
Mesela konumak insan snfna ait bir metottur.
Resim 1.6: ok biimlilik (Polymorphism) emas
Ancak bu metot ait olduu insan snfnn rneine gre farkl sonular retir.
Arkadamzla konuurken farkl bir tonda, patronumuzla konuurken farkl bir tonda
konuuruz, dier bir ifadeyle bu metodun birden fazla biimi vardr.
1.2. Net Framework
NET Framework, Microsoft tarafndan gelitirilen, ak nternet protokolleri ve
standartlar zerine kurulmu komple bir uygulama gelitirme platformudur. Buradaki
uygulama kavramnn kapsam ok genitir. Bir masast uygulamasndan tutun, bir web
tarayc uygulamasna kadar her ey bu platform iinde dnlmtr ve desteklenmitir.
Bu uygulamalarn birbirleriyle ve gelitirildii ortam fark etmeksizin dnyadaki tm
uygulamalarla iletiimi iin kolayca Web Servisleri oluturulmasna imkn verilmitir.
Resim 1.6: .NET Frameworkn bileenleri
Konumak
Yksek sesle Normal ses tonuyla Ksk kesle
8
Bu platform, iletim sisteminden ve donanmdan daha st seviyede tanabilir olarak
tasarlanmtr. zet olarak bakldnda nmzde duran .NET Framework :
nterneti hedef alan bileen setiyle,
Programclar zgrletiren, diller aras etkileime olanak tanyan bamsz dil
mimarisiyle,
Donanm-bamsz ara seviye derleme ve gvenli talimat icraatn gvence
altna alan alma zaman ortamyla,
Web uygulamalarna getirdii zgn ve radikal yaklamyla,
Zengin ve mkemmel organize edilmi snf ktphanesi ve dokmantasyonu
ile
Snrlar ortadan kaldran web servisi desteiyle,
ve daha da sayabileceimiz birok zelliiyle benzetildii teknolojileri geride brakan
inkr edilemeyecek seviyede zgn bir platformdur.
1.2.1. Bu Platformu Nasl Edineceim?
.NET platformu iin uygulama gelitirmek istiyorsanz, iletim sisteminize. NET
altrma ortamn kurmanz gerekiyor. Bu ortam, Java uygulamalarn altrmak iin
gerekli olan Java Runtime Environment (JRE) gibi dnebilirsiniz.
.NET platformu iki ayr kurulum dosyas halinde, cretsiz sunuluyor:
1.2.2. NET'in ekirdek Kurulumu (21MB)
Bu kurulum ile bilgisayarnzda bir metin editr ap kodunuzu yazabilir, gelen
derleyiciler ile derleyip uygulamanz snayabilirsiniz. Ancak bu kurulum, gelitiriciler iin
deil, daha ok datm sonras uygulamanzn alaca sistemler iin uygundur. .NET
uygulamalar iin gerekli alma zaman ortamn, web uygulamalarnn sunulabilmesi iin
gerekli olan Web sunucu (IIS) eklentilerini ve desteklenen temel dillerin derleyicilerini
sunmaktadr. Bir yazlm gelitiricinin bunlardan daha fazlasna ihtiyac vardr. Hele de
uygulama gelitirecei ortamda herhangi bir deneyimi yoksa. Bu nedenle ikinci bir seenek
sunuluyor.
1.2.3. NET Framework SDK (134 MB)
SDK yani Software Development Kit, ekirdek kurulumu ieriinden daha kapsaml
bir kurulumdur. Peki, 134 MBlik kurulumda fazladan neler var: Faydal aralar, hata
ayklayclar, SQL Servern hafif versiyonu MSDE, hzlca balamanz temin edecek
QuickStart Tutorials, rnek uygulamalar ve devasa dokmantasyon. organizasyonu ve
disiplini ile gz kamatran bir dokmantasyon olduunu kullanmaya baladka ok iyi
anlayacaksnz. Bu iki kurulumu da cretsiz olarak Microsoft'un sitesinden indirebilirsiniz.
9
1.2.4. Hangi letim Sistemlerinde alyor?
u anda. NET Framework istemci uygulamalar Windows
98/Me/NT4/2000/XP/Server 2003 iletim sistemlerinde alabiliyor. Ancak sunucu
davran iin Windows 2000 (SP2 ve st), Windows XP veya Windows Server 2003
gerekiyor. Windows Server 2003te Net Framework kurulmu oluyor zaten, ayrca
yklemenize gerek yok. Bu iletim sistemleri dnda ASP.NET sayfalarn (yani. NETin
tarayclar ve mobil cihazlar hedef alan web uygulamalar) sunamyorsunuz. Elbette ki bu
sunum, Internet Information Server (IIS) da gerektiriyor. Teoride. NET Framework herhangi
bir iletim sistemine tanabilir. Ancak tanaca iletim sistemine zg alma zaman
ortamnn ve snf ktphanesinin yazlmas gerekmektedir.
1.2.5. .Net Frameworkn Yaps
Javadan nce, gelitirilen yazlmlar direkt olarak makine koduna evrilirdi. Java ile
program kodu nce byte codea evrilir. JVM (Java virtual machine) bu kodu iletim
sisteminin istedii koda evirir.
.Net iinde alma mant benzerdir .NET kodu ilk nce IL ye (Intermediate
Language-Ara dil-veya MSIL) derler, bu IL kodu altrlmak istendiinde CLR, JIT
derleyicilerini kullanarak kodu makine diline evirir.
Resim 1.7: .NET Frameworkn bileenlerini gsteren bir baka resim
1.3. MSIL (Microsoft Intermediate Language)
Normalde bir program derlendiinde dorudan makine koduna evrilirken, .NET
uyumlu bir dil ile derleme yapldnda program kodu makine koduna deil de MSIL
(Microsoft Intermediate Language)'e evrilir.
MSIL ilemciden bamsz komut setinden olumaktadr. Bu komut seti ierisinde
nesnelerin yklenmesi, depolanmas ve initialize (balatlmas) edilmesini salayan
komutlarn yan sra ayn zamanda nesneler zerinde metot armn salayan komutlar da
yer almaktadr. .NET Framework ile yazlm bir kaynak kodun derlenmesi sonucu MSIL
kodu olumaktadr. MSIL, NET dilleri arasnda bir btnleme salamaktadr. MSIL kodun
altrlmasndan nce var olan MSIL kodu, doal makine koduna (native code)
dntrlmektedir. Burada interpretation dediimiz yorumlama ilemi yaplmaz.
10
Resim 1.8: .Net tabanl bir programn altrlma evreleri
CLR (Common Language Runtime): Ortak Dil alma Platformu olarak da
adlandrlan CLR, makine diline evrilmi bu kodu nbellekte tutar, bu performans artna
sebep olurken dier taraftan sistem hafzasnda kmsenmeyecek yer igal eder.
CLR, .NET altyapsnda programlarn almasn kontrol eden ve iletim
sistemi ile programmz arasnda yer alan arabirimdir. Normalde yazlan kodlar
makine diline evrilir ve iletim sistemi ile direkt balant kurup alrd.
Eer platformdan bamsz bir ortam istiyorsak, ihtiya duyulan ey CLR dir,
hangi platformda iseniz (Linux, Mac, Windows) CLR bu noktada devreye girer
ve. NET programlarn farkl platformlarda iletim sistemine gre altrr.
1.4. Assembly Kavram
Assembly;pek ok programc tarafndan yanl anlalm bir kavramdr.Her eyden
nce, .NET 'teki Assembly kavram ile herhangi bir mikroilemciye ait sembolik makine dili
birbirlerinden ok farkl eyleri ifade eder.
.Net'te derlenen snf ktphaneleri (class library 'ler) ismine Assembly denilendll
dosyalarn oluturur. Bu anlamda bir Assembly, bir ya da daha fazla fiziksel dosyay
barndran bir koleksiyondur. Bu dosyalar; assembly ierisindeki derlenmi snflarn kodlar,
resimler, resource dosyalar ve dier binary dosyalardr.
Assembly dosyalar .dll ya da .exe uzantl olabilir. Assembly'ler kabaca COM
bileenlerine (dll'lerine)benzetilebilir. Ancak bildiimiz COM dll 'lerinden olduka farkl bir
yapya sahiptir. Bu farklln en nemli sebebi assemblylerin registry'i kullanmamasdr.
Oysa bildiiniz gibi, COM dll'leri kendilerine ait bir takm kimlik bilgilerini saklamak iin
registry'i youn olarak kullanmaktadr. Bileenlerin registry kullanm beraberinde baz
11
dezavantajlar getirmektedir. Bir an iin Visual Basic ile bileen tabanl uygulamalar
gelitirdiimiz gnlere dnersek, kendi makinemizde yazdmz ve derlediimiz bir
uygulamay, dosya kopyalamas ile baka bir makineye tadmzda uygulamann
almadn grrz. Bunun nedeni; uygulamay tadmz makinedeki iletim
sisteminin, uygulamamzn kulland bileenler hakknda herhangi bir bilgiye sahip
olmamasdr.
1.5. JIT Derleyiciler (Just in Time)
C# ile IL ye derlediimiz program altrrken JIT derleyicileri devreye girer. Bu
derleyiciler programn altrld sistemin ve ilemcinin anlayabilecei makine kodunu
oluturur.
Windows ortam iin 3 eit JIT mevcuttur.
Normal JIT: IL kodu makine koduna evrilirken default (varsaylan)
olarak kullanlan derleyicidir. IL kodunu orijinal makine koduna evirir
ve nbellekte tutar. rnein ; program iindeki derlenmi bir metot
program ak iinde tekrar arlrsa nbellekten ekilir.
Pre-JIT: Tm program kodunu makine koduna evirip sonra altran
JIT. fazla hafza gerektirir. Programn daha hzl almasn salar.
Eco JIT: Kstl hafza ve nbellekli sistemlerde. NET programlarnn
daha iyi almalarn salamak iin kullanlan derleyicidir.
1.6. The Base Class Library - Temel Snf Ktphaneleri
.NET Frameworkte programclarn ilerini kolaylatrmak iin birtakm hazr
ktphaneler vardr fakat C# dilinde hazr ktphaneler mevcut deildir.
Bunun yerine Framework dediimiz altyapda Base Class Library ad verilen temel
snf ktphaneleri mevcuttur. Temel snf ktphaneleri, uygulamalarnz gelitirirken size
lazm olabilecek birok servisi ve nesneyi iinde barndran bir sistemdir. Temel snf
ktphaneleri, namespaces (isim alanlar)ler iinde organize edilmilerdir.
System isim alan: .NET alrken gerekli temel snflar ierir. Ayrca
dier_tm snf ktphaneleri de bunun iinde kmelenmitir. System
hiyerarinin tepesinde bulunur.
rnein tm veri taban ilemleri iin kullanlacak snf ktphanesi
System.Data dr.
Bu snf ktphanesi iindeki SQL ile ilemler iin System.Data.SqlClient
isim alan mevcuttur.
12
System.Net : HTTP ve a protokolleri iin kullanlr.
System.Xml : XML verileri ile almak iin kullanlr.
System.IO : Dosyalara bilgi girii, dosyadan bilgi okuma, I/O ilemleri iin
kullanlr.
System.Windows.Forms: Windows tabanl uygulamalarda kullanlan zengin
grafik arabirimi kontrollerini ierir.
1.7. Trler (TYPES)
Tr (type) konusundan bahsetmeden nce unu bilmeniz ve aklnzdan
karmamanzda fayda vardr. C# nesne tabanl bir dildir ve her ey bir nesnedir. Nesnenin
yapsn da snflar oluturur. (Snflar ilerleyen blmlerimizde inceleyeceiz.)
C# da tm snflar Object temel snfndan tremitir.
Trler C# da ikiye ayrlr: Deer trleri ve referans trleri. Deer trleri ile referans
trleri arasndaki fark anlamak, C# da deikenlerin bellek ynetiminin nasl altn
anlamak demektir. Deer trleri ve referans trleri ayn zamanda farkl iki bellek blgesini
anlatmaktadr: Stack ve Heap bellek blgesi. Dolaysyla deer trleri Stack bellek blgesi
ile ilikili, referans trleri de Heap bellek blgesi ile ilikilidir.
unu hibir zaman unutmamanz gerekir.
Deer trnden bir deiken Stack bellek blgesinde tutulur, Referans trnden bir
deikenin kendisi Stack blgesinde tutulurken temsil ettii nesne Heap bellek blgesinde
tutulur.
Referans trlerinin ne anlama geldiini reneceiz ancak u anda temel olarak deer
trlerini anlamamz gerekmektedir.
Deer trleri C# da kullanlan int, long, char gibi doal trlerden olumaktadr. Net
iinde tr ynetimi CTS ( Common Ttype System ) tarafndan ynetilir. CTS. Net iinde
kullanlan dillerin trlerini, dil bamszln salamak amacyla ortak bir tr ile gsterir.
Yani siz. Net iinde Visual Basic ya da C# ile program yazdnzda kullandnz trler CTS
tarafndan ortak bir tre dntrlmektedir.
rnein;
Visual Basic de kullanlan integer ve C# da kullanlan int trleri .Net iinde
System.Int32 ile gsterilmektedir. Peki, System.Int32 nedir? Ne anlama gelmektedir.
.Net alma ortamndan her ey Object snfndan tremitir. Object snfndan
tremi olan ValueType snf, deer trleri iin bir temel snf oluturmaktadr.
13
Deer trleri de. Net iinde bir yap olarak ( struct ) tanmlanmlardr. Dolaysyla.
Net iinde kullanlan trlerin metotlar ve zellikleri vardr.
Resim 1.9: Int32 snfnn metotlar
Eer Visual Studio iinde bo bir proje oluturur ve Int32. yazdmzda Int32
yapsna ait metot ve elamanlar grebiliriz. Ancak u anda biz metot, zellik, veri eleman
gibi konulara girmiyoruz. u anda yabancyz. Bunlar snflar konusunda anlatlacaktr.
Ancak aadaki maddeyi unutmamz gerekmektedir.
C# kullanlan doal trlerin aslnda. Net iinde CTS tarafndan dier. Net dilleri
ile uyumlu olmas asndan ortak bir tr ile temsil edildii,
C#da deer trleri ve referans trleri olarak iki trn olduu,
Deer ve referans trleri ile balantl stack ve heap denilen iki bellek
blgesinin olduu unutulmamaldr.
Aadaki tabloda C#da kullanlan trler ve bu trlerin. Net iindeki tanmlar
verilmitir.
C# Trleri .NET iindeki tanmlar
Sbyte System.Sbyte
Byte System.Byte
Char System.Char
Float System.Single
decimal System.Decimal
Double System.Double
Ushort System.UInt16
Short System.Int16
Uint System.UInt32
Int System.Int32
Ulong System.UInt64
Long System.Int64
Bool System.Boolean
String System.String
Object System.Object
14
Yukardaki tabloda grdmz bool veri tr sadece true (doru) ya da false (yanl)
deerini almaktadr.
Yani bool trnden bir deikene sadece true veya false deeri atanmaktadr. Aksi
takdirde derleyici hata verecektir.
bool flag;
int a=1;
flag = a;
dediimizde derleyici Cannot implicitly convert type int to bool eklinde bir hata
mesaj verecektir.
1.7.1. Referans Trleri
C#da trlerin temel iki ksma ayrldn sylemitik. Bunlardan birisi deer trleri (
Value Types ), dieri de referans trleridir ( Reference Types ).
Referans trleri adres tutan trlerdir. C#da tm nesneler referans trndendir.
Dolaysyla C#da her ey bir nesne olduuna gre ve Object snfndan tretildiine gre
demek ki C# kullanlan tm nesneler bir adres belirtirler. Hatrlayacanz gibi deer trleri
stack bellek blgesinde tutulurdu. Referans trnden bir deikenin kendisi stack blgesinde
tutulurken, nesnenin kendisi heap bellek blgesinde tutulmaktadr. Yani siz referans
trnden bir deiken tanmladnzda deikenin kendisi stack bellek blgesinde tutulacak
ancak deer olarak nesnenin heap bellek blgesindeki yerinin adresini tutacaktr.
Resim 1.6: Referans trlerinin hafzadaki durumu
Yukardaki ekildeki gibi p referans trnden bir deikendir ve stack bellek
blgesinden tutulmaktadr. Ancak pnin iinde nesnenin kendisi yoktur. Hatrlarsanz deer
trnden bir deiken gerek deeri tutmaktayd. pnin iinde nesnenin heap bellek
blgesindeki adresi vardr. Peki, niin byle tasarlam olabilir? Yani niin nesneler heap
bellek blgesinde tutulmaktadr? Bunun cevab CLR dir.
nk bellek ynetimi CLR nin kontrol altndadr. Kullanlmayan nesneler CLR
ynetimindeki p toplayc mekanizma sayesinde (garbage collection ) heap alanndan
silinmektedir.
15
C ve C++da kullanlan referans gsteren & operatr C#da kullanlmamaktadr. Bununla
birlikte gstericilerde C#da normal olarak kullanlmamaktadr. Ancak bu C# n gstericileri
desteklemedii anlamna gelmez. C# gstericileri desteklemektedir eer bir gsterici
kullanmak istiyorsanz o zaman ynetilmeyen kod (unmanaged) yazmak gerekir. Tabi bu
durumda karmza farkl bir durum kar.
Bellek ynetimi CLR (Common Language Runtime ) ynetimindedir. Heap bellek
blgesindeki geersiz durumdaki nesneleri temizlemektedir. Bu ynetilen koddur. Burada
bellein temizlenmesi, bellekten ayrlan yerlerin geri braklmas tamamen CLRnin
ynetimi altndadr. O zaman ynetilmeyen kod yazdmzda CLR aradan kacaktr.
Bellekten ayrlan yerlerin geri braklmas programcya kalacaktr.
Referans trleri iin heap bellek blgesinde yer ayrm yapldktan sonra geriye adres
dnlmektedir. Bu adreste referans trnden bir deikene atanmaktadr.
Bu ana kadar incelediklerimize gre:
ki tane temel tr vardr: Deer trleri ve referans trleri. Tm doal trler deer
trdr ve stack bellek blgesinde tutulmaktadr. Tm nesneler ise referans trndendir.
Referans deikenleri, nesnenin heap bellek blgesindeki adresini tutmaktadr ve referans
deikenleri de stack bellek blgesinde bulunmaktadr.
16
UYGULAMA FAALYET
lem Basamaklar neriler
Nesne tabanl programlamay tasvir
eden bir ema iziniz.
Modlde verilen yapy gz nnde
bulundurabilirsiniz.
Kaltm (Inheritance) ile ilgili bir
rnek program paras yaznz.
Kaltm kavram nesne tabanl
programlamann en nemli yaptalarndan
biri olduu iin bu kavram ok iyi
bilmenizde fayda vardr. Modl sonundaki
kaynaklar kullanabilirsiniz.
.NET Framework yapsn ekle
dknz.
Bir inaatn temelinin salam olmas ne kadar
nemli ise, programlarz yazp derlediimiz
yapy bilmek de o kadar nemlidir.
Kullanlan terimlerin Trke
karlklarn bir kda yaznz.
Yabanc kelimelerin Trke karlklar
modl iinde verilmitir, ayrca online szlk
hizmeti veren siteleri de kullanabilirsiniz.
UYGULAMA FAALYET
17
LME VE DEERLENDRME
OBJEKTF TEST (LME SORULARI)
Aadaki sorulardan; sonunda parantez olanlar doru / yanl sorulardr. Verilen
ifadeye gre parantez iine doru ise D, yanl ise Y yaznz. kl sorularda uygun kk
iaretleyiniz.
1. Nesne tabanl programada esas olan, gerek hayattaki olgularn da programlama
dnyasna aktarlabilmesidir. ( )
2. IL ne demektir?
A) Interchangeable Library B) Interoperable Languages
C) Intermediate Language D) Interchangeable languages
3. C# derleyicisi hangi formatta kt verir?
A) Byte Code B) IL
C) Hex Dump D) Intel Assembler
4. Nesne tabanl programlamada gizleme ve aa karma kavramn hangisi ifade eder?
A) Polymorphism B) Encapsulation
C) Overloading D) Static
5. Aadakilerden hangisi IL (Intermediate Language) kodunu platform tabanl koda
dntrr?
A) MSIL-converter B) JIT
C) JTI D) Metadata
6. Aadaki ortamlardan hangisi program kodunuzu altrr?
A) MSIL B) CLS
C) CLR D) VB .NET
DEERLENDRME
Cevaplarnz cevap anahtar ile karlatrnz. Doru cevap saynz belirleyerek
kendinizi deerlendiriniz. Yanl cevap verdiiniz ya da cevap verirken tereddt yaadnz
sorularla ilgili konular renme faaliyete geri dnerek tekrar inceleyiniz.
LME VE DEERLENDRME
18
RENME FAALYET2
Uygun ortam salandnda snflar, metotlar ve yaplar ile alacaksnz.
Bu faaliyet ncesinde aada belirtilen aratrma faaliyetlerini yapmalsnz:
Gnlk hayatta devaml karlatmz snflara rnekler veriniz.
Bu snflarn ortak ve farkl zelliklerini yaznz.
2. SINIFLAR (CLASSES)
C# dili tam anlamyla nesne tabanl bir dildir. Bu dil ierisinde snf kavramnn
nemli bir yeri vardr. Bu kavram iyi anlamak, her trl teknikte, snflarn avantajlarndan
yararlanmanz ve kendinize zg nesnelere sahip olabilmenizi salar. Zaten .NET
teknolojisinde yer alan her nesne, mutlaka snflardan tretilmektedir.
Resim 2.1: Snf (Class) ve nesne (Object) kavram
evremize baktmz zaman, ok eitli canllar grrz. rnein iekler. Dnya
zerinde ka tr (cins) iek olduunu bileniniz var m ? Ama biz bir iek grdmzde
ona ounlukla iek diye hitap ederiz zellikle adn bilmiyorsak. Sonra bu iein
renginden, yapraklarnn eklinden, ait olduu trden, adndan bahsederiz. iek tm bu
iekler iin temel bir snf olarak kabul edilebilir. Dnya zerindeki tm iekler iin ortak
nitelikleri vardr. Her iein bir renginin (renklerinin) olmas gibi. te nesne tabanl
programlama kavramnda bahsedilen ve her eyin temelini oluturan snf kavram bu
benzetme ile tamamen ayndr. iek bir snf olarak alglanrken, sokakta grdmz her
RENME FAALYET2
AMA
ARATIRMA
19
iek bu snfn ortak zelliklerine sahip birer nesne olarak nitelendirilebilir. Ancak tabi ki
iekler arasnda da trler mevcuttur. Bu trler ise, iek temel snfndan treyen kendi
belirli zellikleri dnda iek snfnn zelliklerini de kaltsal olarak alan baka snflardr.
Bu yaklam Inheritance (kaltm) kavram olarak ele alnr ve nesne tabanl programlamann
temel esinden biridir.
iek snfndan gerek C# ortamna getiimizde, her eyin bir nesne olduunu
grrz. Ancak her nesne temel olarak Object snfndan tremektedir. Yani hereyin
stnde bir snf kavram vardr. Snflar, birtakm yelere sahiptir. Bu yeler, bu snftan
rneklendirilen nesneler iin farkl deerlere sahip olur. Yani bir snf varken, bu snftan
rneklendirilmi n sayda nesne oluturabiliriz. Kald ki, bu nesnelerin her biri tanmland
snf iin ayr ayr zelliklere sahip olabilir.
2.1. Snf, ye ve Nesneleri
Snf bildirimi:
Snf bildirimi class anahtar kelimesi ile gerekletirilir. Snf isminden sonra snf
iindeki ye eleman ve metotlar tanmlanr.
Bu rnekte class anahtar szc kullanlarak kullanc tanml (user-defined) bir snf
(class) oluturulmutur. Class isminden sonra gelen snf yeleri kme parantezleri ({ })
iinde yer almaktadr.
class sinif_ismi
{
eriim veri_tipi deiken; // Snf yeleri
eriim dn_deeri
metot_ismi(parametreler)
{
}
}
20
Snf Nesneleri Tanmlama
rnek:
Yukardaki rnekte Musteri isimli bir snf tanmlanmtr. Bu snfn Isim adl bir ye
deikeni, IsimAl ve IsimYaz adnda iki tane yntemi bulunmaktadr. Msteri snf, bu
trden tanmlanacak bir nesnenin emasdr yani nesnenin verilerini ve davranlarn
gstermektedir. Daha sonra msteri snf trnden bir nesnenin bildirimi iin new anahtar
szc kullanlmakta ve nesnenin tanmlamas yaplmaktadr.
Bildirimler, derleyiciye deikenler hakknda bilgi verir.
Tanmlama ise bellekte bir yer ayrma ilemidir.
New anahtar szc ile snf iin heap bellek blgesinde bir yer ayrlmaktadr. Bu
yerin adresi de yani referans deeri de stack blgesinde saklanmaktadr. .NET Framework
iinde bellek temizleme grevini stlenmi olan p toplaycs ( garbage collector ) new
anahtar szc ile oluturulmu olan nesnelerin referanslar yoksa bu alanlar temizler ve
bellee geri brakr.
using System;
namespace Siniflar
{
class Musteri
{
private string Isim;
public void IsimAl(string isim)
{
Isim = isim;
}
public void IsimYaz()
{
Console.WriteLine(Isim);
}
}
class Uygulama
{
static void Main ()
{
Musteri a = new Musteri();
a.IsimAl("Hakan B.");
a.IsimYaz();
}
}
}
21
2.1.1. Snf yeleri
Snf yeleri temelde iki ksma ayrlmaktadr. Veri yeleri ( data members ) ve
fonksiyon yeleri ( member functions, methods )
Veri yeleri; alanlar (fields), sabitler (constants) ve olaylar (events)dan oluur.
Alanlar, nesneye ait bilgilerin tutulduu ye deikenlerdir.
Sabitler, nesnenin deitirilemeyen alanlardr.
Olaylar, belirli bir tetiklemenin meydana gelmesi sonucunda arlacak olan
fonksiyonlarn adres bilgilerini tutmakla sorumludur.
Snfn veri yeleri deer trlerinde olabilecei gibi, referans trlerinde de olabilir.
Her nesnenin sahip olduu data dier nesnelerden ayrlmtr yani her nesnenin datas
kendisine aittir, hibir ekilde karmaz.
Fonksiyon yeleri, yntemler (methods), zellikler (properties), yapc
fonksiyonlar (constructors), sonlandrclar (destructor), operatrler (operators)
ve dizinleyiciler (indexer)den oluur.
Yntemler nesnenin davran ekilleridir. Nesne kullancsna ye veriler zerinde
ilem yapmasna izin verir ve nesnenin da kapal yelerine ulalmasn salar.
zellikler alanlar gibidir. Hatta bunlara akll alanlar da denilmektedir. Nesnenin ye
verilerine deer atanmasnn ve deer ekilmesinin kontroll olarak yaplmasn salar.
Yapc ve sonlandrc yntemler nesnenin zel yntemleridir. Yapc yntemler nesne
ilk oluturulduunda arlrken sonlandrc yntemler nesnenin mr tamamlandnda
arlr.
Operatrler nesnelerin daha esnek kullanlmasna izin vermektedir.
Dizinleyiciler nesnenin bir dizi gibi kullanlmasna izin verir.
2.2. e Tipler
Tipler bazen dier tipleri de ierebilir. Bu tr kullanmlara e Tipler ad verilir.
Aadaki program parasnda, bir snf iinde baka bir snf tanmlanmtr.
public class KrediModulu
{
// KrediModulu kodlar buraya yazlr
private class KrediKartlari
{
// KrediKartlari kodlar buraya yazlr.
}
}
22
2.3. Kullanc Tanml Tipler
Snflar bir veri yapsdr. Snflar yardmyla gerek hayattaki bir nesneye ynelik
modelleme yapabiliriz. rnein bir kredi kart hesab iin birok zellik vardr, hesap nu,
limit, kart sahibi. Bu bizim iin gerek hayattaki bir modeli temsil eden bir yapdr.
class KrediHesabi
{
public int HesapNo;
public double Limit;
public string KartSahibi;
}
2.4. Metotlar ve Dn Deeri Tipi
Programlarmzda i yapan en temel paralar metotlardr. Metotlar, snflarn ye
fonksiyonlardr.
C, C++, Visual Basic gibi dillerde global fonksiyonlar bulunmaktayd ancak C# da
tm fonksiyonlar bir snfn yesi olmak zorundadr.
Metot bildirimi ;
eklinde yaplr.
Bildirimdeki [eriim] seenei metoda nasl ulalacan gsterir. Eer bir ifade
yazlmazsa metot Private kabul edilir.
Yntemler genelde public anahtar szc ile belirtilir. Bylece nesnenin kullancs
bu yntemleri kullanarak nesnenin private anahtar szc ile tanmlanm ve da kapal
verilerine ulalabilir.
C# da tm yntemler snf iinde bildirilir ve tanmlanr. C# %100 nesne tabanl bir dil
olduundan, bir metot kullanlrken bulunduu snf trnden bir nesne tanmlanr ve .
operatr ile metoda ulalr.
[eriim] <dn deeri> metot ismi (parametre listesi)
{
metot gvdesi;
}
23
Geri dn deeri olmayan metotlar void olarak tanmlanr. void tanml bir
fonksiyon iin return kullanlamaz.
rnek:
Eer giri parametresi yoksa parantez ii bo braklr.
rnek:
static olarak tanmlanan metotlar armak iin bir nesne tanmlamaya gerek yoktur. Eer
metot, iinde olduu snftan arlacaksa metodun sadece ismi yazlarak altrlabilir, eer
snf dndan bir arm yaplacaksa SnfAdi.Metot() eklinde arlmaldr. Static tanm
ile oluturulmu metot iin new operatr ile yeni bir nesne tanmlamaya gerek yoktur.
Aadaki rnei inceleyelim.
using System;
class Class1
{
public static void Main()
{
Class1 fonk = new Class1();
int deger = fonk.topla(3, 5);
Console.WriteLine(deger);
Console.Read();
}
public int topla(int sayi1, int sayi2)
{
int toplam = sayi1 + sayi2;
return toplam;
}
}
public void BenimVoidMetodum()
{
MessageBox.Show("Bu metot bir deer dndrmez");
}
public int Topla(int birinci, int ikinci)
{
int Sonuc;
Sonuc = birinci + ikinci;
return Sonuc;
}
voi d yaz( )
{
Consol e. Wr i t eLi ne( El az) ;
r et ur n;
}
24
Bu rneimizde "Class1" snf iin "fonk" isimli bir nesne oluturduk ve bu nesne
sayesinde "topla" fonksiyonuna ulatk. Nesnelerin mantn yle zetleyebiliriz: Nesneleri
tanmlayarak snflarn zelliklerini bir nesneye ykleriz. Ardndan bu nesne ile snf iindeki
metot ve deikenlere (Sadece zel izin verdiklerimize) ulaabiliriz.
rnei inceleyecek olursak, "fonk" isimli nesnemizi tanmlamak iin
Class1 fonk = new Class1() ;
kodunu yazdmz grrz. Nesne tanmlamak iin nce iliki kurulacak snfn ad yazlr.
Ardndan nesnenin ad yazlr. " = " iaretinden sonra "new" komutu ile snf ad tekrar
yazlr. Parantezlerin kullanm amac fonksiyon ve metotlardakine benzer. Nesne
tanmlandktan sonra snf iindeki metot ve deikenlere "." iaretinden sonra metot veya
deiken ismini yazarak ulaabiliriz.
2.5. Eriim Trleri
2.5.1. Eriim Belirleyicileri
Nesnelerin eriim belirleyicileri iin yle bir rnek verirsek sanrm yanl
olmayacaktr. Ben zel eyalarm ailemden birisi ile paylaabilirim ancak komularmla
paylamam. Duruma nesne tabanl programlama tarafndan baktmzda aile fertlerinden
birisi benim zel datalarma ulaabilir ancak komular ulaamaz.
Eriim belirleyicileri ile nesne sahip olduu yelere kimin ve hangi artla
eriilebileceini belirtir. rnein televizyonumuzun kullanc olarak eriebildiimiz ve
eriemediimiz ksmlar vardr (snfn ye elemanlar). Kanal deitirmek iin kanal
dmelerini kullanrz, nk bunlarn kullanlmas tamamyla bize serbesttir. Ancak kanal
bilgisinin nasl ve nerede tutulduunu bilemeyiz ve bu ksma eriemeyiz. Sadece kullanmaya
iznimizin olduu ksmlar kullanabiliriz. Eriim belirleyicileri, nesne kullancsna nesneyi
nasl kullanacan gsterir.
2.5.2. Eriim Trleri
Public: Public olarak tanmlanm bir metot veya zellie herhangi bir yerden
ulamak mmkndr. Herkese ak olarak tanmlayabiliriz.
Private: Bu sfat ile tanmlanm metot veya zelliklere sadece tanmland snf
ierisinden ulaabiliriz.
Protected: Protected metotlara veya zelliklere tanmlandklar snftan ve bu snftan
retilmi alt snflardan ulaabiliriz.
Internal: Internal metot veya zelliklere tanmlandklar snftan ve tanmlandklar
snfla ayn assemblede olan snflardan eriebiliriz.
25
Class 1
public a,
private b,
protected c,
internal d,
protected internal e
Class 2
Class 3 : 1
Class 4
Class 5 : 1
A
B
Protected Internal: Bu tip metot ve zellikler hem protected hem de Internal
zelliindedir. Dier bir ifade ile bunlara ancak kendi snflarndan veya ayn Assemblydeki
alt snflardan ulaabiliriz.
Resim 2.2: Eriim trleri
Yntemler genelde public anahtar szc ile belirtilir. Bylece nesnenin kullancs
bu yntemleri kullanarak nesnenin private anahtar szc ile tanmlanm ve da kapal
verilerine ulalabilir.
C#da tm yntemler snf iinde bildirilir ve tanmlanr, ancak C++da snfn
yntemleri, snfn dnda da tanmlanrd.
26
rnek:
kt:
Yukardaki rnekte stok snfnn private olarak tanmlanm bir veri yesi ve public
olarak tanmlanm iki tane yntemi vardr. Nesnenin kullancs StokMik yesine direkt
olarak eriemeyecei iin public yntemlerinden yararlanr.
using System;
namespace Siniflar
{
class Stok
{
private int StokMik;
public void SetStokMiktari(int miktar)
{
StokMik = miktar;
}
public int GetStokMiktari()
{
return StokMik;
}
}
class Uygulama
{
static void Main(string[] args)
{
Stok st = new Stok();
int fmiktar = 0;
st.SetStokMiktari(10);
fmiktar = st.GetStokMiktari();
Console.WriteLine("Stok Miktari:{0}", fmiktar);
}
}
}
27
Bu rnekte stok snf trnden bir nesne tanmlanm ve bu nesnenin SetStokMiktar
yntemi ile nesnenin private veri yesine deer atanmakta, GetStokMiktari yntemi ile de bu
deer nesne kullancs tarafndan alnmaktadr.
Nesnenin herhangi bir yesine erimek iin . operatr kullanlr.
st.GetStokMiktari
Yntemler parametreli veya parametresiz olabilir. Ayn ekilde geri dn deerleri de
olabilir veya olmayabilir. Eer bir yntem geriye deer dndrmyorsa yntem tanmnda
geri dn deeri olmadn belirtmek iin yntem adndan nce void anahtar szc
getirilir. Yntem bir deer geriye dndryorsa yntem tanmnda nasl bir deer geriye
dndrdnn yntem tanmndaki geri_dn_deeri ksmnda belirtilmesi gerekir.
Metot arma:
C# %100 nesne tabanl bir dil olduundan, bir metot kullanlrken bulunduu snf
trnden bir nesne tanmlanr ve . operatr ile metoda ulalr. Metotlar arlmadklar
srece almaz.
Metotlar isimleriyle arlrken parametrelerden de yararlanlr.
Eer giri parametresi yoksa parantez ii bo braklr.
Static olarak tanmlanan metotlar armak iin bir nesne tanmlamaya gerek
yoktur. Eer metot, iinde olduu snftan arlacaksa metodun sadece ismi yazlarak
altrlabilir, eer snf dndan bir arm yaplacaksa SnfAdi.Metot() eklinde
arlmaldr.
Static tanm ile oluturulmu metot iin new operatr ile yeni bir nesne tanmlamaya
gerek yoktur.
Duraan ve rnek yeler ( Static ve Instance Member)
Bir snfn yeleri duraan (static) veya rnek (instance) olabilir.
Duraan olmas durumunda snf yesinden sadece bir tane oluturulur, yani her nesne
oluturulduunda duraan yeden bir tane daha oluturulmaz. Duraan yeler bellein stack
blgesini kullanr.
// Bu satr 2 parametre ile birlikte Cevir isminde bir metot
armaktadr.
Cevir(45, "Derece");
28
Tanmladmz bir snf kullanmak iin o snftan bir nesnenin oluturulmas gerekir.
Bu da nesne oluturmadan snftaki herhangi bir yeyi kullanamamz demektir. Ancak bazen
yle durumlarla karlarz ki, nesne tanmlamadan da sadece snf ad ile
kullanabileceimiz yelere ihtiyacmz olur. Duraan yelere ulamak iin nesne
oluturulmasna yani nesne rneine gerek yoktur ve bu yelere snf ismi ile eriilir. Bunun
en gzel rnei main yntemidir. Main yntemi snfn duraan bir yesi olduundan, bir
nesne rneinin oluturulmasna gerek kalmadan kullanlmakta ve programn balang
noktasn belirtmektedir. Ksacas duraan bir snf yesi herhangi bir nesneye bal deildir.
rnek yelerin ise her nesne iin bir kopyas oluturulur ve her nesne iin bu yelerin
ierikleri birbirleriyle karmaz. nk her nesne iin bellein heap blgesinde bir yer
ayrlr. Dolaysyla her nesnenin rnek yeleri bu blge iinde yer alr. rnek yeler,
duraan yeler gibi snf ismi ile kullanlamaz. Bu yelerin kullanlabilmesi iin new anahtar
szc ile bir nesnenin oluturulmas gerekir. Daha sonra nesne ad referans edilerek bu
yelere eriilir.
Duraan yntemler snfn duraan olmayan yelerine ulaamaz. nk nesnenin
adresi gizli olarak nesnenin rnek ye yntemlerine geirilmektedir. Bu adres nesnenin
bellekte bulunduu heap blgesinin adresidir. Duraan yelere nesne adresi gemediinden
nesnenin duraan olmayan yelerine ulamas mmkn deildir. Zaten byle bir durumda
derleme zamannda hata alnacaktr.
Nesne adresinin ye yntemlerine gemesi ile yntem hangi nesneye ait olduunu
bilir. Bu adrese this denilir.
Yukardaki rnekte Setx ynteminin iinde local olarak tanmlanm bir x deikeni
ve bir de this ile birlikte kullanlan x deikeni bulunmaktadr. this.x deikeni snfn private
olarak tanmlanm olan x ye deikenini temsil etmektedir, nk this nesnenin adresidir.
class OrnekThis
{
private int x;
public void Setx()
{
int x = 0;
x = 10;
this.x = 20;
}
}
29
rnek:
kt:
Yapclar da duraan olabilir. Bu durumda sadece ilk nesne oluturulurken
arlacaktr. Peki, yapclarn duraan olarak kullanlmasnn sebebi ne olabilir?
Bu sorunun cevab gayet basittir: Nesnenin duraan veri yelerine ilk deerlerini vermek.
using System;
using System.Collections.Generic;
using System.Text;
namespace fun
{
class Snf
{
public static void Yaz(int a)
{
Console.WriteLine("Snf.Yaz()'n kts=" + a);
}
}
class Program
{
static void Yaz(int a) //Static tanmlama nesne iin bir
bakma global bir deer tanm eklinde oluyor.
{
a += 100;
Console.WriteLine("Yaz()'n kts=" + a);
return;
}
static void Main(string[] args)
{
int a = 134;
Snf.Yaz(a);
Yaz(a);
Console.ReadKey();
}
}
}
30
rnek:
kt:
Yukardaki rnekte Base snfndan iki tane nesne tanmlanmtr. Base snfnn
duraan bir yapc yntemi bulunmaktadr. Nesnelerin new anahtar szc ile oluturulmas
srasnda duraan yapc yntem sadece bir kez arlmtr.
Duraan yapc yntemlerde dier yapc yntemlerden farkl olarak eriim
belirleyicisi kullanlmaz.
Duraan yapc yntemler parametresiz olarak kullanlr.
using System;
namespace Siniflar
{
class Base
{
static Base()
{
Console.WriteLine("static yapici metod");
}
}
class Uygulama
{
static void Main (string[] args)
{
Base x1 = new Base();
Base x2 = new Base();
}
}
}
31
UYGULAMA FAALYET
lem Basamaklar neriler
evrenizdeki gerek bir olgudan yeni
bir snf yaps oluturunuz.
Mesela araba markalarn veya cep
telefonlarn dnebilirsiniz.
Tasarladnz snfa ait yeni nesneler
oluturunuz.
4 kapl ara, bluetooth zellii olan telefon
gibi.
Hazrladnz snfa ait iki metot
tanmlaynz.
Modldeki rneklere baknz.
Snfa ait metotlar programnzn
herhangi bir yerinden arnz.
Modldeki rneklere baknz.
Parametre kullanarak geriye deer
dndren bir metot yaznz.
UYGULAMA FAALYET
32
LME VE DEERLENDRME
OBJEKTF TEST (LME SORULARI)
Aadaki sorulardan; sonunda parantez olanlar doru / yanl sorulardr. Verilen
ifadeye gre parantez iine doru ise D, yanl ise Y yaznz. kl sorularda uygun kk
iaretleyiniz.
1. .NET teknolojisinde yer alan tm nesneler snflardan tremitir. ( )
2. Garbage Collector (p Toplayc) en iyi hangisi ifade eder?
A)IL kodlarn Heap blgesine tar. B)Pointerlar yok eder.
C) Hafza ynetiminden sorumludur. D)Snf oluturmay salar.
3. Referans tipler nerede saklanr?
A) Heap blgesinde B) Stack blgesinde
C) Harddiskde D)Diskette
4. C# da bulunan Class lar deer trndendir. ( )
5. Bir snf zelliklerinin baka bir snfa aktarlmas Inheritance olarak bilinir. ( )
6. C#da tm fonksiyonlar bir snfn yeleri olmak zorundadr.( )
7. Static tanm ile oluturulmu metot iin new operatr ile yeni bir nesne tanmlamaya
gerek yoktur. ( )
8. Void tanml bir fonksiyon iin Return kullanlr. ( )
9. Aadaki eriim trlerinden hangisine her yerden ulamak mmkndr?
A) Private B) Protected
C) Public D) Internal
DEERLENDRME
Cevaplarnz cevap anahtar ile karlatrnz. Doru cevap saynz belirleyerek
kendinizi deerlendiriniz. Yanl cevap verdiiniz ya da cevap verirken tereddt yaadnz
sorularla ilgili konular renme faaliyete geri dnerek tekrar inceleyiniz.
LME VE DEERLENDRME
33
MODL DEERLENDRME
PERFORMANS TEST (YETERLK LME)
Modl ile kazandnz yeterlii aadaki kriterlere gre deerlendiriniz.
DEERLENDRME LTLER Evet Hayr
Nesne tabanl programlamay tasvir eden bir ema izdiniz mi?
Kaltm (Inheritance) ile ilgili bir rnek program paras
yazdnz m?
.NET Framework yapsn ekle dkdnz m?
Kullanlan terimlerin Trke karlklarn bir kda yazdnz
m?
evrenizdeki gerek bir olgudan yeni bir snf yaps
oluturdunuz mu?
Tasarladnz snfa ait yeni nesneler oluturunuz.
Hazrladnz snfa ait iki metot tanmladnz m?
Snfa ait metotlar programnzn herhangi bir yerinden
ardnz m?
Parametre kullanarak geriye deer dndren bir metot yazdnz
m?
DEERLENDRME
Yaptnz deerlendirme sonucunda eksikleriniz varsa renme faaliyetlerini
tekrarlaynz.
Modl tamamladnz, tebrik ederiz. retmeniniz size eitli lme aralar
uygulayacaktr, retmeninizle iletiime geiniz.
MODL DEERLENDRME
34
CEVAP ANAHTARLARI
RENME FAALYET1N CEVAP ANAHTARI
1 D
2 C
3 A
4 B
5 B
6 C
RENME FAALYET2NN CEVAP ANAHTARI
1 D
2 C
3 A
4 Y
5 D
6 D
7 D
8 Y
9 C
CEVAP ANAHTARLARI
35
SZLK
sim Okunu Anlam
assembly sem'bli toplanti; montaj, takma, kurma
base beys temel, alt kisim, bir seyin zerinde durdugu kisim
class kls Snf, tabaka
collector klek'tr Koleksiyoncu, almc, topla
common kam'n mterek, ortak; beraber yaplan
convert knvrt' degistirmek, dnstrmek; degismek
define dfayn' tanmlamak, tarif etmek.
development dvel'pmnt gelitirme; gelime, geliim.
encapsulation enkepsuleyn kapsllenme,sarma
framework freymvrk bnye, yapi
garbage gar'bc Deersiz ey, p
heap Hip yn, kme.
inheritance nher'tns Miras, kalt
intermediate ntrmi'diyt Ortadaki, aradaki
implicit mpls't ifade edilmeden anlalan, sakl.
initialize inilayz baslangi durumuna getirmek, baslatmak
instance n'stns rnek, kere, defa
internal ntr'nl , dahili
just in time Cast in taym Dinamik eviri
language lng'gwc Dil, lisan
method meth'd Yntem, metot, usl, yol
native ney'tv Yerli, doal, doutan olan
nested nestt ie
object ab'cekt Nesne, obje, cisim
orient Orientt ynlendirmek, yneltmek
polymorphism polimorfizm ok biimlilik
private pray'vt zel, hususi, kiisel
protect prtekt' Korumak, muhafaza etmek
public Pablik Herkese ait, ak
runtime Rantaym alma zaman
stack stk Yn, istif
static stt'k Deimeyen, sabit
type Tayp eit, cins, tr
value vl'yu Deer, kymet
void Voyd Hkmsz, geersiz, bo
NOT: karakteri e sesini vermektedir.
SZLK
36
NERLEN KAYNAKLAR
Trke Kaynaklar
http://www.msakademik.net/
http://tr.wikipedia.org/wiki/C_Sharp_programlama_dili
http://www.yazgelistir.com/Makaleler/1000000028.ygpx
http://www.dotnetturk.com/whatisdotnet.aspx
http://www.ceturk.com/forum/forum_topics.asp?FID=36&PN=0
http://www.csharpnedir.com/
Yabanc Kaynaklar
http://www. msdn.microsoft.com/vcsharp/
www.csharp-station.com/Tutorial.aspx
csharpcomputing.com/Tutorials/TOC.htm
www.functionx.com/csharp/index.htm
www.dotnetspider.com/
www.publicjoe.f9.co.uk/csharp/tut.html
www.csharpfriends.com/
www.c-sharpcorner.com/
www.csharphelp.com/
www.codeproject.com/
NERLEN KAYNAKLAR
37
KAYNAKA
BRADLEY L.Jones, Sams Teach Yourself the C# Language in 21 Days,
SAMS 2004.
L.THAI Thuan, LAM Hoang, .NET Framework Essentials, 2nd Edition,
O'Reilly 2002.
SHARP John, JAGGER Jon, Microsoft Visual CSharp.NET Step By Step
Version 2003, MS Press, kaynakann yl yok
ZENGN Abdullah, Visual C# 2005, Nirvana Yaynlar Ankara 2006.
KAYNAKA

You might also like