Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

Benzer belgeler
Operator Aşırı Yükleme (Operator OverLoading)

Bu parçalar arasındaki ilişkiyi kullanıp büyük çaplı programlar geliştirme tekniğine de nesne yönelimli programlama denir.

public static int Toplam int x, int y

11- FONKSİYONLAR (FUNCTIONS)

BTEP243 Ders 3. class Yazım Kuralı:

Nesneye Dayalı Programlama

HSancak Nesne Tabanlı Programlama I Ders Notları

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

BMH-303 Nesneye Yönelik Programlama

NESNEYE YÖNELİK PROGRAMLAMA

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Nesne Yönelimli Programlama ve Kalıtım

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

Programlama Dilleri 3

Akış Konrol Mekanizmaları

BİL-141 Bilgisayar Programlama I (Java)

Programlama Dilleri 3

Ders 8: Metotlar. barisgokce.com

YZM 2105 Nesneye Yönelik Programlama

Programlama Dilleri III 1

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

Yrd. Doç. Dr. Caner ÖZCAN

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

Yrd. Doç. Dr. Caner ÖZCAN

C++ Dersi: Nesne Tabanlı Programlama

ÜNİTE. NESNE TABANLI PROGRAMLAMA I Okt. Mustafa AKBUĞA İÇİNDEKİLER HEDEFLER METOTLAR

Lambda İfadeleri (Lambda Expressions)

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN

NESNEYE DAYALI PROGRAMLAMA 9. HAFTA UYGULAMA DERSİ

C# Çalışma Örnekleri

BAŞLAYINIZ DENİLMEDEN SORU KİTAPÇIĞINI AÇMAYINIZ.

ALGORİTMA VE PROGRAMLAMA II

HSancak Nesne Tabanlı Programlama I Ders Notları

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

C# Metotlar ve Metot Tanımlama

[erişim belirteçleri] <dönüş değeri> metot ismi (parametre listesi) { metot gövdesi }

ÜNİTE. NESNE TABANLI PROGRAMLAMA I Okt. Mustafa AKBUĞA İÇİNDEKİLER HEDEFLER SINIFLAR

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

Başlangıç Durumuna Getirme ve Temizlik. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 3 1

1 PROGRAMLAMAYA GİRİŞ

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

Başlangıç Durumuna Getirme ve Temizlik

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

Nesneye Dayalı Programlama

Metotlar ve Fonksiyonlar

Nesneye Yönelik Programlama (OOP) 7.Hafta

NESNEYE YÖNELİK PROGRAMLAMA

PROGRAMLAMA TEMELLERİ DERSİ ÖZETİ

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 3

/*int sayi1, sayi2,toplam=0;

OPERATÖRLER Alıştırmalar

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

Programlama Dilleri 3

YZM 2105 Nesneye Yönelik Programlama

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü. BLGM 318 Ara Sınavı Đlkbahar Dönemi 13 Nisan Ad, Soyad Öğrenci No.

BİL-142 Bilgisayar Programlama II

7.1- C#.net Giriş Çıkış İşlemleri ve Visual Studio. M.İLKUÇAR - 1

Nesneye Dayalı Programlama

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

Yazılım Kodlama ve İ simlendirme Standartları v1.0

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

C++ Dersi: Nesne Tabanlı Programlama

Nesne Tabanlı Programlama

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2.

«BM364» Veritabanı Uygulamaları

Kalıtım (Inheritance)

Nesne Yönelimli Programlama

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 4. Yrd.Doç.Dr.Hacer Karacan

Sunum İçeriği. Programlamaya Giriş

MOBIL UYGULAMA GELIŞTIRME

Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

Java da, tüm değişkenlerin kullanılmadan önce tanımlanması edilmesi gerekir. Bir değişken tanımlamanın temel gösterimi bu şekildedir:

static void dizi_24() { Random rnd = new Random(); int [] tutulan=new int[10]; int dogru;

DATA STRUCTURES. Part III. Sınıflar, Nesneler ve İlgili Programlama Örnekleri

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama

Java Class Yapısında Finalize Metotunun Kullanımı

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

İş Parçacıkları Thread(s)

BOĞAZİÇİ ÜNİVERSİTESİ UNVAN DEĞİŞİKLİĞİ SINAVI PROGRAMCI

Bölüm 9. Altprogramlar ISBN

Şablon Türler (Generics)

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

DATA STRUCTURES. Lab II Metotlar, Diziler ve Hata Ayıklama. Doç. Dr. Aybars UĞUR

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

Statik veri üyeleri sınıf dosyası içerisinde, ancak sınıf bildirimi dışında başlatılmalıdır. Statik üye fonksiyonları

Nesne Yönelimli Programlama

MALTEPE ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ YAZILIM MÜHENDİSLİĞİ LİSANS PROGRAMI

DATA STRUCTURES. Lab II Metotlar, Diziler ve Hata Ayıklama. Prof. Dr. Aybars UĞUR

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR

Transkript:

Nesneler ve Türler

Sınıflar ve Yapılar Arasındaki Farklılıklar Sınıf Üyeleri Değer ve Referans Türde Olan Aktarımlar Yapıcılar ve Statik Yapıcılar Read-Only Statik Sınıflar Object Sınıfı

Sınıflar Sınıflar türleri tanımlar. Durum (State) Davranış ( Behavior) Erişim (Access) Nesneler türün bir örneğidir. Çoklu örnekler oluşturulabilir. Her bir örnek farklı bir durumu içerir. Her bir örnek aynı davranışı içerir.

Sınıflar, nesneleri oluşturmakta kullandığımız şablonlardır. Her nesne, oluşturulduğu sınıfın bir örneğidir.

Sınıflar referans tür yaratırlar. Nesneler heap de tutulurlar. Değişkenler nesneye işaret ederler.

Erişim Belirteçleri Bir türe veya üyeye olan erişimin şeklini belirtirler.

Sınıfların Üyeleri C# ortamındaki sınıfların üyeleri 2 tanedir: Veri Üyeleri (Data Members) Fonksiyon Üyeleri (Function Members)

Data Members Field, Constant ve Event ler bu kategoridedir. Data üyeleri static veya instance olabilirler.

Function Members Metod, Property, Constructor, Finalizer, Operator ve Index ler bu kategoridedir.

Metotlar C# ta bildirilen bütün metotlar mutlaka bir sınıfın içinde olmalıdır. Bir sınıfın üyesi olmayan metotlar bildirilemez. Metotları tanımlarken kullanılan bildirim şu şekildedir: [erişim belirteçleri] <geri dönüş tipi> Metot İsmi (parametreler) Metot kodları

using System; class metotlar_1 static int Topla(int a, int b) return a + b; static void Main() int sonuc = Topla(10, 20); Console.WriteLine(sonuc);

using System; class metotlar_2 static void Main() Yaz(20); Yaz("String İfade..."); Yaz(12.34f); static void Yaz(object o) Console.WriteLine(o.ToString()); // return;

static void islem(int a, int b) Console.WriteLine(a + b); return; static void Main(string[] args) double x, y; x = 5.45D; y = 6.88D; islem(x, y); Console.ReadLine();

using System; class metotlar_3 static int BuyukBul(int a, int b) if (a > b) return a; return b; static void Main() int s1, s2; Console.Write("1. Sayıyı Girin:"); s1 = Convert.ToInt32(Console.ReadLine()); Console.Write("2. Sayıyı Girin:"); s2 = Convert.ToInt32(Console.ReadLine()); int enbuyuk = BuyukBul(s1, s2); Console.WriteLine("En büyük: 0\'dir.", enbuyuk);

using System; class metotlar_4 static int BuyukBul(int a, int b) if (a > b) return a; return b; static int BuyukBul3(int a, int b, int c) return BuyukBul(a, BuyukBul(b, c)); static void Main() int s1, s2, s3; Console.Write("1. Sayıyı Girin:"); s1 = Convert.ToInt32(Console.ReadLine()); Console.Write("2. Sayıyı Girin:"); s2 = Convert.ToInt32(Console.ReadLine()); Console.Write("3. Sayıyı Girin:"); s3 = Convert.ToInt32(Console.ReadLine()); int enbuyuk = BuyukBul3(s1, s2, s3); Console.WriteLine("En büyük: 0\'dir.", enbuyuk);

Metotlara Parametre Aktarımı Bir nesnenin değerini metoda aktarmaya değer ile parametre geçme (call by value), bir nesnenin referansını metoda geçmeye ise referans ile parametre aktarımı (call by reference) denilmektedir.

using System; class RefOrnek static void DegerTipi(ref int x) x = 111; static void Main() int x = 25; DegerTipi(ref x); Console.WriteLine(x); ref parametreleri aktarılırken mutlaka ilk değer verilmelidir. Eğer ki, ilk değer verilmeyecekse ref yerine out anahtar sözcüğü kullanılmalıdır.

using System; class OutOrnek static void DegerTipi(out int x) x = 111; static void Main() int x; DegerTipi(out x); Console.WriteLine(x);

Metotların Aşırı Yüklenmesi (Method OverLoading) Metotları aşırı yükleyerek (overloading) aynı isimli birden fazla metot tanımlanabilir. Çalışma zamanında bu metotlar nasıl belirlenecek? İsimler aynı olduğuna göre hangi metodu çağırdığımız nasıl anlaşılacak?

Özellikler (Properties)

Auto-Implemented Properties

Yapıcılar (Constructors) Nesneleri oluşturmak için var olan özel metodlardır. Varsayılan değerleri atar (Default Constructor) Birden fazla yapıcı tanımlanabilir. Overload edilmiş metodlar farklı parametre almalıdır.

Bir nesne dinamik olarak yaratıldığı anda otomatik olarak çalıştırılan metotlar vardır. Bu metotlar sayesinde bir nesnenin üye elemanlarına ilk değerler verilebilir ya da gerekli ilk düzenlemeler yapılabilir. Bu metotlara yapıcı metotlar (constructors) denir. Yapıcı metot tanımlanmasa dahi her sınıfın varsayılan bir yapıcı metodu (default constructor) mutlaka bulunur.

using System; class Toplama public int X; public int Y; public Toplama(int x,int y) Console.WriteLine("Yapıcı metot çalıştı..."); X = x; Y = y; public int Islem() return X + Y; class Program static void Main() Toplama t = new Toplama(25,50); //Console.WriteLine(t.Islem());

Varsayılan Yapıcı Metot (Default Constructor) Otomatik olarak tanımlanmış sınıf nesneleri oluşturulduğu anda çağrılan yapıcı metottur. Her sınıf nesnesinin en az bir yapıcı metodu bulunur. Varsayılan yapıcı metodun parametresi yoktur. Nesnenin üye elemanlarına varsayılan değerlerini atar. Eğer kendi yapıcı metodumuzu tanımlarsak varsayılan yapıcı metotlar çalıştırılmaz.

using System; class Toplama public int X; public int Y; public int Islem() return X + Y; public void Yaz() Console.WriteLine("X = 0", X); Console.WriteLine("Y = 0", Y); class Program static void Main() Toplama t = new Toplama(); t.yaz();

using System; class Toplama public int X; public int Y; public Toplama() X = -1; Y = -1; public int Islem() return X + Y; public void Yaz() Console.WriteLine("X = 0", X); Console.WriteLine("Y = 0", Y); class Program static void Main() Toplama t = new Toplama(); t.yaz();

Birden fazla yapıcısı olan sınıflar olabilir. Eğer herhangi bir yapıcı belirtilmemişse değişkenlere varsayılan (default) değerleri atanır.

this Anahtar Sözcüğü

Static Yapıcılar C++ ve VB 6.0 da olmayan bir özelliktir.

Readonly

Yıkıcılar (Destructors) ve Dispose() Metodu Nesnelere erişimin mümkün olmadığı zamanlarda nesnelerin bellekte kalmasının bir anlamı yoktur. C# dilinde gereksiz nesneleri kontrol eden ve bunların kullandıkları belleği zamanı gelince iade eden (Garbage Collection) bir mekanizma bulunur.

Gereksiz nesne toplayıcısı (Garbage Collector) programcı yerine gereksiz nesnelerin kullandıkları bellek alanını iade eder. Yalnız bu sistem nesnelerin yok edilmesi ve belleğin iadesinin, faaliyet alanının sona erdiği noktada yapılacağını garanti etmez. Yani nesnenin ne zaman yok edileceği kesin bilinemez. Bu durumda yıkıcı metotlar (destructors) bellek iade işleminden hemen önce çalışarak bu belirsizliğin çözümünde yardımcı olurlar.

Dispose( ) Metodu Oluşturulan bir nesnenin kullandığı kaynakların geri alınması için kullanılabilecek yöntemlerden bir diğeri de Dispose() metodudur. IDisposable arayüzü kullanılarak yapılır.

Yıkıcı metotlar bildirilirken sınıf isminin önüne ~ işareti eklenir. Herhangi bir dönüş değeri ve parametresi yoktur. Erişim belirteci de kullanılmaz. Bir sınıfın sadece bir tane yıkıcı metodu olabilir.

using System; class Yikici ~Yikici() Console.WriteLine("Yıkıcı metot çalıştı..."); class Program static void Main() Yikici y = new Yikici(); Console.WriteLine("Ana Program...");

Örnek programda y nesnesi faaliyet alanını doldurmasına rağmen hemen yok edilmemiştir. Bir alt satırda bulunan Console.WriteLine() metodu çalışmış ardından gereksiz nesne toplayıcısı işleyerek nesneyi silmiştir. Nesne yok edilirken de yıkıcı metodu çalıştırılmıştır.

Gereksiz nesne toplayıcı (Garbage Collector) programcının isteği dışında çalışmaktadır. System.GC sınıfı kullanılarak istenilen anda bu mekanizma çalıştırılabilir. Fakat bu tavsiye edilen bir kullanım değildir.

using System; class Yikici ~Yikici() Console.WriteLine("Yıkıcı metot çalıştı..."); class Program static void Main() Yikici y = new Yikici(); GC.Collect(); Console.Read(); Console.WriteLine("Ana Program...");

C# da yıkıcı metotlar genelde nesnenin kullandığı bellek alanını iade etmek için kullanılmaz. Daha çok nesne yok edilirken bir takım işlemlerin yapılması, özellikle sınıfın global üye değişkenlerinin değerlerinin işlenmesi ya da değiştirilmesi için kullanılır.

Struct C# dilinde yapılar değer tipindedir. Sınıf bildirimine çok benzer şekilde tanımlanırlar. struct anahtar sözcüğü kullanılır.

Yapılar değer tipidir ve yapı türündeki nesneler stack alanında saklanır. Yapılar da diğer tüm nesneler gibi object sınıfından türetilmiştir. Yapılar kalıtımı desteklemez, türetme yapılamaz.

using System; class Yapilar struct Ogrenci public int Numara; public string Ad; public string Soyad; public static void Main() Ogrenci ogr1; Console.WriteLine(ogr1.Numara);

using System; class Yapilar public struct Ogrenci public int Numara; public string Ad; public string Soyad; public Ogrenci(int no, string ad, string soyad) Numara = no; Ad = ad; Soyad = soyad; public static void Main() Ogrenci ogr = new Ogrenci(123,"Ali", Uzun"); Console.WriteLine("0 1 2", ogr.numara, ogr.ad, ogr.soyad);

Avantajlar Stack bellek alanında yer ayırma, kopyalama gibi işlemler heap alanından daha hızlıdır. Sınıf nesneleri Garbage Collection mekanizması ile heap alanından silindikleri için yıkıcı metotların ne zaman çağrılacağı kesin bilinemez. Yapılarda yıkıcı metot olmamasına rağmen faaliyet alanı bitiminde bellekten otomatik silinirler.

Partial Classes