çox gözəl yazmısınız Maşallah... cpp-in azərb. dilində kitabı cıxsa zehmet olmasa mənə xəbər verin...yəniki təzəsi...
Cox sag olun. Ela yazmisiniz. minnetdaram.
İkinci bir class tanımlayaq. Həmin VergiHesablayici classından inherit etsin.
Bu zaman biz VergiHesabla methodunu override edəcəyik və override edərkən içini (body) dolduracağıq(abstract methodda body hissəsi olmur, prototype olur yalnız-içi doldurulmur).
class ElaveGelirVergisi: VergiHesablayici
{
public override double VergiHesabla()
// method adını səhv yazmışdım, override etdiyi(absract) ilə adı eyni olmalı
{
double vergi=maash*0.12;
return vergi;
}
}
Abstract class-dan da mən yazım. Bəzən bunu OOP-in əsas cəhətlərindən biri kimi göstərirlər. Amma əsasən, yuxarıdakı trio keçərlidir.
Abstract class yarımçıq class da adlandırırlar. Çünki bu classlardan object yaratmaq olmur, sealed özəlliyi əlavə edə bilmirik(başqa classlar inherit edə bilmir sealed classlardan) və bu classlardan inherit(miras alan) edən classlar da ya abstract olmalıdır, yada abstract methodları override edilməlidir.
Abstract method necə olur?
Əvvəlcə abstract bir class tanımlayaq, abstract bir methodu olsun(VergiHesabla).
abstract class VergiHesablayici
{
...
public abstract double VergiHesabla();
...
}
İkinci bir class tanımlayaq. Həmin VergiHesablayici classından inherit etsin.
Bu zaman biz VergiHesabla methodunu override edəcəyik və override edərkən içini (body) dolduracağıq(abstract methodda body hissəsi olmur, prototype olur yalnız-içi doldurulmur).
class ElaveGelirVergisi: VergiHesablayici
{
public override double VergiHesablayici()
{
double vergi=maash*0.12;
return vergi;
}
}
p.s. İnterfacelər bütün methodları public və abstract olan istifadəçinin yaratdığı xüsusi typelardır.
OOP - in əsas anlayışları :
1. Encapsulation - proqramçıya obyektləri qorumaq imkanı verir. Yəni private təyin etdiyimiz dəyişkənləri istifadəçidən gizlətmək mənasına gəlir ki, onsuz da istifadəçinin bunu istifadə etməsinə gərək yoxdur ve hətta istifadə etməməlidir.
2. İnheritance - bir sinifin metodlarını istifadə edən başqa siniflər yaratmağa kömək edir deyə bilərik.Məsələn bir şirkət sizdən işçiləri haqqında şirkətə lazımi məlumatlarını(maaş, ad, soyad və s.) saxlayan bir proqram qurulması istəyir. Və deyək ki, şirkətdə 3 növ işçi var: Manager, SalesPerson və Laborer.
Onda proqramçı üçün ən uyğun yol budur: İşçilərin adlarını, soyadlarını yaşlarını və maaşlarını təyin edən dəyişənlərdən və əlavə bonus verən bir metoddan ibarət Employee sinifi düzəltsin. Ondan sonra yaradacağımız Manager, SalesPerson və Laborer sinifləri artıq Employee sinifinin alt sinifləri olacaq. Yəni bu 3 sinif Employee base sinifindən törəyəcəklər. BU 3 sinif "Derived class", onların törəndikləri sinif isə "Base class" adlanır. Əgər biz İnheritance - dan istifadə etməsəydik onda Employee sinifində yaratdığımız dəyişənləri və metodları yenidən bu 3 sinifdə yaratmalıydıq. Əgər daha çox dəyişən və metod olardısa onda bu inheritance-dan istifadə etməyən proqramçının xeyli vaxt itirməsinə və çox səliqəsiz bir proqram yaratmasına səbəb olardı. (Siz İnheritancedan istifadə edə-edə onun burda yazdığım səbəblərdən daha çox xeyirli olduğunu görəcəksiniz.)
Deməli, derived class-lar avtomatik olaraq base class-ın bütün özəlliklərinə sahib olurlar.
Və İnheritance C#-da iki nöqtə ilə qeyd edilir.
[code]
//Manager class-ı Employee class-ından miras //alır
class Manager : Employee
{
}
[/code]
Amma Javada extends keyword - ü ilə :
[code]
//Manager class-ı Employee class-ından miras //alır
class Manager extends Employee {
}
[/code]
3. Polymorphism - Polymorphism bizə bunlari etməyə imkan verir:
Bu bizə runtime zamanı (Proqramı çalıştırdığımız zaman) derived class-dakı metodları base class-dakı metodlara referans etməklə çağırmağa şərait yaradır.
Bu bizə fərqli classlarda fərqli işləri görən metodları eyni adla adlandırmamıza imkan yaradır.
Bəs Polymorphismdən necə istifadə edilir:
Bunun üçün bir base classımız və ondan mirasla yaranan derived classlar olmalıdır. Base classda yaradılan bir metod digər siniflərin hamısında istifadə ediləcək ama bu metodların hamısının içi fərqli olacaq.
Base classda təyin etdiyimiz ve bütün classlar üçün ortaq istifadə etmək istediyimiz metodu base classda yazarkən bunu “virtual” olaraq təyin edib, istifadə etməliyik. Derived classlarda ise metodu "Override"keyword -ü ilə qeyd edməliyik (C#-da).
Base classda: public virtual string MaashinTeyinEdilmesi()
Derived classda: public override string MaashinTeyinEdilmesi()
Mən bu mövzuları bilirdim amma, sizə daha yaxşı anlatmaq üçün internetdə yaxşıca araşdırdım. İnşallah yazdıqlarımın azda olsa köməyi olar.