CodeGym /Blog Java /Aleatoriu /Relațiile dintre clase. Moștenirea, compoziția și agregar...
John Squirrels
Nivel
San Francisco

Relațiile dintre clase. Moștenirea, compoziția și agregarea

Publicat în grup
Bună! Astăzi vom arunca o privire mai atentă asupra unui principiu al programării orientate pe obiecte (OOP): Moștenirea. Vom studia și alte tipuri de relații între clase: compoziția și agregarea. Relațiile dintre clase.  Moștenirea, compoziția și agregarea - 1Acest subiect nu va fi dificil: ați întâlnit deja moștenire și exemple de moștenire de multe ori în lecțiile anterioare. Astăzi, principalul lucru va fi să vă consolidați cunoștințele, să examinați mecanismul moștenirii mai detaliat și să parcurgeți din nou câteva exemple. :) Ei bine, hai să mergem!

Moștenirea în Java și avantajele sale

După cum vă amintiți cu siguranță, moștenirea este un mecanism care vă permite să descrii o nouă clasă bazată pe o clasă existentă (clasa părinte). Procedând astfel, noua clasă împrumută proprietățile și funcționalitatea clasei părinte. Să ne amintim un exemplu de moștenire dat în lecțiile anterioare:

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);
   }
}
Avem un anumit program care presupune lucrul cu diverse tipuri de mașini. Chiar dacă nu ești un pasionat de mașini, probabil știi că există o mulțime de tipuri de mașini în lume. :) În consecință, vom separa proprietățile comune ale mașinilor într-o clasă părinte comună numită Car. Deci, ce este comun tuturor mașinilor, indiferent de tipul lor? Fiecare mașină are un an de fabricație, numele modelului și viteza maximă. Am pus aceste proprietăți în câmpurile model, maxSpeed, și yearOfManufacture. În ceea ce privește comportamentul, orice mașină poate accelera și încetini. :) Definim acest comportament in gas()sibrake()metode. Ce beneficii ne oferă acest lucru? În primul rând, reduce cantitatea de cod. Desigur, ne putem descurca fără clasa de părinte. Dar, deoarece fiecare mașină trebuie să poată accelera și încetini, va trebui să creăm gas()și brake()metode în clasele Truck, Sedan, F1Car, SportsCarși în orice altă clasă de mașini. Imaginează-ți cât de mult cod în plus ar trebui să scriem. Și nu uitați de câmpurile model, maxSpeed, și yearOfManufacture: dacă scăpăm de clasa părinte, va trebui să le creăm în fiecare clasă de mașini! Relațiile dintre clase.  Moștenirea, compoziția și agregarea - 2Când avem câteva zeci de clase de mașini, cantitatea de coduri duplicate devine foarte serioasă. Mutarea câmpurilor și metodelor comune (numite și „stări” și „comportamente”) într-o clasă părinte ne permite să economisim mult timp și spațiu. Dacă un tip are proprietăți sau metode unice pe care alte tipuri de mașini nu le au, nu e mare lucru. Le puteți crea oricând într-o clasă descendentă, separată de toți ceilalți.

public class F1Car extends Car {

   public void pitStop() {

       // Only race cars make pit stops
   }

   public static void main(String[] args) {

       F1Car formula1Car = new F1Car();
       formula1Car.gas();
       formula1Car.pitStop();
       formula1Car.brake();
   }
}
Să ne uităm la mașinile de curse de Formula 1 ca exemplu. Spre deosebire de „rudele lor”, ei au un comportament unic – fac o oprire la boxă din când în când. Asta nu ne deranjează. Am descris deja comportamentul comun în Carclasa părinte, iar comportamentul specific al claselor descendente poate fi adăugat la aceste clase. Relațiile dintre clase.  Moștenirea, compoziția și agregarea - 3Același lucru este valabil și pentru câmpuri: dacă o clasă copil are proprietăți unice, declarăm cu calm aceste câmpuri în interiorul clasei copil și nu ne mai facem griji. :) Capacitatea de a reutiliza codul este principalul avantaj al moștenirii. Pentru programatori, este foarte important să nu scrieți cod suplimentar. Vei întâlni acest lucru în mod repetat în munca ta. Vă rugăm să rețineți ceva esențial: Java nu are moștenire multiplă. Fiecare clasă moștenește o singură clasă. Vom vorbi mai multe despre motivele acestui lucru în lecțiile viitoare. Deocamdată, ține minte. Apropo, acest lucru face ca Java să fie diferit de alte limbaje OOP. De exemplu, C++ acceptă moștenirea multiplă. Totul este mai mult sau mai puțin clar cu moștenirea. Sa trecem peste.

Compoziție și agregare

Clasele și obiectele pot fi legate între ele. Moștenirea descrie o relație „este-o”. Un leu este un animal. O astfel de relație se exprimă ușor folosind moștenirea, unde Animaleste clasa părinte și Lioneste copilul. Cu toate acestea, nu toate relațiile sunt descrise în acest fel. De exemplu, o tastatură este cu siguranță legată de un computer, dar nu este un computer . Mâinile sunt oarecum legate de o persoană, dar nu sunt o persoană. În aceste cazuri, avem un alt tip de relație: nu „este-a”, ci „are-a”. O mână nu este o persoană, ci face parte dintr-o persoană. O tastatură nu este un computer, ci face parte dintr-un computer. O relație are-a poate fi descrisă în cod folosind compoziția și agregarea. Diferența constă în „strictețea” relației. Să dăm un exemplu simplu: Avem o Carclasă. Fiecare mașină are un motor. În plus, fiecare mașină are pasageri. Care este diferența fundamentală dintre câmpurile Engine engineși Passenger[] passengers? Faptul că pasagerul Astă într-o mașină nu înseamnă că pasagerii Bși Cnu sunt în mașină. O mașină poate corespunde mai multor pasageri. În plus, dacă toți pasagerii ies dintr-o mașină, aceasta va funcționa în continuare fără probleme. Relația dintre Carclasă și Passenger[] passengersmatrice este mai puțin strictă. Se numește agregare . Acesta oferă un alt exemplu bun de agregare. Să presupunem că avem o Studentclasă și aStudentGroupclasă. Un student se poate alătura mai multor organizații studențești: un club de fizică, un club de fani Star Wars și/sau un club de comedie studențească. Compoziția este un tip mai strict de relație. Când folosiți compoziția, un obiect face parte dintr-un obiect și nu poate aparține altui obiect de același tip. Cel mai simplu exemplu este un motor de mașină. Un motor face parte dintr-o mașină și nu poate face parte dintr-o altă mașină. După cum puteți vedea, relația lor este mult mai strictă decât relația dintre Carși Passengers. Relațiile dintre clase.  Moștenirea, compoziția și agregarea - 4
Comentarii
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION