Java 'javni' Modifikator pristupa

1. Pregled

U ovom ćemo kratkom članku pokriti javnost dubinski modifikator, a mi ćemo razgovarati o tome kada i kako ga koristiti s razredima i članovima.

Uz to ćemo ilustrirati nedostatke korištenja javnih podataka.

Za opći pregled modifikatora pristupa, svakako pogledajte naš članak o Modifikatorima pristupa na Javi.

2. Kada koristiti modifikator javnog pristupa

Javne klase i sučelja, zajedno s javnim članovima, definiraju API. To je dio našeg koda koji drugi mogu vidjeti i koristiti za upravljanje ponašanjem naših objekata.

Međutim, prekomjerno korištenje javnog modifikatora krši načelo enkapsulacije objektno orijentiranog programiranja (OOP) i ima nekoliko nedostataka:

  • Povećava veličinu API-ja, što klijentima otežava upotrebu
  • Sve je teže promijeniti naš kôd jer se klijenti na njega oslanjaju - sve buduće promjene mogu slomiti njihov kôd

3. Javna sučelja i razredi

3.1. Javna sučelja

Javno sučelje definira specifikaciju koja može imati jednu ili više implementacija. Te implementacije možemo osigurati mi ili napisati drugi.

Na primjer, Java API izlaže Veza sučelje za definiranje operacija povezivanja baze podataka, prepuštajući stvarnu implementaciju svakom dobavljaču. Tijekom izvođenja dobivamo željenu vezu na temelju postavki projekta:

Veza veze = DriverManager.getConnection (url);

The getConnection metoda vraća instancu implementacije specifične za tehnologiju.

3.2. Javna nastava

Mi definiramo javne klase tako da klijenti mogu koristiti svoje članove instancijom i statičkim referenciranjem:

assertEquals (0, novi BigDecimal (0) .intValue ()); // član instance instance assertEquals (2147483647, Integer.MAX_VALUE); // statični član 

Štoviše, možemo oblikovati javne klase za nasljeđivanje pomoću opcionalnih sažetak modifikator. Kada koristimo sažetak modifikator, klasa je poput kostura koji ima polja i unaprijed implementirane metode koje bilo koja konkretna implementacija može koristiti, uz to što imaju apstraktne metode koje svaki podrazred treba implementirati.

Na primjer, Java zbirka zbirki pruža SažetakPopis klasa kao osnova za stvaranje prilagođenih popisa:

javna klasa ListOfThree proširuje AbstractList {@Override public E get (int index) {// prilagođena implementacija} @Override public int size () {// prilagođena implementacija}}

Dakle, moramo samo implementirati dobiti() i veličina() metode. Druge metode poput indexOf () i sadržiSve () već su implementirani za nas.

3.3. Ugniježđene javne klase i sučelja

Slično javnim klasama i sučeljima najviše razine, ugniježđene javne klase i sučelja definiraju API tip podataka. Međutim, posebno su korisni na dva načina:

  • Oni ukazuju krajnjem korisniku API-ja da zatvoreni tip najviše razine i njegovi zatvoreni tipovi imaju logičan odnos i koriste se zajedno
  • Čine našu bazu kodova kompaktnijom smanjenjem broja datoteka izvornog koda koje bismo koristili da smo ih deklarirali kao klase i sučelja najviše razine

Primjer je Karta.Ulazak sučelje iz osnovnog Java API-ja:

za (Map.Entry unos: mapObject.entrySet ()) {}

Izrada Karta.Unos a ugniježđeno sučelje snažno ga povezuje s java.util.Map sučelje i spasio nas je od stvaranja još jedne datoteke unutar java.util paket.

Za više detalja pročitajte članak o ugniježđenim klasama.

4. Javne metode

Javne metode omogućuju korisnicima izvršavanje gotovih operacija. Primjer je javnost toLowerCase metoda u Niz API:

assertEquals ("alex", "ALEX" .toLowerCase ());

Javnu metodu možemo sigurno učiniti statičnom ako ne koristi nijedno polje instance. The raščlaniti metoda iz Cijeli broj klasa je primjer javne statičke metode:

assertEquals (1, Integer.parseInt ("1"));

Konstruktori su obično javni, tako da možemo instancirati i inicijalizirati objekte, iako ponekad mogu biti privatni kao u pojedinačnim.

5. Javna polja

Javna polja omogućuju izravnu promjenu stanja objekta. Osnovno je pravilo da ne bismo trebali koristiti javna polja. Kao što ćemo vidjeti, postoji nekoliko razloga za to.

5.1. Sigurnost navoja

Korištenje javne vidljivosti s ne-konačnim poljima ili konačnim promjenjivim poljima nije sigurno. Ne možemo kontrolirati mijenjanje njihovih referenci ili stanja u različitim nitima.

Provjerite naš članak o sigurnosti niti da biste saznali više o pisanju koda koji je siguran za nit.

5.2. Poduzimanje radnji na izmjenama

Nemamo kontrolu nad ne-konačnim javnim poljem jer se njegova referenca ili stanje može izravno postaviti.

Umjesto toga, bolje je sakriti polja pomoću privatnog modifikatora i koristiti javni postavljač:

javni razred Student {private int age; javna praznina setAge (int age) {if (dob 150) {throw new IllegalArgumentException (); } this.age = dob; }}

5.3. Promjena vrste podataka

Javna polja, promjenjiva ili nepromjenjiva, dio su ugovora klijenta. Teže je promijeniti prikaz podataka ovih polja u budućem izdanju jer će klijenti možda trebati refaktorirati svoje implementacije.

Davanjem polja privatnom opsegu i korištenjem pristupa, imamo fleksibilnost za promjenu unutarnjeg predstavljanja, a istovremeno zadržavamo i stari tip podataka:

 javni razred Student {privatna ocjena StudentGrade; // novo predstavljanje podataka javna praznina setGrade (int ocjena) {this.grade = nova StudentGrade (ocjena); } public int getGrade () {return this.grade.getGrade (). intValue (); }}

Jedina iznimka za upotrebu javnih polja je upotreba statičkih konačnih nepromjenjivih polja za predstavljanje konstanti:

javni statički završni niz SLASH = "/";

6. Zaključak

U ovom uputstvu vidjeli smo da se javni modifikator koristi za definiranje API-ja.

Također smo opisali kako prekomjerna upotreba ovog modifikatora može ograničiti mogućnost uvođenja poboljšanja u našu implementaciju.

Na kraju smo razgovarali o tome zašto je loša praksa koristiti javne modifikatore za polja.

Kao i uvijek, uzorci koda iz ovog članka dostupni su na GitHubu.


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