İleri Programlama Dersi 1. Ünite Sorularla Öğrenelim

Nesneye Yönelik Programlamaya Giriş

1. Soru

Nesneye yönelik yazılım geliştirme nasıl ortaya çıkmıştır?

Cevap

1960’lı yılların sonuna doğru ortaya çıkan bu yaklaşım, o dönemin yazılım dünyasında beliren bir bunalımın sonucudur. Yazılımların karmaşıklığı ve boyutlarının sürekli artması ve aynı zamanda belli bir nitelik düzeyinin korunması için gerekli bakım maliyeti, zaman, çaba vb. unsurların sürekli artması sonucu nesneye yönelik programlama yaklaşımı çözüm olarak geliştirilmiştir.


2. Soru

Nesneye yönelik programlama yaklaşımında sınıf (class) kavramı neyi ifade etmektedir?

Cevap

Bir otomobil düşünülecek olursa, otomobilin marka ve modeli ne olursa olsun hızlanıp yavaşlayabilen, direksiyonuyla istenilen yöne yönlendirilebilen bir araç hayal edilebilir. Bu özellikler aslında genel davranışlar olup bütün otomobillerde bu davranışları sergilemektedir. Ayrıca, her otomobilin, motoru, lastikleri, kapıları, farları vb. özellikleri de mevcuttur. Her marka ve modelde bu özelliklerin mevcut olduğu bilinmektedir. Programlama açısından, bu örnekte ki otomobil bir sınıftır. Özetle sınıf, o sınıftan bütün varlıkların ortak özellik ve davranışlarını belirleyen bir yapıdır.


3. Soru

Nesneye Yönelik Programlama yaklaşımında nesne nedir?

Cevap

Nesne, ait olduğu sınıftan gelen özelliklerin belli olduğu, sınıfı için tanımlı olan davranışları nasıl sergilediğinin bilindiği, somut olarak var olan bir kimliği olan varlık olarak düşünülebilir. Sınıfın yaratılan bir örneğine, örnek nesne (instance) ismi verilmektedir.


4. Soru

Nesneye yönelik programlama yaklaşımında sahiplik (has a) ilişkisi nedir?

Cevap

Örnek olarak “kalem kutusu” ismiyle bir sınıf tanımlanırsa, bu sınıfta muhtemelen özellikleri içerisinde sahip olduğu kalemlerin de “kalem” sınıfının da olması gerekecektir. Dolayısıyla kalem kutusu sınıfı aynı zamanda kalem sınıfıyla ortaklık (association) kurmak durumundadır. Bu ilişki “kalem kutusu kalemlere sahiptir” şeklinde bir ilişki olup sahiplik (has a) ilişkisi olarak adlandırılır.


5. Soru

Nesneye yönelik programlama yaklaşımında nesnelerin sahip olduğu bileşenler nelerdir?

Cevap

Her nesnenin belli bir takım özellikleri ve işlevselliğini sağlayan davranışları vardır. Nesneye yönelik programlama yaklaşımında nesneler, özellikler (properties) ve metotlar (methods) a sahiptir. Nesnelerdeki karakteristikler, özellikleri ve gerçekleştirebileceği eylemler de metot adını almaktadır. Bunu bir örnekle açıklanacak olursa; yukarıdaki örneğimizdeki gibi bir otomobil nesnesinin, hız bilgisi, vites bilgisi, yakıt bilgisi vb. özelliklerini, aracın hızlanması, yavaşlaması, durması gibi eylemlerini de metotlarını temsil etmektedir.


6. Soru

Nesneye yönelik programlama yaklaşımında bağımlılık (dependeny) ilişkisi neyi ifade eder?

Cevap

Eğer bir nesne, her zaman bir diğer nesneyi de etkiliyorsa ya da var olmak için diğerine ihtiyaç duyuyorsa o zaman burada da bir bağımlılık (dependency) ilişkisi vardır. Bağımlılık ilişkisine örnek olarak otomobil nesnesiyle, tekerlek nesnesini verebiliriz. Tekerleği olmayan bir otomobil düşünülemeyeceği için tekerlek nesnesiyle otomobil nesnesi arasında bağımlılık ilişkisi vardır.


7. Soru

Birleşik Modelleme Dili (Unified Model- ling Language – UML) ne demektir?

Cevap

İş sistemlerinin nasıl modellenebileceğini belirleyen ve açıklayan yöntemlerin bir araya toplanmış halidir. Daha çok yazılım geliştiriciler tarafından kullanılan UML ile nesneye yönelik programlamada temel teşkil eden sınıflar oluşturulabilir ve sınıfların geliştirilmesi aşamasında sağlanan görselliklerle daha kolay anlaşılabilir olmaktadır. Tasarım aşaması, genellikle sistemin çeşitli açılardan görünüşlerini ifade eden UML diyagramlarıyla sonlanır.


8. Soru

Düşük Bağlılık (Low Coupling) nedir?

Cevap

Bir sınıfın diğer sınıflarla bağlılık oranı olarak düşünülebilir. Burada bahsedilen bağlılık aslında kalıtım ilişkisinin bulunmasıyla birlikte diğer sınıfların iç yapısından haberdar olması, çeşitli hizmetlerinden yararlanabilmesi ve çalışma prensibinden haberdar olmasını ifade etmektedir. Tabi burada ilişkide bulunulan diğer sınıfların sayısının artması bağlılık oranını arttıran faktörlerdendir. Düşük bağlılığın en önemli faydası bir sınıfta yapılan değişikliğin diğer sınıfların az etkilenerek uyarlanmasının sağlanmasıyla birlikte yeniden kullanılabilirliğin artması olarak söylenebilir.


9. Soru

Yüksek Uyum (High Cohesion) nedir?

Cevap

Burada bahsedilen uyum aslında bir sınıfın sorumluluklarının birbirleriyle uyumlu olma oranı olarak düşünülmektedir. Uyum, modüllerin veya sınıfların birbirine olan benzerliği yani aynı amaca hizmet eden kod bloklarının bulunması anlamını taşımaktadır. Aslında düşük bağlılık ile ters orantıda olan bir kavram olup bağlılığın az olması uyumun artması anlamını taşımaktadır. Bir sınıfın yeniden kullanılabilirliğinin artması, değişikliklerden etkilenmesinin azalması, yüksek uyumun beraberinde getirdiklerinden bazılarıdır. Bu kavramlar bir yazılımın kalitesini yazılım geliştirme yaşam döngüsünü oluşturan kavramların anlatıldığı yazılım mühendisliği gibi derslerde daha detaylı olarak anlatılmaktadır.


10. Soru

Sarmalama (Encapsulation)nedir?

Cevap

Bir yazılımcının kod geliştirme aşamasında nesneye yönelik programlama yaklaşımı içerisinde belli bir sınıfa baktığında sınıfın özellikleri ve metotlarının hangilerinin kendisine yarayacağını hangilerinin sadece başka metotlarda kullanılacağı ve sınıfa özel olduğunu görmesi zor olabilir. Bazı durumlarda güvenlik ve sağlamlık amacıyla bir sınıfta kullanılan özelliklerin değiştirmesi ve bazı metotlara erişmesi engellenmek istenilebilir.

İşte bütün bu istenilen durumlar için erişim sınırlandırma işlemine sarmalama (encapsulation) adı verilmektedir.


11. Soru

Kalıtım (Inheritance) nedir?

Cevap

Kalıtım yapısı, adından da anlaşılacağı üzere birtakım özelliklerin miras alınabilmesi anlamındadır. Yani, bir sınıfın başka bir sınıftaki özelliklere ve metotlarına sahip olmasıdır. Bir anlamda kodun yeniden kullanılabilirliğini sağlayan yapıdır.


12. Soru

Nesneye yönelik programlamada bir sınıf birden fazla sınıftan birtakım özellik ve metotları miras olarak alabilir mi?

Cevap

Bu soru çoklu kalıtım (multiple inheritance) kavramını ifade etmektedir. Bir örnekle açıklanacak olursa, bir taşıt sınıfı tanımlansın, bu taşıt sınıfının alt sınıfı olarak taşıt sınıfından türetilmiş olan otomobil, gemi, uçak ve çekici sınıfları olsun. Bir kamyon düşünün ki hem taşıt sınıfı özelliklerini taşısın hem de çekici sınıfı özelliklerini üzerinde barındırsın. Bu yapı kalıtım yoluyla miras alacağı özellik ve metotları üst sınıf olarak birden fazla sınıftan alabilmeyi içermektedir.


13. Soru

Nesneye yönelik programlamada çok biçimlilik neyi ifade etmektedir?

Cevap

Çok biçimlilik, nesnelerin içeride farklı çalışmalarına rağmen, dışarıdan aynı biçimde görünmelerini ifade etmektedir. Bu şekilde, bir grup nesneyi kullanan sınıflar kalıtımla ilgili detayları bilmek zorunda kalmamakta, içerideki değişikliklerden et- kilenmeden çalışmaya devam etmektedirler. Aynı sınıftan türetilen sınıflar standart bir şekilde erişilebilme özelliklerine sahip olmaktadır.


14. Soru

Nesneye yönelik programlama yaklaşımı dışında hangi yaklaşımlar bulunmaktadır?

Cevap

Nesneye yönelik programlama yaklaşımı dışında çeşitli yaklaşımlar da bulunmaktadır. Bunlar arasında Yapısal Programlama (Programming), Bileşen Tabanlı Yazılım Geliştirme (Component Based Software Development), Görünüm Yönelimli Programlama (Aspect Oriented Programming) sıralanabilir. Bunlar kendisinden önceki ve sonraki yaklaşımlara altyapı oluşturmuş ve geniş bir kullanım alanı bulmuşlardır.


15. Soru

Nesneye yönelik program tasarımınında çözümleme aşaması neyi ifade eder?

Cevap

Çözümleme, sistemin ne yapması gerektiğinin belirlenmesi aşamasıdır. Bu aşamada önemli husus, sistemin tanınması ve istenilen gereksinimlerin iyi anlaşılıp bunların arkasında kalan ve ortaya çıkarılmamış gereksinimlerin belirlenerek çıkarılması ve sistemin kurallarının ve işleyişinin irdelenebilmesidir.

Nesneye yönelik çözümlemede ise, çözümlemenin yapılması aşamasında sınıflardan ve nesnelerden faydalanılmaktadır. Sistemdeki sınıfların özellikleri ve davranışlarının iyi belirlenmesi gerekmektedir.


16. Soru

Nesneye Yönelik Tasarım Ölçütleri nelerdir?

Cevap

Öncelikle tasarım yapısının ayrılabilir, birleştirilebilir, anlaşılabilir ve korunabilir olması gerekmektedir. Bu kavramları kısaca açıklamak gerekirse, ayrılabilirlikten kasıt anlamlı parçalara ayrılabilmesini ifade etmektedir. Burada bahsedilen parça aslında sınıfı temsil etmektedir. Bir problemin alt problemlere bölünebilmesi tasarımın ayrıştırılabilmesiyle mümkün olmaktadır.

Birleştirilebilir olması, sınıfı temsil eden parçanın başka tasarımlarda da tekrar tekrar kullanılabilmesi yani diğer parçalarla birleştirilebilmesi anlamını taşımaktadır. Tasarımın anlaşılabilirliği, bir sınıfın diğer sınıflarla bilgiye gerek duymadan anlaşılabilmesi ve aynı zamanda yapılacak küçük değişikliklerin etkilerinin en az sayıda sınıfa yayılarak uyarlanmasını ifade etmektedir. Son olarak korunabilirlik ise, olası hatalara karşı düzeltilebilmesine yönelik etkilerin geniş bir alana yayılmadan önlenebilmesidir.


17. Soru

Nesneye yönetlik programlama geliştirilen yazılım üzerinde bakım kolaylığını nasıl sağlamaktadır?

Cevap

Yazılımın bakım kolaylığı; nesnelerin ait oldukları sınıflarca sunulduğu şablonlarda temsil edildiği için benzer veya aynı konuyla ilişkili sınıflar bir araya getirilerek sınıf kümeleri oluşturabilmektedir. Bu durumda yazılımın bakımı, ya mevcut sınıflarda değişiklik ya da yeni sınıf eklenmesi anlamına gelmektedir. Bu da yazılımın tamamını hiçbir şekilde etkilememekte, dolayısıyla bakım kolaylığı getirmektedir.


18. Soru

Nesneye yönelik programlamada genişletilebilirlik (extensibility) hangi amaçla kullanılır?

Cevap

Genişletilebilirlik; mevcut bir sınıfa yeni özellik veya yapılar ekleyerek artan işlevsellik sağlanmasıdır. Bu da nesneye yönelik programlama yaklaşımında kolaylıkla yapılabilmektedir.


19. Soru

Kodun yeniden kullanabilirliği neyi ifade eder?

Cevap

Kodun yeniden kullanılabilmesi; üretilen sınıfların her uygulama geliştiricinin kullanımına açık olan bir ortak kütüphanede tutulmasına imkân sağlaması, her kullanıcının bu ortak kütüphane- de bulunan sınıfları kullanabilmesi ve dolayısıyla benzer kodları yeniden yazmaktan kurtulması anlamındadır.


20. Soru

Nesneye yönelik programlamada erişim değiştiriciler (access modifier) neyi ifade etmektedir?

Cevap

Sarmalama işleminin yapılabilmesi için public, private, protected gibi kelimeler kullanılan yazılım dili içerisinde bulunmaktadır. Bu kelimeler kısaca “erişim değiştirici (access modifier)” olarak bilinmektedir. Sınıf içerisindeki özellikler ve metotların başına bu kelimeler getirilerek erişim sınırlandırma işlemi yani sarmalama yapılabilmektedir.


Güz Dönemi Dönem Sonu Sınavı
18 Ocak 2025 Cumartesi
v