Önemli noktalar Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance public class Test { // çalışır İnsan insan = new Çiçekçi(); // çalışmaz Çiçekçi buket = new İnsan(); } NTP’nin anahtar kavramları Soyutlama/Abstraction Sadece gerekenleri alma Kompozisyon-birleştirme/Composition Parçalardan bütünü inşa etme Ayırma/Separation Ne ve nasıl sorularının cevabını ayırma Genelleme/Generalization Ortak yönleri bulma Soyutlama/Abstraction “Gerçek dünyadaki herhangi bir şeyin sadece kullanılacak kısımlarına indirgenmesi ve basitleştirilmesi” Kapsülleme/Encapsulation İyi bir soyutlamanın özellikleri Uygun şekilde isimlendirme Mantıklı olma – özellik ve davranışlardan ilişkili ve anlamlı olanları alma Netlik/Accurate – özellik ve davranışların modellenen elemanla tam olarak uyuşması Minimum tutma/Minimal – fazladan herhangi bir şey bulunmaması Tamlık- gerekli bütün özellik ve davranışları kapsama Tutarlılık – İşlemlerin birbiriyle, isimleriyle, parametreleriyle, dışarıya aktardığı değerlerle ve istenilen davranışla tutarlı olması Ayrık/Decoupled – Farklı soyutlamların biribirine bağımlı olmaması Sınıflar “Bir sınıf belirli bir nesne türü için ortak olan özellik ve davranışların tanımlandığı bir kalıp veya prototiptir ” C#’da her şey bir sınıf içerisinde tanımlanır Bir sınıfın anatomisi Usings(s) Comments(açıklamalar) Declaration(bildirim) Fields(alanlar) Constructors(yapıcılar) Methods(metotlar) Metotlar Bir metot isimlendirilmiş bir dizi komutlardan oluşur ve bir nesnenin istediğiniz bir işlemi yapmak için gerçekleştirmesi gereken faaliyettir. Metotların bir imzası/signature vardır:Bu imza bir isim ve sıfır veya daha fazla sayıda parametreden oluşur Metotlar geri döndürdükleri bir veri yapısı tanımlarlar(primitive veya object veya void) Metotlar Genelde mümkün olduğunca kısa tutulur Yapıcılar/Constructors – nesnenin ilk oluşum durumunda alacağı değerleri belirleyen metottur. Yapıcılar ve diğer metotlar aşırı yüklenebilir. (over-load) Yapıcılar Yapıcılar sınıfa ait yeni nesneler sınıf tanımındaki kalıp kullanılarak üretilirken başvurulan mekanizmalardır. Yapıcının amacı yeni nesneye ilk değerlerini atamaktır. Yapıcılar metotlara benzer ancak Her zaman isimleri sınıf ismiyle aynı olmak zorundadır Hiçbir zaman dışarıya bir değer döndürmezler Yapıcılar Bir yapıcı metot çağırmak için new işlemi kullanılır ve gerekli parametreler verilir. Her sınıf varsayılan bir yapıcıya sahiptir: public ClassName() {} bu yapıcının parametresi yoktur ve herhangi bir ilk değer atamaz. Yapıcılar Eğer siz bir tane tanımlamazsanız, C# sizin için parametresi olmayan varsayılan bir yapıcıyı otomatik olarak oluşturur. Eğer siz parametreli veya parametresiz bir yapıcı metot yazarsanız, C# sizin ne yaptığınızın farkında olduğunuzu varsayarak herhangi bir yapıcıyı tanımlamaz. Yapıcılar: Başucu kuralları Hatırlatma: Bir yapıcının amacı yeni üretilmiş bir nesneyi bilinen bir ilk duruma getirmektir. Yapıcılar çok fazla işlem yapmamalıdır Nesneye ilk değer atama işlemi ile nesnenin davranışlarını kesinlikle birbirinden ayırmak gerekir. Nesneler “Bir nesne değişkenler ve ilişkili metotlar yazılım paketidir. “ Her şey ya temel bir veri yapısı ya da bir nesnedir. Nesneler: Gerçek dünyadaki fiziksel elemanların modeli (Öğrenci gibi) veya Soyut elemanlar olabilir (Dersler, Seçimler, Finansalİşlemler gibi) Nesneler C#’da temel bir veri bildirimi yapılmasıyla bellekte o veri için uygun yer ayrılır Ancak bir nesne bildirimi yapılınca bellekte o nesneye (veya o nesneden türetilen bir tipe) erişimi sağlayacak referansa (reference) değişkeni için yer ayrılır. Nesneler Nesneyi tutacak değişken bildirimi yapmakla nesne üretilmiş olmaz. Nesne örneği için bellekte yer ayrılması dinamik olarak new operatorü kullanılarak gerçekleşir. Nesne tipleri istenilen şekilde oluşturulur. Değişken(Alanlar) / Variable (Fields) Yerel Değişkenler/Local Variables Bir metot veya küçük bir blok kodu içerisinde bildirimi yapılan ve sadece o alanda kullanılan değişkenlerdir(scope kavramından hatırlayın). Örnek/nesne değişkeni/Instance variables İyi bir C# sınıfında hemen hemen bütün değişkenlerin örnek veya yerel değişken olması gerekir. Her nesne(instance) alanların kendine ait bir kopyasına sahiptir. Değişken(Alanlar) Sınıf değişkenleri/Class variables Bir alan adı veya değişkeni static anahtar kelimesiyle nitelenirse bu değişken bir sınıf değişkeni olur: Bu sınıftan kaç tane nesne üretilirse üretilsin bu tür değişkenlerden sadece bir tanesi için yer ayrılır. Bütün nesneler bu sınıf değişkenini paylaşırlar. Problem Tanımı – CS Student Kayıt modeli: Öğrenci isimlerinin komut satırından girilmesine izin verilecek Öğrenci ikilileri lab için eşlenecek. Tek sayıda öğrenci olması durumunda bir kişi eşsiz kalacak. Öğrenciler ve varsa labdaki arkadaşı kayıt sırasının tersi olacak şekilde listelenecek Sınıflar, Alanlar, Metotlar ve Nesneler Erişim Bir C# sınıfı yazılırken, programcı metotlara ve değişkenlere dışarıdan nesnelerin ne şekilde müdahale edebileceğini kontrol etmek için bazı erişim niteleyicileri belirtebilir. (public, private, protected vs) tanımlamaları ile erişim hakları tanımlanır. Erişim public Bütün dış nesneler public metotları çağırabilir. Bütün dış nesneler public alanları değiştirebilir. private Metotlar sadece o sınıf içindeki metotlar tarafından çağırılabilir- alt sınıflar da bunları kullanamaz. Alanlar sadece o sınıf içindeki metotlar tarafından kullanılabilir- alt sınıflar da bunları kullanamaz. Erişim protected Metotlar sadece o sınıf içindeki metotlar ve alt sınıf metotları tarafından çağırılabilir. Alanlar sadece o sınıf içindeki metotlar ve alt sınıf metotları tarafından kullanılabilir. Kalıtım ile ilgili size verilen örnekleri inceleyiniz.