Professional Documents
Culture Documents
Nesnetabanliprogramlama 1
Nesnetabanliprogramlama 1
MEGEP
(MESLEK ETM VE RETM SSTEMNN GLENDRLMES PROJES)
BLM TEKNOLOJLER
ANKARA 2008
NDEKLER
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
AIKLAMALAR AIKLAMALAR
KOD ALAN DAL/MESLEK MODLN ADI 482BK0074 Biliim Teknolojileri Veri Taban Programcl Nesne Tabanl Programlama - 1 Nesneye ynelik programlama dilinin evresini hazrlayabilme ve snf, metot ve yaplar ile alabilme ile ilgili bilgi ve becerilerin kazandrldn salamaya ynelik renme materyalidir. 40/32 Grsel Programlama dersi modllerini bitirmi olmak Nesne tabanl programlama dilinin gerekliliklerini yerine getirmek 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. 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.
MODLN TANIMI
MODLN AMACI
LME VE DEERLENDRME
ii
GR 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.
ARATIRMA
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?
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).
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.
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
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
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.
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.
Konumak
Yksek sesle
Ksk kesle
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.
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.
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.
10
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.
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
11
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.
12
Deer trleri de. Net iinde bir yap olarak ( struct ) tanmlanmlardr. Dolaysyla. Net iinde kullanlan trlerin metotlar ve zellikleri vardr.
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 Byte Char Float decimal Double Ushort Short Uint Int Ulong Long Bool String Object System.Sbyte System.Byte System.Char System.Single System.Decimal System.Double System.UInt16 System.Int16 System.UInt32 System.Int32 System.UInt64 System.Int64 System.Boolean System.String System.Object
13
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.
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.
14
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.
15
lem Basamaklar
Nesne tabanl programlamay tasvir Modlde verilen eden bir ema iziniz. bulundurabilirsiniz.
Kaltm kavram nesne tabanl programlamann en nemli yaptalarndan Kaltm (Inheritance) ile ilgili bir biri olduu iin bu kavram ok iyi rnek program paras yaznz. bilmenizde fayda vardr. Modl sonundaki kaynaklar kullanabilirsiniz. Bir inaatn temelinin salam olmas ne kadar .NET Framework yapsn ekle nemli ise, programlarz yazp derlediimiz dknz. yapy bilmek de o kadar nemlidir. Yabanc kelimelerin Trke karlklar Kullanlan terimlerin Trke modl iinde verilmitir, ayrca online szlk karlklarn bir kda yaznz. hizmeti veren siteleri de kullanabilirsiniz.
16
3.
4.
Nesne tabanl programlamada gizleme ve aa karma kavramn hangisi ifade eder? A) Polymorphism B) Encapsulation C) Overloading D) Static Aadakilerden hangisi IL (Intermediate Language) kodunu platform tabanl koda dntrr? A) MSIL-converter B) JIT C) JTI D) Metadata Aadaki ortamlardan hangisi program kodunuzu altrr? A) MSIL B) CLS C) CLR D) VB .NET
5.
6.
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.
17
ARATIRMA
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.
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
18
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.
// Snf yeleri
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.
19
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 Tanmlama ise bellekte bir yer ayrma ilemidir. hakknda bilgi verir.
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.
20
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.
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. } }
21
class KrediHesabi { public int HesapNo; public double Limit; public string KartSahibi; }
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.
22
Geri dn deeri olmayan metotlar void olarak tanmlanr. void tanml bir fonksiyon iin return kullanlamaz.
rnek:
public void BenimVoidMetodum() { MessageBox.Show("Bu metot bir deer dndrmez"); } public int Topla(int birinci, int ikinci) { int Sonuc; Sonuc = birinci + ikinci; return Sonuc; }
rnek:
void yaz() { Console.WriteLine(Elaz); return; }
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; } }
23
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.
24
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.
Class 5 : 1
Class 2
Class 3 : 1
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.
25
rnek:
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); } } }
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.
26
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.
// Bu satr 2 parametre ile birlikte Cevir isminde bir metot armaktadr. Cevir(45, "Derece");
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.
27
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.
class OrnekThis { private int x; public void Setx() { int x = 0; x = 10; this.x = 20; } }
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.
28
rnek:
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(); } } }
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.
29
rnek:
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(); } } }
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.
30
lem Basamaklar evrenizdeki gerek bir olgudan yeni bir snf yaps oluturunuz. Tasarladnz snfa ait yeni nesneler oluturunuz. Hazrladnz snfa ait iki metot tanmlaynz. Snfa ait metotlar programnzn herhangi bir yerinden arnz. Parametre kullanarak geriye deer dndren bir metot yaznz.
neriler Mesela araba markalarn veya cep telefonlarn dnebilirsiniz. 4 kapl ara, bluetooth zellii olan telefon gibi. Modldeki rneklere baknz. Modldeki rneklere baknz.
31
3.
4. 5. 6. 7.
C# da bulunan Class lar deer trndendir. ( ) Bir snf zelliklerinin baka bir snfa aktarlmas Inheritance olarak bilinir. ( ) C#da tm fonksiyonlar bir snfn yeleri olmak zorundadr.( ) Static tanm ile oluturulmu metot iin new operatr ile yeni bir nesne tanmlamaya gerek yoktur. ( ) Void tanml bir fonksiyon iin Return kullanlr. ( ) Aadaki eriim trlerinden hangisine her yerden ulamak mmkndr? A) Private B) Protected C) Public D) Internal
8. 9.
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.
32
DEERLENDRME Yaptnz deerlendirme sonucunda eksikleriniz varsa renme faaliyetlerini tekrarlaynz. Modl tamamladnz, tebrik ederiz. retmeniniz size eitli lme aralar uygulayacaktr, retmeninizle iletiime geiniz.
33
34
SZLK SZLK
sim Okunu Anlam
assembly base class collector common convert define development encapsulation framework garbage heap inheritance intermediate implicit initialize instance internal just in time language method native nested object orient polymorphism private protect public runtime stack static type value void
sem'bli beys kls klek'tr kam'n knvrt' dfayn' dvel'pmnt enkepsuleyn freymvrk gar'bc Hip nher'tns ntrmi'diyt mpls't inilayz n'stns ntr'nl Cast in taym lng'gwc meth'd ney'tv nestt ab'cekt Orientt polimorfizm pray'vt prtekt' Pablik Rantaym stk stt'k Tayp vl'yu Voyd
toplanti; montaj, takma, kurma temel, alt kisim, bir seyin zerinde durdugu kisim Snf, tabaka Koleksiyoncu, almc, topla mterek, ortak; beraber yaplan degistirmek, dnstrmek; degismek tanmlamak, tarif etmek. gelitirme; gelime, geliim. kapsllenme,sarma bnye, yapi Deersiz ey, p yn, kme. Miras, kalt Ortadaki, aradaki ifade edilmeden anlalan, sakl. baslangi durumuna getirmek, baslatmak rnek, kere, defa , dahili Dinamik eviri Dil, lisan Yntem, metot, usl, yol Yerli, doal, doutan olan ie Nesne, obje, cisim ynlendirmek, yneltmek ok biimlilik zel, hususi, kiisel Korumak, muhafaza etmek Herkese ait, ak alma zaman Yn, istif Deimeyen, sabit eit, cins, tr Deer, kymet Hkmsz, geersiz, bo
35
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/
36
KAYNAKA 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.
37