Oriented etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Oriented etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

30 Nisan 2012 Pazartesi

C#'da OOP - 4 İnterface

Selamlar yazılımcı arkadaşlar.Bu makalemde interface nedir ne iş yapar bu kavramlar üstünde durucam.C#'da OOP - 3 Inheritance (Miras Kalıtım Alma) yazımda bahsettimmi hatırlamıyorum ama şimdi bahsedeyim.Şöyle bir durumumuz var C# yarattığımız objeler sadece bir başka objeden miras alabiliyorlar.İnterfacede aslında miras kavramına benzer ama farklıdır.Şöyledirki arkadaşlar OOP gerçek hayatı programlamak demiştik hatırlarsanız.Tüm kuşar uçar demiştik ama penguende bir kuştur ama uçamaz malesef.İşte burda interface dediğimiz yapı devreye girmektedir.O zaman Uçmayı bir interface olarak tanımlarız ve Sadece Uçabilen Kuşlara implemente ederiz ve sorun ortadan kalkar en basit şekilde böyle açıklanabilir gibi geliyor arkadaşlar.Tabi sadece sağladıklarıda bu değildir daha farklı özellikleride vardır.Bunlara tek tek değinicem.Kodlama kısmına geçelim arkadaşlar.Örneğimde Kuş sınıfım olucak buna bağlı olarakta bir penguenim ve bir martım olucak ve birte interface'im olucak IUcmak adında.


    public class Penguen :Kus
    {
        public bool YuzmeDurumu;
    }

Evet arkadaşlar ilk objem penguenim.Bilirsiniz penguenler yüzebilirler.Kuşlardan kalıtım almışım ve penguenimi yaratmışım.İkinci Örneğim Interfaceimin yazılmış hali olucak.

    public interface IUcmak
    {
        void uc();
    }

Interface'imde hazır arkadaşlar şimdi martımı oluşturucam ve Kus sınıfından miras alıp IUcmak interfaceinide implemente edicem.İmplemente işleminde karşıma şöyle bir ekran gelicek IUcmak'ın altı çizilicek ve içinde bir olay var bunuda ekleyelimmi diycek.



Resimde görüldüğü gibi arkadaşlar aşağıdada eklendikten sonraki kodları görüceksiniz.


    public class Martı:Kus,IUcmak
    {
        public void uc()
        {
            throw new NotImplementedException();
        }
    }

Şimdi gelelim sadece arkadaşlar.Interfacein bize sağladıklarından bir tanesi çok biçimlilik oldu burda.Bazı Kuşlar Uçabilir bazılarıysa uçamazlar.Ancak bir intercafe'i eklediğiniz zaman içindeki methotlarıda kullanmak zorundayız arkadaşlar.Bir açıdanda bir sözleşme.Beni kullanırsan benim methot yada methotlarımıda kullanmak zorundasın.Der şöyle düşünün winamp a bir eklenti yazıcaksınız diyelim winamp sizin yazdıklarınızı nerden bilicek nasıl algılıycak.Winamp'ın verdiği interfaceleri kullanırsınız ve bunlar sizi bazı methotları kullanmaya mecbur bırakır ve sizde mecburen kullanırsınız.Şimdi bu kısa notu da geçeyim ve uçan başka bir hayvanı ele alayım yarasa kuş değildir bildiğiniz gibi ama uçabilir.O zaman yarasa diye bir objem olsa bunada UIcmak interfaceini eklemem gerekicek.Yarasamda uçabilicek.
Anlatmak istediklerimi sizlere aktarabildiysem birşeyler aktarabilmişim demektir dostlar :)Okuduğunuz için teşekkürler.

24 Nisan 2012 Salı

C#'da OOP - 3 Inheritance (Miras Kalıtım Alma)

OOP ile ilgili yazılarıma devam ediyorum arkadaşlar.Bu yazımda miras alma konusundan bahsedicem.Örnek olarak Kangal köpeklerini ele alalım.Kangal bir köpektir.Köpek bir hayvandır.hayvanlarda canlıdır.Arada omurgalı hayvanlar omurgasız hayvanlar diyede ayrılabilir ama o kadar detaya girmiycem.Her canlının bir ismi vardır.her hayvan hareket eder.her köpek 4 ayak üstünde yürür.Buraya kadar geldiğimizde hepsini köpek üstünde birleştirebiliriz.Sonrada Kangal köpeğinin Koruma özelliğini ekleyebiliriz. Eğer böyle yapmazsak boş vere fazladan kod yazmış oluruz.Şöyle düşünün hayvandan sonra kedilerin geldiğini ve kedilerden sonrada Van kedisinin geldiğini.Neden tekrar tekrar özellikleri yazayımki.Daha alt bir katmandan miras alırım ve özellikleri üstüne inşa ederim.Yine gerçek hayatı kodlarımıza dökelim ve temel bir katmandan başlayalım.

İlk Olarak Hayvan katmanını temel aldım.


    public class Hayvan
    {      
        public bool _Cinsiyet;
    }

Bir hayvan Class'ım var ve Hayvan tipinde bir Obje yarattım.Her hayvanın bir cinsiyeti vardır ve bool tipinde tutucam bu cinsiyeti.



public class Kopek : Hayvan//Burada miras alma işlemi iki nokta ve miras alınıcak class olarak gerçekleşiyor
    {
        public string _ad;

        private void NefesAl()
        {
            MessageBox.Show("Nefes Aldım");
        }

        private void NefesVer()
        {
            MessageBox.Show("Nefes Verdim");
        }

        public void Havla()
        {
            NefesAl();
            MessageBox.Show("Hav Hav");
            NefesVer();
        }
    }

Kopek objemizide yarattık ve Hayvan'dan miras aldık şimdi resime bakalım


Kopek classımızda _ad isminde bir field tanımlamamıştık ama kopek objesi hayvandan miras aldığı için artık köpek nesnesindede cinsiyet fieldı görülebilmekte.Burda yaptığım tekrar yazmamak oldu.Burda 3 tanede methot tanımladım arkadaşlar bunlar NefesAl , NefesVer ve Havla methotları C#'da OOP - 2 Encapsulation konusunda fieldları kapsüllemiştik burdada erişim belirleyici olarak NefesAl ve NefesVer methotlarını private tanımladım.Yani burda yaptığım işlem Methot Encapsulation işlemi oldu.Dışarıdan Havla methodunu çalıştırdığımda önce nefes alıcak sonra havlıycak ardından da nefes vericek.Şimdi bir adım daha üst katmana geçelim.Kangal köpeğinin en bilindik özelliklerinden biri korumacı yapısıdır.Çobanların yoldaşıdır Kangallar.Kodlara dönersek bu sefer hayvan sınıfından değilde kopek sınıfından miras alıcak Kangal.


    class Kangal: Kopek
    {
        public void SuruyuKoru()
        {
            MessageBox.Show("Koruyorum");
        }
    }


Kangalın SuruyuKoru methotunuda yazdıktan sonra arkadaşlar miras alma işlemim tamamlanıyor.


            Kangal kng = new Kangal();
            kng._ad = "Karabaş";
            kng._Cinsiyet = true; // erkek olursa true dişi olursa false die düşündüm.
            kng.Havla();
            kng.SuruyuKoru();


Yukardaki örnekte bir Kangal yarattık ve miras aldığı özelliklerle beraber kangalı biçimlendirdik.Miras alma ile ilgili anlatabileceğim bu kadar arkadaşlar okuduğunuz için teşekkürler.


C#'da OOP - 2 Encapsulation

Merhaba arkadaşlar .Bu yazımda OOP'de Encapsulation işlemlerine değişnicem.Başlamadan önce birkaç durumdan bahsetmek istiyorum.Önceki yazımda  C#'da OOP - 1. Field diye birşeyden bahsetmiştim. Bu yazımdada Fieldlari kapsüllemekten bahsedicem. Kapsülleme işlemini yapan kısma Property denir.Bunu şöyle düşünebilirsiniz.Bir anne var birde çocuğu.Anne çocuğuna zarar gelmesini tabiki istemez.Senaryoyu şöyle canlandıralım gözümüzde .Bir bebek var ortada bir anne işte anne çocuğuna mama yediricek. Anne bu mamayı çocuğuna yedirmeden önce mamanın özelliklerini araştırır . Uygunsa çocuğuna mamayı yedirir.Kapsüllemede aynen böyle bir durumdur arkadaşlar.Fielda değer atamadan önce gelen değeri kontrol edip vericeğimiz koşula göre değer aktarma işlemini güvenli olarak yapmamızı sağlar. Burda sadece değerleri kontrol etmeyiz üstünde işlemler de yapabiliriz.  C#'da OOP - 1 yazımdaki örneği kullanarak devam edelim arkadaşlar.



    public class Insan
    {
        private string ad;
        private  string soyad;
        private  DateTime dogumtarihi;


        public string Ad { get; set; }
        public string Soyad { get; set; }
        public DateTime DogumTarihi { get; set; }
    }

Örneğimizde field alanlarını private yaptık.Burdaki amacımız dışarıdan yani Insan Class'ı dışından erişimi fieldlarımıza kesmektir yani erişimi engelliyoruz.Propertylerin get ve set methotları vardır.set methotu veriyi almamıza ve get methotuda veriyi göndermemize yarar bu methotlar içerisinde kotrollerimizi uygulayabiliriz. Mesela dışarıdan gelen doğum değerini kontrol edelim.



         public DateTime DogumTarihi 
         {
            get
            {
                return  dogumtarihi ;
            }
            set
            {
                if (value < DateTime.Now)
                {
                     dogumtarihi  = value;
                }
            }
         }


Örneğimizde arkadaşlar girilen yaş değeri üzerinde encapsulation uyguladık.Burdaki amaç örnek olarka 01.01.2010 yılındaysanız ve girilen doğum tarihi 01.02.2010 ise bunu yakalamak yani hatalı girişi engellemek.

Bir örnek daha yapalım ve bu sefer dışarıdan Ad değerinin tamamını string bir fonksyon kullanarak büyük harflere çevirelim.


        public string Ad
        {
            get
            {  
                return ad.ToUpper();
            }
            set
            {
                ad = value;
            }

        }



Örneklerdende anlaşılacağı üzere get ve set methotlarının kullanımı böyledir arkadaşlar. Property yapısı böyle işlemektir.Umarım yardımcı olabilmişimdir.





17 Nisan 2012 Salı

C#'da Object Oriented Programming (OOP) Giriş

Merhaba arkadaşlar.Sizlere OOP'den(Türkçe açılımı Nesne Yönelimli Programlama) bahsetmeden önce biraz geçmişten bahsetmek istiyorum.OOP'den önceki dönemlerde bilgisayarlar daha çok hesaplama yapmak için kullanılıyordu. Finansal ve Mali işlemler gibi. Bugünkü kullanım şekli çok farklı 1960 larla günümüzü yan yana koyduğumuz zaman bugün inanılmaz farklı bir yerdeyiz.Tabletler akıllı Telefonlar bugün olmazsa olmazlarımızdan.Gelişimlerini düşününce ve ne amaçla kullandığımızı düşününce elbetteki çok büyük farklar var. Eski günlerde hesaplama gibi işlemler için kullanırken bugün hayatımızı dijital ortama uyarlamamızı sağlıyorlar.
Bugün internette dolaşırken birçok farklı yapı birçok farklı site görebiliriz.Birçoğu günlük hayatımızın içerisinden kesit alınıp programlanmıştır.Bunlarla ilgili birkaç örnek vermek istiyorum dostlar.

Facebook'u ele alalım bolca özelliği var aklıma ilk gelenlerden biri fotoğraf albümleri.Eskiden birisinin düğünü olurdu giderdik oynardık eğlenirdik sevdiklerimizin mutlu gününde bolca Fotoğraf çekilirdik. Sonrada fotoğrafçıdan resimleri alır ve bir albüm yapar saklardık ara ara bakar geçerdik. Şimdiyse dijital fotoğraf makineleri ile resimleri alıp facebookta albüm oluşturup ordan bakıyoruz.

E-Ticaret sitelerini ele alalım bu seferde eskiden dışarıya çıkardık alışveriş yapmaya.Çarşı pazar ne ihtiyacımız varsa ona yönelik olarak dolaşırdık ve alışverişimizi yapardık.Bugün bunların yerini web siteleri aldı. Ürünleri kategorilere göre listeliyorlar ve sepete ekleyip ödememizi yapıyoruz üründe bize geliyor.

Albümler oluşturuyoruz alışveriş yapabiliyoruz ve dahasıda var tabiki bunlar sadece örnekti.Gerçekten tek farkı bu örneklerde ortamın dijital olması.Herşeyin dijital ortama taşınması.

Örnekleri düşününce ben OOP'i gerçek hayatı programlamak olarak görüyorum.Bunun için iyi bir gözlem yapmak gerekli tabikide.

Eskiden posta atardık şimdi ePosta atıyoruz arkadaşlar böyle bir örneğimiz daha var elimizde yine gerçekte olan birşey dijital ortama geçmiş durumda.

1-Mektubu kim yazar ?

2-Mektubu yazdıktan sonra gider posta kutusuna atar.


3-Postacı gelip alır ve adrese götürür.

4-Posta atılan kişide mektubu okur.

İnsan mektubu yazar bir nesne oluşturur.

Posta Kutusuna atar posta kutusuda başka bir nesnedir.

Postacı gelir mektup nesnesinin üzerindeki bir değeri okur bu değer adres bilgisidir ve adrese götürür.

Son olarakta diğer kişi mektubu alır ve okur.Nesne ile iletişime geçer arkadaşlar.

Gerçek dünya nesneler bu nesnelerin birbirleri ile iletişimi ile geçiyor.Yani gerçek hayat nesnelerden oluşuyor ve nesnelerin değerleri (Biz cihazın seri numarası) ve davranışlarından (işlev ve fonksyonları) ibarettir.Şöyle diyelim o zaman karşınıza bir nesne alın ve özelliklerini düşünün birde bu nesnenin bir işlevi vardır bir işe yarar bunuda fonksyon olarak düşünün işte bu nesneyi dijital ortama geçirmeye biz OOP diyoruz.

OOP programlamada nesneler dizayn ederek ve bu nesnelere işlemler yükleyerek programlama yapmamızı sağlayan bir tekniktir.

Okuduğunuz için teşekkür ederim arkadaşlar.