2006 Pearson Education, Inc. All rights reserved. Görsel C# ile Windows Programlama Güz 2009 (7. Hafta)
2006 Pearson Education, Inc. All rights reserved. 2 Kompozisyon (Composition) Bir sınıf, üye değişkeni olarak başka sınıfların nesnelerini kullanıyorsa bu durum bir kompozisyondur. Kompozisyonlar çoğu zaman has-a-relationship olarak da nitelendirilirler.
2006 Pearson Education, Inc. All rights reserved. 3 Date.cs (1 of 5)
2006 Pearson Education, Inc. All rights reserved. 4 Date.cs (2 of 5)
2006 Pearson Education, Inc. All rights reserved. 5 Date.cs (3 of 5) Validates month value
2006 Pearson Education, Inc. All rights reserved. 6 Date.cs (4 of 5) Validates day value
2006 Pearson Education, Inc. All rights reserved. 7 Date.cs (5 of 5)
2006 Pearson Education, Inc. All rights reserved. 8 Employee.cs Employee contains references to two Date objects Implicit calls to hireDate and birthDate ’s ToString methods
2006 Pearson Education, Inc. All rights reserved. 9 EmployeeTest.cs Create an Employee object Display the Employee object
2006 Pearson Education, Inc. All rights reserved. 10 Garbage Collection ve Yıkıcılar (Destructors) Garbage Collection otomatik olarak belleği kontrol eden ve artık kullanımda olmayan nesnelerin işgal ettiği bellek alanlarının yeniden kullanılabilmesini sağlayan bir mekanizmadır. Nesneler bir daha ihtiyaç duyulmadıklarında yok edilirler. Bu işlemi yıkıcılar yani destructor lar dediğimiz yapılar garbage collector tarafından çağrılarak gerçekleştirirler. Yıkıcılar da yapıcılar (constructor) gibi sınıfın adıyla aynı olurlar. Yapıcılardan tek farkları sınıf adının önüne getirilen ~ işaretidir.
2006 Pearson Education, Inc. All rights reserved. 11 Hatırlatma Bir sınıf kullandığı herhangi bir sistem kaynağını (diskten okuyup islem yaptığı bir dosya gibi) işi bittiği zaman serbest bırakmalıdır. Birçok FCL sınıfı bu amaçla Close veya Dispose metodlarını kullanır.
2006 Pearson Education, Inc. All rights reserved. 12 static Üye Değişkenler static üye değişkenler bir sınıfın bütün nesnelerinin ortak kullandığı değişkenlerdir. static olmayan üye değişkenler hatırlanacağı üzere herbir nesne için farklı değerlere sahip olabiliyorlardı. static üye değişkenlere deklare edildiklerinde muhakkak bir ilk değer ataması yapılmalıdır. Aksi takdirde derleyicinin kendisi bir ilk değer ataması yapar. (Örneğin static bir int değişkenine sıfır değerini atar derleyici.)
2006 Pearson Education, Inc. All rights reserved. 13 Employee.cs (1 of 3) Declare a static field Increment static field
2006 Pearson Education, Inc. All rights reserved. 14 Employee.cs (2 of 3) Declare a destructor
2006 Pearson Education, Inc. All rights reserved. 15 Employee.cs (3 of 3) Declare static property Count to get static field count
2006 Pearson Education, Inc. All rights reserved. 16 EmployeeTest.cs (1 of 3) Create new Employee objects Call static property Count using class name Employee
2006 Pearson Education, Inc. All rights reserved. 17 EmployeeTest.cs (2 of 3) Remove references to objects, CLR will mark them for garbage collection Call static method Collect of class GC to indicate that garbage collection should be attempted Call static property Count using class name Employee
2006 Pearson Education, Inc. All rights reserved. 18 EmployeeTest.cs (3 of 3)
2006 Pearson Education, Inc. All rights reserved. 19 readonly Üye Değişkenler readonly üye değişkenlerin değerleri sonradan değiştirilemez. Bu değişkenlere ya deklare edildiklerinde bir ilk değer ataması yapılır ya da atama işlemi bir constructor içerisinde gerçekleştirilir.
2006 Pearson Education, Inc. All rights reserved. 20 Increment.cs Declare readonly instance variable Initialize readonly instance variable inside a constructor
2006 Pearson Education, Inc. All rights reserved. 21 IncrementTest.cs Create an Increment object Call method AddIncrementToTotal
2006 Pearson Education, Inc. All rights reserved. 22 Hatırlatma.... readonly tanımlanan üye değişkenleri sınıfın bütün nesnelerinde farklı kopya değerleri ile temsil edilirler. Eğer bütün nesneler için aynı sabit değere sahip bir üye değişken isteniyorsa bu durumda const kullanılmalıdır. const sanki dolaylı olarak tanımlanmış sabit bir statik değişken gibi değerlendirilir.
2006 Pearson Education, Inc. All rights reserved. 23 Class View ve Object Browser Two features of Visual Studio to facilitate object-oriented applications – Class View Window (Fig. 9.21) Display the fields and methods for all classes in project When a class is selected, the class’s members are shown on the lower half of the window – Object Browser (Fig. 9.22) Lists all classes in the C# library (left frame) - Learn the functionality provided by specific classes Methods provided on the upper-right frame Description of members appears in the lower-right frame
2006 Pearson Education, Inc. All rights reserved. 24 Fig | Class View of class Time1 (Fig. 9.1) and class TimeTest (Fig. 9.2).
2006 Pearson Education, Inc. All rights reserved. 25 Fig | Object Browser for class Math.
2006 Pearson Education, Inc. All rights reserved. 26 Kalıtım (inheritance) bir yazılımın tekrar tekrar kullanılabilmesine ve mevcut sınıflardan (base class) yeni sınıflar (derived class) oluşturulabilmesine imkan verir. Bu sayede yeni oluşan sınıf eski sınıfın üye değişkenleri ve metodlarını kullanabilmenin yanında kendisinin belirleyeceği yeni veya ek özellikleri de programına eklemiş olur. Kalıtım (Inheritance)
2006 Pearson Education, Inc. All rights reserved. 27 Kalıtım Örnekleri
2006 Pearson Education, Inc. All rights reserved. 28 Kalıtım Hiyerarşisi
2006 Pearson Education, Inc. All rights reserved. 29 protected erişim public ile private arasında bir yerde bulunur. protected üye değişkenleri hem base class ve hem de derived class tarafından erişilebilir. derived class ın nesneleri base class ın private olarak tanımlanmış üye değişkenlerine erişemezler. Derived class ın nesneleri bu tür üye değişkenlere sadece public tanımlanmış base class metodları ile ulaşabilirler. protected Erişim
2006 Pearson Education, Inc. All rights reserved. 30 CommissionEmployee First name, last name, SSN, commission rate, gross sale amount BasePlusCommissionEmployee First name, last name, SSN, commission rate, gross sale amount Base salary base Class-derived Class İlişkisi
2006 Pearson Education, Inc. All rights reserved. 31 C#’ta bütün sınıflar System.Object sınıfından türetilmiştir. Dolayısıyla bütün sınıflar System.Object sınıfının tüm metodlarını kullanabilirler. Bir sınıfın dolaylı olarak belirtilmese bile ima yoluyla System.Object sınıfından türetildiği bilinmelidir. Bir base class ın bir metodunun işlevi aynı metod adıyla derived class içerisinde değiştirilmek isteniyorsa metod override anahtar kelimesiyle tanımlanmalıdır. Derived class içerisinde override edilmesi muhtemel metodlar base class içerisinde virtual anahtar kelimesiyle tanımlanmalıdırlar. Yapıcılar kalıtım kapsamına girmezler. Derived class ların yapıcıları ilk iş olarak base class ın yapıcısını çağırırlar. class CommissionEmployee
2006 Pearson Education, Inc. All rights reserved. 32 CommissionEmployee.cs (1 of 4) Class CommissionEmployee extends class object Implicit call to object constructor Initialize instance variables Declare private instance variables Invoke properties GrossSales and CommissionRate to validate data
2006 Pearson Education, Inc. All rights reserved. 33 CommissionEmployee.cs (2 of 4)
2006 Pearson Education, Inc. All rights reserved. 34 CommissionEmployee.cs (3 of 4)
2006 Pearson Education, Inc. All rights reserved. 35 CommissionEmployee.cs (4 of 4) Calculate earningsOverride method ToString of class object
2006 Pearson Education, Inc. All rights reserved. 36 CommissionEmployee Test.cs (1 of 2) Instantiate CommissionEmployee object Use CommissionEmployee ’s properties to retrieve and change the object’s instance variable values
2006 Pearson Education, Inc. All rights reserved. 37 CommissionEmployee Test.cs (2 of 2) Implicitly call the object’s ToString method
2006 Pearson Education, Inc. All rights reserved. 38 CommissionEmployee sınıfını tanımlarken kullanılan programa çok benzer. Farklı olarak sadece baseSalary adında private bir üye değişkeni ve BaseSalary adında bir üye metodu eklenmiştir. class BasePlusCommissionEmployee
2006 Pearson Education, Inc. All rights reserved. 39 BasePlusCommission Employee.cs (1 of 5) Add instance variable baseSalary Use property BaseSalary to validate data
2006 Pearson Education, Inc. All rights reserved. 40 BasePlusCommission Employee.cs (2 of 5)
2006 Pearson Education, Inc. All rights reserved. 41 BasePlusCommission Employee.cs (3 of 5)
2006 Pearson Education, Inc. All rights reserved. 42 BasePlusCommission Employee.cs (4 of 5) Validates data and sets instance variable baseSalary Update method Earnings to calculate the earnings of a base-salaried commission employee
2006 Pearson Education, Inc. All rights reserved. 43 BasePlusCommission Employee.cs (5 of 5) Update method ToString to display base salary
2006 Pearson Education, Inc. All rights reserved. 44 BasePlusCommission EmployeeTest.cs (1 of 2) Instantiate BasePlusCommissionEmployee objectUse BasePluCommissionEmployee ’s properties to retrieve and change the object’s instance variable values
2006 Pearson Education, Inc. All rights reserved. 45 BasePlusCommission EmployeeTest.cs (2 of 2) Implicitly call the object’s ToString method
2006 Pearson Education, Inc. All rights reserved. 46 Hatırlatma Bir sınıftan kod parçası kopyalayıp başka bir sınıfı oluşturmak muhtemel hataları da beraberinde kopyalamak demektir. Böyle bir yaklaşım yerine (kopyala ve yapıştır) kalıtım kullanmak daha doğrudur.
2006 Pearson Education, Inc. All rights reserved. 47 BasePlusCommission Employee2.cs (1 of 2) Class BasePluCommissionEmployee2 is a derived class of CommissionEmployee Invoke the base class constructor using the base class constructor call syntax
2006 Pearson Education, Inc. All rights reserved. 48 BasePlusCommission Employee2.cs (2 of 2) Compiler generates errors because base class’s instance variable are private
2006 Pearson Education, Inc. All rights reserved. 49 Commission Employee2.cs (1 of 4) Declare protected instance variables
2006 Pearson Education, Inc. All rights reserved. 50 Commission Employee2.cs (2 of 4)
2006 Pearson Education, Inc. All rights reserved. 51 Commission Employee2.cs (3 of 4)
2006 Pearson Education, Inc. All rights reserved. 52 Commission Employee2.cs (4 of 4) Mark Earnings as virtual so the derived class can override the method
2006 Pearson Education, Inc. All rights reserved. 53 BasePlusCommission Employee3.cs (1 of 2) Must call base class’s constructor
2006 Pearson Education, Inc. All rights reserved. 54 BasePlusCommission Employee3.cs (2 of 2) Overrides base class’s Earnings method Directly access base class’s protected instance variables
2006 Pearson Education, Inc. All rights reserved. 55 BasePlusCommission EmployeeTest3.cs (1 of 2) Instantiate BasePlusCommissionEmployee3 object Use BasePluCommissionEmployee3 ’s properties to retrieve and change the object’s instance variable values
2006 Pearson Education, Inc. All rights reserved. 56 BasePlusCommission EmployeeTest3.cs (2 of 2) Implicitly call the object’s ToString method
2006 Pearson Education, Inc. All rights reserved. 57 Equals Finalize GetHashCode GetType MemberwiseClone ReferenceEquals ToString System.Object Sınıfının Metodları
2006 Pearson Education, Inc. All rights reserved. 58
2006 Pearson Education, Inc. All rights reserved. 59