"Merhaba Amigo! Bugün size yeni ve ilginç bir dünya açacağım. Nesne Yönelimli Programlama'dan (OOP) bahsediyorum . Zaten sınıfları ve nesneleri tanıdınız. Bugün gidiyorsunuz. onlar hakkında daha fazlasını öğrenmek için, çok daha fazlasını."

OOP'nin dört sütunuyla başlayacağız. Bunlar soyutlama, kapsülleme, kalıtım ve polimorfizmdir. (Eskiden üç tane vardı ama soyutlama sonradan eklendi)

1) Soyutlama.

Gerçek hayatta iyi bir soyutlama örneği, bir şirketteki iş tanımlarıdır. Bir iş unvanı bir şeydir, ancak görevleri tamamen farklı bir konudur.

Gelecekteki şirketiniz için organizasyon şemasını oluşturduğunuzu hayal edin. Bir sekreterin görevlerini başka pozisyonlara dağıtarak bölebilirsiniz. CEO'nun işini birkaç farklı pozisyona ayırabilirsiniz: finans müdürü, teknoloji müdürü, pazarlama müdürü, insan kaynakları müdürü. Ya da ofis yöneticisi ve işe alma görevlisi pozisyonlarını bir araya getirebilirsiniz.

Diyelim ki şirketinizdeki pozisyonlar için isimler buldunuz ve sonra bu pozisyonların sorumluluklarını "belirleyin". Bu soyutlamadır - büyük ve yekpare bir şeyi birkaç küçük parçaya bölmek.

OOP: temel ilkeler - 1

Bir programcının bakış açısından soyutlama, bir programı düzgün bir şekilde nesnelere bölmektir.

Büyük bir program genellikle bir düzine farklı yoldan herhangi biriyle etkileşen nesneler olarak temsil edilebilir. Soyutlama, bir nesnenin ana özelliklerini seçmenize ve daha az önemli olan herhangi bir şeyi atlamanıza olanak tanır.

Soyutlama askeri bir strateji gibidir. Yanlış stratejiyi seçerseniz, hiçbir dahiyane taktik günü kurtaramaz.

2) Kapsülleme.

Kapsülleme, nesneler arasındaki etkileşimi basitleştirerek iyileştirmeyi amaçlar.

OOP: temel ilkeler - 2

Bir şeyi basitleştirmenin en iyi yolu, karmaşık bir şeyi bilmesi gerekmeyenlerden saklamaktır. Örneğin, bir Boeing uçağının pilot kumandalarının arkasına otursanız, bunların nasıl çalıştığını anlamanız uzun zaman alır:

OOP: temel ilkeler - 3

Öte yandan, uçaktaki yolculara her şey daha basit görünüyor: bir bilet alıyorlar ve uçağa biniyorlar, sonra havalanıyor ve iniyor. Yalnızca «bilet almayı» ve «uçağa binmeyi» bilerek kıtadan kıtaya kolayca uçabilirsiniz. Uçağı uçuşa hazırlama, kalkış, iniş ve çeşitli olası acil durumlar ile ilgili herhangi bir karmaşıklık görmüyoruz. Ve uydu navigasyonu, otopilot ve hava trafik kontrol merkezlerinden hiç bahsetmedik. Bu hayatımızı kolaylaştırır.

Programlama açısından, kapsülleme "uygulamayı gizlemektir". Bu tanımı beğendim. Sınıfımız yüzlerce yöntem içerebilir ve çeşitli durumlarda oldukça karmaşık davranışlar uygulayabilir. Ancak tüm yöntemlerini meraklı gözlerden gizleyebiliriz (" özel " olarak işaretleyerek), diğer sınıflarla etkileşim için yalnızca iki veya üç yöntem bırakarak (" genel " olarak işaretleyerek). Ardından, programımızdaki diğer tüm sınıflar, bu sınıftaki yalnızca bu birkaç yöntemi görecek ve çağıracaktır . Tıpkı kokpitin mutlu yolcuların gözünden uzak tutulması gibi, sınıfın tüm karmaşıklığı içeride gizlenecek.

3) Miras.

Kalıtım, programlama ve gerçek hayatta bir kavramdır. Programlamada kalıtım, iki sınıf arasındaki özel bir ilişkidir. Ancak gerçek hayatta kalıtım çok daha ilginçtir.

Gerçek hayatta bir şeyler yaratmamız gerekirse iki seçeneğimiz var:

1) İhtiyacımız olanı sıfırdan yapın ve bunu yapmak için çok zaman ve çaba harcayın.

2) zaten var olan şeyleri kullanarak ihtiyacımız olanı yapın.

En iyi strateji şudur: Mevcut iyi bir çözümü alır, yeniden çalışır ve ihtiyaçlarımızı karşılayacak şekilde düzenleriz ve sonra onu kullanırız.

Düşünün, insanın evrimi. Başlangıçlarını gezegendeki yaşamın başlangıcına kadar takip edersek, milyarlarca yılın geçtiğini görürüz. Ama insanların maymunlardan başladığını düşünürsek, o zaman sadece birkaç milyon yıl geçmiştir. Sıfırdan bir şey yaratmak daha uzun sürer. Daha uzun.

Benzer şekilde, programlamada diğerine dayalı bir sınıf oluşturabiliriz. Yeni sınıf, mevcut bir sınıfın soyundan (varisi) olur. Bu, gerekli veri ve yöntemlerin %80-90'ını içeren bir sınıfınız olduğunda çok faydalıdır. Yeni sınıfımızın ebeveyni olarak uygun bir sınıf ilan ediyoruz. Üst sınıfın tüm verileri ve yöntemleri otomatik olarak yeni sınıfın bir parçası olur. Uygun, değil mi?

4) Polimorfizm.

Polimorfizm, farklı uygulamaların aynı arayüzün arkasına gizlendiği durumu açıklayan programlama kavramıdır. Gerçek hayatta bir analog bulmak için araba kullanma sürecine bakabiliriz.

Bir kişi bir kamyon kullanabiliyorsa, o zaman bir ambulansın veya bir spor arabanın direksiyonuna da alınabilir. Bir kişi, ne tür bir araba olursa olsun araba kullanabilir, çünkü hepsi aynı kontrol arayüzüne sahiptir: direksiyon simidi, pedallar ve vites değiştirme. Arabalar içeride farklı şekilde düzenlenmiştir, ancak hepsi aynı kontrol arayüzünü paylaşır.

Programlamaya dönersek, polimorfizm farklı sınıflardaki (genellikle ortak bir ataya sahip) nesnelerle aynı şekilde etkileşim kurmamızı sağlar. Bunun önemi fazla vurgulanamaz. Bir program büyüdükçe daha önemli hale gelir.

OOP ilkelerdir. Programlama yasaları. Her biri bizi bir şekilde kısıtlıyor ama karşılığında programlar büyüdükçe çok büyük avantajlar sağlıyor. OOP'nin dört ilkesi bir sandalyenin dört ayağı gibidir. Bir tanesini bile ortadan kaldırırsanız, tüm sistem kararsız hale gelir.