Nesneye Dayalı Programlama

Slides:



Advertisements
Benzer bir sunumlar
Programlama-II (Java ile Bilgisayar Programlama)
Advertisements

Saatte V km hız ile giden bir aracın t zamanda aldığı yolu bulan metodu yazınız. Metodu kullanacak bir program yazınız. ( yol=hız*zaman, x=V*t) — Metot.
SCANNER SINIFI ve KLAVYEDEN VERİ OKUNMASI
Nesnelerin Özellikleri. - Üye nesneler - friend belirtesi - Nesnelerin operatörlere yüklenmesi - this yerel (lokal) değişkeni - inline tanımlı üye fonksiyonlar.
SINIFLAR Yılmaz Kılıçaslan.
NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR
Programlama-II (Java ile Bilgisayar Programlama)
Nesneye Dayalı Programlama
Namespaces and .NET Class Library (İsim Alanları Sınıf Kütüphanesi)
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 6: Sınıflar
P AKET E RIŞIMLERI SıNıFLARıN YENIDEN KULLANıMı. P AKET ( P ACKAGE ) Paketler kütüphaneleri oluşturan elemanlardır. import java.io.BufferedReader; BufferedReader.
KOPYA YAPICI FONKSİYON, STATİK ELEMANLAR, ARKADAŞ SINIF VE FONKSİYONLAR, NESNE DİZİLERİ Yılmaz Kılıçaslan.
Nesne Tabanlı Programlama
Nesneye Yönelik Programlama Dr. Pelin GÖRGEL
SINIFLAR GİRİŞ Yılmaz Kılıçaslan.
NESNEYE YÖNELİK PROGRAMLAMA
Nesneye Dayalı Programlama
DİZİLER.
DELEGATE OOP-UYG.
Erişim Denetimi, Fonksiyon
NESNE TABANLI PROGRAMLAMA -METOTLAR-
METODLAR.
C# Metot Overloading (Aşırı yükleme)
İSİM UZAYLARI (NAMESPACE)
NESNEYE DAYALI PROGRAMLAMA
.Net teknolojisi ve C# Yasin Gedik Dokuz Eylül Üniversitesi (4. Sınıf) Microsoft Danışman Öğrenci
C#.NET 5.0 C# .NET 5.0 Eğitimleri Volkan KANAT.
Görsel C# Programlama Güz 2009 (6. Hafta).
Nesneye Dayalı Programlama
Sınıflar ve Fonksiyonlar
BPR152 ALGORİTMA VE PROGRAMLAMA - II Öğr. Gör. Bayram AKGÜL
SABİT NESNE VE ELEMAN FONKSİYONLAR VE ELEMAN NESNELER
METOTLAR.
Önceki Dersi Hatırlama !!
JAVA’DA DÖNGÜLER.
Numaralandırmalar(Enumaration)
Kalıtım , Sınıf Asli Ergün.
Nesneye Dayalı Programlama
JAVA’DA DİZİLER Dr.Galip AYDIN.
Sınıflar ve Nesneler Sınıf: bir nesnenin şablonunu, kalıbını, şeklini, davranışını, kalıtımını değişkenleri, metodları ve ebeveynleri vasıtasıyla tanımlar.
Bölüm 5 Nesneler ve Metotlar
Bil 102 Bölüm 6 Diziler.
Bil 102 Bölüm 3 Java’da Program Akış Denetimi Bil 1021.
SINIFLAR ve NESNELER. İlk sınıfımızı ekleyelim class KrediHesap { public ulong HesapNo; public double Limit; public string KartSahibi; }
BTP206– Görsel Programlama II
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Veri yapıları Hafta3 Dizi Yapıları.
BİLGİSAYAR programlama II
Bilgisayar Programlama III C
KALITIM(INHERITANCE) Öğr.Gör. Murat ASLANYÜREK. KALITIM KAVRAMINA GİRİŞ  Kalıtım, sınıflardan yeni sınıflar türetmeyi sağlar.  Türetilen yeni sınıflar,
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.
5. Hafta İçeriği Statik alanlar Statik üyelerin geçerlilik süresi Statik metot üyeler Statik özellikler Statik Kurucu Anonim Sınıflar.
7. Hafta İçeriği 1.Kalıtım (Inheritance) 2.Soyut sınıf (abstract class) 3.Sealed sınıf(sealed class) 4.Çok biçimlilik (polymorphism)polymorphism.
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
GÖRSEL PROGRAMLAMA C# UYGULAMALARI Araş. Gör. Sefa TUNÇER.
Nesneye Dayalı Programlama
Fonksiyonlar ve Diziler
ALGORİTMA VE PROGRAMLAMAYA GİRİŞ
Nesneye Dayalı Programlama
YAPISAL PROGRAMLAMA Hafta-6
Veri Tipleri 12/4/2018.
JAVA’DA DİZİLER. Özet  Dizi: belirli sayıda ve aynı veri türünden de ğ işkenlere aynı adla erişilmesini sa ğ layan bir yapıdır.  Dizilerde döngü işlemleri.
Kurucular(Yapıcılar), Yıkıcılar
Nesneye Dayalı Programlama 1
Nesneye Dayalı Programlama 1
Nesneye Dayalı Programlama 1
Nesneye Dayalı Programlama 1
MTM216 GÖRSEL PROGRAMLAMA
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

