• Web sitemizin içeriğine ve tüm hizmetlerimize erişim sağlamak için Web sitemize kayıt olmalı ya da giriş yapmalısınız. Web sitemize üye olmak tamamen ücretsizdir.
  • Sohbetokey.com ile canlı okey oynamaya ne dersin? Hem sohbet et, hem mobil okey oyna!
  • Soru mu? Sorun mu? ''Bir Sorum Var?'' sistemimiz aktiftir. Paylaşın beraber çözüm üretelim.

Java'da güvenlik ve kapsülleme (set ve get metotları)

Üyelik Tarihi
7 Ocak 2015
Konular
4,091
Mesajlar
4,274
MFC Puanı
40
Java programlama dili yapısı itibarı bakımıyla diğer programlama dillerine nazaran daha güvenlidir.

Java'nın güvenli olmasını sağlayan en büyük etken kendinden önce geliştirilen dillerin zaafları göz önünde bulundurarak bu zaafları hesaplayıp ve bu doğrultuda geliştirilmiş olmasıdır. Bir önce ki makalemiz olan "C Programla dili ile Ram Bellekte Kısa Bir Seyahat" adlı makalemizde diziden taşan bir döngüden bahsetmiştik ve hatta aynı örneği Java da denediğimizde bize aşağıda ki hatayı vermişti.
Kod:
Exception in thread "main" java.lang.NullPointerException at tr.Run.main(Run.java:11)


Java C ve C++'ın yıkıcı özelliklerini kapatmış, güçlü ve yapıcı özelliklerini alarak geliştirilmiştir. Bu yüzden Java yapısı itibari ile de güvenli bir programlama dili olarak kendini göstermektedir. Bunun dışında Java da çeşitli şifreleme yöntemleri ve değişkenleri saklama gibi bazı güvenlikle ilgili metotlar kullanılmaktadır. Bunlardan en bilenini ise kapsüllemedir.

Kapsülleme Nedir?

Kapsülleme Java da belirlenen private(class'a özel) değişkenleri bazı metotlar arıcılığı ile direkt çağırılarak kullanmasını engelleyen bir metottur. Yani dolaylı olarak değişkenlere erişim sağlamaktadır. Bu metodun ana kullanılma sebebi ise class'ların içerisinde kullanılan değişkenlerin diğer class'ların direkt erişimine izin vermeyip olası bir güvenlik sorununa yol açmasını engellemektir. Bilindiği gibi private türünde ki değişkenler sadece bulunduğu class içerisinde kullanılabilir. Olası güvenlik zaaflarından kastımız; Deşifre edilen değişkenlerin ram bellekte bir adresi tutulur, adresi tespit edilen değişkene de her türlü müdahale söz konusu olabilir.

Bir çizimle anlatacak olursak kapsüllemeyi durum aşağıda ki örnekten ibarettir.


kapsulleme.jpg


Durumu açıklayacak olursak;

Başbakanın bir değişken olduğunu düşünelim, devletin önemli sırlarına vakıf ama aynı zaman da halkla da iletişimde olması gerek, Halkla direkt iletişim kurmaya çalışırsa başbakan, halkın içerisine sızmış kötü niyetli kişilerle de karşı karşıya gelmesi mümkün olabilir. Bu durum da milletin bekası için kurulmuş devletin, sırlarının gün yüzüne çıkma ihtimalini ortaya koyar. Yani milletimizin zor durumlarda kalmasına neden olabilir. Bu yüzden hem devletin sırlarını korumak hem de başbakanın halkla iletişimi sağlamak için başbakanlık kendine özgü bir kapsülleme metodu geliştirmiştir. İletişimin başladığı ilk nokta olan E-mail halktan atılan mesajdır, bu mesaj ilk olarak Şikâyet sorumlularına gelir süzgeçlerle süzer ve bir üst kat olan danışman yardımcısına iletilir, bu olayı Java da JFormattedTextField olarak düşünebiliriz JFormattedTextField sadece sayıları aldırmamızı sağlar, bir nevi yukarıda bahsettiğimiz Şikâyet sorumlularının görevini üstlenir ve bir süzgece tabi tutar, Sonra ise Şikâyet Sorumluları durumu bir üst katman olan Danışmana yardımcısına iletir. Oradan ise Danışmana Danışmadan Korumaya, Korumadan ise Başbakana gönderilir. Başbakan ise kendine gelen bilgileri alt kollara ayrılan devletin kademelerine gönderir. Java da durum bu kadar dolaylı ve güvenli olmasa da bu duruma benzer bir uygulama ile uygulanmaktadır. Derslerimizi takip eden arkadaşlar telefon rehberi projesini muhakkak incelemiştir. Dikkat ederseniz arayüz ile veritabanı arasında sürekli Domain class'ını kullandık veritabanından alınan bilgiler domain aracılığı ile arayüze gönderilir, aynı işlem yine tekrar edilip bu sefer arayüzden alınan bilgiler veritabanına gönderilir, kapsülleme sadece veritabanı için kullanılmaz. Kapsülleme güvenlik gerektiren her alanda kullanılabilir.

Şimdi Kapsüllemenin kullanımını anlatan öğrencilere yönelik bir örnek paylaşacağım;
Kod:

Kod:
public class OgrenciDomain {                 private int ogrno;                 private String ogradi;                 private String ogrsoyadi;                 public int getOgrno() {                                return ogrno;                 }                 public **** setOgrno(int ogrno) {                                this.ogrno = ogrno;                 }                 public String getOgradi() {                                return ogradi;                 }                 public **** setOgradi(String ogradi) {                                this.ogradi = ogradi;                 }                 public String getOgrsoyadi() {                                return ogrsoyadi;                 }                 public **** setOgrsoyadi(String ogrsoyadi) {                                this.ogrsoyadi = ogrsoyadi; }


Kod:
OgrenciDomain ogrenciDomain = new OgrenciDomain(); ogrenciDomain.setOgrno(Integer.parseInt(ogrenciNoField.getText())); ogrenciDomain.setOgradi(ögrenciadıField.getText()); ogrenciDomain.setOgrsoyadi(ogrenciSoyadField.getText());


Dikkat ederseniz arkadaşlar arayüzden veritabanına kayıt yaptırılmak isteniyor ve hiçbir şekilde OgrenciDomain class'ın da ki değişkenler kullanılmıyor ve OgrenciDomain class'ından başka hiç yerde de o değişkenler direkt çağırılamıyor. Kısaca Kapsüllemenin kullanılma amacı budur. Bugün ki dersimiz bu kadar bir sonra ki dersimizde görüşmek dileğiyle.
 
Üst