SINAV CEVAP KÂĞIDI Öğrenci ve Gözetmen tarafından imzalanmayan sınav kâğıdı geçersiz sayılır. Adı ve Soyadı T.C. NAMIK KEMAL ÜNİVERSİTESİ Çorlu Mühendislik Fakültesi http://berkemrealtan.com/ No ve İmza BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ (İkinci Öğretim) Dersin Adı : Nesneye Yönelik Programlama Soru No Kod No NOT : BMB201 Tarih : 02/02/2015 1 2 3 4 Toplam Gözetmenin İmzası: Soru 1. Aşağıdaki kodda DateTime nesnesine ait sınıfın bir kısmı verilmiştir. “Nesneye Yönelik Temel İlkelerini düşünüp” aşağıdaki kodda hangi satır veya satırlarda hangi ilkeler kullanılmıştır? (25) 01 public class ArrayList : IList, ICollection, IEnumerable, ICloneable { 02 public ArrayList(); 03 public ArrayList(ICollection c); 04 public ArrayList(int capacity); 05 06 07 public virtual int Capacity { get; set; } public virtual int Count { get; } public virtual bool IsFixedSize { get; } 08 09 10 public static ArrayList Adapter(IList list); public static ArrayList FixedSize(ArrayList list); public static IList FixedSize(IList list); } 01. Satırda Miras Alma (Inheritance) kullanılmıştır Nesneye yönelik programlamada, bir nesne, genellikle bir nesne sınıfına ait bir örnektir (instance). Örneğin, Albert Einstein, insan sınıfının bir örneğidir. Bir nesne sınıfından alt sınıflar (subclasses) oluşturulabiliyorsa, türetme özelliği (derivation) var demektir. Örneğin insan sınıfı, canlı sınıfının bir alt sınıfıdır. Alt sınıfın nesneleri, türetildikleri temel sınıfa ait özellikleri alıyorsa, burada miras alma (inheritance) özelliği vardır denir. Bu anlamda, miras alma özellikli bir nesne yönelimli programlama dilinde, bir nesne sınıfından türetilen alt nesne sınıfına ait nesneler, üst sınıfın özelliklerini (properties) ve metodlarını (methods) aynen alırlar. Burda 02. 03. ve 04 Satırlarda Çok Biçimlilik (Polymorphism) kullanılmıştır Farklı nesnelerin, aynı mesaja (olaya ya da uyarıma) farklı şekillerde cevap verebilme yeteneğidir. Her nesne sınıfı, kendi metotlarını paketlediği için ve bu metotlar programın kalan kısmı için gizli olduğundan, farklı sınıflar aynı isimde bazı metotlara sahip olabilirler. Burda çok biçimlilik birden çok constructor ile yapılmış 05. 06. ve 07. Satırlarda Sarmalama / Paketleme (Encapsulation) kullanılmıştır Paketlemenin anlamı; sınıfı oluşturan metot ve özelliklerin gerçekleştirme biçiminin, bu sınıfı kullanacak olan kullanıcılardan gizlenmiş olmasıdır. Burda sarmalamayı get set tanımlayarak yapmış. 08. Satırda Sarmalama / Paketleme (Encapsulation) kullanılmıştır 09. ve 10. Satırlarda Çok Biçimlilik (Polymorphism) kullanılmıştır Not : Tüm öğrenciler sınav görevlilerinin uyarılarına uymak zorundadırlar. Sınav Süresi 1 saat 15 dakikadır. Başarılar… 1 Soru 2.1. Aşağıda Daire sınıfı get ve set kullanılmadan tasarlanabilirdi. (25) Tasarlanmış halini yan tarafa yazın. (10) Yapıcı (Constructor) kullanarak “_yaricap” değerini alın. Yapıcının Main’de ne gibi değişikliklere sebebiyet vereceğini açıklayın. (5) a) class Daire { class Daire private double _yaricap; { private double _yaricap; public double Yaricap { public double getYaricap(){ get { return _yaricap; } return _yaricap; } set { _yaricap = value; } public void setYaricap(double value){ } _yaricap = value; } public double Cap { public double getCap(){ get { return _yaricap * 2; } return _yaricap * 2; } } public double Cevresi { public double getCevresi(){ get { return Cap * 3.14159;} return getCap() * 3.14159; } } public virtual double Alani { public double virtual getAlani(){ get {return Yaricap*Yaricap *3.14159;} return _yaricap*_yaricap *3.14159; } } } } b) Constructoru Daire sınıfının içine : public Daire(double yaricap){ _yaricap = yaricap; } Kodunu yazarak tanımlarız. Constructor yazıldığı zaman mainde Daire sınıfı oluşturulurken yaricap özelliği girilmelidir örnek olarak: Daire d = new Daire(5.0) Soru 2.2. Daire özelliklerini kullanan (Soru 1’deki) bir programcı aşağıdaki kodu yazmıştır. Nesneye yönelik yaklaşıma hakim olmadığı için kodda çeşitli hatalar yapmıştır. Programcıya kodu düzeltmesi için önerilerde bulunun. (10) Class Kure:Daire ile Daire sınıfından miras almalı. class Kure { Hacim fonksiyonu abstract olarak yazılmış fakat public override double Alani abstract olararak yazılması için class da abstract olur { ve içi boş bırakılarak miras alan sınıflar tarafından get{return 4*Yaricap*Yaricap*3.14159;} doldurulması beklenir bizim classımızda böyle bir } durum olmadığı için abstract yazılmaması gerekir. public abstract double Hacim { public double Hacim get{return4* 3.14159*Yaricap*Yaricap* Yaricap/3;} { } get{return4* 3.14159*Yaricap*Yaricap* Yaricap/3;} } } 2 SINAV CEVAP KÂĞIDI Öğrenci ve Gözetmen tarafından imzalanmayan sınav kâğıdı geçersiz sayılır. Adı ve Soyadı T.C. NAMIK KEMAL ÜNİVERSİTESİ Çorlu Mühendislik Fakültesi http://berkemrealtan.com/ No ve İmza BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ (İkinci Öğretim) Dersin Adı : Nesneye Yönelik Programlama Soru No Kod No NOT : BMB201 Tarih : 02/02/2015 1 2 3 4 Toplam Gözetmenin İmzası: Soru 3. Ekrana cisim oluşturmak için bir sınıf yazan programcı kodu derlediğinde sınıf içindeki koordinatların negatifini alma ve toplama işlemlerini çalışmadığını fark etmiştir. Bu işlemlerin çalışabilmesi için sınıfa hangi metotla hangi satırları eklemesi gerektiğini bulun. (5+20) Sınıflarda +,-,*,/,<,> v.b. Operatorler çalışmaz çünkü class Cisim sınıflar değişken değildir ve operator tanımları { bulunmaz bunun için sınıflarda operator overloading private int x; yapılarak operatorlerin çalışması sağlanır. private int y; public Cisim(){ Operator overloading için Cisim sınıfının içine: x = 0; y = 0; } public static Cisim operator - ( Cisim c1) { public Cisim(int _x, int _y){ return new Cisim(c1.x*(-1), c1.y * (-1)); x = _x; } y = _y; } public static Cisim operator + ( Cisim c1, Cisim c2) { public void Goster(){ return new Cisim((c1.x + c2.x), (c1.y + c2.y)); //Ekrana resim çizen bir yordam } } } fonsiyonları yazıldığı zaman operatorler overloading edilmiş ve çalışabilir halde olacaktır. class Program { static void Main(string[] args) { Cisim c1 = new Cisim(10, 20); c1.Goster(); Cisim c2 = new Cisim(); c2.Goster(); c2 = -c1; //negatifini alma c2.Goster(); // göster -10 & -20 Cisim c3 = new Cisim(15, 5); //Öteleme c4 = c2 + c3; c4.Goster(); } } Not : Tüm öğrenciler sınav görevlilerinin uyarılarına uymak zorundadırlar. Sınav Süresi 1 saat 15 dakikadır. Başarılar… 3 Soru 4. (25) A ve B string özellikleri taşıyan islem adında bir sınıf olsun. Bu özellikler hem görüntülenebilsin hem de değiştirilebilsin. Fakat değiştirilirken sayi kontrolü ve negatif kontrolü yapılsın. Eğer sayı değilse ise “-1”, sayı negatif ise “-2” string değeri alsın. A ve B özelliklerinden gelen stringleri alıp sayıları toplayan bir fonksiyon olsun. Fakat, bu fonksiyon gelen sayı değilse veya negatif ise -1 döndürsün. Sayı çevirme fonksiyonu Convert.toInt32(….) public class islem { private int sayiA; private int sayiB; private string A; public string a { get{ return A; } set{ try { sayiA = Convert.toInt32(value); if(sayiA < 0) { A = “-2”; } else { A = value; } } catch { A = “-1”; } } } private string B; public string b { get{ return B; } set{ try { sayiB = Convert.toInt32(value); if(sayiB < 0) { B = “-2”; } else { B = value; } } catch { B = “-1”; } } } public int topla(){ try { sayiA = Convert.toInt32(A); sayiB = Convert.toInt32(B); if(sayiA < 0 || sayiB < 0) { return -1; } else { return sayiA + sayiB; } } catch { return -1; } } } 4 SINAV CEVAP KÂĞIDI Öğrenci ve Gözetmen tarafından imzalanmayan sınav kâğıdı geçersiz sayılır. Adı ve Soyadı T.C. NAMIK KEMAL ÜNİVERSİTESİ Çorlu Mühendislik Fakültesi http://berkemrealtan.com/ No ve İmza BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ (İkinci Öğretim) Dersin Adı : Nesneye Yönelik Programlama Soru No Kod No NOT : BMB201 Tarih : 02/02/2015 1 2 3 4 Toplam Gözetmenin İmzası: Not : Tüm öğrenciler sınav görevlilerinin uyarılarına uymak zorundadırlar. Sınav Süresi 1 saat 15 dakikadır. Başarılar… 5