Nesneye Dayalı Programlama 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 5. HAFTA

5. Hafta İçeriği Statik Alanlar Statik üyelerin geçerlilik süresi Statik Yöntemler Statik Özellikler Statik Yapıcı Anonim Sınıflar

static Anahtarı static anahtar kelimesi: Sınıfların içindeki metotlar statik olarak tanımlanabilir Sınıfların içindeki alanlar statik olarak tanımlanabilir Sınıfın kendisi statik olarak tanımlanabilir Sınıfların Yapıcı metotları statik olarak tanımlanabilir const olarak tanımlanan değişkenler kendiliğinden static'tir. readonly olarak tanımlanan değişkenler ise static değildir, ayrıca static readonly bir değişken const ile aynı anlama gelmez!

Niteleyicilerin Sırası Bir bildirim çok sayıda niteleyici (modifier) varsa, asıl bildirimden önce herhangi bir sırada kullanılabilirler. Örneğin public ile static’in her ikisi de niteleyicidir. Yerleri hangisinin önce hangisinin sonra geleceği önemli değildir public static int MaxVal; static public int MaxVal;

Statik Olmayan Alanın Bellek Temsili Varsayılan olarak bir sınıfın üyeleri o sınıftan nesne üretilmediği sürece kullanılamaz. Sınıfın her bir örneği sınıf üyelerinin kendisi için bir kopyasını oluşturur. Bir nesnenin üyelerinin değerini değiştirmek diğer nesnelerin üyelerini etkilemez. class D { public int Mem1; } class Program static void Main() D d1 = new D(); D d2 = new D(); d1.Mem1 = 10; d2.Mem1 = 28;

Statik Alanın Bellek Temsili Kopya alanlar haricinde statik alanlarda vardır. Statik alanlar tüm nesneler tarafından paylaşılır. Biri için yapılan değişiklik diğerleri tarafından da kullanılmaktadır. class D { public int Mem1; public static int Mem2; } class Program{ static void Main(){ D d1 = new D(); D d2 = new D(); d1.Mem1 = 10; d2.Mem1 = 28; D.Mem2=45;

Statik Alan Örneği class Oyuncu { public static int oySayisi = 0; public Oyuncu() oySayisi++; } class Program { static void Main(string[] args) Oyuncu oyuncu1 = new Oyuncu(); Oyuncu oyuncu2 = new Oyuncu(); Console.WriteLine(Oyuncu.oySayisi); }

Statik Özellikler (Properties) Özelliklerde statik olarak bildirilebilir(tanımlanabilir) Statik özellikler erişim belirteçleri diğer statik üyelerde olduğu gibidir. Sınıfın örnek(nesne) üyelerine erişemez. Fakat onlar erişebilir. Sınıfın dışından erişilmek istendiğinde, sınıf ismi ile referans verilmelidir. class Trivial { private static int myValue; //statik alan public static int MyValue // statik proporties set { myValue = value; } get { return myValue; } } public void PrintValue() //sınıfın içerisinden erişim Console.WriteLine("Sınıf içi erişim: {0}", MyValue); class Program { static void Main() //sınıfın dışından statik özelliğe erişim Console.WriteLine("ilk değeri: {0}", Trivial.MyValue); Trivial.MyValue = 10; // sınıfın dışından statik özelliğe erişim Console.WriteLine("yeni değer: {0}", Trivial.MyValue); Trivial tr = new Trivial(); tr.PrintValue(); } Programın ekran çıktısı: ilk değeri: 0 yeni değer: 10 Sınıf içi erişim: 10

Statik Yöntemler-1 Main metodu neden static olarak tanımlanmaktadır? Amaç nedir? Bir console projesi oluşturduğumuz zaman Main metodunun static olduğu gözümüze çarpar ve bu console projesi içinde yazdığımız static olmayan metotlara Main metodu içinden ulaşamayız. Bunun sebebi, obje olmayan bir yerden obje birimi çağırmaya çalışmaktır. Aksi halde derleyici hatası alınır…

Statik Yöntemler-2 static alanlarda olduğu gibi statik metotlarda sınıfın nesnelerinden bağımsızdır. static yöntem ancak sınıf ismi kullanılarak çağrılabilir. static üye yöntemler nesne alanlarına erişemezler. Ancak diğer static üyelere erişebilirler. class X { static public int A; // static alan static public void YazdirA() // static yöntem Console.WriteLine("A değeri : {0}", A); } class Program { static void Main() X.A = 10; // nokta erişim operatörünü kullan X.YazdirA(); //nokta erişim operatörünü kullan }

Statik Alan ve Yöntem Örnek-1 using System; namespace statikAlan { class MyMath public static float PI = 3.14f; public static bool TekMi(int x) return x % 2 == 1; } public static int ikiyeKatla(int x) return 2 * x; class Program { static void Main(string[] args) { int val = 3; Console.WriteLine("{0} tek mi? {1}.", val, MyMath.TekMi(val)); Console.WriteLine("{0}*2 = {1}.", val, MyMath.ikiyeKatla(val)); }

Statik Yöntemler: Örnek-2 class Matematik { public static int Topla(int a, int b){ return a + b; } public static int Cikar(int a, int b){ return a - b; public static int Carp(int a, int b){ return a * b; public static int Bol(int a, int b){ return a / b; class Program static void Main(string[] args) Console.WriteLine(Matematik.Topla(5, 3)); Console.WriteLine(Matematik.Cikar(5, 3)); Console.WriteLine(Matematik.Carp(5, 3)); Console.WriteLine(Matematik.Bol(5, 3));

Statik Sınıf .Net Framework bir çok sınıfa sahiptir. Bunlardan bazıları static sınıflardır. Normalde bir sınıfın üyelerini kullanabilmek için o sınıftan örnekler oluşturmamız gerekir. Ancak statik sınıflardan örnek oluşturamayız . Math sınıfı static sınıftır. Math sınıfın metotlarını kullanmak için örnek üretmemiz derleyici hatasına neden olur. Örnek Kullanım: Console.WriteLine( Math.Pow (5,2) ); //DOĞRU KULLANIM Math m1=new Math(); //YANLIŞ KULLANIM m1.Pow(5,2); //DERLEYİCİ HATASI 6.03.16

Statik Sınıfların Özellikleri Statik sınıfların tüm üyeleri statik olmalıdır. Statik sınıflardan örnek (nesne) türetilemez. Statik Sınıfların yapıcısı/yıkıcısı olamaz. Statik sınıflar kalıtım almaz, kalıtım vermez. Static olarak tanımlanmış sınıflardan başka static sınıflar da türetilemez. 6.03.16

Math Sınıfı

Örnek-1 : Statik sınıf kullanımı using System; namespace statikclass { public static class BirimDonustur public static double DereceFahrenheit(string dereceSicaklık) double derece = Double.Parse(dereceSicaklık); double fahrenheit = (derece * 9 / 5) + 32; return fahrenheit; } public static double FahrenheitDerece(string FahrenheitSicaklik) double fahrenheit = Double.Parse(FahrenheitSicaklik); double derece = (fahrenheit - 32) * 5 / 9; return derece ; //public static double metreInch(string OlcuMetre) //{ // double metre = Double.Parse(OlcuMetre); // double inch = Ma //} class TestTemperatureConverter { static void Main() { Console.WriteLine(" bir birim dönüştürme seçiniz"); Console.WriteLine("1. dereceden Fahrenheit'a."); Console.WriteLine("2. Fahrenheit dan dereceye."); Console.Write(":"); string secim = Console.ReadLine(); double F, C = 0; switch (secim) { case "1": Console.Write(" Derece cinsinden sıcaklık değeri : "); F = BirimDonustur.DereceFahrenheit (Console.ReadLine()); Console.WriteLine(" Fahrenheit karşılığı : {0:F2}", F); break; case "2": Console.Write(" Fahrenheit olarak sıcaklık değeri: "); C = BirimDonustur.FahrenheitDerece(Console.ReadLine()); Console.WriteLine(" derece karşılığı: {0:F2}", C); default: Console.WriteLine(" bir birim dönüştürme seçiniz "); }

Örnek-2 : Statik sınıf kullanımı using System; namespace statikclass { public static class Square public static double side; public static double Perimeter() return side * 4; } public static double Area() return side * side; public class Exercise public static void Main() Square.side = 36.84; Console.WriteLine("Square Characteristics"); Console.Write("Side: "); Console.WriteLine(Square.side); Console.Write("Perimeter: "); Console.WriteLine(Square.Perimeter()); Console.Write("Area: "); Console.WriteLine(Square.Area());

Örnek-3 : Statik sınıf kullanımı using System; namespace _16_saticSınıf { static class sklas //static sınıflar içinde static olmayan metot yada özellik yazılamaz. static Yapıcı olmaz public static int t(int s1,int s2) return s1 + s2; } public static int c(int s1,int s2) return s1 * s2; class Program static void Main(string[] args) Console.WriteLine(sklas.c(4, 6)); Console.WriteLine(sklas.t(4, 6)); Console.ReadKey();

Statik Yapıcı Yapıcılar da static olarak tanımlanabilirler. class Oyuncu { public static int oyuncuSayisi; public Oyuncu() oyuncuSayisi++; } static Oyuncu() oyuncuSayisi = 0; class Program static void Main(string[] args) Oyuncu oyuncu1 = new Oyuncu(); Oyuncu oyuncu2 = new Oyuncu(); Console.WriteLine(Oyuncu.oyuncuSayisi); Console.Read(); Yapıcılar da static olarak tanımlanabilirler. Statik Yapıcılar, tanımlamada static anahtar kelimesini kullanırlar erişim anahtarları kullanılmaz (public ve private gibi) Statik Yapıcı, ilgili nesne için başlangıçta yapılacak atamaları ve ayarları yapar, tüm örneklerde sadece 1 kere çalışır ve ilk önce çalışır, diğer yapıcılar daha sonra çalışır Statik Yapıcının ismi sınıfın ismi ile aynı isimde olmalıdır. Statik Yapıcı değer döndüremez veya parametre kabul etmez Bir sınıf için sadece bir tek statik Yapıcı tanımlanabilir Statik Yapıcılar doğrudan çalıştırılamaz veya çağrılamaz

Statik Yapıcı: Örnek-1 class Box { int uzun; int gen; static int bsay; static Box() bsay=0; // tüm static ilk değer atamaları gerçekleştir. } public Box(int _uzun, int _gen)// iki parametreli Yapıcı uzun = _uzun; gen = _gen; bsay++; public Box(int _uzun)// bir parametreli Yapıcı gen = 2; public void Yazdir() Console.WriteLine("Uzunluk ={0} , Genişlik ={1}", uzun, gen);

Statik Yapıcı: Örnek-2 class RandomNumberClass { private static Random RandomKey; // private statik alan static RandomNumberClass() // statik yapıcı RandomKey = new Random(); // RandomKey’ e ilk değer ata } public int GetRandomNumber() return RandomKey.Next(); class Program static void Main() RandomNumberClass a = new RandomNumberClass(); RandomNumberClass b = new RandomNumberClass(); Console.WriteLine(" Next Random #: {0}", a.GetRandomNumber()); Console.WriteLine(" Next Random #: {0}", b.GetRandomNumber()); Programın örnek çıktısı: Next Random #: 47857058 Next Random #: 112484204

Statik Yapıcı: Örnek-3 public class Bus class TestBus { { protected static readonly DateTime globalStartTime; protected int RouteNumber { get; set; } static Bus() globalStartTime = DateTime.Now; Console.WriteLine(" Statik Yapıcı global start time’a atadığı ilkdeğer {0}", globalStartTime.ToLongTimeString()); } public Bus(int routeNum) RouteNumber = routeNum; Console.WriteLine("Bus #{0} oluşturuldu.", RouteNumber); public void Drive() TimeSpan elapsedTime = DateTime.Now - globalStartTime; Console.WriteLine("{0} yoluna çıktı, global start time ‘dan {1:N2} dakika sonra {2}.", this.RouteNumber, elapsedTime.TotalMilliseconds, globalStartTime.ToShortTimeString()); class TestBus { static void Main() Bus bus1 = new Bus(71); Bus bus2 = new Bus(72); bus1.Drive(); System.Threading.Thread.Sleep(25); bus2.Drive(); } /* örnek ekran çıktı: Statik Yapıcı global start time’a atadığı ilkdeğer 3:57:08 PM Bus #71 oluşturuldu. Bus #72 oluşturuldu. 71 yoluna çıktı, global start time ‘dan 6.00 dakika sonra 3.57 PM 72 yoluna çıktı, global start time ‘dan 31.00 dakika sonra 3.57 PM */

Anonim Sınıflar Genel ismi olmayan sınıflara anonim sınıf adı verilmektedir. Doğrudan özel isim ile sınıf oluşturulur. anonimNesne = new { Ad = "Furkan", Yas = 28 }; //Ad ve Yas özellikleri public 'tir Anonim sınıflara aslında isimsiz değillerdir çünkü çalışma zamanı sırasında derleyici tarafından isimlendirilmektedirler, ancak arka planda işleyen bu isimlendirme işlemi kullanıcıyı etkilememektedir. var anahtar sözcüğü sayesinde, nesnenin veri türü aslında bizi pek de ilgilendirmemektedir. var anonimNesne = new { Ad = "Furkan", Yas = 28 }; Bu nesnenin özelliklerine de aşağıdaki gibi erişebiliriz Console.WriteLine("Ad: {0} Yaş: {1}", anonimNesne.Ad, anonimNesne.Yas}; Ve yeni anonim nesneler de ekleyebiliriz var baskaBirAnonimNesne = new { Ad = "Hakan", Yas = 25 }; Ek olarak, yarattığımız bu eş veri türüne dahil nesnelerin değerlerini de birbirlerine atayabilmemiz mümkündür: anonimNesne= baskaBirAnonimNesne; Not: Anonim sınıflar sadece public özellikler barındırabilirler ve tüm özellikler nesne yaratma aşamasında atanmalıdır. Statik olarak belirtilemezler ve üye yöntem barındıramazlar.

BÖLÜM ALIŞTIRMA ve SORULARI static kelimesinin nerelerde kullanılabileceğini sıralayınız Statik bir alan statik olmayan bir yöntemden ulaşılabilir mi? Statik bir yöntemde statik-olmayan bir alan kullanılabilir mi? Statik bir alan veya yöntem statik-olmayan sınıfta kullanılabilir mi? Statik bir sınıfın tanımlanma amacı nedir? Statik alan ve yöntemlerin kullanıma amacı nedir? Tüm sınıfların veya yöntemlerin statik olmasının yan etkileri veya dezavantajları nedir? Statik yapıcı neden ilk çalışmak zorundadır? Statik yıkıcı yöntem neden yoktur? Main yöntemi neden statiktir? Anonim sınıfların kullanım amacı nedir, nesneye dayalı programlamada yetersiz kalabilir mi? 6.03.16