JavaRush /Java блогы /Random-KK /Сыныптар арасындағы қарым-қатынас. Мұрагерлік, құрам және...

Сыныптар арасындағы қарым-қатынас. Мұрагерлік, құрам және жинақтау

Топта жарияланған
Сәлеметсіз бе! Бүгін біз an objectілі-бағытталған бағдарламалаудың (OOP) тағы бір принципін - мұрагерлікпен егжей-тегжейлі қарастырамыз. Бұл ретте біз сыныптар арасындағы қарым-қатынастың басқа түрлерін – құрам мен жинақтауды зерттейтін боламыз. Бұл тақырып қиын болмайды: сіз тұқым қуалаушылық және оның мысалдарымен алдыңғы лекцияларда көп рет кездестірдіңіз. Бүгін ең бастысы біліміңізді бекітіп, мұрагерлік механизмін мұқият қарастырып, тағы бір рет мысалдарды қарастырыңыз :) Сонымен, кеттік!
Сыныптар арасындағы қарым-қатынас.  Тұқым қуалау, құрамы және жинақталуы – 1

Java тіліндегі мұра және оның артықшылықтары

Естеріңізде болса керек, мұрагерлік - бұл бар (ата-ана) негізінде жаңа классты сипаттауға мүмкіндік беретін механизм. Бұл жағдайда ата-аналық сыныптың қасиеттері мен функционалдығы жаңа класс арқылы алынады. Алдыңғы дәрістердегі мұрагерліктің мысалын еске түсірейік:
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);
   }
}
Белгілі бір бағдарлама бар, оның аясында біз әртүрлі көлік түрлерімен жұмыс істейміз. Сіз автокөлік әуесқойы болмасаңыз да, сіз әлемде дәл осы көліктердің көптеген түрлері бар екенін білетін шығарсыз :) Сондықтан біз автомобильдердің жалпы қасиеттерін жалпы ата-аналар класына бөлеміз - Car. Түріне қарамастан барлық көліктердің ортақ қасиеті неде? Кез келген машинаның шығарылған жылы, моделінің атауы және максималды жылдамдығы бар. modelБұл қасиеттерді , maxSpeed, өрістеріне қоямыз yearOfManufacture. Мінез-құлыққа келетін болсақ, кез-келген машина жылдамdateға және тежеуге болады :) Біз бұл әрекетті әдістерде анықтаймыз gas()және brake(). Бұл бізге қандай артықшылықтар береді? Ең алдымен, codeтың көлемін азайту. Әрине, біз ата-аналар класынсыз жасай аламыз. Бірақ әрбір машина үдеу және тежеу ​​мүмкіндігіне ие болуы керек болғандықтан, біз сыныпта gas(), сыныпта , сыныпта , класста және барлық басқа класстағы автомобильдердегі әдістерді жасауымыз керек . Бұл жағдайда қанша қосымша code жазатынымызды елестетіп көріңіз. Үлгі, maxSpeed ​​және yearOfManufacture өрістері туралы ұмытпаңыз: егер біз ата-аналық сыныптан бас тартсақ, біз оларды әрбір машина класында жасаймыз! Бізде бірнеше ондаған машина кластары болған кезде, қайталанатын codeтың мөлшері шынымен маңызды болады. Жалпы өрістер мен әдістерді («күй» және «мінез-құлық» деп те аталады) ата-аналық сыныпқа жылжыту бізге көп уақыт пен кеңістікті үнемдеуге мүмкіндік береді. Егер белгілі бір типте тек өзіне ғана тән және басқа машиналар түрлерінде жоқ қасиеттер немесе әдістер болса, бұл маңызды емес. Олар әрқашан басқалардан бөлек ұрпақ класында жасалуы мүмкін. brake()TruckSedanF1CarSportcarСыныптар арасындағы қарым-қатынас.  Тұқым қуалаушылық, құрамы және жинақталуы – 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();
   }
}
Формула 1 жарыс автомобильдерінің мысалын алайық. Олардың «туыстарынан» айырмашылығы, ерекше мінез-құлқы бар - олар мезгіл-мезгіл пит-стопқа тоқтайды. Бұл бізді алаңдатпайды. Біз жоғарыда ата-аналық сыныптағы жалпы әрекетті сипаттадық Carжәне ұрпақ сыныптарының ерекше әрекетін сыныптарға қоса аламыз. Сыныптар арасындағы қарым-қатынас.  Тұқым қуалаушылық, құрамы және жинақталуы – 3 Бұл өрістерге де қатысты: егер еншілес сыныптың бірегей қасиеттері болса, біз оның ішінде бұл өрістерді тыныш жариялай аламыз және алаңдамаймыз :) Кодты қайта пайдалану мүмкіндігі мұрагерліктің басты артықшылығы болып табылады. Бағдарламалаушы үшін қажет емес көлемдегі codeтарды жазбау өте маңызды. Сіз мұны жұмысыңызда бірнеше рет кездестіресіз. Тағы бір маңызды нәрсені есте сақтаңыз: Java-да көп мұра жоқ. Әрбір класс тек бір сыныптан мұра алады. Мұның себептері туралы алдағы дәрістерде толығырақ айтатын боламыз, бірақ әзірше есіңізде болсын. Бұл, айтпақшы, Java тілін кейбір басқа OOP тілдерінен ерекшелендіреді. Мысалы, C++ тілінде бірнеше мұрагерлік бар. Мұрагерлікпен бәрі азды-көпті түсінікті - әрі қарай жүрейік.

Құрамы және біріктіру

Кластар мен an objectілер бір-бірімен байланысты болуы мүмкін. Мұрагерлік «бол» (немесе ағылшын тілінде «IS A») қатынасын сипаттайды. Лео - жануар. Бұл қатынасты мұраны пайдалану арқылы оңай көрсетуге болады, мұнда Animalсынып ата-ана болады, ал Lionсынып бала болады. Дегенмен, әлемдегі барлық қарым-қатынастар осылай сипатталған жоқ. Мысалы, пернетақта міндетті түрде компьютерге қандай да бір жолмен қосылған, бірақ ол компьютер емес . Қолдар қандай да бір түрде адаммен байланысты, бірақ олар адам емес. Бұл жағдайларда ол қатынастың басқа түріне негізделеді: «болған» емес, «бір бөлігі» («HAS A»). Қол адам емес, ол адамның бір бөлігі. Пернетақта компьютер емес, бірақ ол компьютердің бір бөлігі. HAS A қатынастарын құрам мен біріктіру механизмдерін пайдаланып codeта сипаттауға болады . Олардың арасындағы айырмашылық осы байланыстардың «қатаңдығында» жатыр. Қарапайым мысал келтірейік: Өзіміздікі Car– көлік. Әрбір көліктің қозғалтқышы бар. Сонымен қатар, әрбір көліктің ішінде жолаушылар болады. Өрістердің негізгі айырмашылығы Engine engineнеде Passenger [] passengers? Егер автокөліктің ішінде жолаушы болса , бұл оның Аішінде жолаушылар болуы мүмкін емес дегенді білдірмейді . Бір көлікке бірнеше жолаушы сыяды. Сонымен қатар, егер барлық жолаушылар көліктен шығарылса, ол тыныш жұмыс істей береді. Класс пен жолаушылар массасы арасындағы қатынас онша қатаң емес. Ол біріктіру деп аталады . Бұл тақырып бойынша жақсы мақала бар: Сыныптар арасындағы қарым-қатынастар (нысандар) . Бұл біріктірудің тағы бір жақсы мысалын береді. Бізде оқушыны білдіретін сынып және сынып (оқушылар тобы) бар делік. Студент физика клубының, «Жұлдызды соғыстар» студенттік фан-клубының немесе КВН командасының мүшесі бола алады. Композиция – қарым-қатынастың неғұрлым қатаң түрі. Композицияны пайдаланған кезде an object қандай да бір an objectінің бөлігі болып қана қоймайды, сонымен қатар сол типтегі басқа an objectіге де тиесілі бола алмайды. Ең қарапайым мысал - автомобиль қозғалтқышы. Қозғалтқыш автомобильдің бөлігі, бірақ басқа көліктің бөлігі бола алмайды. Көріп отырғаныңыздай, олардың байланысы және байланысына қарағанда әлдеқайда қатаң . BCCarPassenger [] passengersStudentStudentsGroupCarPassengersСыныптар арасындағы қарым-қатынас.  Тұқым қуалау, құрамы және жинақталуы – 4
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION