Algoritmalar ve Programlama II Ders 11: Kalıtım

Slides:



Advertisements
Benzer bir sunumlar
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Advertisements

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Hafta2 Rekürsif Algoritmalar
Algoritma.  Algoritma, belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir.  Başka bir deyişle; bir sorunu çözebilmek için gerekli olan.
YEDEKLEME NEDIR? Gülşen Güler. YEDEKLEME NEDIR? Yedekleme, en genel anlamıyla, bir bilgisayar sistemini işlevsel kılan temel birimlerin, üzerinde çalışan.
BM-308 Paralel Programlamaya Giriş Bahar 2016 (2. Sunu) (Yrd. Doç. Dr. Deniz Dal)
ÖTÖ 451 Okul Yönetiminde Bilgisayar Uygulamaları R. Orçun Madran.
BÖLÜM 4 PROGRAMLAMA DİLLERİ. PROGRAMLAMA DİLLERİNDE KULLANILAN VERİ TİPLERİ Bilgisayarda işlenen veriler iki türdür: Sayısal Alfasayısal.
BİLGİSAYAR PROGRAMLAMA Ders 11: İşaretçi (Pointer) Kullanımı Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
Arş.Gör.İrfan DOĞAN.  Bugün otizm tedavisinde en önemli yaklaşım, özel eğitim ve davranış tedavileridir.  Tedavi planı kişiden kişiye değişmektedir,
DONANIM VE YAZILIM.
TC Windows Editörü DevC++. KURULUM PROGRAMIN KURULACAĞI YER BURADA BELİRLENİYOR.
İŞLETİM SİSTEMLERİ ISE 206 DR. TUĞRUL TAŞCI. Dersin Amacı Bilgisayar sistemlerinin temel organizasyonunu tanımak İşletim sistemlerinin ana bileşenlerini.
İÇİNDEKİLER GRID COMPUTING NEDİR? NASIL ÇALIŞIR? GRID COMPUTING YAPISI
Bağlama ve Kapsam Kavramları
Yazılım Mühendisliği1[ 3.hft ]. Yazılım Mühendisliği2 Yazılım İ sterlerinin Çözümlemesi Yazılım Yaşam Çevrimi “ Yazılım Yaşam çevrimin herhangi bir yazılım.
7. Hafta İçeriği 1.Kalıtım (Inheritance) 2.Soyut sınıf (abstract class) 3.Sealed sınıf(sealed class) 4.Çok biçimlilik (polymorphism)polymorphism.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Bölüm 2 C Dilinin Temelleri
BİLGİSAYAR PROGRAMLAMA DERSİ
SAYILAR ve RAKAMLAR.
C Programlama Dili Çağdaş Hakan Aladağ.
İŞLETİM SİSTEMLERİ ISE 206 Dr. Tuğrul TAŞCI.
Algoritma ve Programlamaya Giriş
BMET 262 Filtre Devreleri.
Altera ile proje hazırlama
PROGRAMLAMAYA GİRİŞ VE ALGORİTMA
METOTLAR.
MODEL YETERSİZLİKLERİNİ DÜZELTMEK İÇİN DÖNÜŞÜMLER VE AĞIRLIKLANDIRMA
BİLGİSAYAR PROGRAMLAMA Ders 11: İşaretçi (Pointer) Kullanımı
MAT – 101 Temel Matematik Mustafa Sezer PEHLİVAN *
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 6: Sınıflar
Algoritma ve Programlamaya Giriş
Nesneye Dayalı Kavramlar Uygulama 2
KÜMELER HAZIRLAYAN : SELİM ACAR
MATEMATİK DERSİ ÖĞRETİM PROGRAMI
Bilgisayarlara komut verme Remzi ÖZ
PROBLEM ÇÖZME VE ALGORİTMALAR
3.hafta METODLAR.
Bölüm 7 İfadeler ve atamalar.
BİLGİSAYAR programlama II
BİLGİSAYAR programlama II
NİŞANTAŞI ÜNİVERSİTESİ
TEKNOLOJİ VE TASARIM DERSİ 7.D.1. Özgün Ürünümü Tasarlıyorum.
NİŞANTAŞI ÜNİVERSİTESİ
Doğrusal Mantık Yapısı İle Problem Çözme
Nesneye Dayalı Programlama 1
PROGRAMLAMAYA GİRİŞ VE ALGORİTMA
NİŞANTAŞI ÜNİVERSİTESİ
Bilgisayar Bilimi Koşullu Durumlar.
Nesneye Dayalı Programlama 1
Sonlu Özdevinirlere Giriş
Bilgi Teknolojileri Hafta 01
NİŞANTAŞI ÜNİVERSİTESİ
Fonksiyonlar ve Alt Programlar
Değerler ve Değişkenler
Ders 2: Yazılım Geliştirme
MAK212-SAYISAL YÖNTEMLER Sayısal Türev ve İntegral
DAHİLİ SINIFLAR(INNER CLASSES)
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
BLM113 Bilgisayar Bilimlerine Giriş
BLM-111 PROGRAMLAMA DİLLERİ I Ders-10 Diziler
NİŞANTAŞI ÜNİVERSİTESİ
MTM216 GÖRSEL PROGRAMLAMA
Kesikli Olay benzetimi Bileşenleri
İleri Algoritma Analizi
RASTGELE DEĞİŞKENLER Herhangi bir özellik bakımından birimlerin almış oldukları farklı değerlere değişken denir. Rastgele değişken ise tanım aralığında.
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

Algoritmalar ve Programlama II Ders 11: Kalıtım Doç. Dr. Cemil Öz Algoritmalar ve Programlama II Ders 11: Kalıtım SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Kalıtım(inheritance), nesne yönelimli programlamanın dört özelliğinden önemli olanıdır. Kalıtım, mevcut olan sınıflardan veya temel sınıflardan, türetilmiş sınıf denilen yeni sınıflar oluşturma işlemidir. Türetilmiş sınıf temel sınıfın tüm özelliklerini taşır ve üye fonksiyonlarını kullanır. Üstelik kendisine ait özellikler ve ilaveler katılabilir. Temel sınıf ise çocuk sınıflardan etkilenmez. Kalıtım, Nesne yönelimli programlamanın başlıca parçasıdır. En büyük avantajı ise kodun yeniden kullanılmasına izin vermesidir. Bir sınıfı yazdıktan ve hatalardan arındırdıktan sonra, bu sınıfa dokunmadan kalıtım özelliği ile değişik durumlara cözüm olarak düzenlenebilir. SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

Türetilinen sınıfı gösterir Temel Sınıf A Özelliği B Özelliği C Özelliği Türetilinen sınıfı gösterir Türetilmiş sınıf Türetilmiş sınıf içinde tanımlanmış D Özelliği A Özelliği Temel sınıf içinde tanımlanmış Bu özelliklere türetilmiş sınıftan da erişilebilir B Özelliği C Özelliği Kalıtım(inheretance) SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz include <cstdlib> #include <iostream> using namespace std; class sayac //yapı tanımla { protected: // dikkate private değil unsigned int sayici; public: sayac():sayici(0) // kurucu fonsiyon { /* boş gövde */} sayac(int c): sayici( c ) { } sayac operator ++ () // sayacı bir artır {return sayac(++sayici);} unsigned int al_sayici() //sayac değerini göster {return sayici;} }; class sayacAsagi: public sayac sayac operator -- () {return sayac(--sayici);} SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz int main(int argc, char *argv[]) { sayacAsagi s1; // sayacAsagi sınıfına ait obje tanımla cout<<"\n s1 degeri "<< s1.al_sayici(); // s1 objesine değerini göster ++s1; ++s1; ++s1; --s1; -- s1; cout<<"\n s1 değeri "<< s1.al_sayici(); // s1 objesine değerini göster cout<<endl; system("PAUSE"); return EXIT_SUCCESS; } SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Türetilmiş sınıfı açıkca belirtmek Programda sayac sınıfının peşinden, sayacasagi isimli yeni bir sınıf tanımı gelir. Bu sınıf, sayac daki sayıyı eksilten operator –() isimli yeni bir fonksiyondur. Bununla beraber yeni sayacasagi sınıfı, sayac sınıfının tüm özelliklerini devralır. sayacasagi bir kurucu fonksiyon, al_sayı() fonksiyonu ve operator ++() üye fonksiyonları gerektirmez, Çünkü bunlar sayac sınıfında mevcuttur. sayacasagi’nın ilk satırı, sayacasagi’ nın sayac sınıfından türetildiğini açıkca belirtir. class sayacAsagi: public sayac Burada sadece iki nokta işareti kullanılır( kapsam çözünürlük operatörü (: : ) değildir). İki noktanın peşinden Public anahtar kelimesi ve temel sınıfın ismi(sayac) gelir. Bu satır sınıflar arası ilişki kurar ve şunu söyler. sayacasagi, sayac sınıfından türetilmiştir. SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz UML-Birleştirilmiş Modelleme DİLİ UML, bilgisayar programlarını modellemek için kullanılan grafiksel bir dildir. Modelleme bir şeyin sadeleştirilmiş görüntüsünü oluşturma demektir. Tıpkı bir ev planının evi modellemesi gibi. UML, gerçek kodun ayrıntılarına gömülmeden programlara daha yüksek seviyeden bakıp, program organizasyonunu gözümüzde canlandırma yollarından biridir. UML başlangıçda üç ayrı modelleme dili olarak, ortaya çıkmıştır. Daha sonra üçü birleştirilmiştir. UML ile büyük bilgisayar programlarındaki kod karmaşasına bakmadan, UML ile kolayca anlaşılabilir. UML sınıf Şemalarında Genelleştirme UML’ de kalıtıma genelleştirme denir, çünkü temel sınıf coçuk sınıfın çok daha genelleştirilmiş bir şeklidir. Başka türlü ifade edersek coçuk anenin daha spesifik bir fonksiyonudur. SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz UML sınıf şemalarında genelleştirme, temel sınıf ile çocuk sınıfları birleştiren çizginin ucunda üçgen bir ok işareti ile belirtilir. Ok türetilmiştir, devralınmıştır vb anlamına gelir. Okun yönü türetilmiş sınıfın temel sınıfın verilerine ve fonksiyonuna erişebileceğini fakattemel sınıfın türetilmiş sınıflara erişim hakkı olmadığını gösterir. sayac sayici sayac() sayac(int) al_data() operator ++() sayacasagi operator –() SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Protected Erişim Belirteci Protected üye, kendi sınıfının veya kendi sınıfından türetilmiş her hangi bir sınıfın üye fonksiyonu tarafından erişilebilir. Bu sınıfların dışında yer alan fonksiyonlar tarafından erişilemez. Kalıtım ve erişilebilirlik Erişim Kendi sınıfından erişilebilirlik Türetilmiş sınıftan erişilebilirlik Sınıf dışındaki nesnelerden erişilebilirlik Public Evet Protected Hayır Private evet hayır SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Protected Belirtecinin Tehlikeleri Sınıf üyelerini protected(korumalı) yapmanın dezavantajları vardır. Örneğin etrafa dağıtmak üzere bir sınıf kütüphanesi yazdınız. Bu kütüphaneyi alan her hangi bir programcı, sınıflarınızın protected üyelerine , sadece bu sınıflardan başka sınıflar türeterek erişebilir. Bu durum protected üyeleri private üyelerden çok daha az güvenilir kılar. Verilerin bozulmasını önlemek için, türetilmiş sınıfları, temel sınıfın sadece public fonksiyonlarını kullanarak temel sınıfdaki verilere ulaşmalarını sağlamak daha güvenilirdir. SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Türetilmiş Sınıf Kurucu Fonksiyonları Daha önceki örneğimizde sayacAsagi isimli türetilmiş bir sınıf oluşturmuştuk. class sayacAsagi: public sayac { public: sayac operator -- () {return sayac(--sayici);} }; Burada potansiyel bir problem söz konusudur. sayacAsagi sayac objesine bir değer atamak istesek ne olur? Sıkıntı çıkacaktır. Bunun içinde türetilmiş sınıf için yeni kurucu fonksiyonlar üretilmelidir. class CountDn : public Counter CountDn() : Counter() //argümansız kurucu fonksiyon { } CountDn(int c) : Counter(c) //kurucu fonksiyon bir argümanlı CountDn operator -- () //sayacı bir azalt(prefix) { return CountDn(--count); } SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Türetilmiş Sınıf Kurucu Fonksiyonları // türetilmiş sınıf için kurucu fonksiyon yazımı örneği #include <iostream> using namespace std; //////////////////////////////////////////////////////////////// class Counter { protected: //NOTE: not private unsigned int count; //count public: Counter() : count() //argümansız kurucu fonksiyon { } Counter(int c) : count(c) //kurucu fonksiyon bir argüman unsigned int get_count() const //return count { return count; } Counter operator ++ () //sayac değerini bir artır(prefix) { return Counter(++count); } }; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Türetilmiş Sınıf Kurucu Fonksiyonları class CountDn : public Counter { public: CountDn() : Counter() //argümansız kurucu fonksiyon { } CountDn(int c) : Counter(c) //kurucu fonksiyon bir argümanlı CountDn operator -- () //sayacı bir azalt(prefix) { return CountDn(--count); } }; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Türetilmiş Sınıf Kurucu Fonksiyonları int main() { CountDn c1; //CountDn sınıfından c1 obje CountDn c2(100); // ve c2 obje cout << “\nc1=” << c1.get_count(); //sayac değerlerini göster cout << “\nc2=” << c2.get_count(); // ++c1; ++c1; ++c1; //c1 sayac objesini artır cout << “\nc1=” << c1.get_count(); //c1 sayac obje değerini göster --c2; --c2; // c2 sayac değerini azalt cout << “\nc2=” << c2.get_count(); //c2 sayac değerini göster CountDn c3 = --c2; //c3 oluştur ve c2nin değerini ata cout << “\nc3=” << c3.get_count(); // c3 değerini göster cout << endl; return 0; } SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Sınıf hiyaraşileri Örneğimiz employee isimli temel sınıf ile başlar. Bu sınıf, çalışanın soy adını ve kimlik numarasını ele alır. Bu sınıftan diğer üç sınıf daha türetilir. Manager(müdür), scientist(bilim insanı) ve laborer(laborant) sınıfları bu katogoride çalışanlarla ilgili ek bilgi ve bu bilgiyi ele almak için gerekli üye fonksiyonlar içeririler. Soyut(abstract) temel sınıf Program incelendiğinde employee temel sınıfına ait hiçbir nesne tanımlanmıyor. Bu sınıf genel bir sınıf olarak kullanılmaktadır. Diğer sınıfların türetilebileceği bir temel sınıf Laborer sınıfı, ilave veri veya fonksiyon içermemektedir. Ancak gereksiz görülmemelidir. İlerde laborer sınıfını değiştirmek durumu ortaya çıkarsa employee sınıfında işlem yapılmaz. Employee gibi diğer sınıfları türetmek için kullanılan sınıflar soyut(abstract) sınıflar olarak isimlendirilirler. , SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Sınıf hiyaraşileri SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz İşaretciler İşaretciler c/c++ da yaygın olarak kullanılan ve bir çok programcı için zor gelen bir konudur. Aşağıdaki işlemler için kullanılır Dizi elemanlarına erişmek Bir fonksiyonun, orijinal argümanı değiştirmesi gerekmiyorsa, bu tür fonksiyonlara argüman aktarmak için Fonksiyonlara dizi ve karakter katarı aktarmak için Sistemden bellek almak için Veri yapıları tanımlamak için( bağlı liste vs) Adresler ve işaretçiler Bilgisayarın belleği ardışıl byte lar topluluğu şeklindedir. Her byte’ın bir adresi vardır. Hexadecimal sayı olarak verilirler. Programımız ve veriler belleğe yüklendiği zaman belirli bir byte aralığını kaplar. Değişkenlerimiz veri türüne göre hafızada bir veya daha fazla byte topluluğunu simgeleyecektir. Bir değişkenin işgal ettiği adresi, adres operatörü (&) kullanarak bulabiliriz. SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Örnek #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int deg1=20; int deg2=30; int deg3= 40; cout<<&deg1<<endl<<&deg2<<endl<< &deg3<<endl; system("PAUSE"); return EXIT_SUCCESS; } SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Not: İşletim sistemi dersi başta olamk üzere sonraki yıllarda bellek yönetimi, çoklu programlama, sanal bellek yönetimi vb gibi konularda öğreneceğiniz üzere bir program hafızada işletim sistemi görev yöneticisi tarafından uygun bir yere yüklenecektir dolayısı ile hafıza adresleri her çalışmada veya farklı makinalarda farklı görünebilir. 40 27ff3c H deg3 30 27ff40 H deg2 20 deg1 27ff44 H SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz İşaretçi Değişkenleri Üst düzey programlama dilleri değişken kavramını bellek adresleri ile uğraşmamak için geliştirmiştir. Ama verilerimizin bulunduğu adresleri bilmemiz güzeldir. Programlama gücümüzü artırabiliriz. Ancak bunun için adres değerlerini tutan değişkenlere ihtiyacımız vardır. Adres değerini tutan değişkene işaretçi değişkeni veya kısaca işaretçi denir #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int deg1=20; int deg2=30; int deg3= 40; cout<<&deg1<<endl<<&deg2<<endl<< &deg3<<endl; int* ptr; ptr=&deg1; cout<< "deg1"<< ptr<<endl; ptr=&deg2; cout<< "deg"<< ptr<<endl; system("PAUSE"); return EXIT_SUCCESS; } SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz char* kar; // char tipi değişkene işaret eder int* deg1; // int tipi değişkene işaret eder float* ucret; // float tipi değişkene işaret eder mesafe* m1; // kullanıcı tanımlı bir mesafe sınıfına işaret eder #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int deg1=20; int deg2=30; int deg3= 40; cout<<&deg1<<endl<<&deg2<<endl<< &deg3<<endl; int* ptr; ptr=&deg1; cout<< "deg1 değeri "<< *ptr<<endl; ptr=&deg2; cout<< "deg değeri "<< *ptr<<endl; system("PAUSE"); return EXIT_SUCCESS; } SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz Dizi örneğinde işaretçinin uygulanması #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int dizi[5]={10,20,30,40,50}; for(int i=0; i<5; i++) cout<<dizi[i]<< endl; system("PAUSE"); return EXIT_SUCCESS; } #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int dizi[5]={10,20,30,40,50}; for(int i=0; i<5; i++) cout<<*(dizi+i)<< endl; system("PAUSE"); return EXIT_SUCCESS; } SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz