590 likes | 784 Views
Görsel C # ile Windows Programlama Güz 200 9 ( 7 . Hafta). Kompozisyon (Composition). B ir 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. Date.cs (1 of 5).
E N D
Görsel C# ile Windows Programlama Güz 2009 (7. Hafta)
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.
Date.cs (1 of 5)
Date.cs (2 of 5)
Date.cs (3 of 5) Validates month value
Date.cs (4 of 5) Validates day value
Date.cs (5 of 5)
Employee contains references to two Date objects Employee.cs Implicit calls to hireDate and birthDate’s ToString methods
EmployeeTest.cs Create an Employee object Display the Employee object
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.
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 CloseveyaDisposemetodlarını kullanır.
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.)
Declare a static field Employee.cs (1 of 3) Increment static field
Declare a destructor Employee.cs (2 of 3)
Employee.cs (3 of 3) Declare static property Count to get static field count
EmployeeTest.cs (1 of 3) Create new Employee objects Call static property Count using class name Employee
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
EmployeeTest.cs (3 of 3)
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.
Declare readonly instance variable Increment.cs Initialize readonly instance variable inside a constructor
IncrementTest.cs Create an Increment object Call method AddIncrementToTotal
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 constkullanılmalıdır. constsanki dolaylı olarak tanımlanmış sabit bir statik değişken gibi değerlendirilir.
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
Fig. 9.21 | Class View of class Time1 (Fig. 9.1) and class TimeTest (Fig. 9.2).
Kalıtım (Inheritance) • 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.
protected Erişim • 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.
base Class-derived Class İlişkisi • CommissionEmployee • First name, last name, SSN, commission rate, gross sale amount • BasePlusCommissionEmployee • First name, last name, SSN, commission rate, gross sale amount • Base salary
class CommissionEmployee • 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 extends class object Declare private instance variables CommissionEmployee.cs (1 of 4) Implicit call to object constructor Initialize instance variables Invoke properties GrossSales and CommissionRate to validate data
CommissionEmployee.cs (2 of 4)
CommissionEmployee.cs (3 of 4)
Override method ToString of class object Calculate earnings CommissionEmployee.cs (4 of 4)
Instantiate CommissionEmployee object CommissionEmployeeTest.cs (1 of 2) Use CommissionEmployee’s properties to retrieve and change the object’s instance variable values
CommissionEmployeeTest.cs (2 of 2) Implicitly call the object’s ToString method
class BasePlusCommissionEmployee • 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.
Add instance variable baseSalary BasePlusCommissionEmployee.cs (1 of 5) Use property BaseSalary to validate data
BasePlusCommissionEmployee.cs (2 of 5)
BasePlusCommissionEmployee.cs (3 of 5)
Validates data and sets instance variable baseSalary Update method Earnings to calculate the earnings of a base-salaried commission employee BasePlusCommissionEmployee.cs (4 of 5)
BasePlusCommissionEmployee.cs (5 of 5) Update method ToString to display base salary
Instantiate BasePlusCommissionEmployee object Use BasePluCommissionEmployee’s properties to retrieve and change the object’s instance variable values BasePlusCommissionEmployeeTest.cs (1 of 2)
Implicitly call the object’s ToString method BasePlusCommissionEmployeeTest.cs (2 of 2)
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.
Class BasePluCommissionEmployee2 is a derived class of CommissionEmployee BasePlusCommissionEmployee2.cs (1 of 2) Invoke the base class constructor using the base class constructor call syntax
BasePlusCommissionEmployee2.cs (2 of 2) Compiler generates errors because base class’s instance variable are private
Declare protected instance variables CommissionEmployee2.cs (1 of 4)
CommissionEmployee2.cs (2 of 4)