JavaRush /Java блогу /Random-KY /Класстар ортосундагы мамилелер. Тукум куучулук, состав жа...

Класстар ортосундагы мамилелер. Тукум куучулук, состав жана топтоо

Группада жарыяланган
Салам! Бүгүн биз an objectиге багытталган программалоонун (OOP) дагы бир принцибине - мураска тереңирээк токтолобуз. Ошону менен бирге класстар ортосундагы мамилелердин башка түрлөрүн – составды жана топтоону изилдейбиз. Бул тема кыйын болбойт: сиз буга чейинки лекцияларда мурас жана анын мисалдарына көп жолу туш болгонсуз. Бүгүн эң башкысы бorмиңизди бекемдөө, мурастоо механизмин тереңирээк карап чыгуу жана дагы бир жолу мисалдарды карап чыгуу болот :) Ошентип, кетели!
Класстар ортосундагы мамилелер.  Тукум куучулук, состав жана топтоо - 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()Бирок ар бир машина ылдамdateу жана тормоздоо мүмкүнчүлүгүнө ээ болушу керек болгондуктан, класста brake(), Truckкласста Sedan, класста F1Car, класста Sportcarжана башка бардык класстагы машиналарда ыкмаларды түзүшүбүз керек . Бул учурда канча кошумча code жазарыбызды элестетиңиз. Модель, maxSpeed ​​жана yearOfManufacture талаалары жөнүндө унутпаңыз: эгерде биз ата-эне класстан баш тартсак, аларды ар бир машина классында түзөбүз! Класстар ортосундагы мамилелер.  Тукум куучулук, состав жана топтоо - 2 Бизде бир нече ондогон машина класстары болгондо, кайталануучу codeдун көлөмү чындап эле олуттуу болуп калат. Жалпы талааларды жана ыкмаларды (ошондой эле "мамлекет" жана "жүрүм-турум" деп аталат) ата-эне класска жылдыруу бизге көп убакытты жана мейкиндикти үнөмдөөгө мүмкүндүк берет. Белгилүү бир типте өзүнө гана таандык болгон жана башка типтеги машиналарда жок болгон касиеттери же методдору болсо, бул маанилүү эмес. Алар ар дайым башкаларынан өзүнчө, тукум класста түзүлүшү мүмкүн.
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 жарыш машиналарын алалы. Алар, "туугандарынан" айырмаланып, уникалдуу жүрүм-турумга ээ - маал-маалы менен пит-стопко токтошот. Бул бизди тынчсыздандырbyte. Биз буга чейин ата-эне классындагы жалпы жүрүм-турумду сүрөттөгөнбүз Carжана класстардын ичинде тукум класстардын өзгөчө жүрүм-турумун кошо алабыз. Класстар ортосундагы мамилелер.  Тукум куучулук, курамы жана топтоо - 3 Бул талааларга да тиешелүү: эгерде бала класстын уникалдуу касиеттери болсо, биз анын ичинде бул талааларды тынч жарыялай алабыз жана кабатыр болбоңуз :) Кодду кайра колдонуу мүмкүнчүлүгү - мурастын негизги артыкчылыгы. Программист керексиз көлөмдөгү codeду жазбашы абдан маанилүү. Ишиңизде буга бир нече жолу туш болосуз. Сураныч, дагы бир маанилүү нерсени эстен чыгарбоо керек: Javaда бир нече мурас жок. Ар бир класс бир гана класстан мураска алат. Мунун себептери тууралуу кийинки лекцияларда кененирээк сөз кылабыз, бирок азырынча эсиңизде болсун. Бул, демек, Java тorн башка OOP тилдеринен айырмалайт. Мисалы, C++ бир нече мураска ээ. Мурас менен баары аздыр-көптүр түшүнүктүү - келгиле, уланталы.

Композиция жана топтоо

Класстар жана an objectтер бири-бири менен байланышта болушу мүмкүн. Мурас мамилени сүрөттөйт "болот" (же англисче "IS A"). Лео - жаныбар. AnimalБул мамилени класс ата-эне, ал эми Lionкласс бала болот , мурасты колдонуу менен оңой эле туюнтса болот . Бирок, дүйнөдөгү бардык мамилелер мындай сүрөттөлбөйт. Мисалы, клавиатура компьютерге кандайдыр бир жол менен туташкан, бирок ал компьютер эмес . Колдор кандайдыр бир жол менен адам менен байланышкан, бирок алар адам эмес. Мындай учурларда ал мамиленин башка түрүнө негизделет: “болот” эмес, “бөлүгү” (“HAS A”). Кол адам эмес, ал адамдын бир бөлүгү. Баскычтоп компьютер эмес, бирок ал компьютердин бир бөлүгү. HAS A мамилелери курамын жана топтоо механизмдерин колдонуу менен codeдо сүрөттөлүшү мүмкүн . Алардын ортосундагы айырма бул байланыштардын "катуулугунда" жатат. Жөнөкөй мисал келтирели: Бизде өзүбүздүн Carмашинабыз бар. Ар бир машинанын мотору бар. Кошумчалай кетсек, ар бир унаанын ичинде жүргүнчүлөр бар. Engine engineталаа менен негизги айырмасы эмнеде Passenger [] passengers? Эгерде унаанын ичинде жүргүнчү болсо , бул анын Аичинде жүргүнчүлөр болушу мүмкүн эмес дегенди билдирбейт . Бир машина бир нече жүргүнчүнү батыра алат. Мындан тышкары, бардык жүргүнчүлөр унаадан чыгарылса, ал тынч иштей берет. Класс менен жүргүнчүлөрдүн массасынын ортосундагы мамиле анча катуу эмес. Бул топтоо деп аталат . Бул темада жакшы макала бар: Класстардын (an objectтердин) ортосундагы мамилелер . Бул бириктирүүнүн дагы бир жакшы мисалын көрсөтөт. Бизде окуучуну билдирген класс жана класс (окуучулардын тобу) бар дейли . Студент физика клубунун, "Жылдыздар согушунун" студенттик фан-клубунун же КВН командасынын мүчөсү боло алат. Композиция – баарлашуунун катуураак түрү. Композицияны колдонууда an object кандайдыр бир an objectтин бөлүгү гана болбостон, ошол эле типтеги башка an objectке да таандык боло алbyte. Эң жөнөкөй мисал - бул унаанын кыймылдаткычы. Мотор машинанын бир бөлүгү, бирок башка машинанын бир бөлүгү боло алbyte. Көрүнүп тургандай, алардын байланышы жана байланыштарына караганда алда канча катуураак . BCCarPassenger [] passengersStudentStudentsGroupCarPassengersКласстар ортосундагы мамилелер.  Тукум куучулук, состав жана топтоо - 4
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION