JavaRush /Блоги Java /Random-TG /Муносибатҳои байни синфҳо. Мерос, таркиб ва ҷамъбаст

Муносибатҳои байни синфҳо. Мерос, таркиб ва ҷамъбаст

Дар гурӯҳ нашр шудааст
Салом! Имрӯз мо ба принсипи дигари барномасозии ба 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. Дар хусуси рафтор бошад, хар як мошин метавонад суръат гирад ва тормоз кунад :) Мо ин рафторро дар усулхо gas()ва brake(). Ин ба мо чӣ фоида меорад? Пеш аз ҳама, кам кардани миқдори code. Албатта, мо бе синфи волидайн кор карда метавонем. Аммо азбаски ҳар як мошин бояд суръат ва тормоз кунад, мо бояд gas()дар brake()синф Truck, дар синф Sedan, дар синф F1Car, дар синф Sportcarва дар ҳама синфҳои дигари мошинҳо усулҳо эҷод кунем. Тасаввур кунед, ки мо дар ин ҳолат чӣ қадар рамзи иловагӣ менависем. Дар бораи майдонҳои модел, maxSpeed ​​ва yearOfManufacture фаромӯш накунед: агар мо аз синфи волидайн даст кашем, мо онҳоро дар ҳар як синфҳои мошин эҷод мекунем! Муносибатҳои байни синфҳо.  Мерос, таркиб ва ҷамъбаст - 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ва мо метавонем рафтори мушаххаси синфҳои наслиро дар дохor синфҳо илова кунем. Муносибатҳои байни синфҳо.  Мерос, таркиб ва ҷамъбаст - 3 Ин ба майдонҳо низ дахл дорад: агар синфи кўдак дорои хосиятҳои беназир бошад, мо метавонем ин майдонҳоро дар дохor он оромона эълон кунем ва хавотир нашавем :) Қобorяти истифодаи дубораи code бартарии асосии мерос аст. Барои барномасоз хеле муҳим аст, ки миқдори нолозими codeро нанависад. Шумо дар кори худ бо ин на як бор дучор меоед. Лутфан як чизи муҳимро дар хотир доред: дар Java мероси сершумор вуҷуд надорад. Ҳар як синф танҳо аз як синф мерос мегирад. Мо дар бораи сабабҳои ин дар лексияҳои оянда муфассалтар сӯҳбат хоҳем кард, аммо ҳоло танҳо дар хотир доред. Дар омади гап, ин Java-ро аз баъзе дигар забонҳои OOP фарқ мекунад. Масалан, C++ дорои мероси сершумор аст. Бо мерос ҳама чиз каму беш равшан аст - биёед идома диҳем.

Таркиб ва ҷамъоварӣ

Синфҳо ва an objectҳо метавонанд бо ҳамдигар алоқаманд бошанд. Мерос муносибатро тавсиф мекунад "аст" (ё ба забони англисӣ "IS A"). Лео ҳайвон аст. Ин муносибатро бо истифода аз мерос ба осонӣ ифода кардан мумкин аст, ки дар он Animalсинф волидайн ва Lionсинф кӯдак хоҳад буд. Бо вуҷуди ин, на ҳама муносибатҳои ҷаҳон ин тавр тасвир шудаанд. Масалан, клавиатура бешубҳа бо ягон роҳ ба компютер пайваст аст, аммо он компютер нест . Дастҳо ба гунае бо шахс алоқаманданд, аммо онҳо шахс нестанд. Дар ин мавридҳо он ба навъи дигари муносибат асос меёбад: на «аст», балки «қисм аст» («HAS A»). Даст одам нест, балки як ҷузъи инсон аст. Клавиатура компютер нест, аммо он як қисми компютер аст. Муносибатҳои HAS A-ро метавон дар code бо истифода аз механизмҳои таркиб ва ҷамъкунӣ тавсиф кард . Фарқи байни онҳо дар «сахтии» ин робитаҳост. Як мисоли оддй меорем: Мо аз они худамон Car— машина дорем. Ҳар як мошин муҳаррик дорад. Илова бар ин, дар дохor ҳар як мошин мусофирон доранд. Фарқи асосии байни майдонҳо Engine engineва Passenger [] passengers? Агар дар дохor мошин мусофир бошад , ин маънои онро надорад , ки дар он Амусофирон буда наметавонанд . Дар як мошин якчанд пассажир чой гирифта метавонад. Илова бар ин, агар ҳамаи мусофирон аз мошин хориҷ карда шаванд, он ором кор мекунад. Муносибати байни синф ва массаи пассажирон камтар сахтгир аст. Он агрегатсия номида мешавад . Дар ин мавзӯъ мақолаи хуб мавҷуд аст: Муносибатҳои байни синфҳо (an objectҳо) . Он боз як мисоли хуби агрегацияро медихад. Фарз мекунем, ки мо синфе дорем , ки донишҷӯро ифода мекунад ва синф (гурӯҳи донишҷӯён). Донишҷӯ метавонад узви маҳфor физика, мухлисони донишҷӯёни Ҷангҳои Ситора ё дастаи КВН бошад. Таркиб як намуди сахттари муошират аст. Ҳангоми истифодаи композитсия an object на танҳо ҷузъи ягон an object аст, балки ба an objectи дигари ҳамон намуд тааллуқ дошта наметавонад. Мисоли оддитарин муҳаррики мошин аст. Мотор як ҷузъи мошин аст, аммо ҷузъи мошини дигар шуда наметавонад. Тавре ки шумо мебинед, робитаи онҳо нисбат ба ва хеле сахттар аст . BCCarPassenger [] passengersStudentStudentsGroupCarPassengersМуносибатҳои байни синфҳо.  Мерос, таркиб ва ҷамъбаст - 4
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION