JavaRush /Java Blog /Random-TL /Mga relasyon sa pagitan ng mga klase. Pamana, komposisyon...

Mga relasyon sa pagitan ng mga klase. Pamana, komposisyon at pagsasama-sama

Nai-publish sa grupo
Kamusta! Ngayon ay titingnan natin ang isa pang prinsipyo ng object-oriented programming (OOP) - pamana. Kasabay nito, pag-aaralan natin ang iba pang mga uri ng ugnayan sa pagitan ng mga klase - komposisyon at pagsasama-sama. Ang paksang ito ay hindi magiging mahirap: nakatagpo ka na ng pamana at mga halimbawa nito nang maraming beses sa mga nakaraang lektura. Ngayon ang pangunahing bagay ay upang pagsama-samahin ang iyong kaalaman, tingnan ang mekanismo ng pamana at muling dumaan sa mga halimbawa :) Kaya, sige na!
Mga relasyon sa pagitan ng mga klase.  Pamana, komposisyon at pagsasama-sama - 1

Pamana sa Java at mga benepisyo nito

Tulad ng malamang na naaalala mo, ang mana ay isang mekanismo na nagbibigay-daan sa iyong ilarawan ang isang bagong klase batay sa isang umiiral na (magulang) isa. Sa kasong ito, ang mga katangian at functionality ng parent na klase ay hiniram ng bagong klase. Tandaan natin ang halimbawa ng mana mula sa mga nakaraang lektura:
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);
   }
}
Mayroong isang partikular na programa kung saan nagtatrabaho kami sa iba't ibang uri ng mga kotse. Kahit na hindi ka mahilig sa kotse, malamang na alam mo na mayroong napakaraming uri ng parehong mga kotse sa mundo :) Samakatuwid, pinaghihiwalay namin ang mga pangkalahatang katangian ng mga kotse sa isang karaniwang parent class - Car. Ano ang pagkakatulad ng lahat ng sasakyan, anuman ang uri? Ang anumang kotse ay may isang taon ng paggawa, pangalan ng modelo at pinakamataas na bilis. Inilalagay namin ang mga katangiang ito sa mga patlang model, maxSpeed, yearOfManufacture. Tulad ng para sa pag-uugali, anumang kotse ay maaaring bumilis at magpreno :) Tinutukoy namin ang pag-uugali na ito sa mga pamamaraan gas()at brake(). Anong mga benepisyo ang ibinibigay nito sa atin? Una sa lahat, bawasan ang dami ng code. Siyempre, magagawa natin nang wala ang klase ng magulang. Ngunit dahil ang bawat kotse ay dapat na makapagpabilis at makapagpreno, kailangan nating lumikha ng mga pamamaraan gas()sa brake()klase Truck, sa klase Sedan, sa klase F1Car, sa klase, Sportcarat sa lahat ng iba pang klase ng mga kotse. Isipin kung gaano karaming dagdag na code ang isusulat namin sa kasong ito. Huwag kalimutan ang tungkol sa mga field ng modelo, maxSpeed ​​​​at yearOfManufacture: kung abandunahin natin ang parent class, gagawa tayo ng mga ito sa bawat klase ng machine! Mga relasyon sa pagitan ng mga klase.  Pamana, komposisyon at pagsasama-sama - 2 Kapag mayroon kaming ilang dosenang klase ng makina, ang dami ng paulit-ulit na code ay magiging seryoso. Ang paglipat ng mga karaniwang field at pamamaraan (tinatawag ding "estado" at "pag-uugali") sa parent class ay magbibigay-daan sa amin na makatipid ng maraming oras at espasyo. Kung ang isang partikular na uri ay may mga katangian o pamamaraan na natatangi lamang dito at wala sa iba pang mga uri ng makina, hindi ito mahalaga. Maaari silang palaging gawin sa isang descendant class, hiwalay sa lahat ng iba pa.
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();
   }
}
Kunin ang kaso ng Formula 1 racing cars. Sila, hindi katulad ng kanilang "mga kamag-anak", ay may kakaibang pag-uugali - paminsan-minsan ay humihinto sila para sa isang pit stop. Ito ay hindi nakakaabala sa amin. Inilarawan na namin ang pangkalahatang pag-uugali sa parent class Car, at maaari kaming magdagdag ng partikular na pag-uugali ng mga descendant na klase sa loob ng mga klase. Mga relasyon sa pagitan ng mga klase.  Pamana, komposisyon at pagsasama-sama - 3 Nalalapat din ito sa mga field: kung ang isang child class ay may mga natatanging katangian, maaari naming mahinahon na ideklara ang mga field na ito sa loob nito at huwag mag-alala :) Ang kakayahang muling gumamit ng code ay ang pangunahing bentahe ng mana. Napakahalaga para sa isang programmer na huwag magsulat ng mga hindi kinakailangang halaga ng code. Mahaharap mo ito ng higit sa isang beses sa iyong trabaho. Mangyaring tandaan ang isa pang napakahalagang bagay: walang maramihang mana sa Java. Ang bawat klase ay nagmamana mula sa isang klase lamang. Pag-uusapan natin ang mga dahilan para dito nang mas detalyado sa mga lektura sa hinaharap, ngunit sa ngayon tandaan lamang. Ito, sa pamamagitan ng paraan, ay nakikilala ang Java mula sa ilang iba pang mga OOP na wika. Halimbawa, ang C++ ay may maramihang mana. Ang lahat ay higit pa o hindi gaanong malinaw na may mana - magpatuloy tayo.

