Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
YayınlayanSüleyman Türel Değiştirilmiş 8 yıl önce
1
Sakarya Üniversitesi Bilgisayar ve Bilişim Bilimleri Fakültesi Bilgisayar Mühendisliği Prof. Dr. Ümit Kocabıçak Prof. Dr. Cemil Öz Doç. Dr. Ahmet Turan Özcerit 4. HAFTA Nesneye Dayalı Programlama
2
4. Hafta İçeriği ► Sınıflara giriş ► Erişim anahtarları ► Alanlar, Özellikler, Metotlar ► Yapıcılar ve Yıkıcılar ► Kopya Yapıcı ► this ve new anahtarları
3
Sınıf veya Nesne Nedir? ► Sınıf kendinize ait değişkenleri, yöntemleri (fonksiyonlar) bir araya getirip tek bir anlamlı bütün haline getirmedir. ► Sınıf bir kalıp gibidir, bir programda oluşturulmadan bir anlamı ve fonksiyonu olamaz. Nesne sınıfın canlı halidir, ikisi aynı şey değildir. ► Sınıf static olarak tanımlanmadığı müddetçe kodlarınızda kullanabilmeniz için bir nesne (object) veya örnek (instance) olarak başlatmanız gerekmektedir. ► Sınıf referans türündedir ve kapsam dışı oluncaya kadar bellekte tutulur. Örnek nesne kapsam dışı (erişilemez) olduğunda çöp toplayıcı ilgili nesneyi bellekten kaldırılacaklar listesine ekler. ► Sınıf, static olarak tanımlandı ise sadece bir kopyası bellekte tutulur
4
Sınıf Tanımlama public class Müşteri { //Alanlar (fields) //Özellikler (properties) // Dizinleyiciler (indexers) //Yöntemler (methods) //Olaylar (events) // Yapıcılar ve Yıkıcılar (constructors, destructors) //Temsilciler (delegates) //İçiçe Sınıflar (nested classes) } 6.03.16 4
5
Sınıf Kullanımı Müşteri müşt1= new Müşteri(); ► müşt1, Müşteri sınıfının bir nesnesine (örneğine) ait referanstır. Program, ilgili nesneye müşt1 referansı ile erişir. Bir nesne oluşturmadan da bir nesne referansı elde edebilirsiniz : Müşteri müşt2; //Nesne örneği yok ama referans var!!! ► Ancak bu durumda müşt2 doğrudan kullanılamaz ve derleme zamanında hata oluşturur. Çünkü ortada canlı nesne yok. Karşılıksız çek gibi!! Müşteri müşt1; Console.WriteLine(müşt1.ToString()); //Derleme hatası!!!
6
Değer ve Sınıfların Bellek Kullanımı 6
7
Aynı nesneyi referans eden iki referans public void method1() { cls obj1=new cls(); cls obj2=obj1; } obj1'e yapılan tüm değişiklikler otomatik olarak obj2'ye de yapılmış olur. Tersi de doğru!!
8
Erişim Anahtarları ► public: Erişim sınırlandırılmamış ► private: Erişim yazılan sınıfla sınırlı ► protected: Erişim yazılan sınıfla veya miras alınan sınıfla sınırlı ► internal : Erişim mevcut proje ile sınırlı ► protected internal :Erişim mevcut proje veya miras alınan sınıflarla sınırlı 8
9
Alanlar, Özellikler ► Alanlar sınıf (class) veya yapı (struct) içerisindeki değişkenlerdir ► Alanlar, bir sınıf örneğine (non-static) veya doğrudan bir sınıfa (static) ait olabilirler. statik olmayan alan her bir örnekte ayrı olarak tutulurken, statik alanlar tüm örneklerde aynıdır. ► Özellikler (properties) private alanları kontrollü hale getirir, get (okuma) ve set (yazma) operatörleri ile beraber kullanılır. Özellikler ile değişkenler public değişken gibi kullanılır ancak aslında erişimciler olarak bilinen yöntemlerdir. Böylece sınıf verileri güvenli ve esnek biçimde erişilebilir.
10
Alan ve Özellik Örnekleri class Person{ private string name = "BOŞ"; private int age = 0; public string Name{ get { return name; } set {name = value; } } public int Age{ get { return age;} set { age = value; } } class Test{ static void Main(){ Person person = new Person(); Console.WriteLine("Person Name : {0}", person.Name); person.Name = "Ali"; person.Age = 20; Console.WriteLine("Person Name: {0}", person.Name); person.Age += 1; Console.WriteLine("Person Age: {0}", person.Age); }
11
Yöntemler ve Kullanımı ► Yöntemler, sınıflar veya yapılar içinde tanımlanan bir dizi komut içeren kod bloklarıdır. ► Girdileri veya çıktısı olabilir, yoksa void olarak nitelendirilmelidir. ► Main yöntemi tüm C# programlarının ana giriş noktasıdır. ► Tanımlamada kullanılan argüman listesi sırasına yöntem çağrılırken de uyulması gerekir (ayak izleri uyuşmalı) ► Eğer bir yöntem void döndürüyorsa ve yöntem return komutu içerirse derleme hatası oluşur. ► void döndürmüyorsa, yöntemin son komutu return OLMALIDIR.
12
Yöntem Örnekleri class Motorcycle{ bool motor=false; int gasLevel; double topSpeed=400; public void StartEngine() { motor=true; } protected void AddGas(int gallons) { gaslevel+=gallons; } public double GetTopSpeed(){ return topSpeed; } public void Caller() { int numA = 4; int productA = Square(numA); int numB = 32; int productB = Square(numB); int productC = Square(12); productC = Square(productA * 3); } int Square(int i) { int input = i; return input * input; }
13
Değerle ve Referansla Çağırma ► Değerle çağırmada; yöntemin çağıran ortamdan aldığı değişkenin değerine etki edilemez, değerin kopyası üzerinde işlemler yapılır ► Referansla çağırmada; yöntemin çağıran ortamdan aldığı değişkenin değerine etki edilebilir, değişkenin kendisi üzerinde işlemler yapılır
14
Değerle ve Referansla Çağrı Örnekleri namespace SınıflaraGiriş{ public class Değer{ public int val; } public class Program{ public static void Main(){ Değer değ1 = new Değer(); değ1.val = 44; Değiştir(değ1.val); //Call by value Console.WriteLine(değ1.val); } static void Değiştir(int val){ val=33; } namespace SınıflaraGiriş{ public class Değer{ public int val; } public class Program{ public static void Main(){ Değer değ1 = new Değer(); değ1.val = 44; Değiştir(değ1); //Call by ref Console.WriteLine(değ1.val); } static void Değiştir(Değer obj){ obj.val = 33; }
15
Yapıcı ve Yıkıcı Yöntem Özellikleri-1 ► Yapıcı yöntem (constructor), nesneyi başlatan yöntemdir ve ilk çalışır (static constructor hariç) ► Yıkıcı yöntem (destructor) nesne bellekten kaldırılırken en son çalışan yöntemdir ► Yapıcı yöntem bir çok farklı ayak izine (aşırı yüklü) sahip olabilir, yıkıcı yöntem ise bir tanedir ► Yapıcı yöntem mevcut nesnenin değişkenlerini ilk duruma kurmaya yarar ► Eğer tanımlanmazsa derleyici varsayılan bir yapıcı yöntem oluşturur ► Eğer varsayılan yapıcı tanımlanmaz ve parametreli bir yapıcı tanımlanırsa, varsayılan yapıcı ile nesne oluşturma teşebbüsü derleme hatasına neden olur. Neden? 6.03.16 15
16
Yapıcı ve Yıkıcı Yöntem Özellikleri-2 ► Yıkıcı yöntem argüman (parametre) alamaz ► Ne Yapıcı ne de Yıkıcı yöntem bir değer döndürmez ► Yapıcı yöntem private olarak tanımlanabilir ancak bu durum, ilgili sınıfın static olmasından dolayı örneğinin oluşturulmasının engellenmesi amacıyla yapılır. Tüm erişim anahtarları yapıcılarda kullanılabilir... ► Hem yapıcı hem de yıkıcı yöntem her örnek için ayrı olarak çalışır (static sınıflar hariç) ► Yapılarda yıkıcı yöntem yoktur ► Yıkıcı yöntem erişim anahtarına sahip değildir ve doğrudan çağrılamaz ► Boş bir yıkıcı yöntem tanımlamayınız, performans düşer! 6.03.16 16
17
Yapıcı ve Yıkıcı Yöntem Özellikleri-3 ► Yapıcı yöntemler value (değer) tipindeki nesneler için de çağrılabilir (ama zorunlu değildir). Yapılar ve temel veri tipleri bu kapsamdadır. C#’da herşeyin nesne olduğunu hatırlayın… ► Aşağıdaki komutların arasındaki fark nedir? int i=new int();//Int32’nin yapıcısı çağrıldı ve başlangıç değeri 0 Console.WriteLine(i); //çalışır int i;//Int32 yapıcısı çağrılmadı Console.WriteLine(i); // i değişkeni “uninitialized”, çalışmaz 6.03.1617
18
Kopya Yapıcı (copy-constructor)-1 ► Kopya yapıcı, bir nesnenin farklı bir kopyasının oluşturulmasını sağlayan bir yapıcı yöntemdir ve Derin kopya işlemi sunar. ► İki tür kopyalama söz konusudur : Sığ ve Derin (Shallow-Deep) 6.03.16 18
19
Kopya Yapıcı (copy-constructor)-2 Örnek Kullanım: Araba oluşturmak için: Araba MPV=new Araba(“Verso”, 2014); Verso’nun kopyasını oluşturmak için: Araba myMPV= new (MPV); 6.03.16 19 public class Araba { public string Marka {get;set;} public int Model {get;set;} public Araba (string marka, int model) //yapıcı { Marka=marka; Model=model; } public Araba(Araba kaynak) { Marka=kaynak.Marka; Model=kaynak.Model; }
20
new anahtarı ► new anahtarı nesneleri oluşturmak ve yapıcıları çağırmak amacıyla kullanılır MyObject myobj1=new MyObject(); int i=new int(); int [] array= new int[10]; ► new anahtarı temel sınıftan miras alınan bir yöntemi gizlemek için de kullanılabilir ► Genel bir tanımlamada tip parametresinin argüman olarak kullanılmasını sınırlamak için de kullanılabilir 6.03.16 20
21
this anahtarı ► this anahtarı sınıfın mevcut örneğini referans eder ► Bir nesneyi parametre olarak yöntemlere aktarmak için kullanılır ► Dizinleyicileri tanımlamak için kullanılır ► this anahtarı aynı zamanda Uzantı Yöntemlerin(Extension Methods) üzerinde çalışacağı tipi belirtmek için kullanılır ► static yöntemler this anahtarına sahip olamazlar 6.03.16 21
22
this anahtarı: Örnek class Çalı ş anlar { public string adSoyad {get; set;} public long tcKimlikNo {get; set;} public Çalı ş anlar (){ adSoyad="Girilmedi"; tcKimlikNo=0; } public void Atama(string adSoyad, long tcKimlikNo) { this.adSoyad=adSoyad; this.tcKimlikNo=tcKimlikNo; } 6.03.16 22
23
6.03.16 23 BÖLÜM ALIŞTIRMA ve SORULARI 1.class ve struct arasındaki farkları araştırınız 2.Nesneler hangi bellekte tutulmaktadır, nesnelerin referansları için durum nedir? 3.Sadece okunabilir özelliğin (property) amacı nedir? Sadece yazılabilir özellik işe yarayabilir mi? 4.Özelliklerin geleneksel değişkenlere göre avantajlarını belirtiniz 5.Bir sınıf tanımı içindeki herhangi bir yöntemin sırası önemli midir? 6.Tanımlanan bir sınıfa ait yöntemlerin başka bir sınıfta kullanılırken “intelisense” ile parametrik kullanım detayları nasıl gösterilebilir? 7.Derin ve sığ kopyalamayı en basit birer örnek ile gösteriniz 8.Kopya-yapıcı hangi tür kopyalamayı sağlar: derin veya sığ? 9.new anahtarı kullanmadan yapılan temel veri türü tanımının yan etkileri var mıdır? 10.this anahtarı aslında ne içermektedir? 11.Yapıcı yöntem ve yıkıcı yöntem tanımlanmazsa ne olur? 12.Varsayılan yapıcı yöntemi tanımlanmadan farklı bir yapıcı yöntem tanımlandığında ve ilgili sınıfın bir örneğini varsayılan yöntemle oluşturmak istediğimizde ne olur? Neden?
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.