CodeGym /Java-blogg /Tilfeldig /Forhold mellom klasser. Arv, sammensetning og aggregering...
John Squirrels
Nivå
San Francisco

Forhold mellom klasser. Arv, sammensetning og aggregering

Publisert i gruppen
Hei! I dag skal vi se nærmere på ett prinsipp for objektorientert programmering (OOP): arv. Vi vil også studere andre typer forhold mellom klasser: sammensetning og aggregering. Forhold mellom klasser.  Arv, sammensetning og aggregering - 1Dette emnet vil ikke være vanskelig: du har allerede møtt arv og eksempler på arv mange ganger i tidligere leksjoner. I dag vil det viktigste være å styrke kunnskapen din, undersøke arvemekanismen mer detaljert og nok en gang gå gjennom noen eksempler. :) Vel, la oss gå!

Arv i Java og dens fordeler

Som du sikkert husker, er arv en mekanisme som lar deg beskrive en ny klasse basert på en eksisterende klasse (overordnet klasse). Ved å gjøre dette låner den nye klassen egenskapene og funksjonaliteten til den overordnede klassen. La oss huske et eksempel på arv gitt i tidligere leksjoner:

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);
   }
}
Vi har et visst program som innebærer å jobbe med ulike typer biler. Selv om du ikke er en bilentusiast, vet du sikkert at det finnes veldig mange typer biler i verden. :) Følgelig vil vi dele de vanlige egenskapene til biler i en felles foreldreklasse kalt Car. Så hva er felles for alle biler, uansett type? Hver bil har et års produksjon, modellnavn og maksimal hastighet. Vi legger disse egenskapene inn i feltene model, maxSpeed, og yearOfManufacture. Når det gjelder oppførsel, kan enhver bil akselerere og bremse. :) Vi definerer denne oppførselen i gas()ogbrake()metoder. Hvilke fordeler gir dette oss? Først av alt reduserer det mengden kode. Selvfølgelig kan vi klare oss uten foreldreklassen. Men siden hver bil må kunne akselerere og bremse ned, må vi lage gas()og brake()metoder i klassene Truck, Sedan, F1Car, SportsCarog i annenhver bilklasse. Tenk deg hvor mye ekstra kode vi må skrive. Og ikke glem feltene model, maxSpeed, og yearOfManufacture: hvis vi blir kvitt foreldreklassen, må vi lage dem i hver bilklasse! Forhold mellom klasser.  Arv, sammensetning og aggregering - 2Når vi har et par dusin bilklasser, blir mengden duplikatkode virkelig alvorlig. Å flytte vanlige felt og metoder (også kalt "tilstander" og "atferd") til en overordnet klasse lar oss spare mye tid og plass. Hvis en type har unike egenskaper eller metoder som andre biltyper ikke har, er det ingen sak. Du kan alltid lage dem i en etterkommerklasse, atskilt fra alle andre.

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();
   }
}
La oss se på Formel 1 racerbiler som et eksempel. I motsetning til deres "slektninger", har de en unik oppførsel - de tar en pit stop fra tid til annen. Dette plager oss ikke. Vi har allerede beskrevet den vanlige oppførselen i Caroverordnet klasse, og den spesifikke oppførselen til etterkommerklasser kan legges til disse klassene. Forhold mellom klasser.  Arv, sammensetning og aggregering - 3Det samme gjelder felt: hvis en barneklasse har unike egenskaper, deklarerer vi rolig disse feltene inne i barneklassen og slutter å bekymre oss. :) Muligheten til å gjenbruke kode er hovedfordelen med arv. For programmerere er det veldig viktig å ikke skrive ekstra kode. Du vil komme over dette gjentatte ganger i arbeidet ditt. Husk noe annet viktig: Java har ikke multippel arv. Hver klasse arver bare én klasse. Vi vil snakke mer om årsakene til dette i fremtidige leksjoner. For nå, bare husk det. Dette gjør forresten Java forskjellig fra noen andre OOP-språk. For eksempel støtter C++ multippel arv. Alt er mer eller mindre klart med arv. La oss gå videre.

Sammensetning og aggregering

Klasser og objekter kan kobles sammen. Arv beskriver et "er-et" forhold. En løve er et dyr. Et slikt forhold uttrykkes lett ved hjelp av arv, hvor Animaler foreldreklassen og Lioner barnet. Imidlertid er ikke alle relasjoner beskrevet på denne måten. For eksempel er et tastatur definitivt relatert til en datamaskin, men det er ikke en datamaskin . Hender er på en eller annen måte relatert til en person, men de er ikke en person. I disse tilfellene har vi en annen type forhold: ikke "er-en", men "har-en". En hånd er ikke en person, men er en del av en person. Et tastatur er ikke en datamaskin, men er en del av en datamaskin. En har-en-relasjon kan beskrives i kode ved hjelp av komposisjon og aggregering. Forskjellen ligger i "strengheten" i forholdet. La oss gi et enkelt eksempel: Vi har en Carklasse. Hver bil har en motor. I tillegg har hver bil passasjerer. Hva er den grunnleggende forskjellen mellom feltene Engine engineog Passenger[] passengers? Det faktum at passasjer Asitter i en bil betyr ikke at passasjerer Bog Cikke er i bilen. En bil kan tilsvare flere passasjerer. Dessuten, hvis alle passasjerene går ut av en bil, vil den fortsatt fungere problemfritt. Forholdet mellom Carklassen og Passenger[] passengersarrayet er mindre strengt. Det kalles aggregering . Det gir et annet godt eksempel på aggregering. Anta at vi har en Studentklasse og enStudentGroupklasse. En student kan bli med i flere studentorganisasjoner: en fysikkklubb, en Star Wars-fanklubb og/eller en studentkomedieklubb. Komposisjon er en strengere type forhold. Ved bruk av komposisjon er et objekt en del av et objekt og kan ikke tilhøre et annet objekt av samme type. Det enkleste eksemplet er en bilmotor. En motor er en del av en bil og kan ikke være en del av en annen bil. Som du kan se, er forholdet deres mye strengere enn forholdet mellom Carog Passengers. Forhold mellom klasser.  Arv, sammensetning og aggregering - 4
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION