Koncepti objektno-orijentiranog programiranja na Javi

1. Pregled

U ovom ćemo članku razmotriti koncepte objektno orijentiranog programiranja (OOP) u Javi. Raspravit ćemo klase, objekti, apstrakcija, inkapsulacija, nasljeđivanje i polimorfizam.

2. Nastava

Razredi su početna točka svih objekata i možemo ih smatrati predloškom za stvaranje objekata. Klasa bi obično sadržavala polja člana, metode člana i posebnu metodu konstruktora.

Konstruktor ćemo koristiti za stvaranje objekata klase:

javna klasa Car {// polja člana private String type; model privatnog niza; privatna boja niza; privatna int brzina; // konstruktor javni automobil (vrsta niza, model niza, boja niza) {this.type = type; this.model = model; this.color = boja; } // metode člana public int povećavanje brzine (prirast int) {this.speed = this.speed + prirast; vrati ovo.brzina; } // ...}

Imajte na umu da klasa može imati više konstruktora. Više o nastavi možemo pročitati u našem članku o nastavi.

3. Predmeti

Objekti se stvaraju iz klasa i nazivaju se primjerci klase. Stvaramo objekte iz klasa koristeći njihove konstruktore:

Auto veyron = novi automobil ("Bugatti", "Veyron", "grimizni"); Korveta automobila = novi automobil ("Chevrolet", "Corvette", "crna"); 

Ovdje smo stvorili dvije instance klase Automobil. Pročitajte više o njima u članku o našim objektima.

4. Apstrakcija

Apstrakcija skriva složenost implementacije i izlaže jednostavnija sučelja.

Ako razmišljamo o tipičnom računalu, može se vidjeti samo vanjsko sučelje, što je najvažnije za interakciju s njim, dok su interni čipovi i sklopovi skriveni od korisnika.

U OOP-u apstrakcija znači skrivanje složenih detalja implementacije programa, izlažući samo API potreban za upotrebu implementacije. U Javi apstrakciju postižemo korištenjem sučelja i apstraktnih klasa.

Više o apstrakciji možemo pročitati u našim člancima o apstraktnoj klasi i sučelju.

5. Kapsulacija

Inkapsulacija skriva stanje ili unutarnji prikaz objekta od potrošača API-ja i pružanje javno dostupnih metoda vezanih uz objekt za pristup čitanju i pisanju. To omogućuje skrivanje određenih podataka i kontrolu pristupa internoj implementaciji.

Na primjer, polja člana u klasi skrivena su od ostalih klasa i može im se pristupiti pomoću metoda člana. Jedan od načina za to je izrada svih podatkovnih polja privatni i dostupno samo pomoću javnost metode člana:

javni razred automobila {// ... private int speed; public int getSpeed ​​() {return boja; } javna praznina setSpeed ​​(int brzina) {this.speed = brzina; } // ...}

Evo, polje ubrzati je enkapsuliran pomoću privatni modifikator pristupa i može mu se pristupiti samo pomoću javni getSpeed ​​() i setSpeed ​​() metode. Više o modifikatorima pristupa možemo pročitati u našem članku o modifikatorima pristupa.

6. Nasljeđivanje

Nasljeđivanje je mehanizam koji omogućuje jednoj klasi stjecanje svih svojstava iz druge klase nasljeđivanjem klase. Klasu nasljeđivanja nazivamo podređenom, a naslijeđenu klasu kao superklasu ili roditeljsku klasu.

U Javi to činimo proširujući roditeljsku klasu. Dakle, podređena klasa dobiva sva svojstva od roditelja:

javni razred automobila proširuje vozilo {// ...}

Kada proširimo nastavu, formiramo odnos IS-A. The Automobil JE Vozilo. Dakle, ima sve karakteristike a Vozilo.

Možemo postaviti pitanje, zašto nam treba nasljedstvo? Da bismo na to odgovorili, razmotrimo proizvođača vozila koji proizvodi različite vrste vozila, poput automobila, autobusa, tramvaja i kamiona.

Da bismo olakšali posao, zajedničke značajke i svojstva svih tipova vozila možemo povezati u modul (klasa u slučaju Jave). A možemo dopustiti da pojedine vrste nasljeđuju i ponovno koriste ta svojstva:

vozilo javne klase {privatni int kotači; model privatnog niza; javni void start () {// postupak pokretanja vozila} public void stop () {// postupak zaustavljanja vozila} public void honk () {// proizvodi zadanu trubu}}

Tip vozila Automobil sada će naslijediti od roditelja Vozilo razred:

javni razred automobila proširuje vozilo {private int numberOfGears; public void openDoors () {// postupak otvaranja vrata}}

Java podržava nasljeđivanje s jednim i više razina. To znači da se klasa ne može izravno proširiti iz više klasa, ali može koristiti hijerarhiju:

javna klasa ArmoredCar proširuje Car {private boolean bulletProofWindows; public void remoteStartCar () {// ovo se vozilo može pokrenuti pomoću daljinskog upravljača}}

Evo, ArmouredCar proteže se Automobil, i Automobil proteže se Vozilo. Tako, ArmouredCar nasljeđuje svojstva od oboje Automobil i Vozilo.

Iako nasljeđujemo iz roditeljske klase, programer također može nadjačati implementaciju metode od roditelja. To je poznato kao nadjačavanje metode.

U našem gornjem primjeru Vozilo razreda, postoji gakati() metoda. The Automobil razred koji produžuje Vozilo klasa može nadjačati ovu metodu i implementirati na način na koji želi proizvesti trub:

javni razred automobila proširuje vozilo {// ... @Preuzmi javnu praznu trubu () {// proizvodi trubu specifičnu za automobil}}

Imajte na umu da se ovo također naziva runtime polimorfizmom, kako je objašnjeno u sljedećem odjeljku. Više o nasljeđivanju možemo pročitati u našim člancima o nasljeđivanju i nasljeđivanju i sastavu Java.

7. Polimorfizam

Polimorfizam je sposobnost OOP jezika da različito obrađuje podatke ovisno o njihovim vrstama ulaza. U Javi to može biti isto ime metode s različitim potpisima metode i izvođenjem različitih funkcija:

javna klasa TextFile proširuje 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); }}

U ovom primjeru možemo vidjeti da je metoda čitati() ima tri različita oblika s različitim funkcionalnostima. Ova vrsta polimorfizma je statički polimorfizam ili vrijeme kompajliranja, a naziva se i preopterećenjem metode.

Tu je i vrijeme izvođenja ili dinamički polimorfizam, gdje podređena klasa nadjačava roditeljsku metodu:

javna klasa GenericFile {naziv privatnog niza; // ... public String getFileInfo () {return "Generička datoteka Impl"; }}

Dijete klasa može produžiti GenericFile klase i nadjačati getFileInfo () metoda:

javna klasa ImageFile proširuje GenericFile {private int height; privatna int širina; // ... getteri i postavljači public String getFileInfo () {return "Impl slikovne datoteke"; }}

Pročitajte više o polimorfizmu u našem članku o polimorfizmu na Javi.

8. Zaključak

U ovom smo članku saznali o osnovnim temeljnim konceptima OOP-a s Javom.

Uzorci koda u ovom članku dostupni su na Githubu.