Komposisyon at Pagsasama-sama

Ang mga klase at bagay ay maaaring magkaugnay sa isa't isa. Inilalarawan ng mana ang relasyong "is" (o sa English "IS A"). Si Leo ay isang Hayop. Ang relasyong ito ay madaling maipahayag gamit ang mana, kung saan Animalang klase ang magiging magulang at Lionang klase ang magiging anak. Gayunpaman, hindi lahat ng mga relasyon sa mundo ay inilarawan sa ganitong paraan. Halimbawa, tiyak na nakakonekta ang keyboard sa isang computer sa ilang paraan, ngunit hindi ito isang computer . Ang mga kamay ay kahit papaano ay konektado sa tao, ngunit hindi sila ang tao. Sa mga kasong ito, ito ay batay sa ibang uri ng kaugnayan: hindi "ay", ngunit "ay bahagi" ("MAY A"). Ang kamay ay hindi isang tao, ngunit ito ay bahagi ng isang tao. Ang keyboard ay hindi isang computer, ngunit ito ay bahagi ng computer. Ang mga relasyon ng HAS A ay maaaring ilarawan sa code gamit ang mga mekanismo ng komposisyon at pagsasama-sama . Ang pagkakaiba sa pagitan ng mga ito ay nakasalalay sa "higpit" ng mga koneksyon na ito. Magbigay tayo ng isang simpleng halimbawa: Mayroon tayong sa atin Car- isang kotse. Bawat sasakyan ay may makina. Bilang karagdagan, ang bawat kotse ay may mga pasahero sa loob. Ano ang pangunahing pagkakaiba sa pagitan ng mga patlang Engine engineat Passenger [] passengers? Kung ang isang kotse ay may pasahero sa loob А, hindi ito nangangahulugan na walang mga pasahero sa loob Bnito C. Ang isang kotse ay kayang tumanggap ng ilang pasahero. Bilang karagdagan, kung ang lahat ng mga pasahero ay aalisin sa kotse, ito ay patuloy na gagana nang tahimik. Ang relasyon sa pagitan ng klase Carat masa ng pasahero Passenger [] passengersay hindi gaanong mahigpit. Ito ay tinatawag na pagsasama-sama . Mayroong magandang artikulo sa paksang ito: Mga relasyon sa pagitan ng mga klase (mga bagay) . Nagbibigay ito ng isa pang magandang halimbawa ng pagsasama-sama. Sabihin nating mayroon tayong klase Studentna nagsasaad ng isang mag-aaral, at isang klase StudentsGroup(isang grupo ng mga mag-aaral). Ang isang mag-aaral ay maaaring maging miyembro ng isang physics club, isang Star Wars student fan club o isang KVN team. Ang komposisyon ay isang mas mahigpit na uri ng komunikasyon. Kapag gumagamit ng komposisyon, ang isang bagay ay hindi lamang bahagi ng ilang bagay, ngunit hindi rin maaaring kabilang sa isa pang bagay na may parehong uri. Ang pinakasimpleng halimbawa ay isang makina ng kotse. Ang isang makina ay bahagi ng isang kotse, ngunit hindi maaaring maging bahagi ng isa pang kotse. Tulad ng nakikita mo, ang kanilang koneksyon ay mas mahigpit kaysa sa Carat Passengers. Mga relasyon sa pagitan ng mga klase.  Pamana, komposisyon at pagsasama-sama - 4
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION