JavaRush /Java Blogu /Random-AZ /Siniflər arasında əlaqələr. Varislik, tərkibi və aqreqasi...

Siniflər arasında əlaqələr. Varislik, tərkibi və aqreqasiyası

Qrupda dərc edilmişdir
Salam! Bu gün biz obyekt yönümlü proqramlaşdırmanın (OOP) başqa bir prinsipi - mirasla daha yaxından tanış olacağıq. Eyni zamanda, biz siniflər arasında münasibətlərin digər növlərini - kompozisiya və aqreqasiyanı öyrənəcəyik. Bu mövzu çətin olmayacaq: siz artıq əvvəlki mühazirələrdə miras və onun nümunələri ilə dəfələrlə qarşılaşmısınız. Bu gün əsas şey biliklərinizi möhkəmləndirmək, varislik mexanizminə daha yaxından baxmaq və bir daha nümunələri nəzərdən keçirmək olacaq :) Beləliklə, gedək!
Siniflər arasında əlaqələr.  Vərəsəlik, tərkibi və aqreqasiyası - 1

Java-da miras və onun üstünlükləri

Yəqin ki, xatırladığınız kimi, varislik mövcud (ana) sinfə əsaslanaraq yeni bir sinfi təsvir etməyə imkan verən mexanizmdir. Bu halda ana sinifin xassələri və funksionallığı yeni sinif tərəfindən götürülür. Əvvəlki mühazirələrdən miras nümunəsini xatırlayaq:
public class Car {

   private String model;
   private int maxSpeed;
   private int yearOfManufacture;

   public Car(String model, int maxSpeed, int yearOfManufacture) {
       this.model = model;
       this.maxSpeed = maxSpeed;
       this.yearOfManufacture = yearOfManufacture;
   }


public void gas() {
       //...gas
   }

public void brake() {
       //...brake
   }
}


public class Truck extends Car {

   public Truck(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}



public class Sedan extends Car {
   public Sedan(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}
Müəyyən bir proqram var ki, onun çərçivəsində müxtəlif növ avtomobillərlə işləyirik. Avtomobil həvəskarı olmasanız belə, yəqin ki, dünyada bu eyni avtomobillərin çoxlu növlərinin olduğunu bilirsiniz :) Buna görə də biz avtomobillərin ümumi xüsusiyyətlərini ümumi ana sinifə ayırırıq - Car. Növündən asılı olmayaraq bütün avtomobillərin ortaq cəhəti nədir? İstənilən avtomobilin istehsal ili, model adı və maksimum sürəti var. modelBu xassələri , maxSpeed, sahələrinə qoyuruq yearOfManufacture. Davranışa gəlincə, istənilən avtomobil sürətləndirə və əyləc edə bilər :) Biz bu davranışı metodlarda gas()brake(). Bunun bizə hansı faydaları var? İlk növbədə, kodun miqdarının azaldılması. Əlbəttə ki, valideyn sinfi olmadan da edə bilərik. Ancaq hər bir avtomobil sürətləndirməyi və əyləc etməyi bacarmalı olduğundan, biz sinifdə gas(), sinifdə , sinifdə , sinifdə və bütün digər avtomobil siniflərində üsullar yaratmalı olacağıq . Təsəvvür edin, bu halda nə qədər əlavə kod yazacağıq. Model, maxSpeed ​​​​və yearOfManufacture sahələri haqqında unutmayın: əgər ana sinifdən imtina etsək, onları maşın siniflərinin hər birində yaradacağıq! Bir neçə onlarla maşın sinifimiz olduqda, təkrarlanan kodun miqdarı həqiqətən ciddi olacaq. Ümumi sahələr və metodların (“vəziyyət” və “davranış” da deyilir) ana sinifə köçürülməsi bizə çox vaxt və məkana qənaət etməyə imkan verəcək. Müəyyən bir növün yalnız özünəməxsus xüsusiyyətləri və ya metodları varsa və digər növ maşınlarda yoxdursa, bunun əhəmiyyəti yoxdur. Onlar həmişə digərlərindən ayrı olaraq nəsil sinfində yaradıla bilərlər. brake()TruckSedanF1CarSportcarSiniflər arasında əlaqələr.  Vərəsəlik, tərkibi və aqreqasiyası - 2
public class F1Car extends Car {

   public void pitStop() {

       //...only racing cars make pit stops
   }

