hocam bildigim kadariyla encapsulation konusunu anlatmaya calisayim. encapsulation basit bi bakis acisiyla sinifa ozgu verileri gizlemek ve o verilere erisimde belli fonksiyonlari kullanarak oncelikle evet encapsulation kavrami veri gizlemekle alakalidir. fakat veri gizlemenin faydalari yada nerede ise yaradigi hakkinda cogu kaynak net bi bilgi vermez. bir ornekle anlatmaya calisayim. ornegin bi is icin yazdigin bir sinif var. bu sinif bir kisiye ait bilgileri tutan bir sinif. bu sinif, is bu ya, kisiye ait hem dogum yilini hem de yasini tutuyo encapsulation kavramini daha iyi anlatmak acisinda ilk olarak kotu kodu ) ortaya koyucam. #include <stdio. h> class Person ; int main oncelikle kod'a baktigimiz zaman encapsulation a dair hic bir belirti yok. sinifin butun verisi ortada ve kolayca manipule edilebilir. ornegin bir insan 1800 yilinda dogmus ve 13 yasinda ayarlanabilir. ikisi de sacmalik :) ve biz, hem veri elemanlarini ayarlarken/okurken kontrolu saglamaliyiz hem de bu islemleri kolaylastirabilicek bir arayuz yazmaliyiz. bu noktada devreye encapsulation giriyo iste. yani veri elemanlari dis mudahalelere kapali olmali ve yalnizca bizim sundugumuz arayuz ile erisilebilir olmali. asagida da bu probleme cozum getirmeye calistik. #include <stdio. h> class Person { public: Person { if (! SetBornYear } int GetBornYear bool SetBornYear { if (BornYear < 1800) m_bornyear = BornYear; m_age = 2014 - BornYear; return true; } int GetAge private: int m_age; int m_bornyear; }; int main gordugumuz gibi SetBornYear fonksiyonu ayni anda hem m_age hemde m_bornyear private degiskenleri set ediyor. yani bizim istegimiz disinda bir duzenleme sozkonusu degil. ve yukarda soyledigimiz problem, 1800 yilindan kucuk dogumlulara hata firlatiyoruz. ve belkide en buyuk fayda olarak, encapsulation sayesinde, bir gun gelir m_age degiskenini ortadan kaldirmak istersek eger. arayuzumuzu kullanan kod bloklarinda degisiklik yapmadan , yalnizca Person sinifinin internal larinda bi kac degisiklik yaparak butun sistemin calismasina oldugu gibi devam etmesini saglayabiliriz. ornegin 3 sene sonra kendi kendinize , 'yahu bu m_age burda fazla, ben bunu m_bornyear'i kullanarak hesaplayabilirim.' dediginizde eger kodunuzu buna gore yazmadiysaniz, 'ama bu saatten sonra olmaz, kim bilir kac modul o m_age'i kullaniyordur' gibi bir hayal kirikligiyla son bulacaksiniz. ancak eger encapsulation kavramindan bihaber degilseniz, ve kodunu bu kriterleri dusunerek yazdiysaniz, 'hemen degistirelim yahu, elimize mi yapisicak' gibi bir cumleyle baslayan ve mutlu edici bir sona dogru ilerleyen yola giriceksiniz. :) asagida da m_age'in cikarilmis olmasina ragmen main fonksiyonunda hicbir degisiklik olmamasina bir ornek var. #include <stdio. h> class Person { public: Person Person { if (! SetBornYear } int GetBornYear bool SetBornYear { if (BornYear < 1800) m_bornyear = BornYear; return true; } int GetAge private: int m_bornyear; }; int main umarim anlatabilmisimdir. renegadealien tarafından 22/Oca/14 17:27 tarihinde düzenlenmiştir Sanıyorum kendi ataszümü yaptım, kaynak belirterek kullanabilirsiniz. 10.05.2013 tarihli google arama sonucu : Aradığınız - "herşeyin hayırlısı rampanın bayırlısı" - ile ilgili hiçbir arama sonucu mevcut değil. Not : Syleyeni belli olduğu için ataszü değil, zlüsz oluyormuş, dolayısı ile kendi zlüszümü yapmış oldum :)

ben bunu bi tek cisco da hatırlıyorum. Umarım yardım eden çıkabilir. Php for SEO nun ardından Php for Gcode

oop programlamada dis mudahale gorece biseydir hocam. ornegin ben bir sinif yaziyorsam ve o sinifin adi Person ise, baska herhangi bir sinifin bu sinifin veri elemanlarina erismesi , bunlari manipule etmesi dis mudahale olarak nitelendirilir. ) Soz gelimi, People diye bir sinifimiz oldugunu dusunelim ve bu sinifin bir cok Person sinifindan uretilmis nesne barindirdigini dusunelim . People sinifi Person sinifina ait veri elemanlarina herhangi bir arayuzden gecmeden erisirse burada encapsulation dan soz edilemez. direct manipulation soz konusudur ve eger ki durum bu ise, yukarida bahsettigim yararli durumlar soz konusu degildir. yani kisaca hocam, oop da dis mihratlar demek, o sinif acisindan bakildiginda, diger siniflar demek.. Person acisindan People, People acisindan ise Person dis mihrattir :) ve birbirlerinin veri elemanlarina mudahalesi, dis mudahaledir. renegadealien tarafından 23/Oca/14 15:29 tarihinde düzenlenmiştir Sanıyorum kendi ataszümü yaptım, kaynak belirterek kullanabilirsiniz. 10.05.2013 tarihli google arama sonucu : Aradığınız - "herşeyin hayırlısı rampanın bayırlısı" - ile ilgili hiçbir arama sonucu mevcut değil. Not : Syleyeni belli olduğu için ataszü değil, zlüsz oluyormuş, dolayısı ile kendi zlüszümü yapmış oldum :)

Merhaba arkadaslar nesne tabanlı programlamaya yeni basladım ve işi bilenlere bir sorum olacak. Encapsulation bildiginiz gibi oop jargonunda sınıfın gereksiz ayrıntılarını nesne kullanıcısından saklamak ve daha çok sınıf alanlarına değer girerken bu değerleri bir kontrolden geçirmek olarak tanımlanıyor. Fakat bunu yapmak için neden encapsulationa ihtiyaç duyulur anlamıyorum. Veririnin girildiği yerde bir if blogu içinde de bu kontroller yapılamaz mı? rneğin: if(int. parse(console. readline > 1000000) else gibi... Aydınlatanlara teşekkürler...

Hocam bu veriyi program içerisinde 100 farklı yerde alıyorsan ne olacak? :) Hepsinde ayrı ayrı mı kontrol edeceksin? Ayrıca encapsulation'ın tanımı bu değil tam olarak. Sınıf değişkenlerine adamın kafasına gre erişmesini engelliyorsun. En basitinden sınıfında araba modeli diye string bi değişken var. Sen bunu private yaparsın ve bi setter fonksiyon yazarsın diyelim ki BMW veya Mercedes girilirse atama yaparsın. Diğer tüm durumlarda boş yaparsın. Ama sen fonksiyon yazmak yerine bu değişkeni public yaparsan adam içine istediğini yazar. Ve kontrol ederim diyorsan da kontrol işlemini her yerde tekrar yazman gerekir. aynen mantık bu. http://www.serefakyuz.com/2011/06/csharpta-get-ve-set-metodlari.html şuda güzel bir rnek olabilir.

Hocam bu veriyi program içerisinde 100 farklı yerde alıyorsan ne olacak? :) Hepsinde ayrı ayrı mı kontrol edeceksin? Ayrıca encapsulation'ın tanımı bu değil tam olarak. Sınıf değişkenlerine adamın kafasına gre erişmesini engelliyorsun. En basitinden sınıfında araba modeli diye string bi değişken var. Sen bunu private yaparsın ve bi setter fonksiyon yazarsın diyelim ki BMW veya Mercedes girilirse atama yaparsın. Diğer tüm durumlarda boş yaparsın. Ama sen fonksiyon yazmak yerine bu değişkeni public yaparsan adam içine istediğini yazar. Ve kontrol ederim diyorsan da kontrol işlemini her yerde tekrar yazman gerekir. Hocam teşekkür ederim anlaşılır olmuş, oop tecrübesi olmadığı için takılıyorum byle şeylere :)

Sadece atana değer denetlemek haricinde değişkene erişimide denetlemiş oluyorsun. Ayrıca değişken her çağrıldığında get içindeki code bloğu ilele farklı işlemler yapıyorusun. Hem bu program güvenliği içinde nemli bildiğim kadarıyla... Birde işini çok kolaylaştırıyor. Her atama yapıldığında vaya çağrıldığında karar yapısı kullanmak eziyet ve programcılar tembel adamlar :D

Nmc reyiz çok güzel açıklamış ibret aldım. .

rene hocam yazını okudum, uğraşmışsın teşekkür ederim. anlamadığım tek bir şey var o da buradaki dış müdahale ne oluyor, nasıl bir dış müdahale nesnenin zelliklerine erişebilir ki? Fdumanli tarafından 23/Oca/14 14:23 tarihinde düzenlenmiştir

Hocam bu veriyi program içerisinde 100 farklı yerde alıyorsan ne olacak? :) Hepsinde ayrı ayrı mı kontrol edeceksin? Ayrıca encapsulation'ın tanımı bu değil tam olarak. Sınıf değişkenlerine adamın kafasına gre erişmesini engelliyorsun. En basitinden sınıfında araba modeli diye string bi değişken var. Sen bunu private yaparsın ve bi setter fonksiyon yazarsın diyelim ki BMW veya Mercedes girilirse atama yaparsın. Diğer tüm durumlarda boş yaparsın. Ama sen fonksiyon yazmak yerine bu değişkeni public yaparsan adam içine istediğini yazar. Ve kontrol ederim diyorsan da kontrol işlemini her yerde tekrar yazman gerekir. There are 10 types of people in the world. Those who knows binary and those who dont...

inceleyeyim