You are on page 1of 12

PROG 2 Bu yazda inheritancen programlamada ne anlama geldiinden bahsedeceim.

Inheritance aslnda Oject Oriented Programming in (Nesne Ynelimli Programlama) prensibinden bir tanesidir. Dier iki prensip ise encapsulation ve polymorphismdir. Tabii ki dier iki prensibe bu yazda deinmeyeceim. En sade ekliyle: inheritance sayesinde bir snfn metodlarn kullanan baka snflar tretilebilmesine yarar diyebiliriz. Ancak ayrntlarna birazdan ineceim. Eer daha nce nesne tabanl bir programlama dili kullandysanz, (Java ve C++ gibi) C#ta inheritancea ok abuk adapte olursunuz. Aslnda u ana kadar bahsettiklerim genel kltrden ibaretti ve eminim ounuz da bunlar biliyordunuz. (Nesne Tabanl Programlama gemii olmayanlar da dnerek byle bir giri yaptm.) Evet imdi ana ksma yani programn nasl yazlacana geliyoruz. Bunun iin basit bir rnek vereceim. Dnn ki student adnda bir snfmz(class) olsun. Ayrca bir de teacher adnda bir snfmz olsun. Bunlarn ortak zellikleri nedir? Tabii ki insan olmalar diyeceksiniz ve ana snfmza yani person snfna ulam olacaksnz. imdi basite zetlersek person snfndan teacher ve student adnda iki snf tretmi olduk. Srada bunun kodunu nasl yazacamz var. Alkanlklara devam edip adm adm kodu yazalm. (Bunu program yazarken de ilke edinirseniz faydal olacana inanyorum. nce ne yapacanz adm adm belirleyin sonra belirlediklerinizi adm adm uygulamaya geirin.) I. lk nce person snfn yazalm.

using System; using System.Windows.Forms; namespace Miras { public abstract class Person //snfn sadece tretileceini //belirtmek iin snf abstaract keywordn kullanarak soyutladk //Ancak burada abstaract keywordnn kullanlmasndaki temel //faktr bu snfn abstract metod iermesidir. { //Tretilen snflarda kullanlmak zere 3 tane deiken tanmladk. protected string Name; protected int Age; protected string Gender;

//Tretilen snflarda metodun ii doldurulmas iin //abstract olarak makeAction metodu tanmladk public abstract void makeAction();

public Person() { } } }

II.

imdi de Student snfn yazalm.

using System; using System.Windows.Forms; namespace Miras { //Student class Person classndan miras aldn belirtiyoruz. public class Student:Person { //Person snfnda tanmlanan abstract metodu override ederek //metodun iini istediimiz gibi doldurduk. public override void makeAction() { MessageBox.Show(Ben bir renciyim); } public Student(string name,int age,string gender) {

this.Name=name; this.Age = age; this.Gender=gender; } } } III. Sra Teacher snfn yazmaya geldi.

using System; using System.Windows.Forms; namespace Miras { public class Teacher:Person //Teacher class Person classndan // miras alyor { private string Unvan; //Teacher snfnda kullanlmak zere //Unvan adnda bir deiken tanmladk. //Person snfnda tanmlanan abstract metodu override ederek //metodun iini istediimiz gibi doldurduk.

public override void makeAction() { MessageBox.Show(Ben bir retmenim); }

public Teacher(string name,int age,string gender,string unvan) {

this.Name=name; this.Age = age; this.Gender=gender; this.Unvan=unvan; } }// teacher snfnn sonu

}// Miras isim uzaynn sonu

imdi dikkat edilmesi gereken noktalar sralayalm: I. Abstaract (soyut) snftan yeni bir snf tretilemez. rneimizde person snf abstract snftr ve new anahtar szc kullanlarak yeni nesne oluturulmaz. II. Abstract metodlarn mutlaka ileri bo olarak yaratlr ve tretildikleri snflarda (en az bir snf tretilmek zorunda) mutlaka ileri override anahtar szc kullanlarak doldurulur. III. Bir snftan miras yolu ile baka bir snf tretilecei zaman temel snf(base class) illa ki abstract anahtar szc ile tanmlanmak zorunda deildir. (Eer abstract metod iermiyorsa.)

C SHARPTA BAKA BR HESAP MAKNES RNE using System; using System.Collections.Generic; using System.Linq; using System.Text;

namespace console_uygulama {

class Program {

//Ana Metod static void Main(string[] args) { //a birinci say //b ikinci say //c sonu veya hesap makinesi ilem modu int a, b, c, devam = 1;

while (devam == 1) { Console.WriteLine();

Console.WriteLine("Yeni islem ==>");

Console.Write("a = ");

a = Convert.ToInt16(Console.ReadLine());

Console.Write("b = ");

b = Convert.ToInt16(Console.ReadLine());

// Hesap Makinesi yapt ilemler. stenirse bunlar arttrlabilir. Console.WriteLine("bolme->1,carpma->2,ckarma->3,toplama->4, hepsi->5," + "yeni sayi gir->6, cks->0 "); Console.Write("\n<<");

c = Convert.ToInt16(Console.ReadLine());

if (c == 0) devam = 0;

if (c <= 5) { if (c == 2 || c == 5) { // Hesap Makinesi arpma ilemini yapar Console.WriteLine("a * b = " + carpma(a, b)); }

if (c == 1 || c == 5) { // Hesap Makinesi blme ilemini yapar Console.WriteLine("a / b = " + bolme(a, b)); }

if (c == 3 || c == 5) { // Hesap Makinesi karma ilemini yapar Console.WriteLine("a - b = " + cikar(a, b)); }

//if (c == 4 || c == 5) //{

// // Hesap Makinesi toplama ilemini yapar // Console.WriteLine("a + b = " + topla(a, b)); //}

// Bu if blou ile yukardaki if blou ayn ilemi yapar if (c == 4 || c == 5) { // Hesap Makinesi toplama ilemini yapar Console.WriteLine("a + b = {0}", topla(a, b)); } } } }

// Hesap Makinesi arpma metodu private static int carpma(int a, int b) //method { // Hesap Makinesi arpma ilemi sonucu return a * b; }

// Hesap Makinesi toplama metodu private static int topla(int a, int b) { // Hesap Makinesi toplama ilemi sonucu return a + b; }

// Hesap Makinesi blme metodu private static int bolme(int a, int b) { // Hesap Makinesi blme ilemi sonucu return a / b; }

// Hesap Makinesi karma metodu private static int cikar(int a, int b) { // Hesap Makinesi karma ilemi sonucu return a - b; } } } POLMORFZME BR RNEK: using System; using System.Collections.Generic; using System.Text;

namespace PolimorfizmOrnek1 { class insan { public virtual void selamver() { Console.WriteLine("ugu");

} } class fransz : insan { public override void selamver() { Console.WriteLine("bonjour"); } }

class ingiliz : insan { public override void selamver() { Console.WriteLine("Hi"); } } class Program { static void Main(string[] args) { ingiliz ing = new ingiliz(); ing.selamver(); Console.Read(); } } }

Kapslleme (Encapsulation), nesne ynetlimli olarak hazrlanan bir yazlmda en nemli konulardan birisidir. Kapsllemenin iki nemli amac vardr: 1. Arka Plan Kodlarn Gizleme: Oluturulan bir class ierisinde kullancnn ilemlerini daha kolay gerekletirebilmesi iin baz ilemler birletirilerek (kapsllenerek) tek bir ilem gibi gsterilir. rnein veritabanna balant ileminde, biz sadece balant deikeninin Open() metodunu kullanmaktayz. Fakat snf ierisinde kullancdan ald parametreleri kullanarak balanty gerekletirebilmek iin birok metod bulunmaktadr. Bu metodlar kullancya gsterip balanty salayabilmek iin bunlar u ekilde birletirin demek yerine bu ilem snf ierisinde yaplm ve kullancnn kolaylkla kullanabilmesi iin Open() metodu oluturulmutur. 2. Deikenlere Tam Eriimi Engelleme: Snf ierisinde oluturduumuz global deikenlere dardan erimek iin public olarak tanmlama yapmaktayz. Fakat bazen bu deikenlerin deerlerini deitirmek istemeyebiliriz. Fakat kullanmamz da gerekebilir. Bu durumda deikenimizi kapsllememiz gerekmektedir. Yani, bu deikeni private olarak tanmlamak ve bir readonly property ile bu deikenin yazma iznini ortadan kaldrmamz gerekmektedir. Bu konuyu bir rnek ile pekitirelim: Oluturacam program ierisinde SMS gnderme ilemi gerekletirmek istiyoruz. Bu ilem iin SMS isimli bir snf oluturacaz. Bu snf ierisinde SMS gnderebilmek iin gerekli ilemler yaplacaktr. Ayrca kullancnn Trke karakter kullanmas ihtimalini gz nnde bulundurarak bu karakterleri dzenleme ilemini de gerekletirmemiz gerekecektir: class SMS { private string kullaniciAdi, sifre; public SMS(string kullaniciAdi, string sifre) { this.kullaniciAdi = kullaniciAdi; this.sifre = sifre; } private void TurkceKarakterleriDuzenle(ref string mesaj) { char[] trKarakterler = { '', '', '', '', '', '', '', '', '', '', '', '' }; char[] ingKarakterler = { 'C', 'g', 'i', 'o', 's', 'u', 'C', 'G', 'I', 'O', 'S', 'U' }; for (int i = 0; i < ingKarakterler.Length; i++) {

mesaj.Replace(trKarakterler[i], ingKarakterler[i]); } } private string XMLOlustur(string mesaj) { //Mesaj metnini, kullanc ad ve ifreyiXML ierisine yerletir. throw new NotImplementedException(); } private void SMSGonder(string xmlMetni) { //SMS'i gnderme ilemi } public void Gonder(string mesaj) { //Trke karakterleri dzenle TurkceKarakterleriDuzenle(ref mesaj);//1

string xmlMetni = XMLOlustur(mesaj);//2

SMSGonder(xmlMetni);//3 } } Bu snf kullanan bir kullanc, SMS gnderebilmek iin XML dzenleme, XML'i sunucuya gnderme ve karakterleri dzenleme ilemlerini yapmasna gerek olmadan sadece Gonder isimli metodu kullanarak mesajn gnderebilecektir. SMS smsMesaji = new SMS("Kullanc Ad", "ifre"); smsMesaji.Gonder("Mesaj Metni");

imdi kapsllemenin kullanld 2. maddeyi inceleyelim:

Geometrik ekiller ile ilgili bir program yazmaktayz ve bu program ierisinde her nesne tr iin bir snf oluturuyoruz. rnein kare ilemleri iin Kare snfn oluturuyoruz. Kare snfndan trettiim bir kare deikenimin enini deikenim olutururken belirleyip bir daha deitirmek istemiyorum: class Kare { private double kenar; public Kare(double kenar) { this.kenar = kenar; } public double Kenar { get { return this.kenar; } } http://www.yazilimmutfagi.com/MakaleOku.aspx?MakaleKey=6e9c2dfb-8e80-4ffd-af72b9e20ab0c988

You might also like