CodeGym /Java kursus /Modul 2: Java Core /En grænseflade er mere end en grænseflade. Det er en adfæ...

En grænseflade er mere end en grænseflade. Det er en adfærd.

Modul 2: Java Core
Niveau , Lektie
Ledig

"Hej, Amigo! Det er mig - igen. Jeg vil gerne give dig et andet synspunkt på grænseflader. Du ser, det meste af tiden er en klasse en model af et bestemt objekt. Derimod ligner grænseflader mere et objekts evner eller roller snarere end selve objektet."

For eksempel er ting som biler, cykler, motorcykler og hjul bedst repræsenteret som klasser og objekter. Men deres evner, som "Jeg kan bevæge mig", "Jeg kan bære folk" og "Jeg kan parkere", er bedre repræsenteret som grænseflader. Tjek dette eksempel:

Java kode Beskrivelse
interface Moveable
{
void move(String newAddress);
}
Svarer til evnen til at bevæge sig.
interface Driveable
{
void drive(Driver driver);
}
Svarer til evnen til at bevæge sig.
interface Transport
{
void addStuff(Object stuff);
Object removeStuff();
}
Svarer til evnen til at transportere last.
class Wheel implements Moveable
{
...
}
En "hjul" klasse. Har evnen til at bevæge sig.
class Car implements Moveable, Drivable, Transport
{
...
}
En "bil" klasse. Har evnen til at bevæge sig, blive ført af en person og transportere last.
class Skateboard implements Moveable, Driveable
{
...
}
En "skateboard" klasse. Har evnen til at bevæge sig og blive kontrolleret af en person.

Grænseflader forenkler i høj grad programmørens levetid. Programmer har meget ofte tusindvis af objekter, hundredvis af klasser og kun et par dusin grænseflader (roller). Der er få roller, men de kan kombineres på mange måder (klasser).

Hele pointen er, at du ikke behøver at skrive kode, der definerer interaktion med hver anden klasse. Alt du skal gøre er at interagere med roller (grænseflader).

Forestil dig, at du er en robotbygger. Du har snesevis af underordnede robotter, og hver af dem kan have flere færdigheder. Antag, at du omgående skal færdiggøre bygningen af ​​en væg. Du tager bare alle de robotter, der har evnen til at "bygge" og fortæller dem, at de skal bygge muren. Du er ligeglad med, hvilke robotter der gør det. Lad det være en robotvandkande. Hvis den ved, hvordan man bygger, så lad den bygge.

Sådan ville det se ud i kode:

Java kode Beskrivelse
static interface WallBuilder
{
void buildWall();
}
Evne til at «bygge en mur». Forstår kommandoen «byg en mur» (har den passende metode).
static class WorkerRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class GuardRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class WateringCan
{
…
}
Robotter, der har denne evne/færdighed.

En vandkande kan ikke bygge en væg (den implementerer ikke WallBuilder-grænsefladen).

public static void main(String[] args)
{
 //add all robots to a list
 ArrayList robots = new ArrayList();
 robots.add(new WorkerRobot());
 robots.add(new GuardRobot());
 robots.add(new WateringCan());

 //build a wall if you can
 for (Object robot: robots)
 {
  if (robot instanceof WallBuilder)
  {
   WallBuilder builder = (WallBuilder) robot;
   builder.buildWall();
   }
  }
 }
}
Hvordan giver vi kommandoen til at bygge en mur?

"Det er utroligt interessant. Jeg havde aldrig drømt om, at grænseflader kunne være så interessant et emne."

"Og lidt til! Sammen med polymorfi er det fuldstændig åndssvagt."

Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION