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.


$config[zx-auto] not found$config[zx-overlay] not found