YZM 2105 Nesneye Yönelik Programlama Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1
BÖLÜM - 3 Nesneye Yönelik Programlamaya Giriş Bu bölümde; Nesneye Yönelik Programlama Tarihçesi Nesneye Yönelik Programlamanın Farklılıkları Nesne Kavramı Sınıf Kavramı Sınıf Oluşturulması Örnek Sınıflar ile ilgili konular anlatılacaktır. 2
Nesneye Yönelik Programlamaya Giriş Nesne yönelimli programlama (OOP), (Object Oriented Programming) nesneyi merkezine alan bir bilgisayar programlama yaklaşımıdır. Nesne yönelimli programlama terminolojisindeki object/nesne ve oriented/yönelimli kavramları ilk olarak 1960 lı yılların başında MIT tarafından yapay zeka ile çalışmalar yapılan araştırma grubunda özelliklere sahip maddeleri isimlendirirken object tanımı kullanıldı. 3
Nesneye Yönelik Programlamaya Giriş 1960lı yıllarda Oslo daki Norwegian Computing Center da Ole-Johan Dahl ve Kristen Nygaard tarafından geliştirilen ayrık olay simülasyonu için tasarlanan Simula I in en önemli versiyon ya da değiştirilmiş/özelleştirilmiş versiyonu olan Simula 67 de resmi olarak ilk object kavramı kullanıldı. Simula 67 nin temel prensipleri ve disiplinleri altında yatan daha sonraki birçok dil etkiledi ve kullanıldı. 4
Nesneye Yönelik Programlamaya Giriş 90 lı yıllarda programlama dillerine olan destek artınca nesne yönelimli programlama etkin ve yaygın olarak kullanılmaya başlandı. Nesneye yönelik programlamanın temel kavramları; Büyük programlar yazmayı kolaylaştıran soyutlama, Programları değiştirmeyi ve korumayı kolaylaştıran saklama ve Programları kolayca genişletilebilir kılan sınıf hiyerarşisi dir. 5
Soyutlama Önemli özelliklere odaklanabilmek için ayrıntıları göz ardı etme sürecidir. 6
Soyutlama Soyutlama temel olarak veri ve kontrol soyutlaması olarak yapılır. 1. Bir veri tipinin nasıl yapılandığının ayrıntılarını göz ardı etmemize izin veren soyutlama tarzına veri soyutlaması denir. 2. Kontrol soyutlaması ise yapısal programlama ile gelen altprogram, fonksiyon gibi kavramlar üzerinde yapılan soyutlamadır. 7
Soyutlama: Veri Soyutlaması Örnek: Bir Kisi nesnesinde, kişinin yaşını tutan bir tamsayı değişkeni olan yas değişkenini ele alalım. Bu yas değişkenine, programın çalıştırma anında, "-10" değerinin atanmasını kimse engelleyemez. İşte burada nesne yönelimli programlamanın getirdiği görünürlük ve özellik tanımlama gibi yetenekler kullanarak "yas" değerine gerçek bir değerin girilmesi garanti edilebilir. Buna veri soyutlaması adı verilir. 8
Soyutlama: Kontrol Soyutlaması Benzer şekilde soyutlama işleminin verileri taşıyan değişkenlerin değil de yöntem veya işlevlerin üzerinde yapılması işlemine kontrol soyutlaması adı verilir. Yani yöntem ile yapılan işlemlerin bir başka nesne tarafından müdahale edilemeyecek hale sokulması işlemidir. 9
Saklama Gerçek hayatta information hiding yöntemiyle sıkça karşılaşırız. Örneğin arabanın deposuna ne kadar yakıt kaldığını öğrenmek için depoya baktığımızda göremeyiz. Bunun yerine gerekli bilgiyi bize aracın gösterge panelindeki yakıt göstergesi vermektedir. 10
Yapısal Programlama vs. Nesneye Yönelik Programlama Yapısal Programlamada sadece bir soruna odaklı farklı fonksiyonlar yazılır ve sadece o sorun için fonksiyonlar bulunurlar. Dolayısıyla yapısal programlama yaklaşımıyla oluşturulmuş bir program binlerce ayrı isimde tanımlanmış değişken ve yüzlerce farklı fonksiyona sahiptir. En ufak işlem için bile ayrı fonksiyon oluşturulması gerekir ve bu programın karmaşıklığını arttırır. 11
Yapısal Programlama vs. Nesneye Yönelik Programlama Gerçek dünyadaki sistemler sadece fonksiyonlardan oluşmaz. Sistemin gerçeğe yakın bir modelini bilgisayarda oluşturmak zordur. 12
Yapısal Programlama vs. Nesneye Yönelik Programlama Nesneye yönelik programlama yaklaşımı doğaldır. Nesnelerden oluşan bir dünya düşünmek basittir. Nesneye Yönelik Programlama yaklaşımı ise yapısal programlama yaklaşımının daha genişletilmiş ve gerçeğe yakın versiyonudur. Değişkenler ve metotlar burada da kullanılır fakat burada nesne üzerine odaklanılır. Yapısal programlamadaki büyük ve karmaşık sistemleri tasarlamak yerine, birbiriyle iletişim ve etkileşim halinde nesnelerin olduğu bir dünya kolayca tasarlanabilir. Bu nesnelerin çalışması için ayrıca bir mantık oluşturmaya gerek kalmaz. 13
Yapısal Programlama vs. Nesneye Yönelik Programlama Nesneye yönelik programlama yaklaşımında, projenin erken safhalarında projeyi tamamlamak için gerekli olan tüm nesnelerin tanımlanması, nesneleri tanımlayan sınıfların yaratılması yatar. Böylece yaratılan her nesne kendi verisini kendinde barındırır ve diğer nesnelerin kendisinden istediği görevleri yerine getirir. 14
Nesne Kavramı ilk Tanım Nesne, niteliklere ve davranışlara sahip somut bir varlıktır. Bir nesnenin niteliği onun sahip olduğu özelliklerdir. Nesnenin bir niteliğinin değeri o nesnenin durumunu oluşturur. Bir nesnenin davranışları onun / onunla yapabildiği / yapılabilen işlemlerdir /operasyonlardır. 15
Örnek 1: Sipariş verme yazılımı Yapısal Programlama Çözümü Müşteri ve sipariş bilgileri ayrı değişkenlerde tutulurlar. Diziler kullanılır. Bu değişkenler üzerinden işlemler yapılır (sipariş ekle, tutar hesaplama, ödeme gerçekleştir ). Nesneye Yönelik Programlama Çözümü Programın içereceği nesnelerden birisi Siparis nesnesi olur. 16
Örnek 1: Sipariş verme yazılımı (devam ) Siparis nesnesi şunları içerir; Nitelik /özellik olarak; Sipariş Tarihi Müşteri Durumu Davranış olarak; Oluştur Öde Kalem Ekle / Çıkart Sevk Et 17
Örnek 1: Sipariş verme yazılımı (devam ) Sipariş verme yazılımının tasarımı için gereken tüm nesneler düşünülmeli ve nesnelerin nitelikleri / özellikleri ve davranışları tanımlanmalıdır. Başlıca nesneleri şunlar olmalıdır : Müsteri Nesnesi, Ödeme Nesnesi, Sipariş Detayı Nesnesi 18
Örnek 1: Sipariş verme yazılımı (devam ) 19
Örnek 1: Sipariş verme yazılımı (devam ) Her iki programlama yaklaşımıyla da doğru bir yazılım üretilebilir. Aynı zamanda iki programlama yaklaşımıyla da yeniden kullanılabilir modüller üretilebilir. İki programlama yaklaşımındaki önemli farklılıklar: Yazılımcının projenin erken safhalarındaki planlama ve düşünme farklılığı Üretilen programların karmaşıklıkları Yeni ihtiyaçların ve düzenlemelerin sisteme adapte edilmesindeki kolaylık 20
Örnek 2: Trafik Simülasyon Amaç: Bir şehrin trafik karışıklığını gidermek için gerçek zamanlı trafiği simüle eden bir simülasyonun yapılması gerekmektedir. Gerekli olan nesneler : Arac Nesnesi, Yaya Nesnesi, Trafik İşaretçileri Nesnesi Bu nesnelerin her biri kendi bilgilerini saklar ve kendi davranışlarına sahip olur. Böylelikle nesnelerin yardımcılığıyla bir şehrin trafiği gerçek zamanlı olarak simüle edilebilir. 21
Örnek 2: Trafik Simülasyon (devam ) Arac nesnesi Nitelikler Plaka Bilgisi Sürücü bilgisi Anlık Hızı Bilgisi Davranışlar Anlık Hız Değiştirme Metodu Trafik Kuralı Kontrol Metodu Yaya nesnesi Nitelikler Kimlik Numarası Anlık Hızı Davranışlar Anlık Hız Değiştirme Metodu Trafik Kuralı Kontrol Metodu 22
Örnek 3: Buton Nesnesi Buton nesnesi Nitelikler Formdaki konumu Rengi, Üzerindeki Yazısı Davranışlar Tıklandığında ekranın rengini değiştirmesi Sürükleyip bırakılabilmesi, Tıklanınca ses çıkarması 23
Nesneye Yönelik Programlama Bir programlama dilinin Nesneye Yönelik Programlama dili olması için şu özelliklere sahip olması gereklidir: 1. Sınıf (Class) 2. Nesneler (Object) 3. Kapsülleme ve Arayüz ( Encapsulation & Interface ) 4. Kalıtım (Inheritance) 5. Çok Biçimlilik (Polymorphism) 24
Sınıflar 25
Sınıf Kavramı Dünyayı anlayabilme kabiliyetimizin çoğu nesneleri ve olayları sınıflar halinde kategorilendirebilmemizden gelmektedir. Örneğin; Çocukken hayvan kavramını, hayvan kelimesini öğrenmeden çok öncesinde biliyordunuz. Hayvanlarla ilk karşılaşmanız köpeğinizle veya sokak kedisi ile veya bir çiftlikteki keçi ile olmuş olabilir. Konuşmayı öğrendikçe, tüm hayvanlar için aynı terimleri kullanıyorduk. 26
Sınıf Kavramı (devam ) Tecrübelendikçe, hayvanlar arasındaki farkları anlayabildik. Mesela bir köpek ile koyunun arasındaki farkı, sonrasında ise yavruları ile yetişkinleri arasındaki fark gibi... Tasitlar sınıfını anlamanız, Kara taşıtları ile Deniz veya Hava taşıtları arasındaki benzerlikleri görmenize yardımcı olur Aynı şekilde Kara Tasitlari sınıfını anlamanız Otomobil ile Kamyonet arasındaki benzerlikleri görmemize yardımcı olur. 27
Sınıf Kavramı (devam ) Taşıt Kara Taşıtı Hava Taşıtı Deniz Taşıtı Otomobil Kamyonet 28
Nesne Kavramı (devam ) Nesne daha genel bir sınıfın somutlaşmış bir örneğidir. Örneğin; Sizin arabanız daha genel bir sınıf olan Araba sınıfının somutlaşmış bir örneğidir. Bir nesne, bulunduğu sınıfın somutlaşmış bir örneğidir. 29
Nesne Kavramı (devam ) Canlı cisimleri de nesne olarak düşünebilirsiniz: Ev bitkiniz, balığınız ve aile bireyleri birer nesnedir. Ayrıca olaylar da nesne dir. Örneğin; Hisse senedi alımlarınız, Bitmek üzere olan bir taksitiniz, Sizin adınıza düzenlenmiş bir parti vb. 30
Sınıf Kavramını Anlamak (devam ) Sınıf kavramı size nesneler hakkında bilgi sağladığı için kullanışlıdır. Nesneler, özelliklerini ve davranışlarını (metotları) sınıflardan alırlar. Örneğin: Bir araba sınıfı ile ilgili hangi özellikleri ve davranışları biliyoruz? Düşünelim 31
Araba Sınıfı Özellikler ve Metotlar Özellikler Marka: string Model: int Renk: string YakitTuru: eyakittur Fiyat: Decimal Motor: motor_sinifi Metotlar / Davranışlar SatinAl() Sat() Calistir(): boolean Sur() Durdur(): boolean 32
Araba Sınıfı UML Gösterimi Marka: string Model: short Renk: string YakitTuru: eyakittur Fiyat: Decimal Motor: motor_sinifi SatinAl() Sat() Calistir(): boolean Sur() Durdur(): boolean Araba Sınıf, Interface Adı Üyeler ve Özellikler Metotlar / Davranışlar 33
Sınıf Kavramını Anlamak (devam ) Nesnelerin üyeleri, sınıf içerisinde kullanılan diğer değişkenler ile karışmaması için field (üye değişkenler) olarak adlandırılır. Nesnelerin özellikleri (property) arka planda üye değişkenleri ile ilişkilendirilirler. Nesneler üzerinden üye değişkenlerine erişilemez (private) ancak özelliklere erişilebilir (public). Genellikle; üyeler küçük harfle, özellikler BÜYÜK harfle başlar. Nesnenin örnek değişkenlerinin içerikleri, o nesnenin durumunu belirler. 34
Araba Sınıfı UML Gösterimi Araba sınıfına ait 2 nesnenin durumu Araba1 Marka: Renault Megane Model: 2009 Renk: Beyaz YakitTuru: edizel Fiyat: 28.500 TL Motor: motor_nesnesi1 SatinAl() Sat() Calistir() Sur() Durdur() Araba2 Marka: Citroen C5 Model: 2012 Renk: Füme YakitTuru: ebenzin Fiyat: 41.500 TL Motor: motor_nesnesi2 SatinAl() Sat() Calistir() Sur() Durdur() 35
Nesnelerin Türetildiği Sınıfları Yaratmak Sınıfları tanımlarken öncelikle bir sınıf başlığı/tanımı yaratılmalıdır. Sınıf başlığı üç parçadan oluşur: 1. İsteğe bağlı bir erişim belirleyici, 2. class anahtar kelimesi, 3. Sınıfın adı [erişim belirleyici] class [sınıfadı] Örneğin; public class Araba Sınıf adları nesnelerin tipini tanımladığı için genellikle tek bir addan oluşur. 36
Nesnelerin Türetildiği Sınıfları Yaratmak (devam ) Araba sınıfını tanımlarken kullanılan public anahtar sözcüğü sınıf erişim belirleyicisidir. Oluşturulan sınıfın amacına uygun olan erişim belirleyicileri kullanılır. Sınıf Erişim Belirleyicisi Public (UML +) Protected (UML #) Internal Varsayılan (UML ~) Private (UML -) Açıklama Sınıfa erişim sınırsızdır Sınıfa erişim bulunduğu sınıf ve bu sınıftan türetilen sınıflar ile sınırlıdır. Sınıfa erişim ait olduğu assembly ile sınırlıdır. Sınıfa erişim ait olduğu sınıf ile sınırlıdır. 37
Nesnelerin Türetildiği Sınıfları Yaratmak (devam ) Sınıf başlıkları tanımlanırken kıvırcık parantezler ( {} ) içerisinde sınıf gövdeleri tanımlanmalıdır. Örneğin; public class Araba { //üye değişkenleri, özellikleri ve metotları buraya yazılır } 38
Örnek1: Araba sınıfı yaratılması Araba +Marka: string +Model: short +Renk: string -fiyatkdvsiz: Decimal 39
Örnek1: Araba sınıfı yaratılması (devam ) Solution Explorer penceresinden projemize yeni bir class eklemek için; Proje adına sağ tıklayıp Add Class a tıklıyoruz. 40
Örnek1: Araba sınıfı yaratılması (devam ) Açılan pencereden yaratılacak sınıfın adını girip Add butonuna tıklıyoruz. 41
Örnek1: Araba sınıfı yaratılması (devam ) Neden sadece fiyatkdvsiz üye değişkeni WARNING veriyor? 42
Örnek1: Araba sınıfı yaratılması (devam ) Sınıfın Kullanımı fiyatkdvsiz üye değişkenine neden erişemedik? 43
Örnek2: DortgenPrizma sınıfı yaratılması -en: float -boy: float -yukseklik: float DortgenPrizma +HacimHesapla(float a, float b, float c): float 44
Örnek2: DortgenPrizma sınıfı yaratılması (devam ) 45
Örnek2: DortgenPrizma sınıfı yaratılması (devam ) Sınıfın Kullanımı 46
Örnek3: KimlikBilgileri sınıfı yaratılması KimlikBilgileri +kimlikno: long +ad: string +soyad: string #dogumyeri: string +dogumtarihi: DateTime +KimlikBilgisiGoster():string 47
Örnek3: KimlikBilgileri sınıfı yaratılması (devam ) 48
Örnek3: KimlikBilgileri sınıfı yaratılması (devam ) Sınıfın Kullanımı Doğum yeri? 49
Örnek4: Ogrenci sınıfı yaratılması Ogrenci +ogrno: string +programturu: eprogramtur (Lisans, YL, Doktora) +birim: string +bolum: string +kimlikbilgi: KimlikBilgileri +OgrenciBilgisiGoster():string Bir sınıf diğer sınıflardan yaratılmış bir nesne üye barındırabilir. Örneğin, ad, soyad, adres vb. gibi üye değişkenlerine sahip KimlikBilgileri sınıfından yaratılan bir nesne Ogrenci sınıfının üyesi olabilir. 50
Örnek4: Ogrenci sınıfı yaratılması (devam )? 51
UML Sınıflar Arası Birliktelik Türleri Aggregation Is-part-of: Bir parçası olmak İçi boş elmas ile gösterilir Composition Is-made-of: Daha güçlü bir parçası olmak Birlikte oluşturulur ve birlikte yok edilir İçi dolu siyah elmas ile gösterili 52
UML Sınıflar Arası Birliktelik Türleri (devam ) Ogrenci Ogrenci 1 1 1 KimlikBilgileri 1 KimlikBilgileri Aggregation Composition 53
Örnek4: Ogrenci sınıfı yaratılması (devam ) Sınıfın Kullanımı 54
Uygulama: Araba Galerisi Bir araba galerisi uygulaması yapmak istiyoruz. Nesne yönelimli mantıkla, soyut düşünelim. Sorular soralım: Soru 1: Hangi sınıflara ihtiyacımız var? Soru 2: Sınıfların birbirleri ile ilişkisi nasıl kurulmalı? Soru 3: Nasıl bir ekran ara yüzü tasarlayalım? 55
Uygulama: Araba Galerisi (devam ) Galeri -Arabalar: List<Araba> +ArabaEkle(Araba a) +ArabaSat(Araba a) +ArabalariListele(): string 1 1..* Araba +Marka: string +Model: short +Renk: string Soru 1: Hangi sınıflara ihtiyacımız var? Soru 2: Sınıfların birbirleri ile ilişkisi nasıl kurulmalı? 56
Uygulama: Araba Galerisi (devam ) Soru 3: Nasıl bir ekran ara yüzü tasarlayalım? 57
Yararlanılan Kaynaklar Sefer Algan, HER YÖNÜYLE C#, Pusula Yayıncılık, İstanbul, 2003 Milli Eğitim Bakanlığı, Nesne Tabanlı Programlama, 2012 Joyce Farrel, An Introduction to Object- Oriented Programming, Cengage Learning, 2011 http://www.algoritmaveprogramlama.com 58
İYİ ÇALIŞMALAR Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr 59