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
: BM 201
Tarih : 07/01/2013
1
2
3
4
5
6
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. Soru 1. Aşağıda Daire sınıfı get ve set kullanılmadan tasarlanabilirdi.
 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. (10)
class Daire
a)
{
private double _yaricap;
class Daire
{
private double _yaricap;
public double Yaricap
{
get { return _yaricap; }
public double getYaricap(){
return _yaricap;
}
public void setYaricap(double value){
_yaricap = value;
}
set { _yaricap = value; }
}
public double Cap
{
get { return _yaricap * 2; }
}
public double Cevresi
{
get { return Cap * 3.14159;}
}
public virtual double Alani
{
get {return Yaricap*Yaricap *3.14159;}
}
}
b)
public double getCap(){
return _yaricap * 2;
}
public double getCevresi(){
return getCap() * 3.14159;
}
public double virtual getAlani(){
return _yaricap*_yaricap *3.14159;
}
}
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. (15)
class Kure
{
public override double Alani
{
get{return 4*Yaricap*Yaricap*3.14159;}
}
public abstract double Hacim
{
get{return4* 3.14159*Yaricap*Yaricap*
Yaricap/3;}
}
}
Class Kure:Daire ile Daire sınıfından miras almalı.
Hacim fonksiyonu abstract olarak yazılmış fakat
abstract olararak yazılması için class da abstract olur
ve içi boş bırakılarak miras alan sınıflar tarafından
doldurulması beklenir bizim classımızda böyle bir
durum olmadığı için abstract yazılmaması gerekir.
public double Hacim
{
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
: BM 201
Tarih : 07/01/2013
1
2
3
4
5
6
Toplam
Gözetmenin İmzası:
Soru 3. Karmaşık sayılar için bir sınıf yazan programcı kodu derlediğinde sınıf içindeki sayıların negatifini alma,
toplama ve çarpma 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
class KarmasikSayi
çünkü sınıflar değişken değildir ve operator
{
tanımları bulunmaz bunun için sınıflarda operator
private int x;
overloading yapılarak operatorlerin çalışması
private int y;
sağlanır.
public KarmasikSayi(){}
public KarmasikSayi(int i, int j){
Operator overloading için KarmasikSayi sınıfının
x = i;
içine:
y = j;
}
public static KarmasikSayi operator - (
public void Goster(){
KarmasikSayi c1) {
Console.WriteLine("{0} {1}", x, y);
return new KarmasikSayi(c1.x*(-1),
}
c1.y * (-1));
}
}
class Program
{
static void Main(string[] args)
{
KarmasikSayi c1 = new KarmasikSayi(10, 20);
c1.Goster();
KarmasikSayi c2 = new KarmasikSayi();
c2.Goster();
c2 = -c1; //negatifini alma
c2.Goster(); // göster -10 & -20
KarmasikSayi c3 = new KarmasikSayi(15, 5);
KarmasikSayi c4 = new KarmasikSayi(5, 3);
public static KarmasikSayi operator + (
KarmasikSayi c1, KarmasikSayi c2) {
return new KarmasikSayi((c1.x +
c2.x), (c1.y + c2.y));
}
public static KarmasikSayi operator * (
KarmasikSayi c1, KarmasikSayi c2) {
return new KarmasikSayi((c1.x *
c2.x), (c1.y * c2.y));
}
fonsiyonları yazıldığı zaman operatorler
overloading edilmiş ve çalışabilir halde olacaktır.
c4 = (c2 + c3) * c4; //toplama çarpma
c4.Goster();
Console.ReadLine();
}
}
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. (30)
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 int topla(){
public class islem {
try {
private int sayiA;
sayiA = Convert.toInt32(A);
private int sayiB;
sayiB = Convert.toInt32(B);
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”;
}
}
}
if(sayiA < 0 || sayiB < 0) {
return -1;
}
else {
return sayiA + sayiB;
}
}
catch {
return -1;
}
}
}
Sınav 110 puanlıktır. 100 geçen öğrenciler 100 puan alacaktırlar.
4
Download