   public static void main(String[] args) {

       F1Car formula1Car = new F1Car();
       formula1Car.gas();
       formula1Car.pitStop();
       formula1Car.brake();
   }
}
Formula 1 yarış avtomobillərini götürək. Onlar, "qohumlarından" fərqli olaraq, özünəməxsus bir davranışa sahibdirlər - vaxtaşırı pit-stop üçün dayanırlar. Bu bizi narahat etmir. Biz artıq ana sinifdə ümumi davranışı təsvir etmişik Carvə nəsil siniflərin xüsusi davranışını siniflər daxilində əlavə edə bilərik. Siniflər arasında əlaqələr.  Vərəsəlik, tərkibi və aqreqasiyası - 3 Bu, sahələrə də aiddir: əgər uşaq sinfi unikal xüsusiyyətlərə malikdirsə, biz onun daxilində bu sahələri sakitcə elan edə bilərik və narahat olmayaq :) Koddan təkrar istifadə etmək imkanı varisliyin əsas üstünlüyüdür. Proqramçının lazımsız miqdarda kod yazmaması çox vacibdir. İşinizdə bununla bir dəfədən çox qarşılaşacaqsınız. Xahiş edirəm daha bir vacib şeyi xatırlayın: Java-da çoxlu miras yoxdur. Hər bir sinif yalnız bir sinifdən miras alır. Bunun səbəbləri haqqında gələcək mühazirələrdə daha ətraflı danışacağıq, amma hələlik xatırlayın. Bu, yeri gəlmişkən, Java-nı bəzi digər OOP dillərindən fərqləndirir. Məsələn, C++ çoxlu mirasa malikdir. Mirasla hər şey az-çox aydındır - davam edək.

Tərkibi və Toplama

Siniflər və obyektlər bir-biri ilə əlaqəli ola bilər. Varislik "is" (və ya ingilis dilində "IS A") münasibətini təsvir edir. Şir Heyvandır. Bu əlaqə mirasdan istifadə etməklə asanlıqla ifadə edilə bilər, burada Animalsinif valideyn, Lionsinif isə uşaq olacaqdır. Ancaq dünyadakı bütün münasibətlər bu şəkildə təsvir olunmur. Məsələn, bir klaviatura mütləq bir şəkildə kompüterə bağlıdır, lakin o, kompüter deyil . Əllər bir növ insanla bağlıdır, amma insan deyil. Bu hallarda, o, fərqli münasibət növünə əsaslanır: “olur” deyil, “hissəsidir” (“HAS A”). Əl insan deyil, insanın bir hissəsidir. Klaviatura kompüter deyil, kompüterin bir hissəsidir. HAS A əlaqələri kompozisiyatoplama mexanizmlərindən istifadə edərək kodda təsvir edilə bilər . Aralarındakı fərq bu əlaqələrin “sərtliyində”dir. Sadə bir misal verək: Bizim Carmaşınımız var. Hər bir avtomobilin mühərriki var. Bundan əlavə, hər bir avtomobilin içərisində sərnişinlər var. Engine engineSahələr və sahələr arasındakı əsas fərq nədir Passenger [] passengers? Əgər avtomobilin içərisində sərnişin varsa , bu o demək deyil ki, onun Аiçində sərnişin ola bilməz . Bir avtomobil bir neçə sərnişini qəbul edə bilər. Bundan əlavə, bütün sərnişinlər avtomobildən çıxarılarsa, o, sakit şəkildə işləməyə davam edəcək. Sinif və sərnişin kütləsi arasındakı əlaqə daha az sərtdir. Buna aqreqasiya deyilir . Bu mövzuda yaxşı bir məqalə var: Siniflər (obyektlər) arasında əlaqələr . Bu birləşmənin başqa bir yaxşı nümunəsini təqdim edir. Tutaq ki, bizdə şagirdi bildirən bir sinif və bir sinif (bir qrup tələbə) var. Tələbə fizika klubunun, Star Wars tələbə fan klubunun və ya KVN komandasının üzvü ola bilər. Kompozisiya daha sərt ünsiyyət növüdür. Kompozisiyadan istifadə edərkən obyekt nəinki hansısa obyektin bir hissəsidir, həm də eyni tipli başqa bir obyektə aid ola bilməz. Ən sadə nümunə avtomobil mühərrikidir. Mühərrik avtomobilin bir hissəsidir, lakin başqa bir avtomobilin bir hissəsi ola bilməz. Gördüyünüz kimi, onların əlaqəsi və ilə müqayisədə daha sərtdir . BCCarPassenger [] passengersStudentStudentsGroupCarPassengersSiniflər arasında əlaqələr.  Vərəsəlik, tərkibi və aqreqasiyası - 4
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION