Sınıf tabanlı programlama - Class-based programming

Sınıf tabanlı programlamaveya daha yaygın olarak sınıf oryantasyonubir tarzı nesne yönelimli programlama (OOP) içinde miras tanımlama yoluyla gerçekleşir sınıflar nın-nin nesneler, yalnızca nesneler aracılığıyla gerçekleşen kalıtım yerine (karşılaştırın prototip tabanlı programlama ).

OOP'nin en popüler ve geliştirilmiş modeli, nesne tabanlı bir model yerine sınıf tabanlı bir modeldir. Bu modelde nesneler, durum (yani veriler), davranış (yani prosedürler veya yöntemler ) ve Kimlik (diğer tüm nesneler arasında benzersiz bir varlık). Bir nesnenin yapısı ve davranışı bir sınıf, hangisi bir tanım veya taslak, belirli bir türdeki tüm nesnelerin. Bir nesnenin açıkça bir sınıfa dayalı olarak yaratılması gerekir ve bu şekilde oluşturulan bir nesnenin bir örnek o sınıfın. Bir nesne şuna benzer yapı, yöntem işaretçileri, üye erişim denetimi ve sınıf hiyerarşisindeki sınıf örneklerini (yani, sınıfın nesneleri) konumlandıran örtük bir veri üyesi (çalışma zamanı mirası özellikleri için gereklidir) eklenmesiyle.

Nesne yönelimli programlama, sınıflar ve nesnelerden daha fazlasıdır; temel alan bütün bir programlama paradigması nesneler veri alanlarını ve yöntemleri içeren (veri yapıları). Bunu anlamak esastır; Bir dizi ilgisiz yöntemi birlikte organize etmek için sınıfları kullanmak nesne yönelimi değildir.

Junade Ali, PHP Tasarım Modellerinde Uzmanlaşma[1]

Kapsülleme

Kapsülleme kullanıcıların değişmezler Bu, kullanıcı kodunu etkilemeden arayüzde gösterilmeyen yönler için bir nesne sınıfının uygulanmasının değiştirilmesine izin verdiği için yararlıdır. Kapsülleme tanımları, ilgili bilgilerin gruplandırılmasına ve paketlenmesine odaklanır (kohezyon ) güvenlik sorunları yerine. OOP dilleri normal olarak iç nesne durumuna resmi güvenlik kısıtlamaları sunmaz. Bir erişim yöntemi kullanmak, arayüz tasarımı için bir konvansiyon meselesidir.

Miras

Sınıf tabanlı programlamada, miras yeni sınıfları şu şekilde tanımlayarak yapılır: uzantılar mevcut sınıfların sayısı: mevcut sınıf, ebeveyn sınıfı ve yeni sınıf çocuk sınıfı. Bir alt sınıfın yalnızca bir ebeveyn sınıfı varsa, buna tek miras, bir alt sınıfın birden fazla ebeveyn sınıfı olabilirse, buna çoklu miras. Bu, sınıfları bir hiyerarşi, ya bir ağaç (tek miras ise) veya kafes (birden fazla miras varsa).

Kalıtımın tanımlayıcı özelliği, hem arayüzün hem de uygulamanın miras alınmasıdır; sadece arayüz miras alınmışsa, bu olarak bilinir arayüz kalıtımı veya alt tipleme. Kalıtım, aşağıdaki gibi sınıflar olmadan da yapılabilir. prototip tabanlı programlama.

Sınıf temelli modellerin eleştirisi

Sınıf temelli diller veya daha doğrusu, yazılı diller, nerede alt sınıflandırma tek yolu alt tipleme, uygulamaları ve arayüzleri karıştırdığı için eleştirildi - nesne yönelimli programlamanın temel ilkesi. Eleştirmenler, birinin bir çanta sınıfı oluşturabileceğini söylüyor. Toplamak nesnelerin çoğaltılmasının ortadan kaldırıldığı set sınıfı adı verilen yeni bir sınıf oluşturmak için genişletin.[2][3] Şimdi, çanta sınıfının bir nesnesini alan bir işlev, iki nesne eklemenin bir çantanın boyutunu iki artırmasını bekleyebilir, ancak biri set sınıfının bir nesnesini geçerse, o zaman iki nesnenin eklenmesi nesnenin boyutunu artırabilir veya artırmayabilir. ikiye bir çanta. Sorun tam olarak ortaya çıkıyor çünkü alt sınıflandırma, alt tipleme ilkesinin, alt tipleme olarak bilinen durumlarda bile alt tiplemeyi gerektiriyor. Liskov ikame ilkesi tutmaz. Barbara Liskov ve Jeannette Kanadı ilkeyi bir 1994 makalesinde aşağıdaki gibi kısaca formüle etti:

Alt Tip Gereksinimi: İzin Vermek nesneler hakkında kanıtlanabilir bir özellik olmak tip . Sonra nesneler için doğru olmalı tip nerede alt türü .

Bu nedenle, normal olarak alt tipleme ve alt sınıflandırma ayırt edilmelidir. Mevcut nesneye yönelik dillerin çoğu alt tipleme ve alt sınıflandırma arasında ayrım yapar, ancak tasarıma yönelik bazı yaklaşımlar bunu yapmaz.

Ayrıca, başka bir yaygın örnek, bir kişi nesnesinin bir çocuk sınıfı nesnesi olamaz ebeveyn sınıfı çünkü bir alt sınıf ve bir üst sınıf bir kişi sınıfını miras alır, ancak sınıf tabanlı diller çoğunlukla çalışma zamanında nesnenin sınıf türünü değiştirmeye izin vermez. Sınıf tabanlı diller için, kullanıcılarına sınıfın birleşik görünümünü korumak için bu kısıtlama gereklidir. Kullanıcıların, bir yöntemin uygulamalarından birinin, sistemi bozan değişikliklere neden olup olmadığına dikkat etmeleri gerekmez. değişmezler sınıfın. Bu tür değişiklikler, nesneyi yok ederek ve yerine bir başkasını inşa ederek yapılabilir. Çok biçimlilik, bu tür değişiklikler yapıldığında bile ilgili arayüzleri korumak için kullanılabilir, çünkü nesneler kara kutu soyutlamaları olarak görülür ve nesne aracılığıyla erişilir. Kimlik. Ancak, genellikle nesneye atıfta bulunan nesne referanslarının değeri değiştirilir ve bu da istemci kodunu etkiler.

Örnek diller

olmasına rağmen Simula sınıf soyutlamasını tanıttı, sınıf temelli bir dilin kanonik örneği Smalltalk. Diğerleri şunları içerir PHP, C ++, Java, C #, ve Amaç-C.

Ayrıca bakınız

Referanslar

  1. ^ Ali, Junade. PHP Tasarım Modellerinde Uzmanlaşma | PACKT Kitaplar (1 ed.). Birmingham, İngiltere, Birleşik Krallık: Packt Publishing Limited. s. 11. ISBN  978-1-78588-713-0. Alındı 11 Aralık 2017.
  2. ^ Kiselyov, Oleg. "Alt Tip Oluşturma, Alt Sınıflandırma ve OOP ile İlgili Sorun". Alındı 7 Ekim 2012.
  3. ^ Ducasse, Stéphane. "Bir set, bir çantanın alt türü olamaz". Alındı 7 Ekim 2012.