Objektovo orientované programovacie koncepty v Jave
1. Prehľad
V tomto článku sa pozrieme na koncepty objektovo orientovaného programovania (OOP) v prostredí Java. Budeme diskutovať triedy, objekty, abstrakcia, zapuzdrenie, dedičstvo a polymorfizmus.
2. Triedy
Triedy sú východiskovým bodom všetkých objektov a môžeme ich považovať za šablónu na vytváranie objektov. Trieda by zvyčajne obsahovala členské polia, členské metódy a špeciálnu metódu konštruktora.
Použijeme konštruktor na vytvorenie objektov triedy:
verejná trieda Auto {// členské polia súkromné Typ reťazca; súkromný reťazcový model; súkromná farba reťazca; rýchlosť súkromného int; // konštruktor public Car (typ reťazca, model reťazca, farba reťazca) {this.type = type; this.model = model; this.color = farba; } // členské metódy public int increaseSpeed (int prírastok) {this.speed = this.speed + prírastok; vrátiť túto.speed; } // ...}
Upozorňujeme, že trieda môže mať viac ako jedného konštruktora. Viac o triedach si môžeme prečítať v našom článku o triedach.
3. Predmety
Objekty sa vytvárajú z tried a nazývajú sa inštanciami triedy. Vytvárame objekty z tried pomocou ich konštruktorov:
Auto veyron = nové auto ("Bugatti", "Veyron", "karmínové"); Korveta do auta = nové auto („Chevrolet“, „Corvette“, „čierna“);
Tu sme vytvorili dve inštancie triedy Auto. Prečítajte si o nich viac v našom článku o objektoch.
4. Abstrakcia
Abstrakcia skrýva zložitosť implementácie a odhaľuje jednoduchšie rozhrania.
Ak uvažujeme o typickom počítači, uvidíme iba externé rozhranie, ktoré je najdôležitejšie pre jeho interakciu, zatiaľ čo interné čipy a obvody sú pred používateľom skryté.
V OOP znamená abstrakcia skrytie zložitých implementačných detailov programu a odhalenie iba API potrebného na použitie implementácie. V Jave dosiahneme abstrakciu pomocou rozhraní a abstraktných tried.
Viac o abstrakcii si môžeme prečítať v našich abstraktných článkoch o triedach a rozhraniach.
5. Zapuzdrenie
Zapuzdrenie skrýva stav alebo interné znázornenie objektu pred spotrebiteľom rozhrania API a poskytnutie verejne prístupných metód viazaných na objekt na prístup na čítanie a zápis. To umožňuje skrývať konkrétne informácie a riadiť prístup k internej implementácii.
Napríklad polia členov v triede sú skryté pred ostatnými triedami a je k nim prístup pomocou metód člena. Jedným zo spôsobov, ako to urobiť, je vytvoriť všetky dátové polia súkromné a prístupné iba pomocou verejné členské metódy:
public class Car {// ... private int speed; public int getSpeed () {návratová farba; } public void setSpeed (int speed) {this.speed = speed; } // ...}
Tu, pole rýchlosť je zapuzdrený pomocou súkromné modifikátor prístupu a je prístupný iba pomocou verejné getSpeed () a setSpeed () metódy. Viac sa o modifikátoroch prístupu dozvieme v našom článku o modifikátoroch prístupu.
6. Dedenie
Dedičnosť je mechanizmus, ktorý jednej triede umožňuje získať všetky vlastnosti z inej triedy zdedením tejto triedy. Dediacu triedu nazývame podradenou triedou a zdedenou triedou ako nadtrieda alebo nadradená trieda.
V Jave to robíme rozšírením rodičovskej triedy. Teda podradená trieda získava všetky vlastnosti od rodiča:
verejná trieda Auto rozširuje vozidlo {// ...}
Keď rozšírime triedu, vytvoríme vzťah IS-A. The Auto IS-A Vozidlo. Má teda všetky vlastnosti a Vozidlo.
Môžeme položiť otázku, načo potrebujeme dedičstvo? Ak na to odpovieme, pouvažujme nad výrobcom vozidiel, ktorý vyrába rôzne typy vozidiel, ako sú osobné automobily, autobusy, električky a nákladné vozidlá.
Aby sme prácu uľahčili, môžeme spoločné vlastnosti a vlastnosti všetkých typov vozidiel zoskupiť do modulu (triedy v prípade Javy). A môžeme nechať jednotlivé typy dediť a znova používať tieto vlastnosti:
verejná trieda Vehicle {private int wheels; súkromný reťazcový model; public void start () {// proces štartovania vozidla} public void stop () {// proces zastavenia vozidla} public void honk () {// vytvorí predvolený honk}}
Typ vozidla Auto teraz bude dediť po rodičovi Vozidlo trieda:
public class Car rozširuje Vehicle {private int numberOfGears; public void openDoors () {// proces otvorenia dverí}}
Java podporuje jednoduché dedičstvo a viacúrovňové dedičstvo. To znamená, že trieda sa nemôže rozšíriť priamo z viac ako jednej triedy, ale môže používať hierarchiu:
public class ArmoredCar rozširuje Car {private boolean bulletProofWindows; public void remoteStartCar () {// toto vozidlo je možné naštartovať pomocou diaľkového ovládača}}
Tu je ArmouredCar predlžuje Autoa Auto predlžuje Vozidlo. Takže ArmouredCar dedí vlastnosti z oboch Auto a Vozidlo.
Aj keď dedíme z nadradenej triedy, vývojár môže tiež prepísať implementáciu metódy od nadradenej triedy. Toto sa nazýva prepísanie metódy.
V našom príklade vyššie Vozidlo triedy, tam je trúbiť () metóda. The Auto trieda rozširujúca Vozidlo trieda môže túto metódu prepísať a implementovať spôsobom, akým chce vytvoriť honku:
public class Car extends Vehicle {// ... @Override public void honk () {// produkuje honk pre konkrétne auto}}
Toto sa tiež nazýva runtime polymorfizmus, ako je vysvetlené v nasledujúcej časti. Viac o dedení si môžeme prečítať v našich článkoch o dedení a zložení dedičstva Java.
7. Polymorfizmus
Polymorfizmus je schopnosť jazyka OOP spracovávať údaje odlišne v závislosti od ich typov vstupov. V Jave to môže byť rovnaký názov metódy, ktorý má rôzne podpisy metód a vykonáva rôzne funkcie:
public class TextFile extends GenericFile {// ... public String read () {return this.getContent () .toString (); } public String read (int limit) {return this.getContent () .toString () .substring (0, limit); } public String read (int start, int stop) {return this.getContent () .toString () .substring (start, stop); }}
Na tomto príklade môžeme vidieť, že metóda čítať() má tri rôzne formy s rôznymi funkciami. Tento typ polymorfizmu je statický alebo kompilátový polymorfizmus a nazýva sa tiež preťažovanie metód.
Existuje aj runtime resp dynamický polymorfizmus, kde trieda dieťaťa prepíše metódu rodiča:
public class GenericFile {private String name; // ... public String getFileInfo () {return "Generic File Impl"; }}
Trieda pre deti môže rozšíriť GenericFile triedy a prepísať getFileInfo () metóda:
verejná trieda ImageFile rozširuje GenericFile {private int výška; súkromná int šírka; // ... getre a setre public String getFileInfo () {return "Image File Impl"; }}
Prečítajte si viac o polymorfizme v našom článku o polymorfizme v Jave.
8. Záver
V tomto článku sme sa dozvedeli o základných základných konceptoch OOP s Javou.
Ukážky kódov v tomto článku sú k dispozícii na stránkach Github.