Inheritance (turetim) Bir cok problemin cozumu icin belirlenen class lar hierarsik bir yapi seklinde organize edilebilir C++ gibi bir cok Object-oriented diller class benzerliklerinin etkin bir sekilde kullanilmasi icin ozellikler sunarlar Software re-use (yeniden kullanim) Software muhendislerinin veriminin artirilmasi Inheritance Inheritance: daha genel base class lardan yeni class larin create edilmesini saglar. Yeni derived class olusturmak icin, base class in attribute leri (data member) ve davranislari (member fonksiyonlar) absorb edilir, degistirilir, veya gerekirse yenileri eklenir 12/23/2004 Nesneye Yonelik Programlama 9.1 12/23/2004 Nesneye Yonelik Programlama 9.2 12/23/2004 Nesneye Yonelik Programlama 9.3 12/23/2004 Nesneye Yonelik Programlama 9.4
Base Class & Derived Class Base Class: Daha once var olan ve yeni class larin kullanabilecegi, degistirebilecegi, ve/veya gelistirebilecegi data member lara ve member fonksiyonlara sahip class Derived Class: Base class dan turetilen yeni class. Base class in elementleri ni degistirmeksizin kullanabilir veya degistirip kullanabilir. Base class da olmayan yeni data member lar ve member fonksiyonlar eklenebilir Ayni class ayni anda hem base class ve hemde derived class olabilir 12/23/2004 Nesneye Yonelik Programlama 9.5 Inheritance hakkinda bazi gozlemler Derived class genel olarakbase class dan daha kucuk nesnelerin set ini temsil eder Derived class in object leri base class a gore genelde daha fazla attribute lara ve member fonksiyonlara sahip Bazi durumlarda multiple inheritance (coklu turetim) single inheritance (tekli turetim) a tercih edilebilir Base class iki veya daha fazla class tan data member lar ve member fonksiyonlar temin eder 12/23/2004 Nesneye Yonelik Programlama 9.6 Inheritance Sekilleri Uc tip inheritance public (en yaygin olani) protected private Syntax: class <derived_class> : public <base_class> { Ornek class UndergraduateStudent : public Student { ; 12/23/2004 Nesneye Yonelik Programlama 9.7 public inheritance in ozellikleri Base class in public ve protected member lari derived class in public ve protected member lari olarak inherit edilir Base class in private memberlarina derived class tan erisilemez friend fonksiyonlari inherit edilemez Derived class in object leri ayni zamanda base class in object leridir (tersi dogru degil) 12/23/2004 Nesneye Yonelik Programlama 9.8
Base Class in protected member lari public member lar inherited class fonksiyonlari tarafindan erisilebilirler Hem base class in hem de derived class tan tureyen class larin friend fonksiyonlari tarafindan erisilebilirler Program icerisindeki diger fonksiyonlar tarafindan erisilemezler 12/23/2004 Nesneye Yonelik Programlama 9.9 Ornek: Point ve Circle class lari // File point.h #ifndef POINT_H #define POINT_H class Point { friend ostream &operator<<(ostream &, const Point &); public: Point( int =0, int = 0); void setpoint (int, int); int getx( ) const {return x; int gety( ) const {return y; protected: int x,y; ; #endif 12/23/2004 Nesneye Yonelik Programlama 9.10 // File point.cpp #include <iostream.h> #include point.h Point::Point( int a, int b) { setpoint(a,b); void Point::setPoint( int a, int b) { x = a; y = b; ostream &operator<< (ostream &output, const Point &p) { output << [ << p.x <<, <<p.y << ] ; return output; // enable cascaded calls Point a,b.c cout << a <<b <<c; 12/23/2004 Nesneye Yonelik Programlama 9.11 // File circle.h #ifndef CIRCLE_H #define CIRCLE_H #include <iostream.h> #include <iomaip.h> #include point.h class Circle : public Point { friend ostream &operator<< (ostream &, const Circle &); puclic: Circle( double r=0.0, int x=0; int y = 0); void setradius (double); double getradius( ) const; double area( ) const; protected: double radius: ; #endif 12/23/2004 Nesneye Yonelik Programlama 9.12
// File circle.cpp #include circle.h Circle::Circle (double r, int a, int b) : Point (a,b) // call for base class constructor { setradius ( r ); void Circle::setRadius(double r) { radius = (r >= 0? r : 0 ); double Circle::getRadius( ) const { return radius; double Circle::area( ) const { return 3.14159 * radius * radius; 12/23/2004 Nesneye Yonelik Programlama 9.13 // hala circle.cpp file indeyiz ostream &operator<< (ostream &output, const Circle &c) { output << Center = << static_cast <Point> ( c ) << ; Radius = << setiosflags (ios::fixed ios::showpoint ) << setprecision(2) << c.radius; return output; // enables cascaded calls // circle.cpp file in sonu 12/23/2004 Nesneye Yonelik Programlama 9.14 // File driver.cpp # include <iostream.h> #include <iomanip.h> #include point.h #include circle.h using namespace std; int main( ) { Point *pointptr = 0, p(30,50); Circle *circleptr = 0; c (2.7, 120, 89); cout << Point p: << p << \ncircle c: << c << \n ; pointptr = &c; cout << \ncircle c (via *pointptr): << *pointptr << \n ; 12/23/2004 Nesneye Yonelik Programlama 9.15 pointptr = &c; circleptr = static_cast < Circle * > (pointptr); cout << \ncircle c (via *circleptr):\n << *circleptr << \n Area of c (via CirclePtr): << circleptr->area( ) << \n ; // DANGEROUS: Treat a Point as a circle pointptr = &p; circleptr = static_cast< Circle *>(pointptr); cout << \npoint p (via *circleptr):\n << *circleptr << \narea of object circleptr points to: << circleptr->area( ) << endl; return 0: 12/23/2004 Nesneye Yonelik Programlama 9.16
Derived Class Pointer lerin Base Class Pointer lere cevrimi Derived class pointer daima base class pointer e atanabilir. Gerekli type cevrimi explicit casting e ihtiyac duyulmaksizin compiler tarafindan yerine getirilir. Base class member fonksiyonlari base class pointeri ne dereference edilmek suretiyle cagrilir Boyle bir derived class object ine point eden base class pointer kullanildiginda, base class ta olmayan derived class data member ve member fonksiyonlari goz onunde tutulmaz 12/23/2004 Nesneye Yonelik Programlama 9.17 12/23/2004 Nesneye Yonelik Programlama 9.18 Base Class Pointer lerin Derived Class Pointer lara Donusumu Base class pointer in derived class pointer e donusturulmesi potansiyel olarak tehlike teskil eder Pointer kullanilarakderived class member lara erisilmeye calisilabilir Bu programin crash olmasina veya object de garip degerlerin gorulmesine sebep olabilir C++ static_cast operator kullanilarak bu cevrimin yapilmasina olanak verir 12/23/2004 Nesneye Yonelik Programlama 9.19 Member Fonksiyonlarin Kullanimi Derived class fonksiyonlari public ve protected olarak tanimlanan base class in member larini kullanabilir Ancak, derived class fonksiyonlari private base class data member lari veya member fonksiyonlari kullanamaz. Eger kullanilsa idi data encapsulation prensibine ters duserdi 12/23/2004 Nesneye Yonelik Programlama 9.20
Base-Class Member lara Overriding Derived class lar serbestce base class in public ve protected member larini inherit edebilirler. Eger bu member lardan bazilarina ihtiyac yoksa Derived class ayni decleration i kullanmak suretiyle base class member ine overriding yapabilir. Eger bu yapilirsa, base class member :: operator u ile erisilebilir. Eger scope operator u kullanilmamissa, yeni member erisilecek anlamina gelir Eger derived class member fonksiyonu base class member fonksiyonu ile ayni isme sahip fakat farkli parameter list e sahipse, base member fonksiyon overload edilmis olur, override edilmis degil 12/23/2004 Nesneye Yonelik Programlama 9.21 12/23/2004 Nesneye Yonelik Programlama 9.22 12/23/2004 Nesneye Yonelik Programlama 9.23 12/23/2004 Nesneye Yonelik Programlama 9.24
12/23/2004 Nesneye Yonelik Programlama 9.25 12/23/2004 Nesneye Yonelik Programlama 9.26 12/23/2004 Nesneye Yonelik Programlama 9.27 12/23/2004 Nesneye Yonelik Programlama 9.28
public, protected, & private Inheritance Public inheritance is-a relationship (iliski) olusturur (derived class object i base class in object i dir) C++ ayrica diger iki cesit inheritance e destek verir: protected ve private. Her ikisi de is-a iliskisi belirlemez protected inheritance de base class in public member lari derived class in protected member lari olur private inheritance de, base class in public ve protected member lari derived class in private Base class in public m. Protected Private Inheritance cesitleri public inheritance Derived class. public Protected Private protected inheritance protected Protected Private private inheritance private private private member lari olur. 12/23/2004 Nesneye Yonelik Programlama 9.30 12/23/2004 Nesneye Yonelik Programlama 9.29 Direct & Indirect Base Class Direct base class: derived class in bulundugu sviyenin bir ust seviyesindeki base class. Dirrect class derived class in decleration da : sembolunu izlemek suretiyle belirlenir Indirect base class: base class in bulundugu seviyeden iki veya daha fazla seviye ustte olan base class. Indirect base class derived class in decleration inda gorulmez. Constructor ve Destructor Diger member fonksiyonlarin tersine, base class in constructor ve destructor u derived class tarafindan inherit edilmezler Base class constructor ve destructor derived class inn constructor ve destructor u tarafindan cagrilabilirler Object create edilirken base class constructor u kullanilarak base class kisimlari olusturulur 12/23/2004 Nesneye Yonelik Programlama 9.31 12/23/2004 Nesneye Yonelik Programlama 9.32
Object Assignment Kurallari <base_class_object> = <derived_class_object> Derived class object base class object e atanabilir ve tip cevrimi otomatik olarak gerceklenir Cevrimden sonra derived class member lar artik erisilemez <derived_class_object> = <base_class_object> Default olarak izin verilmez (tehlikeli olabilir) Overloaded assignment operator ve/veya conversion constructor tarafindan gerceklenebilir 12/23/2004 Nesneye Yonelik Programlama 9.33 Inheritance Software gelistirmede sirasinda base class in sadece object code una ve base class in class decleration in oldugu header file ihtiyac duyulur Derived class da code degisimi base class da code degisimini gerektirmez Private base class code unu degistirmek derived class code unu degistirmeyi gerektirmez, fakat derived class code un yeniden re-compile edilmesi gerekebilir. 12/23/2004 Nesneye Yonelik Programlama 9.34 Inheritance Unified Modeling Language (UML) is-a relationship (inheritance) Derived class in object I ayni zamanda base class in object I, fakat degistirilmis class memberlari ve/veya yeni class member lari ile Ornek: UndergraduateStudent is-a Student has-a relationship (composition) Class in object i baska bir class in bir veya daha fazla object ini icerir Ornek: Calendar object Day ve Date object i icermesi UML icerikleri Class diagrams Interaction diagrams Package diagrams State diagrams Activity diagrams Deployment diagrams Class diagrams Class a ait bilgilerin grafiksel gorunumu Name Attributes methods 12/23/2004 Nesneye Yonelik Programlama 9.35 12/23/2004 Nesneye Yonelik Programlama 9.36
12/23/2004 Nesneye Yonelik Programlama 9.37 12/23/2004 Nesneye Yonelik Programlama 9.38 12/23/2004 Nesneye Yonelik Programlama 9.39 12/23/2004 Nesneye Yonelik Programlama 9.40
12/23/2004 Nesneye Yonelik Programlama 9.41 12/23/2004 Nesneye Yonelik Programlama 9.42 12/23/2004 Nesneye Yonelik Programlama 9.43 12/23/2004 Nesneye Yonelik Programlama 9.44
12/23/2004 Nesneye Yonelik Programlama 9.45 12/23/2004 Nesneye Yonelik Programlama 9.46 Multiple (coklu) inheritance Bazi problemler icin bir class i iki veya daha fazla base class dan turetmek gerekebilir C++ multiple inheritance e izin verir Pratikte multiple inheritance kullanimi zor olabilir cunku ambiquity e sebep olur (Hangi base class in member inin cagrilmasi hususunda) 12/23/2004 Nesneye Yonelik Programlama 9.47 12/23/2004 Nesneye Yonelik Programlama 9.48
12/23/2004 Nesneye Yonelik Programlama 9.49 12/23/2004 Nesneye Yonelik Programlama 9.50 12/23/2004 Nesneye Yonelik Programlama 9.51 12/23/2004 Nesneye Yonelik Programlama 9.52
12/23/2004 Nesneye Yonelik Programlama 9.53 12/23/2004 Nesneye Yonelik Programlama 9.54