EEM 1103
PROGRAMLAMAYA GİRİŞ
DERS #11
Öğr. Gör. Dr. Hazal Su Bıçakcı Yeşilkaya
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
Ders Akışı
• Nesne Yönelimli Programlama (Object Oriented Programming,
OOP)
• Genel kavramlar
• OOP üyeleri
• Prosedür odaklı programlama ile farkları
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
2
OOP (Nesne Yönelimli Programlama) Kavramları
• C++ programlamanın temel amacı, C programlama diline nesne
yönelimli kavramı kazandırmaktır.
• Nesne Yönelimli Programlama; kalıtım (inheritance), veri bağlama
(data binding), çok biçimlilik (polymorphism) gibi birçok kavramı
sağlayan bir paradigmadır.
• Her şeyin bir nesne olarak temsil edildiği programlama
paradigmasına tam anlamıyla nesne yönelimli programlama dili denir.
• Smalltalk, ilk gerçek anlamda nesne yönelimli programlama dili
olarak kabul edilir.
• OOPs (Nesne Yönelimli Programlama Sistemi): Nesne, kalem,
sandalye, masa vb. gerçek dünya varlıklarını ifade eder. Nesne
Yönelimli Programlama, bir programı sınıflar ve nesneler kullanarak
tasarlamak için kullanılan bir metodoloji veya paradigmadır.
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
3
OOPs
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
4
OOPs- Class (Sınıf)
• Nesnelerin bir araya gelmesi sınıf (class) olarak adlandırılır.
• Bu, mantıksal (logical) bir varlıktır. C++’ta sınıf, Nesne Yönelimli
Programlamaya (OOP) temel oluşturan yapıdır.
• Kullanıcı tarafından tanımlanmış veri türünün veri üyelerine (data
members) ve üye fonksiyonlarına (member functions) erişebilmek ve
bunları kullanabilmek için bir sınıf örneği (class instance)
oluşturulmalıdır.
• Bir nesnenin sınıfı, o nesnenin taslağı (blueprint) görevi görür.
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
5
OOPs- Class (Sınıf)
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
6
OOPs - Class (Sınıf)
• Sınıfların Faydaları:
• Daha İyi Kod Organizasyonu: Sınıflar kodu mantıksal şekilde
yapılandırır.
• Kapsülleme (Encapsulation) ve Veri Gizleme (Data Hiding):
Kapsülleme ve veri gizleme birlikte, veriye erişimin denetim altında
tutulmasını sağlar.
• Kodun Yeniden Kullanılabilirliği: Aynı sınıf kullanılarak birden fazla,
birbirinden bağımsız nesne örneği üretilebilir.
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
7
OOPs- Object (Nesne)
• Herhangi bir duruma (state) ve davranışa (behaviour) sahip varlık,
nesne (object) olarak adlandırılır. Örneğin sandalye, kalem, masa,
klavye, bisiklet vb.
• Nesneler hem fiziksel hem de mantıksal olabilir.
• Bir sınıfın herhangi bir örneği, kendisini bir nesne olarak temsil eder.
• Bir nesne, ait olduğu sınıfın bir örneğidir (instance).
• Nesne, gerçek dünyadaki bir varlığı; veri özellikleri (data attributes) ve
bu verilere bağlı işlevleri (functionalities) ile birlikte temsil eder.
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
8
OOPs- Object (Nesne)
• Sözdizimi:
class Sınıf_Adı {
// Sınıf üyeleri
};
int main() {
Sınıf_Adı nesne_adı; // Nesnenin yaratılması
return 0;
}
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
9
OOPs- Object (Nesne)
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
10
OOPs- Object (Nesne)
• Nesnelerin Faydaları:
• Verilerin Kapsüllenmesi (Encapsulation of Data): Bir C++ nesnesinde
hem veri saklama hem de veri yönetimi kapsülleme sayesinde güvenli
bir şekilde gerçekleşir.
• Kodun Yeniden Kullanımı (Code Reusability): Nesneler, geliştiricilerin
birçok kez kullanılabilir modüler kod yazmasına olanak tanır.
• Gerçek Dünya ile Eşleme (Real-World Mapping): Gerçek dünyadaki
öğeleri doğrudan temsil eden nesneler sayesinde etkileşimli
tasarımlar daha kolay hale gelir.
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
11
OOPs – Kalıtım (Inheritance)
• Bir nesnenin, üst nesnenin tüm özelliklerini ve davranışlarını
devralmasına kalıtım denir.
• Kalıtım, kodun yeniden kullanılmasını sağlar ve çalışma zamanı çok
biçimliliği (runtime polymorphism) elde etmek için kullanılır.
• Alt Sınıf (Sub Class / Derived Class): Başka bir sınıftan özellik ve
davranış alan sınıfa alt sınıf denir.
• Üst Sınıf (Super Class / Base Class): Alt sınıfa özellik aktaran sınıfa üst
sınıf veya temel sınıf denir.
• Yeniden Kullanılabilirlik (Reusability): Yeni bir sınıf oluşturmak
istediğimizde, ihtiyaç duyduğumuz kodun bir kısmı zaten mevcut bir
sınıfta bulunuyorsa, bu yeni sınıfı mevcut sınıftan türeterek
oluşturabiliriz. Böylece var olan sınıfın alanlarını (fields) ve
metotlarını kullanabiliriz.
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
12
OOPs – Kalıtım (Inheritance)
• Sözdizimi:
class BaseClass {
// Base class (Temel sınıf) üyeleri
};
class DerivedClass : public BaseClass {
// Derived class (Türetilmiş sınıf) üyeleri
};
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
13
OOPs – Kalıtım (Inheritance)
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
14
OOPs – Kalıtım (Inheritance)
• Kalıtımın Faydaları:
• Kodun Yeniden Kullanılabilirliği (Code Reusability): Ana sınıf (parent
class) fonksiyonlarının birden fazla kez kullanılabilmesi sayesinde kod
tekrar kullanılabilir hale gelir.
• Hiyerarşik Organizasyon (Hierarchical Organization): Kalıtım, ilişkili
sınıflardan oluşan düzenli bir hiyerarşi oluşturur.
• Kolay Bakım (Easy Maintenance): Temel sınıfta yapılan değişiklikler
otomatik olarak türetilmiş sınıflara da yansıdığı için bakım kolaylaşır.
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
15
OOPs - Çok Biçimlilik (Polymorphism)
• Bir görevin farklı şekillerde gerçekleştirilebilmesine çok biçimlilik denir.
• Örneğin bir müşteriyi farklı şekillerde ikna etmek, veya bir şekil çizmek
(örneğin daire ya da dikdörtgen), çok biçimliliğe örnektir.
• Farklı durumlar, bir işlemin farklı davranışlar sergilemesine neden olabilir.
• İşlemde kullanılan veri türü, davranışın nasıl olacağını belirler.
• Sözdizimi:
class Base {
public:
virtual void functionName() { /* Implementation */ }
};
class Derived : public Base {
public:
void functionName() override { /* Implementation */ }
};
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
16
OOPs - Çok Biçimlilik (Polymorphism)
Base* obj = new Derived();Base* obj = new
• Derived sınıfındaki functionName() çağrılır.
• Bu da polimorfizmdir: Aynı fonksiyon adı → farklı davranış → nesne pine göre
çalışma anında belirlenir.
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
17
OOPs - Çok Biçimlilik (Polymorphism)
• Polimorfizmin Faydaları:
• Kod Esnekliği (Code Flexibility): Kod esnekliği sayesinde sistem,
metotların çalışma zamanında dinamik olarak override edilmesini
sağlayabilir.
• Kod Tekrarlamasını Ortadan Kaldırır (Eliminates Code Duplication):
Ortak bir arayüz, farklı veri tiplerinde çalışabildiği için kod tekrarını
azaltır.
• Genişletilebilirliği Artırır (Improves Extensibility): Bu teknik,
geliştiricilerin yeni sistem ihtiyaçlarını karşılaması gerektiğinde yazılım
çerçevelerinin (framework) kolayca genişletilebilmesini sağlar.
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
18
OOPs - Soyutlama (Abstraction)
• Soyutlama; bir yapının iç uygulama detaylarını gizlerken, kullanıcıya yalnızca
temel işlevselliği sunma sürecidir.
• Veri soyutlama (data abstraction) ise dış dünyaya yalnızca gerekli bilginin
gösterilmesi, geri kalan uygulama ayrıntılarının gizlenmesidir.
• C++’ta soyutlamayı gerçekleştirmek için soyut sınıflar (abstract classes) ve
arayüzler (interfaces) kullanılır.
• Sözdizimi:
class AbstractClass {
public:
virtual void functionName() = 0; // Pure virtual function
};
class DerivedClass : public AbstractClass {
public:
void functionName() override { // Implementation }
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
19
OOPs - Soyutlama (Abstraction)
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
20
OOPs - Soyutlama (Abstraction)
• Soyutlamanın (Abstraction) Faydaları:
• Karmaşık Sistemleri Basitleştirir (Simplifies Complex Systems):
Kullanıcının arayüzle etkileşimi basit ve net kalır.
• Güvenliği Artırır (Enhances Security): Sistem, iç bileşenlerin kullanıcı
tarafından görülmesini engeller.
• Bakımı Kolaylaştırır (Improves Maintainability): Uygulama
detaylarında yapılan değişiklikler, sistemi kullanan kullanıcıları
etkilemez.
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
21
OOPs - Kapsülleme (Encapsulation)
• C++’ta kapsülleme; kod ve verinin tek bir birim içinde bir araya
getirilmesi (bağlanması veya sarılması) olarak tanımlanır. Örneğin, bir
kapsülün içinde farklı ilaçların bulunması gibi.
• Kapsülleme, ilişkili verilerin ve işlevlerin tek bir yapı altında
toplanmasıdır.
• Nesne yönelimli programlamada kapsülleme; veri ile bu veriler
üzerinde çalışan fonksiyonların bir arada tutulmasıdır.
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
22
OOPs - Kapsülleme (Encapsulation)
• Sözdizimi:
class ClassName
{
private:
int data;
public:
void setData(int d)
{
data = d;
}
int getData() {
return data;
}
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
23
OOPs - Kapsülleme (Encapsulation)
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
24
OOPs - Kapsülleme (Encapsulation)
• Kapsüllemenin (Encapsulation) Faydaları:
• Veri Güvenliği (Data Security): Hassas verilerin yanlışlıkla
değiştirilmesini engeller.
• Geliştirilmiş Bakım Kolaylığı (Improved Maintainability): Sınıfa
arayüzleri (public metodlar) üzerinden erişen kullanıcılar, iç
implementasyonda yapılan değişikliklerden etkilenmez.
• Modüler Kod Tasarımı (Modular Code Design): Modüler bir kod
yapısı, geliştiricilerin daha düzenli ve yönetimi kolay kodlar
oluşturmasını sağlar.
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
25
OOPs
• Prosedür Odaklı Programlamaya Göre OOP’nin Avantajları:
• OOP, geliştirme ve bakım aşamalarını kolaylaştırır.
• Buna karşın, prosedür odaklı programlamada proje büyüdükçe kodu
yönetmek zorlaşır.
• OOP veri gizleme (data hiding) sağlar; prosedür odaklı
programlamada global verilere her yerden erişilebilir.
• OOP, gerçek dünya olaylarını etkili bir biçimde modelleme imkânı
sunar. Bu sayede gerçek hayat problemlerine nesne yönelimli bir
yapıyla çözüm getirilebilir.
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
26
Neden OOP’ye İhtiyaç Duyarız?
• Önceki programlama yöntemlerinin çeşitli eksiklikleri ve performans
düşüklüğü vardı.
• Tıpkı prosedür odaklı programlamada olduğu gibi:
• Kod tekrar kullanılamıyordu,
• Global verilere aşırı erişim vardı,
• Gerçek dünya problemleri etkili biçimde modellenemiyordu.
• C++’ta OOP sayesinde:
• Sınıf ve nesne yapısı kod bakımını kolaylaştırır.
• Kalıtım, kodun tekrar yazılmasını engelleyerek yeniden
kullanılabilirliği artırır.
• Kapsülleme ve soyutlama, veri gizlemeyi ve güvenliği sağlar.
• Sonuç olarak OOP, hem kod kalitesini artırır hem de geliştiricinin işini
kolaylaştırır.
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
27
OOPs
• C++ Neden Tam (Pure) Bir OOP Dili Değildir? Neden “Kısmi OOP”
sayılır?
• C++ her ne kadar sınıflar, nesneler, kalıtım, kapsülleme, soyutlama ve
polimorfizm gibi tüm OOP özelliklerini desteklese de tam anlamıyla
saf (pure) bir OOP dili değildir.
• main() fonksiyonunun sınıf dışında olması zorunludur.
• Bu, sınıflar ve nesneler olmadan da kod yazılabileceği anlamına gelir.
Dolayısıyla tam nesne yönelimli olma ilkesi ihlal edilir.
• Global değişkenler kullanılabilir.
• Global değişkenler tüm program tarafından erişilebilir. Bu durum
kapsüllemeyi bozar.
• Örneğin Java veya Smalltalk gibi saf OOP dillerinde her şey bir
nesnedir; C++ bundan ayrılır. Bu yüzden C++, OOP’yı desteklese de
“kısmi nesne yönelimli” olarak sınıflandırılır.
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
28
TEŞEKKÜRLER
© 2019 Bakırçay Üniversitesi Tüm Hakları Saklıdır
29