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