CodeGym /Java Blogu /Rastgele /Java'da Kapsülleme
John Squirrels
Seviye
San Francisco

Java'da Kapsülleme

grupta yayınlandı
MERHABA! Bugünün dersini Java'da Kapsüllemeye ayıracağız ve hemen örneklerle başlayacağız :) Burada sıradan bir soda dağıtım makineniz var . Sana bir sorum var: Nasıl çalışıyor? Ayrıntılı bir cevap vermeye çalışın: Soda nereden geliyor? İç sıcaklık nasıl korunur? Buz nerede saklanır? Makine hangi şurubu ekleyeceğini nasıl biliyor? Muhtemelen bu sorulara cevabınız yok. Tamam, belki de herkes bu makineleri kullanmıyor. Şu anda o kadar popüler değiller. Başka bir örnek deneyelim. Her gün kesinlikle birçok kez kullandığınız bir şey. Bir fikrim var! Google arama motorununKapsülleme ilkeleri - 2 nasıl olduğunu söyleİşler. Girdiğiniz kelimelerle ilgili bilgileri tam olarak nasıl arar? Neden bu sonuçlar en üstteyken diğerleri değil? Google'ı her gün kullanmanıza rağmen muhtemelen bilmiyorsunuzdur. Ama bu önemli değil. Sonuçta, bilmeniz gereken bir şey değil. Tam olarak nasıl çalıştığını düşünmeden bir arama motorunu kullanabilirsiniz. Nasıl yapıldığını bilmeden bir makineden soda satın alabilirsiniz. İçten yanmalı motorun nasıl çalıştığını araştırmadan ve hatta lise fiziği bilmeden araba kullanabilirsiniz. Tüm bunlar, nesne yönelimli programlamanın ana ilkelerinden biri sayesinde mümkündür: kapsülleme. Konuyla ilgili farklı makaleleri okurken, iki yaygın programlama kavramıyla karşılaşmış olmalısınız: kapsülleme ve bilgi gizleme. Olduğu gibi, farklı insanlar kelimeyi anlıyor ' kapsülleme' farklı anlamlara gelir. Tam olarak anlamanız için her iki terimi de deşifre edeceğiz. Programlamada, orijinal anlamıkapsülleme, verileri ve bu verilerle çalışmak için yöntemleri tek bir pakette ("kapsül") birleştiriyordu. Java'da, kapsülleme paketi sınıftır . Sınıf, hem verileri (alanları) hem de bu verilerle çalışmak için yöntemleri içerir. Kapsülleme ilkeleri - 3Bu size apaçık görünebilir, ancak diğer programlama paradigmalarında her şey farklı düzenlenmiştir. Örneğin, işlevsel programlamada veriler, veri işlemlerinden kesin olarak ayrılır. Nesne yönelimli programlamada (OOP), programlar hem verilerden hem de verilerle çalışmak için işlevlerden oluşan kapsüllerden (sınıflardan) oluşur.

Şimdi bilgi gizleme hakkında konuşalım

Nasıl inşa edildiklerini veya nasıl çalıştıklarını anlamadan her türlü karmaşık mekanizmayı nasıl kullanırız? Çok basit: yaratıcıları basit ve kullanışlı arayüzler sağladı. Bir soda makinesinde arayüz, ön paneldeki düğmelerdir. Bir düğme, fincan boyutunu seçmenizi sağlar. İkinci bir düğme ile şurubu seçiyorsunuz. Üçüncüsü buz eklemekten sorumludur. Ve tüm yapman gereken bu. Makinenin içinin nasıl göründüğü önemli değil. Önemli olan kullanıcının sodayı üç tuşa basarak alabileceği şekilde tasarlanmış olması. Aynı şey bir araba için de geçerli. İçeride ne olduğu önemli değil. Önemli olan sağ pedala bastığınızda araba ileri doğru hareket ediyor, sol pedala bastığınızda ise araba yavaşlıyor. Bilgi gizlemenin özü budur. Hepsi bir program' 'iç organlar' kullanıcıdan gizlenir. Bu tür bilgiler gereksiz veya kullanıcı için gereksizdir. Kullanıcının bir nihai sonuca ihtiyacı vardır, dahili bir sürece değil. Örneğin, şuna bir göz atalımAraç sınıfı:

public class Vehicle {

   public void gas() {

       /* Some complicated things happen inside a car.
       As a result, it moves forward */
   }

   public void brake() {

       /* Some complicated things happen inside a car.
       As a result, it slows down */
   }

   public static void main(String[] args) {

       Vehicle vehicle = new Vehicle();

       // How everything looks to the user

       // Press one pedal, the car moves
       vehicle.gas();

       // Press the other pedal, the car brakes
       vehicle.brake();
   }
}
Bir Java programında uygulama bu şekilde gizlenir. Tıpkı gerçek hayatta olduğu gibi: kullanıcıya bir arayüz (yöntemler) sağlanır. Bir programda, bir eylemi gerçekleştirmek için bir araca ihtiyacınız varsa, istediğiniz yöntemi çağırmanız yeterlidir. Bu yöntemlerin içinde olanlar gereksizdir. Önemli olan, her şeyin olması gerektiği gibi çalışmasıdır. Burada uygulama gizlemeden bahsediyoruz. Java ayrıca veri gizlemeye sahiptir. Alıcılar ve ayarlayıcılar hakkındaki derste bunun hakkında yazdık , ancak bir hatırlatmadan zarar gelmez. Örneğin, bir Cat sınıfımız var:

public class Cat {

   public String name;
   public int age;
   public int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }


}
Belki geçmiş bir dersten bu dersteki sorunun ne olduğunu hatırlıyorsunuzdur? Değilse, hatırlayalım. Sorun, verilerinin (alanlarının) herkese açık olmasıdır. Başka bir programcı, ağırlığı 0 ve yaşı -1000 olan isimsiz bir kediyi kolaylıkla yaratabilir:

public static void main(String[] args) {

   Cat cat = new Cat();
   cat.name = "";
   cat.age = -1000;
   cat.weight = 0;

}
Bu durumda, meslektaşlarınızdan birinin geçersiz duruma sahip nesneler oluşturup oluşturmadığını dikkatlice takip edebilirsiniz, ancak bu geçersiz nesneleri oluşturma olasılığını bile ortadan kaldırmak çok daha iyi olacaktır. Kapsülleme ilkeleri - 4Aşağıdakilerin yardımıyla veri gizlemeyi başarıyoruz:
  1. erişim değiştiricileri ( özel, korumalı, paket varsayılanı );
  2. alıcılar ve ayarlayıcılar.
Birisinin kediye negatif bir yaş vermeye çalışıp çalışmadığını kontrol etmek için onları kullanırız. Daha önce de söylediğimiz gibi, kapsülleme üzerine çeşitli makalelerin yazarları aslında kapsüllemeye (veri ve yöntemleri birleştirme) veya bilgi gizlemeye veya her ikisine birden atıfta bulunuyor. Java'nın her iki mekanizması da vardır (diğer OOP dillerinde durum böyle olmayabilir), bu nedenle son seçenek en doğrudur.

Kapsülleme bize birkaç önemli avantaj sağlar:

  1. Doğru nesne durumunun izlenmesi. Bunun örneklerini yukarıda vermiştik: setter ve private değiştirici sayesinde ağırlığı 0 olan kedilere karşı programımızı emniyete aldık.

  2. Kullanıcı dostu arayüz. Yalnızca kullanıcıya açık olan yöntemleri bırakıyoruz. Kullanıcının bir sonuç almak için onları araması yeterlidir. Ve nasıl çalıştıklarının ayrıntılarını araştırmaya gerek yok.

  3. Kod değişiklikleri kullanıcıları etkilemez. Tüm değişiklikleri metotların içinde yapıyoruz. Bu, kullanıcıları etkilemiyor: gazı uygulamak için parking.gas() yazdılar ve bunu yapmaya devam edecekler. gas() yönteminde bir şeyi değiştirdiğimiz gerçeği görünmez kalır: daha önce olduğu gibi, sadece gerekli sonucu alırlar.
Yorumlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION