• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 23.4.2016 00:55:33C programlama 2 oyun
  • 20.4.2016 16:34:41Local Database
  • 15.4.2016 14:26:15Fatura kayıt işlemi
  • 21.3.2016 01:55:30C# problem

Popüler Sorular

  • 27.5.2012 05:49:50Asp.Net ile Date time alana veri ekleyemiiyorum ?
  • 2.4.2012 00:45:18.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 12.5.2012 08:44:49Acil Yardım
  • 27.5.2012 13:46:51veri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LibreOffice
  • LINQ
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

  • 09.07.2013 Algoritma ve Programlama Mantığı Kitabı
  • 11.05.2013 Yazılım Dilleri'ne Destek Verin
  • 12.04.2013 RFID Mimarisi ve Programlama Kitabı
  • 19.02.2013 Türkiye'nin İlk Asp.Net 4.5 Kitabı
IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

OOP - NESNE TABANLI PROGRAMLAMA - III ( ENCAPSULATION)

Bir önceki yazımızda programlama dünyasının en önemli tekniklerinden olan Object Oriented Programming yani Nesne Tabanlı Programlama Tekniğinin ikinci bölümünde örnek bir proje üzerinde oluşturduğumuz

18.06.2012

Yazar: Muhammed ÖNAL (Google+)

Kategori: VB.NET

6420

VB.Net & NESNE TABANLI PROGRAMLAMA –III

ENCAPSULATION(KAPSÜLLEME)

 

Merhaba değerli arkadaşlar,

Bir önceki yazımızda programlama dünyasının en önemli tekniklerinden olan Object Oriented Programming yani Nesne Tabanlı Programlama Tekniğinin ikinci bölümünde örnek bir proje üzerinde oluşturduğumuz class içinde tanımladığınız bir alana class dışından erişmeği göstermiştik. Bu yazımızda ise bir önceki yazımızda vermiş olduğumuz örnek projemizde oluşan problemimize Encapsulation( Sarma / Kapsülleme) tekniği ile çözüm getirmek olacak.

 

Evet sevgili okurlarımız, Örnek projemiz üzerinde ki problemimize çözüm getirmeden önce dilerseniz, Encapsulation ya da Sarma / Kapsülleme’ nin ne olduğunu öğrenelim.

Encapsulation ( Kapsülleme / Sarma) ;

• Her sınıf çeşitli üyelerden (Özellikler & Metotlar) oluşur.

• Bazı özellikler ve metotların ait olduğu sınıfın dışında erişimini sınırlama özelliğine Encapsulation (Sarma / Kapsülleme) denir.

• Encapsulation sağlamak için “private”,“public”ve“protected”sözcükleri kullanılır.

-          Bunlara erişim modifier (erişim belirleyici) denir. Hiçbirini kullanmamak ta belli bir tercih anlamına gelir.

 

Erişim Belirleyiciler (Access Modifier) :  
Nesnelere erişimin ne şekilde olacağı, hangi nesnenin hangi özelliğe ve metoda ne şartlarda erişebileceği Erişim Belirleyicileri (Access Modifier) ile gerçekleştirilir.

Erişim Belirleyiciler, değişkenlerin ve metotların tanımından önce belirtilirler.

( Aşağıdaki figürde sınıf içindeki metodun diğer metot ve sınıf değişkenlerine erişimi gösterilmektedir.)


Dört Farklı Erişim Belirleyicisi (Access Modifier) vardır:

 

1-       Friendly (Default)

2-       Public

3-       Private

4-       Protected

 

1-Friendly (Default) Erişim:

 

•Hiçbir erişim belirleyici kullanılmazsa, bu üye  ‟package private” olur.
•Ona sadece aynı paketteki diğer sınıf ‘lar erişebilir, diğer paketlerdekiler erişemez.

2- Public Erişim:

•Sistemdeki bütün sınıfların erişebilmesini sağlamak için ‟public” erişim belirleyicisi kullanılır.
•Bu belirleyici özellikle başkaları erişsin diye yazılan özellik ve metotlar için kullanılır.
•Bir nesnede ne kadar az “public” değişken varsa dışarıya o kadar sade görünür ve o kadar kolay kullanılır.

