YZM 2105 Nesneye Yönelik Programlama Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1
BÖLÜM - 3 Nesneye Yönelik Programlamaya Giriş Bu bölümde; Nesneye Yönelik Programlama Tarihçesi Nesneye Yönelik Programlamanın Farklılıkları Nesne Kavramı Sınıf Kavramı Sınıf Oluşturulması İsim alanları ve using kullanımı ile ilgili konular anlatılacaktır. 2
Nesneye Yönelik Programlamaya Giriş Nesne yönelimli programlama (OOP), (Object Oriented Programming) nesneyi merkezine alan bir bilgisayar programlama yaklaşımıdır. Nesne yönelimli programlama terminolojisindeki object/nesne ve oriented/yönelimli kavramları ilk olarak 1960 lı yılların başında MIT tarafından yapay zeka ile çalışmalar yapılan araştırma grubunda özelliklere sahip maddeleri isimlendirirken object tanımı kullanıldı. 3
Nesneye Yönelik Programlamaya Giriş 1960lı yıllarda Oslo daki Norwegian Computing Center da Ole-Johan Dahl ve Kristen Nygaard tarafından geliştirilen ayrık olay simülasyonu için tasarlanan Simula I in en önemli versiyon yada değiştirilmiş/özelleştirilmiş versiyonu olan Simula 67 de resmi olarak ilk object kavramı kullanıldı. Simula 67 nin temel prensipleri ve disiplinleri altında yatan daha sonraki birçok dil etkiledi ve kullanıldı. 4
Nesneye Yönelik Programlamaya Giriş 90 lı yıllarda programlama dillerine olan destek artınca nesne yönelimli programlama etkin ve yaygın olarak kullanılmaya başlandı. Nesneye-yönelik programlamanın temel kavramları; büyük programlar yazmayı kolaylaştıran soyutlama, programları değiştirmeyi ve korumayı kolaylaştıran saklama ve programları kolayca genişletilebilir kılan sınıf hiyerarşisi dir. 5
Soyutlama Önemli özelliklere odaklanabilmek için ayrıntıları göz ardı etme sürecidir. 6
Soyutlama Soyutlama temel olarak veri ve kontrol soyutlaması olarak yapılır. Bir veri tipinin nasıl yapılandığının ayrıntılarını göz ardı etmemize izin veren soyutlama tarzına veri soyutlaması denir. Kontrol soyutlaması ise yapısal programlama ile gelen altprogram, fonksiyon gibi kavramlar üzerinde yapılan soyutlamadır. 7
Soyutlama Örnek: Bir Kisi nesnesinde, kişinin yaşını tutan bir tamsayı değişkeni olan yas değişkenini ele alalım. Bu yas değişkenine, programın çalıştırma anında, "-10" değerinin atanmasını kimse engelleyemez. İşte burada nesne yönelimli programlamanın getirdiği görünürlük ve özellik tanımlama gibi yetenekler kullanarak "yas" değerine gerçek bir değerin girilmesi garanti edilebilir. Buna veri soyutlaması adı verilir. 8
Soyutlama Benzer şekilde soyutlama işleminin verileri taşıyan değişkenlerin değil de yöntem veya işlevlerin üzerinde yapılması işlemine kontrol soyutlaması adı verilir. Yani yöntem ile yapılan işlemlerin bir başka nesne tarafından müdahale edilemeyecek hale sokulması işlemidir. 9
Yapısal Programlama ve Nesneye Yönelik Programlama Farklılıkları Yapısal Programlama sadece bir soruna odaklı farklı fonksiyonlar yazılır ve sadece o sorun için fonksiyonlar bulunurlar. Dolayısıyla yapısal programlama yaklaşımıyla oluşturulmuş bir program binlerce ayrı adda tanımlanmış değişken ve yüzlerce farklı fonksiyona sahiptir. En ufak işlem için bile ayrı fonksiyon oluşturulması gerekir ve bu programın karmaşıklığını arttırır. 10
Yapısal Programlama ve Nesneye Yönelik Programlama Farklılıkları (devam ) Gerçek dünyadaki sistemler sadece fonksiyonlardan oluşmaz. Sistemin gerçeğe yakın bir modelini bilgisayarda oluşturmak zordur. 11
Yapısal Programlama ve Nesneye Yönelik Programlama Farklılıkları (devam ) Nesneye Yönelik Programlama yaklaşımı ise yapısal programlama yaklaşımının daha genişletilmiş ve gerçeğe yakın versiyonudur. Değişkenler ve metotlar burada da kullanılır fakat burada nesne üzerine odaklanılır. Nesneye yönelik programlama yaklaşımı doğaldır. Nesnelerden oluşan bir dünya düşünmek basittir. Yapısal programlamadaki büyük ve karmaşık sistemleri tasarlamak yerine, birbiriyle iletişim ve etkileşim halinde nesnelerin olduğu bir dünya kolayca tasarlanabilir. Bu nesnelerin çalışması için ayrıca bir mantık oluşturmaya gerek kalmaz. 12
Yapısal Programlama ve Nesneye Yönelik Programlama Farklılıkları (devam ) Nesneye yönelik programlama yaklaşımında, projenin erken safhalarında projeyi tamamlamak için gerekli olan tüm nesnelerin tanımlanması, nesneleri tanımlayan sınıfların yaratılması yatar. Böylece yaratılan her nesne kendi verisini kendinde barındırır ve diğer nesnelerin kendisinden istediği görevleri yerine getirir. 13
Yapısal Programlama ve Nesneye Yönelik Programlama Farklılıkları (devam ) Hangi unsurların nesne olarak modellenebilir: İnsan kaynakları ile ilgili bir programda; memur, işçi, müdür, genel müdür. Matematiksel işlemler yapan programda; karmaşık sayılar, matris. Kullanıcı arayüzü programında; pencere, menü, çerçeve. 14
Nesne Kavramı Nesne, niteliklere ve davranışlara sahip somut bir varlıktır. Bir nesnenin niteliği onun sahip olduğu özelliklerdir. Nesnenin bir niteliğinin değeri o nesnenin durumunu oluşturur. Bir nesnenin davranışları onun/onunla yapabildiği/yapılabilen şeylerdir. 15
Nesne Kavramı (devam ) Örnek1: Bir firmanın maaş bordrosu programının yapılması Yapısal programlamada herhangi bir işçi için prim adlı bir değişken tanımlanır. Her bir işçi için farklı değerler alır ve yeniden tanımlanır. Program boyunca tüm değerler prim değişkeninde saklanır ve bu değişken üzerinden işlemler yapılır (maaş yazdırma, maaş hesaplama ). 16
Nesne Kavramı (devam ) Örnek1: Bir firmanın maaş bordrosu programının yapılması Maaş bordrosu programı için yapılacak olan programı Nesneye Yönelik Programlama yaklaşımı ile ele alırsak bu programın içereceği nesnelerden birisi maasceki nesnesi olur. 17
Nesne Kavramı (devam ) Örnek1: Bir firmanın maaş bordrosu programının yapılması maasceki nesnesi şunları içerir; Nitelik olarak; Alacak Bilgisi Paranın Değeri Davranış olarak; Yazılabilir Nakite çevrilebilir Miktarını Hesaplayan bir Metot/Fonksiyon 18
Nesne Kavramı (devam ) Örnek1: Bir firmanın maaş bordrosu programının yapılması Maaş Bordrosu programın tasarımı için gereken tüm nesneler düşünülmeli ve nesnelerin nitelikleri ve davranışları tanımlanmalıdır. Başlıca nesneleri şunlar olmalıdır : İşçi Nesnesi, Zaman Çizelgesi Nesnesi, Maaş Çeki Nesnesi 19
Nesne Kavramı (devam ) Her iki programlama yaklaşımıyla da doğru bir Maaş Bordrosu programı üretilebilir. Aynı zamanda iki programlama yaklaşımıyla da yeniden kullanılabilir modüller üretilebilir. İki programlama yaklaşımındaki önemli farklılıklar: Yazılımcının projenin erken safhalarındaki planlama ve düşünme farklılığı Üretilen programların karmaşıklıkları Yeni ihtiyaçların ve düzenlemelerin sisteme adapte edilmesindeki kolaylık 20
Nesne Kavramı (devam ) Örnek2: Bir şehrin trafik karışıklığını gidermek için gerçek zamanlı trafiği simüle eden bir simülasyonun yapılması gerekmektedir. Gerekli olan nesneler : Arac Nesnesi, Yaya Nesnesi, Trafik İşaretçileri Nesnesi Bu nesnelerin her biri kendi bilgilerini saklar ve kendi davranışlarına sahip olur. Böylelikle nesnelerin yardımcılığıyla bir şehrin trafiği gerçek zamanlı olarak simüle edilebilir. 21
Nesne Kavramı (devam ) Örnek2: Bir şehrin trafik karışıklığını gidermek için gerçek zamanlı trafiği simüle eden bir simülasyonun yapılması gerekmektedir. Arac nesnesi şunları içerir : Nitelik olarak; Plaka Bilgisi Sürücü bilgisi Anlık Hızı Bilgisi Davranış olarak; Anlık Hız Değiştirme Metodu Trafik Kuralı Kontrol Metodu 22
Nesne Kavramı (devam ) Örnek2: Bir şehrin trafik karışıklığını gidermek için gerçek zamanlı trafiği simüle eden bir simülasyonun yapılması gerekmektedir. Yaya nesnesi şunları içerir: Nitelik olarak; Kimlik Numarası Anlık Hızı Davranış olarak; Anlık hız değiştirme Metodu Trafik Kuralı kontrol metodu 23
Nesne Kavramı (devam ) Örnek3: Bir Buton nesnesinin niteliklerine ve davranışlarına örnek veriniz. Bir Buton nesnesi şunları içerir: Nitelik olarak; Formdaki konumu Rengi, Üzerindeki Yazısı Davranış olarak; Tıklandığında ekranın rengini değiştirmesi Sürükleyip bırakılabilmesi, Tıklanınca ses çıkarması 24
Nesneye Yönelik Programlama Bir programlama dilinin Nesneye Yönelik Programlama dili olması için şu özelliklere sahip olması gereklidir: 1. Sınıf (Class) 2. Nesneler (Object) 3. Kapsülleme ve Arayüz ( Encapsulation & Interface ) 4. Kalıtım (Inheritance) 5. Çok Biçimlilik (Polymorphism) 25
Sınıflar 26
Sınıf Kavramı Dünyayı anlayabilme kabiliyetimizin çoğu nesneleri ve olayları sınıflar halinde kategorilendirebilmemizden gelmektedir. Örneğin; Çocukken hayvan kavramını, hayvan kelimesini öğrenmeden çok öncesinde biliyordunuz. Hayvanlarla ilk karşılaşmanız aile köpeğinizle veya komşusunun kedisi ile veya bir çiftlikteki keçi ile olmuş olabilir. Konuşmayı öğrendikçe, tüm hayvanlar için aynı terimleri kullanıyorduk. 27
Sınıf Kavramı (devam ) Tecrübelendikçe, hayvanlar arasındaki farkları anlayabildik. Mesela bir köpek ile koyunun arasındaki farkı, sonrasında ise yavruları ile yetişkinleri arasındaki fark gibi... Tasitlar sınıfını anlamanız, Kara taşıtları ile Deniz veya Hava taşıtları arasındaki benzerlikleri görmenize yardımcı olur; aynı şekilde Kara Tasitlari sınıfını anlamanız Otomobil ile Kamyonet arasındaki benzerlikleri görmemize yardımcı olur. 28
Sınıf Kavramı (devam ) Tasitlar Kara Tasitlari Hava Tasitlari Deniz Tasitlari Otomobil Kamyonet 29
Sınıf Kavramını Anlamak C# ile program yazarken, iki farklı türde sınıf yaratabilirsiniz; 1. Main() metodunu ve main metodunda kullanılan diğer metotları da içeren sınıflardır. Bu sınıflar nesne oluşturma amacıyla yaratılmamışlardır. 2. Nesne oluşturma amacıyla yarattığımız sınıflar. 30
Sınıf Kavramını Anlamak (devam ) Nesneye Yönelik programlama yaklaşımı ile düşündüğünüzde, her şey bir nesne ve her nesne bir sınıfın somutlaşmış bir örneğidir. Cansız şeyleri nesneler olarak düşünebilirsiniz, masanız, bilgisayarınız ve eviniz, tüm bunlar sizin konuşmalarınızda nesne olarak geçerler. 31
Sınıf Kavramını Anlamak (devam ) Canlı cisimleri de nesne olarak düşünebilirsiniz, ev bitkiniz, balığınız ve sizin kardeşiniz birer nesnedir. Ayrıca olaylar da nesne dir. Örneğin; Hisse senedi alımlarınız, Bitmek üzere olan bir taksitiniz, Sizin adınıza düzenlenmiş bir parti vb. 32
Sınıf Kavramını Anlamak (devam ) Her nesne daha genel bir sınıfın somutlaşmış bir örneğidir. Örneğin; sizin masanız, tüm masaları içeren Masa sınıfının özel bir örneğidir. Sizin süs balığınız daha genel bir sınıf olan Balık sınıfının somutlaşmış bir örneğidir. Bir nesne, bulunduğu sınıfın somutlaşmış bir örneğidir. 33
Sınıf Kavramını Anlamak (devam ) Sınıf kavramı size nesneler hakkında bilgi sağladığı için kullanışlıdır. Nesneler özelliklerini sınıflardan alırlar. Örneğin: Bir partiye katıldığınızda, siz Parti nesnesi hakkında birçok şeyi (başlangıç saati olduğunu, davetlilerin sayısı olduğunu ve ikramların bulunduğunu) otomatik olarak biliyor olurdunuz. 34
Sınıf Kavramını Anlamak (devam ) Parti nesnesini anlayabilmenizin sebebi daha önceden Parti sınıfı ile ilgili bildiklerinizin olmuş olmasıdır. Tam olarak başlangıç saatini, davetlilerin sayısını veya ikramların neler olduğunu bilmeseniz bile her partinin bir başlangıç saati ve davetli sayısı olması gerektiğini bildiğiniz için bununda bu özelliklere sahip olması gerektiğini biliyorsunuz. Parti BaslangicSaati: (DateTime) DavetliSayisi: (int) 35
Sınıf Kavramını Anlamak (devam ) Farklı bir örnek vermek gerekirse; bir Taksit nesnesi düşünüldüğünde, taksit tutarı ve taksit sayısı özelliklerini barındırmaktadır. Taksit Tutar: (int) Sayisi: (int) Tüm nesneler belirli sınıfların somutlaşmış örnekleri olduklarından dolayı öngörülebilir özelliklere sahiptirler. 36
Sınıf Kavramını Anlamak (devam ) Bir sınıf her nesne için farklı olan veri bileşeni, yani üye değişkenler barındırır. Ayrıca nesnelerin özellikleri, sınıf içerisinde kullanılan diğer değişkenler ile karışmaması için field olarak adlandırılır. Nesnenin örnek değişkenlerinin içerikleri, o nesnenin durumunu belirler. 37
Sınıf Kavramını Anlamak (devam ) Örneğin; Bir Parti nesnesinin durumu Cuma, 20:00, Parti Gun: Cuma Saat: 20:00 Bir Taksit nesnesinin durumu 100tl, 5 ay olabilir. Taksit Tutar:100 Sayisi: 5 38
Sınıf Kavramını Anlamak (devam ) Nesneler kendileri ile ilişkilendirilmiş metotlar barındırabilirler ve aynı sınıftan türetilmiş her nesne bu metotları içerirler. Nesneler ile ilişkilendirilmiş metotlar üye metot olarak adlandırılırlar. Örneğin; İki ayrı parti dogumgunupartisi ve mezuniyetpartisi nesneleri davetgonder() metodunu barındırabilirler. Bu metot aynı yolla çalışır fakat nesnelere ait özel verileri kullanırlar. 39
Sınıf Kavramını Anlamak (devam ) C# ile programlarken, sıklıkla nesnelerin türetileceği sınıflar yaratabilir ya da diğer programcıların yarattığı sınıfları kullanabilirsiniz. (Örn.: Console, Button, Form sınıfları) Ya da sizin yarattığınız sınıfları başka programcılar kullanabilirler. Önceden yaratılmış bir sınıftan nesne türeten bir program ya da bir sınıfa class client denir. 40
Nesnelerin Türetildiği Sınıfları Yaratmak Bir sınıf yarattığımızda, ona bir isim atamalı ve barındıracağı veriyi ve metotları belirlemeliyiz. Örnek: Isci sınıfını yaratmaya karar verdiniz. Isci sınıfının üye değişkenlerinden birisi mutlaka kimliknumarasi ve üye metotlarından birisi ise hoş geldin mesajını gösterecek bir metot olmalıdır. 41
Nesnelerin Türetildiği Sınıfları Yaratmak (devam ) Sınıfları tanımlarken öncelikle bir sınıf başlığı/tanımı yaratılmalıdır. Sınıf başlığı üç parçadan oluşur: 1. İsteğe bağlı bir erişim belirleyici, 2. class anahtar kelimesi, 3. Sınıfın adı [erişim belirleyici] class [sınıfadı] Örneğin; public class Isci Sınıf adları nesnelerin tipini tanımladığı için genellikle tek bir addan oluşur. 42
Nesnelerin Türetildiği Sınıfları Yaratmak (devam ) Isci sınıfını tanımlarken kullanılan public anahtar sözcüğü sınıf erişim belirleyicisidir. Oluşturulan sınıfın amacına uygun olan erişim belirleyicileri kullanılır. 43
Erişim Belirleyicileri Sınıf Erişim Belirleyicisi Public Protected Internal Açıklama Sınıfa erişim sınırsızdır Sınıfa erişim bulunduğu sınıf ve bu sınıftan türetilen sınıflar ile sınırlıdır. Sınıfa erişim ait olduğu assembly ile sınırlıdır. Private Sınıfa erişim ait olduğu sınıf ile sınırlıdır. Assembly, çalıştırılabilir bir uygulama yaratmak için birlikte derlenen kod modüllerinden oluşan gruba denir. Bir C# programı derledikten sonra oluşan.exe dosyası assembly olarak adlandırılır. 44
Erişim Belirleyicileri (devam ) Namespace kullanarak bir sınıf tanımlanırsa, yaratılan sınıf public veya internal olabilir. Eğer bir sınıf yaratılırken erişim belirleyicisi tanımlanmazsa varsayılan olarak internal erişim belirleyicisi atanır. 45
Nesnelerin Türetildiği Sınıfları Yaratmak (devam ) Sınıf başlıkları tanımlanırken kıvırcık parantezler ( {} ) içerisinde sınıf gövdeleri tanımlanmalıdır. Örneğin; public class Isci { //üye değişkenleri ve metotları buraya yazılır } 46
Üye Değişkenlerini ve Üye Metotlarını Yaratmak Bir sınıf yaratıldığında, o sınıfın özellikleri ve metotları tanımlanır. Sınıfın üye değişkenlerini kıvırcık parantez içerisinde, diğer değişken tanımlamalarında kullanılan sözdizimiyle aynı şekilde yani bir tip ve ad şeklinde tanımlanır. 47
Üye Değişkenlerini ve Üye Metotlarını Yaratmak (devam ) Örneğin; Isci sınıfının içerisinde kimlik numarası değişkeni tanımlayabiliriz. Böylece Isci nesnesi yarattığımızda her bir nesne kendi kimlikno değişkenini barındırır. Fakat programcılar sıklıkla sınıfın her bir fieldı için erişim belirleyicisi kullanır ve kimlikno değişkenini private int kimlikno; şeklinde tanımlarlar. 48
Örnek1: Isci sınıfı yaratılması adi, soyadi, kimlikno üye değişkenine sahip bir Isci sınıfı yaratınız. 49
Örnek1: Isci sınıfı yaratılması (devam ) Visual Studio ile sınıf yaratmak için Solution Explorer penceresinden projemize yeni bir class eklemek için; Proje adına sağ tıklayıp Add Class a tıklıyoruz. 50
Örnek1: Isci sınıfı yaratılması (devam ) Açılan pencereden yaratılacak sınıfın adını girip Add butonuna tıklıyoruz. 51
Örnek1: Isci sınıfı yaratılması (devam ) Sınıfın tanımlanacağı isim alanını «hfttf.yzm2105» şeklinde tanımladıktan sonra sınıfa üye değişkenini ekliyoruz. 52
İsim Alanları İsim alanları (ing.: Namespace), birbiri ile ilişkili nesneleri organize etmek için kullanılır. Bir isim alanı içerisinde; Farklı bir isim alanı, Sınıf, Arayüz, Struct, Enum, Delegate tipleri tanımlanabilir. 53
İsim Alanları (devam ) C# kaynak dosyası için bir isim alanı tanımlamadığınızda, derleyici varsayılan olarak bulunduğu projenin adını taşıyan bir isim alanı tanımlar ve kullanır. İsim alanlarının tanımlanmasında erişim belirleyicileri kullanılmaz. 54
İsim Alanları (devam ) Bir isim alanında tanımlanmış sınıflar, yapılar gibi tiplere direk erişebilmemiz için bu isim alanını using anahtar sözcüğü ile erişiriz. 55
İsim Alanları (devam ) Örneğin: System isim alanında tanımlı olan Windows.Forms isim alanını kullanılacağı belirtilmezse, MessageBox.Show("") komutunu aşağıdaki gibi. (nokta) operatörünü kullanarak erişmemiz gerekirdi; System.Windows.Forms.MessageBox.Show(""); 56
Örnek1: Isci sınıfı yaratılması (devam ) Tanımladığımız Isci sınıfını kullanmak için Isci sınıfının bulunduğu isim alanını programımızda belirtmemiz gereklidir. 57
Örnek2: Kutu sınıfı yaratılması Üye değişkenleri genislik, derinlik ve yükseklik olan Kutu sınıfı yaratınız. 58
Örnek3: KimlikBilgileri sınıfı yaratılması Üye değişkenleri (ulong) kimlikno, (string) soyad, ad, babaadi, anneadi, dogumyeri ve (DateTime) dogumtarihi olan KimlikBilgileri sınıfı yaratınız. 59
Örnek4: Fatura sınıfının yaratılması Üye değişkenleri (int) faturano, (ulong) firmavergino, miktar, birimfiyat, tutar, (string) firmaadi, aciklama ve (DateTime) faturakesimtarihi olan Fatura sınıfı yaratınız. 60
Örnek5: Ogrenci sınıfı yaratılması Üye değişkenleri (ulong) kimlikno, ogrno (string) soyad, ad, fakulteadi, bolum, ve (programturu) ogrprgramturu olan Ogrenci sınıfı yaratınız. programturu enum sabitini lisans = 0, yukseklisans = 1 ve doktora = 2 olarak kullanınız. 61
Örnek6: Surucu sınıfının yaratılması Üye değişkenleri (ulong) kimlikno, suruculisansno, (string) soyad, ad, verildigiil, verildigiilce, (DateTime) belgetarihi ve (surucubelgesinifi) srcbelgesinifi olan Surucu sınıfı yaratınız. surucubelgesinifi enum sabitini A2=0, B,C,D,E,F,G ve H olarak kullanınız. 62
Örnek7: Araba sınıfının yaratılması Üye değişkenleri (string) marka, model, renk (int) uretimtarihi, silindirhacmi, motorgucu, (yakitturu) arbyakitturu ve (vitestipi) arbvitestipi olan Surucu sınıfı yaratınız. vitestipi enum sabitini duzvites = 0 ve otomatikvites=1 olarak kullanınız. yakitturu enum sabitini benzin = 0 ve mazot = 1 olarak kullanınız. 63
Üye Değişkenlerini ve Üye Metotlarını Yaratmak (devam ) Sınıfların içerisinde private field ların kullanımı, nesneye yönelik dillerin bir özelliği olan information hiding örneğidir. Information hiding in bir diğer faydası ise verinin doğrulanmasına olanak sağlamasıdır. Değişkenin değerini ayarlayan bir metot özel bir aralıkta bulunup bulunmadığını kontrolünü sağlayabilir. (Örn.: Bir işçinin maaşı asgari ücretinin altında olmaması gibi) 64
Üye Değişkenlerini ve Üye Metotlarını Yaratmak (devam ) Gerçek hayatta information hiding yöntemiyle sıkça karşılaşırız. Örneğin arabanın deposuna ne kadar yakıt kaldığını öğrenmek için depoya baktığımızda göremeyiz. Bunun yerine gerekli bilgiyi bize aracın gösterge panelindeki yakıt göstergesi vermektedir. 65
Üye Değişkenlerini ve Üye Metotlarını Yaratmak (devam ) Benzer şekilde Nesneye Yönelik Programlama yaklaşımında veri field ları sıkça private olarak kullanılır fakat içerdikleri değerlere public metotlar aracılıyla erişilir. Private field ların değerleri kendi sınıfındaki metotlarla tanımlanabilir ve değiştirilebilir olmalıdır. Diğer sınıfların metotlarının erişimine kapalı olmalıdır. 66
Üye Değişkenlerini ve Üye Metotlarını Yaratmak (devam ) Çoğu üye metodu private field lara karşın public olarak kullanılır. Private veri ve public metot ikilisi dışarıdan sınıfın verisine erişilebilir olmasını sağlar. Sadece sınıfların private olmayan metotları private olan verilere erişimini sağlar. 67
Örnek8: Isci Sınıfına Üye Metot Tanımlanması Üye değişkeni olarak kimlikno değişkenini bulunduran ve özel bir karşılama mesajı metodu olan KarsilamaMetodu() bulunduran Isci sınıfı yaratınız. 68
Üye Değişkenlerini ve Üye Metotlarını Yaratmak (devam ) Önceki örnekteki KarsilamaMesaji() metodu static belirleyicisi içermemektedir. Bir sınıfın static metotlarını, o sınıftan nesne yaratmadan çağırabiliriz. Üye metotları o sınıftan türetilmiş bir nesne olmadan kullanılamazlar. 69
Üye Değişkenlerini ve Üye Metotlarını Yaratmak (devam ) Isci sınıfı Main() metodu içermediği için çalıştırılmayacaktır. Isci sınıfından yaratılan nesnelerin hangi özelliklere sahip olacağı ve onunla yapılabileceklerini tanımlar. Bir sınıf diğer sınıflardan yaratılmış bir nesne üye barındırabilir. Örneğin, ad, soyad, adres vb. gibi üye değişkenlerine sahip KimlikBilgileri sınıfından yaratılan bir nesne Isci sınıfının field ı olabilir. 70
Örnek9: Isci Sınıfına Üye Nesne Tanımlanması Üye değişkeni olarak (int) kimlikno, (double) Maas ve (KimlikBilgisi) iscikimlikbilgisi nesnesini barındıran Isci sınıfı yaratınız. 71
Örnek9: Isci Sınıfına Üye Nesne Tanımlanması (devam ) Isci sınıfına KimlikBilgileri sınıfından iscikimlikbilgileri adlı nesne tanımladınız. Bir nesnenin içerisinde başka bir nesne kullanımına composition denir. Bu yaratılan ilişki has an relationship olarak da tanımlanır. 72
Değerlendirme Soruları 73
Değerlendirme Soruları 1) Bir nesne, sınıfın... bir örneğidir. a) Üye b) Katılaşmış c) Somutlaşmış d) Soyut CEVAP : C Şıkkı 74
Değerlendirme Soruları 2) Bir sınıf başlığı içerisinde aşağıdakilerden hangisi bulunmaz? a) İsteğe Bağlı Erişim Belirleyicisi b) Class Anahtar Kelimesi c) Sınıfın Adı d) Sınıf Üyelerinin Başlangıç Değerleri Cevap: D şıkkı. 75
Değerlendirme Soruları 3) Sınıf içerisindeki çoğu üye değişkeni erişim belirleyicisi ile tanımlanır. a) public b) protected c) new d) private Cevap: D şıkkı. 76
Değerlendirme Soruları 4) Sınıf içerisindeki çoğu üye metodu erişim belirleyicisi ile tanımlanır. a) public b) protected c) new d) private Cevap: A şıkkı. 77
Yararlanılan Kaynaklar Sefer Algan, HER YÖNÜYLE C#, Pusula Yayıncılık, İstanbul, 2003 Milli Eğitim Bakanlığı, Nesne Tabanlı Programlama, 2012 Joyce Farrel, An Introduction to Object- Oriented Programming, Cengage Learning, 2011 http://www.algoritmaveprogramlama.com 78
İYİ ÇALIŞMALAR Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr 79