obyekt yönümlü proqramlaşdırma
DESCRIPTION
TRANSCRIPT
Obyekt yönümlü proqramlaşdırma
Samir HəsənovOrient İTM
Məzmun
• OOP nədir? Ümumi məlumat• Sinif, obyekt, konstruktor və metod anlayışı• OOP əsas konseptləri• İnkapsulyasiya (Encapsulation)• Varislik (İnheritance)• Polimorfizm (Polymorphism)• Sual-cavab
OOP nədir?
• Proqramlaşdırma paradiqması• 1950-1960 illərdə MİT-də “obyekt”
anlayışı• Bütün hissələr obyekt və onların bir-biri
ilə olan əlaqəsindən ibarətdir• Prosedur proqramlaşdırmadan üstün
cəhətləri• Yazılan kodun təkrar istifadə olunması• Böyük həcmdə kodun asan idarə
olunması
Obyekt yönümlü proqramlaşdırma dilləri
Obyekt ??
Sinif, Obyekt, Konstruktor və Metod
Sinif və Obyekt
Sinif, Obyekt və Konstruktor
Metod
Metod Overload və Override
Metod Overloading• Eyni sinif daxilində eyni adlı və qəbul etdiyi
arqumentlərin sayı və tipi eyni olan birdən çox metod yaratmaq kompilyasiya səhvi ilə nəticələnir. Belə ki, kompilyator yazılan metodları hansı xassəsinə görə ayıracağını təyin edə bilmir.
Metod Overloading• Kompilyator metodları
ayırmaq üçün onların adlarına, qəbul etdiyi arqument saylarına və arqumentlərin tiplərinə (ardıcıllıqla) baxır. Metodun qaytardığı tip kompilyator tərəfindən yoxlanılmır.
• Sinif daxilində eyni adlı, lakin qəbul etdiyi arqumentlərin sayı və ya tipi fərqli bir neçə metod yarada bilərik. Bu üsul metod overloading adlanır.
Metod Overriding• Metodların override olunması prinsipinin izahı
polimorfizm bölümündə verilmişdir.
OOP əsas 3 konsepti
• İnkapsulyasiya (Encapsulation)• Varislik (İnheritance)• Polimorfizm (Polymorphism)
İnkapsulyasiya (Encapsulation)
İnkapsulyasiya (Encapsulation)• Məlumat gizlətmə və ya “Qara qutu” anlayışı
• İnkapsulyasiya sinifin dəyişənlərini “private” göstərməklə digər siniflərdən onlara birbaşa əlaqənin qarşısını almaq prosesinə deyilir. Bu zaman sinif dəyişənlərinə müraciət birbaşa deyil, yalnız “public” nişanlanmış metodlar vasitəsilə həyata keçirilir.
İnkapsulyasiya (Encapsulation)İnkapsulyasiya olunmamış İnkapsulyasiya olunmuş
İnkapsulyasiyanın faydaları
• Sinif dəyişənlərinə birbaşa əlaqə olmadığından bu dəyişənlər ”read-only” və ya “write-only” kimi istifadə oluna bilər
• Sinif öz daxili dəyişənləri üzərində tam idarəyə malik olur. Belə ki, dəyişənlərə olan müraciət yalnız metodlar vasitəsilə olduğundan, bu məlumatın nə tip və necə saxlanılacağına metod daxilində tam nəzarət edə bilərik.
• Sinifdən istifadə edən digər istifadəçilər dəyişənlərin necə saxlanıldığı haqqda xəbərsiz olurlar. Hətta gələcəkdə proqramçı tərəfindən dəyişənlərin tipi dəyişilərsə, istifadəçilərin öz kodunu dəyişməyə ehtiyac olmur.
Varislik (İnheritance)
Varislik (İnheritance)• Üst sinifdən alınan daha konkret sinif “subclass” adlanır• Bu əlaqədə daha abstrakt olan üst sinif isə “superclass”
adlanır.• Java proqramlaşdırma dilində Object sinifi varislik
ierarxiyasının ən üst pilləsində durur və bütün digər siniflərin superclass-ı sayılır.
• Java proqramlaşdırma dilində Object sinfindən başqa bütün siniflər birbaşa əlaqə ilə yalnız bir sinifdən törəmə sayılır. Javada birbaşa bir neçə sinifdən varisliyə icazə verilmir.
• Bir sinif digər birindən törəyir, digər sinif öz növbəsində başqa sinifdən törəyir, ən üst sinif isə Object sinfindən törəmiş olur. Beləcə varislik ierarxiyası alınır.
Varislik (İnheritance) Subclass-da nə edə bilərik?• Keçid modifikatorlarından asılı olaraq superclass-dan
alınma sinif dəyişənləri ilə birbaşa əlaqə yarada bilərik• Superclass-da olan hər hansı dəyişən ilə eyni adlı
dəyişən təyin edə bilərik, beləliklə superclass-dakı dəyişəni gizləmiş olarıq (məsləhət görülmür)
• Superclass-da olmayan yeni dəyişənlər təyin etməklə sinfimizi daha konkretləşdirə bilərik
• Superclass-dan alınma metodlara birbaşa müraciət edə bilərik
Varislik (İnheritance)
Subclass-da nə edə bilərik?• Superclass-da olan metod ilə eyni göstəricili metod
yaradaraq bu metodu override etmiş olarıq• Superclass-da olan metod ilə eyni göstəricili static
metod yaradaraq superclass-dakı metodu gizləmiş olarıq
• Yeni metodlar təyin etməklə sinifi daha konkretləşdirə bilərik
• Superclass-ın konstruktoruna gizli və ya aşkar müraciət edən konstruktor yarada bilərik
Varislik (İnheritance)
Varislik (İnheritance)Superclass Subclass
Varislik (İnheritance)
“IS-A” əlaqəsi:• Varislik zamanı daha konkret subclass ilə
superclass arasında “IS-A” əlaqəsi mövcüd olur. Baxdığımız misalda: RoadBike is a Bicycle. Buna əsasən subclass-ın obyektinə istinad edən dəyişənə superclass tipini mənimsədə bilərik:
Varisliyin faydaları
• Varislik konseptinin məntiqi çox sadədir, lakin kodun təkrarlanmasının qarşısını alır. Yazdığınız bir sinif ilə ümumi oxşar cəhətləri olan sinif yaradarkən yenidən kod yazmağa ehtiyac olmur. Belə ki, ümumi dəyişən və metodları superclass-a ötürərək varislik konseptindən istifadə edib daha az kod ilə daha geniş siniflər yaratmaq mümkündür. Bu öz növbəsində kodun keyfiyyətini artırır və proqram yaratma prosesini sürətləndirir.
Polimorfizm (Polymorphism)
Polimorfizm (Polymorphism)• Polimorfizm sözü
biologiya elmində bir orqanizmin bir neçə hal və ya şəkil alması mənasını daşıyır. Bu prinsip obyekt yönümlü proqramlaşdırmada da istifadə oluna bilər. Belə ki, sinifin sublass-ı özünün unikal davranış metodlarını təyin edə bilər və bununla yanaşı superclass ilə ümumi xassələri paylaşa bilər. Bu zaman subclass superclass-ın metodlarını override edərək özünə uyğunlaşdırır.
Metod overridingSuperclass-da təyin edilmiş metodlar (statik olmayan) eyni ad, qəbul etdiyi arqument sayı və tipi eyni olmaqla subclass-da da təyin edilərsə, bu zaman subclass superclass-ın metodunu override etmiş sayılır.
Polimorfizm (Polymorphism)
Polimorfizm (Polymorphism)Animal sinfinin iki subclass-ını yaradaq: Cat və Dog
Polimorfizm (Polymorphism)• Polimorfizm konseptini işlədək
Nəticə:
Polimorfizmin faydası• Polimorfizmin əsas məqsədi daha az kod ilə
daha üstün məhsuldarlıq əldə etməkdir. Yazılan kodun oxşar xassələrə malik bir neçə sinif üçün təkrarlanmadan ümumi yazılmasına nail olmaq.
Sual ??