3- Private Erişim

•Bir özellik veya metodun sadece tanımlandığı sınıftan erişilebilmesini, başka bir deyişle, o sınıf dışındaki bütün sınıflardan (aynı pakette olsalar bile) erişiminin yasaklanmasını sağlamak için ‟private” anahtar kelimesi kullanılır.

•Bir değişkenin dışarıdan görülebilmesini ancak değiştirilememesini veya değiştirme işleminin sınıfın kontrolünde yapılmasını sağlamak için standart bir yöntem izlenir.


              ▫Bir özelliği read- only (saltokunur) yapmak için,o özellik “private” yapılır.

             ▫Ona erişmek için bir tane public metod yazılır. Bu şekilde dışarıdan özelliklerinin değerleri dolaylı olarak öğrenilmiş olur

4-Protected  Erişim

•Bazı durumlarda bir özellik veya metodun dışarıya kapalı olmasını ancak o sınıftan türeyenlere açık olması istenebilir.

•Bu durumda 'protected' erişim belirleyicisi kullanılır.

•Bu anahtar sözcük, belli bir özellik veya metodun sadece ondan türetilen sınıfları ilgilendirmesi durumunda kullanılır.

•Bir sınıf türediği sınıfın bütün public özelliklerine erişebilir hale gelir.

         ▫Zaten bunlara her sınıftan erişilebilmektedir.
         ▫Hiçbir private özellik türetilen sınıfa geçmez. Bunlar diğer bütün sınıflara da kapalıdır.
         ▫Ancak protected özellik ve metotlar dışarıya kapalı oldukları halde, türetilen sınıf bunlara erişim hakkına sahiptir.

•Erişim belirleyici olarak “protected” verilmiş özellik veya metotlara o sınıfla aynı paket içerisinde bulunan bütün sınıflar tarafından da erişilebilir.

Erişim Düzeyleri Sıralaması

 

• Encapsulation (Sarma / Kapsülleme ) düzeyleri için    public > protected > friendly > private

şeklinde bir sıralama yapılır.

 

•Büyük olan düzey küçük olanların haklarını da kapsar.

•Bir özelliğin “public” olup “private” özelliği içermemesi, yani tanımlandığı sınıftan erişilemez ama onun dışındaki bütün sınıflardan erişilir gibi bir duruma sahip olması söz konusu olamaz.

Bu bilgileri verdikten sonra şimdi örnek Projemizde oluşan problemi Encapsulation ile çözelim.

Örnek Projemizi görmek isteyen arkadaşlar bir önceki yazımızı VB.Net Kategorisinden Nesne Tabanlı Programlama II adlı makalemize göz atabilirler.


Bir önceki makalemizde oluşturduğumuz Musteri sınıfını hatırlarsak… Bu sınıfın içinde bulunan özellikleri public erişim düzenleyicisi (Access Modifiers) ile tanımlamıştık. Ancak makalemin sonunda, böyle yapmanın mantıksal açıdan düşünüldüğünde mantıklı olmadığını, bazı özellikleri kısıtlamamız (yalnızca okuma ya da yazma gibi) gerekeceğini belirtmiş, hatta "MusteriNo" özelliğini örnek göstermiştim…


Peki, bunu nasıl yapmalıyız diye aklımıza bir soru gelmektedir?  Nasıl yapsak da, Sınıf içindeki üyeleri yalnızca okunabilir ya da yazılabilir hale getirsek? Acaba; bu işlem için metotlara başvursak nasıl olur? Deneyelim… Bu örnek deneyimiz için, "Adres" özelliğini kullanalım.


Öncelikle, "Adres" özelliğinin değerini Sınıf dışına döndürmesi, yani değerinin okunması için public Access Modifier'ı (Erişim Belirleyicisi) ile bir metot tanımlayacağız.  Mademki metodumuzu public yaptık, öyleyse "Adres" özelliği "private" olabilir. Ayrıca yazdığımız bu metot doğal olarak geriye string tipinde değer döndürecektir…

Öyleyse;


  
    Private Adres As String

 

    //"Adres" özelliğinin değerini yalnızca okumak için kullanılacak bir metod:

 

    Public Function OkuAdres() As String

 

        Return Adres

 

    End Function

 

 

Peki, şimdi sıra geldi örnek proje deneyimizin ikinci basamağına, yani  "Adres" özelliğine değer atayacak olan metodu yazmaya… Bunun için de yine public bir void metoda ihtiyacımız var  , dolayısıyla  özelliğe atayacağımız değeri bu metodun parametresi olarak alacağız:

 //"Adres" özelliğine yalnızca değer atamak için kullanılacak bir metod:

Public Sub YazAdres(ByVal deger As String)

 

        Adres = deger

 

    End Sub

 

 

 

Şimdi bakalım oluşturduğumuz bu metodlar çalışacak mı? Sınıfımızdan  bir nesne oluşturup görelim:

 

 

 

Bu kodu çalıştırdığınızda MessageBox'da "European University of Lefke" değerini görebiliriz. Bu, YazAdres() metodunun doğru bir biçimde çalışarak "European University of Lefke" değerini Sınıf içinde tanımlanan "Adres" alanına değer atadığını ve ardından OkuAdres() metodunun bu değeri geri döndürdüğünü gösteriyor. Böylece biz, Sınıf  içinde "Adres" alanıyla ilgili istediğimiz gibi çalışabiliriz. İşte bu yaptığımız, Nesne Tabanlı Programlama yani Object-Oriented Programming ‘in en temel prensiplerinden biri olan Encapsulation (Sarma / Kapsülleme)  işlemidir.

 

Evet değerli arkadaşlar şimdi gelin hep beraber biraz kod ortamından  uzaklaşıp aslında ne yapmak istediğimizi örneklerle açıklayalım…

Günlük hayatta sık kullandığımız bir örneği ele alalım;

Radyo ve Televizyon… Standart bir kullanıcı, televizyon izlerken içinde bulunan Transducer (anten aracılığı ile aldığı sinyalleri ses ve görüntüye çeviren parça)'i belirli bir frekans aralığında çalışması için ayarlayabilir mi? Cevap, kesinlikle hayır olacaktır. Biz kullanıcılar, televizyon veya radyo karşısında, ancak kanal değiştirir, sesini ayarlar, renkliğini ya da parlaklığını değiştiririz. Bir kullanıcı açısından düşünüldüğünde elbette ki bunlar bizim için yeterlidir.

İşte biz de Müsteri Sınıfımız için aynı şeyi yaptık… "Adres" alanımızı Encapsulate( Kapsülleme /Sarma)  ettik. Hemen aklımıza şöyle bir soru gelebilir. Peki, bu daha kolay yazılabilir mi? Elbette ki yazılabilir… Gelin şimdi buna bakalım.

 Projemiz için ikinci deneğimiz için Sınıfımıza  “ MusteriKartTipi” adında yeni bir üye ekleyelim.

Ve bunu deneğimizde “MusteriKartTipi” olarak ele alalım.

 

Kodlara göz attığınız zaman  belki de çok sık gördüğümüz – hatta kullandığımız – ama anlamını bilmediğiniz property (özellik) kavramını görüyorsunuz. Burada gördüğümüz; "get",  aslında az önce yazdığımız OkuAdres() metodunun, Adres alanı için yaptığının tam olarak aynısını MusteriKartTipi alanı için yapıyor. Haliyle "set" de YazAdres() metodunun görevini üstleniyor. Burada  siz değerli okurlarımıza söylemek istediğim bir şeyler var. Eminim ki birçok nesnenin herhangi bir özelliğinin intellisense sırasında karşınıza çıkan açıklamasını okurken "Get or Set" kelimeleriyle karşılaşmışsınızdır. Aslında bu açıklama bahsi geçen özellikten değer okuyabileceğinizi ya da yazabileceğinizi anlatmaktadır. Bu da özelliğin nasıl yazıldığı hususunda bize bir ipucu vermektedir.

