sınav cevap kağıdı

advertisement
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
Download