Artık, bizim Sınıfımızın da MusteriKartTipi’ ni belirten "Tipi" adında bir özelliği bulunmaktadır…

Bildiğimiz gibi, Visual Studio'nun biz programcılar için  kısa yolları mevcuttur. Bir alanın Encapsulate edilmesininin de böyle bir yolu var. Şimdi gelin bir de bu yola bakalım, sıradaki alanımız, "MusteriNo" alanı olsun…

  Private MusteriNo As Byte

Bu alanımızın üzerine sağ tıklayalım ve ardından açılan menüden "Refactor" seçeneğini, ve alt menüden "Encapsulate Field" seçeneğini işaretleyelim.

 

 

Karşımıza çıkan ekran tamamladıktan sonra gördüğümüz gibi Property’miz hazır hale geliyor.



Şimdi bu noktada durup sizlere bir şeyler daha söylemek istiyorum, bir önceki makalemizde de aktardığımız bir durumu hatırlayalım. Musteri Sınıfımızın "musterinumarasi" özelliğinin dışarıdan değiştirilmesini istemiyoruz. Yani, sadece "okunabilir" olmasını istiyorum.

 

Bu durumda neler yapabiliriz. O zaman özelliğimizi değiştirelim:

 

Böylece, "MusteriNo" alanı (field) Sınıf dışından yalnızca "get" edilebilecek. İşte bu şekilde tanımladığımız özelliklere "read-only" (yalnızca okunabilir) property diyoruz. Yeri gelmişken hemen söylemek gerekirse; bunun tam tersi de mümkün. Yani yalnızca "set" edilen, "sadece yazılabilir" (write-only) özellik oluşturmak mümkündür.

 

Evet sevgili okuyucularımız bugünlük yazımızın sonuna gelmiş bulunmaktayız.

NOT :

Bu makalemizde de gerek yerli gerek yabancı kaynakları tarayarak Programlama dünyasının en önemli konularından ve tekniklerinden olan  OOP (Object-Oriented Programming) yani  Nesne Tabanlı programlama  için örnek bir projede üzerinde Encapsulation (Kapsulleme / Sarma)  tekniğini açıklayan bir yazıyı sizinle paylaşmış olduk.. Bir sonraki makalemizde OOP programlama Tekniklerinden olan Polynorphism ve Inheritance üzerinde duracağız. Programlama dünyasının bu büyülü dünyasına adım atan arkadaşlara yol gösterici olması amacıyla faydalı olması dileğiyle. Bir sonraki makalemizde görüşmek dileğiyle şimdilik hoşça kalın.

Saygılarımla;


Muhammed ÖNAL
Department of Computer Engineering at EUL ,Cyprus
Software copyright © Muhammed ÖNAL , 2012 EUL


E mail :        
onalmuhammed@acm.org

Blog :            http://muhammedonal.blogsayfasi.com
Web :            http://www.muhammedonal.com
Facebook:   
http://www.facebook.com/muhammedhazar.onal/
Academia :   http://eul.academia.edu/MuhammedOnal
Twitter     :  
http://twitter.com/#!/MuhammedOnal 

 

Yazar Hakkında

Muhammed ÖNAL

Muhammed ÖNAL

www.muhammedonal.com

Bilgisayar Mühendisi | RFID Sistemleri Uzmanı | İş Analisti | 2015 itibariyle sağlık sektöründe Bilgi Sistemleri Yöneticisi ve Üst yönetim Stratejik Planlama ve İş Analisti pozisyonunda çalışmaktadır.

Sosyal Medya

ORANLAR

  • 6420izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Hocam Link başka sayfaya yönlendiriyor.
  • merhaba benim merak ettiğim bir konu var y...
  • Merhaba download linki çalışmıyor. Rica et...
  • Nevzat Bey selamlar, Açıkçası bizler a...
  • Parametreleri Cache İşleminden Yalıtma kon...

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 106470
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 52815
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 43549
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